alexprom65
24-12-2014, 21:43
Здравствуйте!
Теперь новая проблема. Нужно написать программу, принимающую на вход размер квадратного динамического массива и элементы массива. Программа должна удалить строки, содержащие особое число (под особым числом подразумевается число Фибоначчи, сумма цифр которого является простым числом (то есть, делится только на 1 и на само себя)). До этого с динамическими массивами дел не имел. Есть оператор free, но массив остаётся неизменным. Да и как я понимаю, чистится не вся строка, а только, почему то первые два элемента. Вообщем, помогите, пожалуйста. К теме прилагаю скрин с результатами.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, j, k, fib, fib1, fib2, cel, ost, sum, count;
int **a;
printf("Type size of matrix\n");
scanf("%d", &n);
a=(int**)malloc(n*sizeof(int*));
if(a==NULL)
printf("\nERROR");
for(i=0;i<n;i++)
a[i]=(int*)malloc(n*sizeof(int));
if(a==NULL)
printf("\nERROR");
printf("Type elements of massive\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d", &a[i][j]);
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%6d\t", a[i][j]);
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
fib=0;
fib1=0;
fib2=1;
sum=0;
count=0;
while(fib<=a[i][j])
{
fib=fib1+fib2;
fib1=fib2;
fib2=fib;
if(a[i][j]==fib)
{
cel=a[i][j];
while(cel!=0)
{
ost=cel%10;
cel=cel/10;
sum=sum+ost;
}
for(k=1;k<=sum;k++)
if(sum%k==0)
count++;
}
else continue;
}
if(count==2)
{
free (a[i]);
break;
}
else continue;
}
printf("\nResult is\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%6d", a[i][j]);
free (a[i]);
}
free (a);
getch();
return 0;
}
Теперь новая проблема. Нужно написать программу, принимающую на вход размер квадратного динамического массива и элементы массива. Программа должна удалить строки, содержащие особое число (под особым числом подразумевается число Фибоначчи, сумма цифр которого является простым числом (то есть, делится только на 1 и на само себя)). До этого с динамическими массивами дел не имел. Есть оператор free, но массив остаётся неизменным. Да и как я понимаю, чистится не вся строка, а только, почему то первые два элемента. Вообщем, помогите, пожалуйста. К теме прилагаю скрин с результатами.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, j, k, fib, fib1, fib2, cel, ost, sum, count;
int **a;
printf("Type size of matrix\n");
scanf("%d", &n);
a=(int**)malloc(n*sizeof(int*));
if(a==NULL)
printf("\nERROR");
for(i=0;i<n;i++)
a[i]=(int*)malloc(n*sizeof(int));
if(a==NULL)
printf("\nERROR");
printf("Type elements of massive\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d", &a[i][j]);
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%6d\t", a[i][j]);
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
fib=0;
fib1=0;
fib2=1;
sum=0;
count=0;
while(fib<=a[i][j])
{
fib=fib1+fib2;
fib1=fib2;
fib2=fib;
if(a[i][j]==fib)
{
cel=a[i][j];
while(cel!=0)
{
ost=cel%10;
cel=cel/10;
sum=sum+ost;
}
for(k=1;k<=sum;k++)
if(sum%k==0)
count++;
}
else continue;
}
if(count==2)
{
free (a[i]);
break;
}
else continue;
}
printf("\nResult is\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%6d", a[i][j]);
free (a[i]);
}
free (a);
getch();
return 0;
}