Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2016, 00:22   #1
Unknown_friend
Пользователь
 
Регистрация: 19.11.2016
Сообщений: 15
По умолчанию Математические операции над 2D массивами

Здравствуйте, подскажите в чем проблема:
Код:
int main()
{
int i=100, ch=0, t=0;
char z[i], o; 
long int **pole[i], n, m;	
while(!feof(stdin)){
     scanf("%[^\n]s", &o);
     for(i = 0; i<100; i++){t++; scanf("%[^\n]s", &o);
        if(!scanf("%li %li", &n, &m)) ch++;		
        pole[i] = (long int**)malloc((n+1)*sizeof(long int*));
        for(int a=0; a<(n+1); a++){
           if(a==0){
             pole[i][a] = (long int*)malloc(2*sizeof(long int));
             pole[i][a][0] = n;
             pole[i][a][1] = m;
           }else{
                 pole[i][a] = (long int*)malloc(m*sizeof(long int));
                 for(int b=0; b<m; b++){
                    if(b!=m-1){
                      if(!scanf("%li ", &pole[i][a][b])) ch++;
                    }else{
                          if(!scanf("%li\n", &pole[i][a][b])) ch++; 
                         }	
                 }
                }	
        }
        if(!scanf("%c\n", &z[i])){
        if(feof(stdin)) break;
           ch++;
        } 
        scanf("%[^\n]s", &o);
        if(feof(stdin)) break;
     }
}
for(i = 0; i<=t; i++){
      n = pole[i][0][0];
      m = pole[i][0][1];
      for(int a=0; a<(n+1); a++){
           if(a==0){
             printf("%li %li\n", pole[i][0][0], pole[i][0][1]);
             }else{
                 for(int b=0; b<m; b++){
                    if(b!=m-1){
                      printf("%li ", pole[i][a][b]); 
                    }else{
                          printf("%li\n", pole[i][a][b]); 
                         }	
                 }
                }
                free(pole[i][a]);	
       }	
        free(pole[i]);
        printf("%c\n", z[i]); 
}
return 0;
}
при нажатии Ctrl + d выдает: "Segmentation fault (core dumped)"
Понимаю, что неправильно выделяю память. Но вот, что именно неправильно делаю?

Последний раз редактировалось Аватар; 23.11.2016 в 07:29.
Unknown_friend вне форума Ответить с цитированием
Старый 23.11.2016, 09:46   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Что вы тут вообще хотите сделать то??
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 23.11.2016, 17:23   #3
Unknown_friend
Пользователь
 
Регистрация: 19.11.2016
Сообщений: 15
По умолчанию

У меня на входе будет последовательность 2x размерных массивов и математических операторов. Общая количество максимально 100. Вот я и пытаюсь создать массив указателей на 2x мерные массивы. А потом это все изобразить.
Unknown_friend вне форума Ответить с цитированием
Старый 23.11.2016, 20:04   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Пример данных можете привести?? так сходу ошибки не видно.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 24.11.2016, 01:39   #5
Unknown_friend
Пользователь
 
Регистрация: 19.11.2016
Сообщений: 15
По умолчанию

Вот например, первый ряд во всех массивах это количество рядов и количество столбцов массива.
1 7
-5 4 6 7 -3 7 2
-
1 10
-3 -6 4 -8 -9 4 -9 10 -10 -2
*
10 10
0 -1 7 -1 4 0 10 -5 -5 2
-1 -2 -3 4 -10 -1 -4 6 0 9
-6 -8 -7 5 1 -2 -10 -3 2 -10
1 7 10 5 -4 1 4 -6 1 5
1 -6 -6 9 -8 -2 10 -7 -2 -2
-5 8 -9 3 8 -1 9 2 5 10
-1 8 -7 2 -3 -4 -2 -5 8 4
3 -2 5 1 -6 2 2 -10 2 -8
9 -9 9 -3 -9 -6 3 10 -6 -9
-3 1 -5 -8 2 3 8 -4 7 10
*
10 7
6 -9 -10 -1 6 1 4
0 -7 -4 9 8 -2 10
9 -3 2 0 -3 -4 1
10 2 -1 -9 -6 5 -2
-6 5 -4 8 1 9 -9
1 3 -1 -10 0 -4 -9
0 4 5 -2 -4 3 -8
1 0 -9 0 -2 -8 1
6 8 -2 -7 1 10 2
-5 5 1 -7 -4 1 -8
-
1 1
7
*
1 7
5 4 -4 -3 6 6 6
Unknown_friend вне форума Ответить с цитированием
Старый 24.11.2016, 09:11   #6
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Вы сами код писали или скопипастили откуда то??
Чтото намудрили явно.
что вы делаете вот этой строчкой??
Код:
scanf("%[^\n]s", &o);
по идее вам первой строкой нужно считать 2 символа размерности массива.
я так понимаю что это должна быть вот эта строка:
Код:
if(!scanf("%li %li", &n, &m)) ch++;
а сейчас в scanf попадает первая строка массива.. может из за того что в строке больше чисел и возникает ошибка.

Вам нужно более детально логику проработать.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операции над двумерными массивами Delphi7 VinDiz Помощь студентам 1 28.01.2012 19:14
Операции над массивами VinDiz Помощь студентам 6 18.01.2012 14:46
Математические операции Juggernaut Общие вопросы Delphi 6 22.04.2009 10:34
Математические операции Pascal Gonzo Помощь студентам 5 19.03.2009 13:49
Простейщие операции над массивами ZloyGenii2008 Паскаль, Turbo Pascal, PascalABC.NET 0 27.12.2008 14:24