Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Удаление строк динамического массива (http://forum.oszone.net/showthread.php?t=293021)

alexprom65 24-12-2014 21:43 2447825

Удаление строк динамического массива
 
Вложений: 1
  • prog.jpg (35.30 KB, скачиваний: 21)
Здравствуйте!
Теперь новая проблема. Нужно написать программу, принимающую на вход размер квадратного динамического массива и элементы массива. Программа должна удалить строки, содержащие особое число (под особым числом подразумевается число Фибоначчи, сумма цифр которого является простым числом (то есть, делится только на 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;
}


lxa85 24-12-2014 22:47 2447851

alexprom65, раз пошла повторная задачка, оставляйте комментарий к логическим кускам кода.
Опять лезть в отладчик и делать реверс-инженеринг не тянет. Поймите правильно.


Время: 21:08.

Время: 21:08.
© OSzone.net 2001-