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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2011, 12:12   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию Ошибка в коде

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
int main()
{
    srand(time(NULL));
    int max_index = 0;
    int row,column,x1,x2,count,max_count;//переменные:
    printf("Vvedite kolichestvo strok: ");
    scanf("%i",&row);
    printf("Vvedite kolichestvo stolbcov: ");
    scanf("%i",&column);
    printf("\n");
    while (row<=0 || column <=0) 
    {
        printf("\tZnacheniya dolzhny byt > 0\n");
        printf("\n");
        printf("Vvedite  kolichestvo strok: ");
        scanf("%i",&row);
        printf("Vvedite kolichestvo stolbcov: ");
        scanf("%i",&column);
        printf("\n");
    }
    printf("\n");
    printf("\tMatrix\n\n");
    int** math = (int**)malloc(row*sizeof(int));//создаем массив и выделем память
    for(x1 = 0;x1<row;x1++)
    {
        math[x1] = (int*)malloc(column*sizeof(int));
    }
    for(x1=0;x1<row;x1++)
    {                       
        for (x2=0;x2<column;x2++)
        {
            math[x1][x2]=rand()%100;
            printf(" %d", math[x1][x2]);
        }
    printf("\n");
    }
int max=math[0][0];
for(x1=0;x1<row;x1++)
    {                    
        for (x2=0;x2<column;x2++)
        {
          if(math[x1][x2]>max) 
          max=math[x1][x2];
        }
    }
          printf ("\n");
          printf("Maximalnoe chislo = %d",max);
{//отсюда
max_count = 1;
for(int x1=1; x1<row; x1++)//проходимся в цикле по строкам массива
{   
     count = 1;
     for(int x2=1; x2<column; x2++)
     {
                      if(math[x1][x2]==math[x1][x2-1])//если элемент равен предыдущему, увеличиваем переменную с длинной серии на 1
                      {
                                      count++;
                      }
                      else
                      {
                                 if(max_count<count)
                                 {
                                                    max_count=count;
                                                    max_index=x1;
                                 }
                      count=1;
                      }
     }
}
printf(" \nNomer stroki s samoi dlinnoi seriei odinakovih elementov:  %d",max_index+1);
}//досюда 
getch();
}
1)мне почему то номер строки с самой длинной серией одинаковых чисел всегда пишет ноль как исправить?

Последний раз редактировалось a.n.o.n.i.m; 30.05.2011 в 18:41.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 30.05.2011, 12:43   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
1)мне почему то номер строки с самой длинной серией чисел всегда пишет ноль как исправить?
t2 объявляешь, но не инициализируешь, из-за этого там может хранится какой-то мусор, заведомо бОльший любой из твоиз последовательностей.
Поставь
Код:
t2 = 0;
2)и еще,на одном из сайтов прочитал что для выделения память в си ипользуется new,но в других местах пишут что он для с++.Хотелось бы точно узнать для какого языка и если для с++ то какой используется для си?

malloc, calloc
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 30.05.2011, 12:48   #3
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Mandrivnyk правильно сделал выделение памяти?первый пост изменил
Поставил t2 = 0; не помогло,в чем ошибка? первый пост изменил

Последний раз редактировалось a.n.o.n.i.m; 30.05.2011 в 12:55.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 30.05.2011, 13:20   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от a.n.o.n.i.m Посмотреть сообщение
Поставил t2 = 0; не помогло,в чем ошибка? первый пост изменил
Не там поставил.
_Перед_ циклом по строчкам.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 30.05.2011, 13:33   #5
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
_Перед_ циклом по строчкам.
Так?первый пост изменил

Всеравно ноль пишет хоть каккую размерость делаю хоть 20x20 хоть 40x50 всегда ноль,максимальное число правильно определяет а номер строки с самой длинной серией одинаковых чисел нет
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 30.05.2011, 14:11   #6
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
    int max_index = 0;
    int count, max_count;

// Тут объявляешь и заполняешь массив
// ...
// ...


    max_count = 1;
    
    for (int i = 0; i < rows; i++)
    {
        count = 1;
        for (int j = 1; j < columns; j++)
            if (Array[i][j] == Array[i][j-1])
                count++;
            else
            {
                if (max_count < count)
                {
                    max_count = count;
                    max_index = i;
                }
                count = 1;
            }
    }
Твоя ошибка в том, что ты обнулял длину серии _до того_ как сравнивал ее с максимальной длиной.
И, кстати, длину серии надо не обнулять, а "объединичивать" -) Потому что при нахождении элемента, равного предыдущему, длина серии становится равна 2, а вовсе не 1.
И не забудь, что нумерация элементов массива начинается с 0. Учитывай это, когда будешь выводить на экран значение индекса строки с максимальной последовательностью.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062

Последний раз редактировалось Mandrivnyk; 30.05.2011 в 14:16.
Mandrivnyk вне форума Ответить с цитированием
Старый 30.05.2011, 14:28   #7
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Код:
    int max_index = 0;
    int count, max_count;
    printf("\n");
    printf("\tMatrix\n\n");
    int** math = (int**)malloc(row*sizeof(int));//создаем массив
Перед массивом объявил

Код:
{//отсюда
max_count = 1;;
for(int x1=0; x1<row; x1++)//проходимся в цикле по строкам массива
{   
     count = 1;
     for(int x2=2; x2<column; x2++)
     {
                      if(math[x1][x2]==math[x1][x2-1])//если элемент равен предыдущему, увеличиваем переменную с длинной серии на 1
                      {
                                      count++;
                      }
                      else
                      {
                                 if(max_count<count)
                                 {
                                                    max_count=count;
                                                    max_index=x1;
                                 }
                      count=1;
                      }
     }
}
printf(" \nNomer stroki s samoi dlinnoi seriei odinakovih elementov:  %d",max);
}//досюда
Переделал для своего кода

Всеравно не правильно делат,в этой строке все правильно?мне кажется там должно быть не max но не знаю что,подскажите
Код:
printf(" \nNomer stroki s samoi dlinnoi seriei odinakovih elementov:  %d",max);
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 30.05.2011, 14:45   #8
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
printf(" \nNomer stroki s samoi dlinnoi seriei odinakovih elementov:  %d", max_index);
Номер строки, начиная с 0.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 30.05.2011, 14:57   #9
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

добавил библиотеку #include <time.h> и строку srand(time(NULL)); перед строкой переменных,хотя сам не понял зачем добавил,но как бы работает но как то криво и хотелось бы узнать нельзя ли код "укоротить" а функционал оставить тем же,а то вроле программа простая а код слишком длинный +криво работает

Последний раз редактировалось a.n.o.n.i.m; 30.05.2011 в 15:40.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 30.05.2011, 15:45   #10
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от a.n.o.n.i.m Посмотреть сообщение
добавил библиотеку #include <time.h> и строку srand(time(NULL)); перед строкой переменных,хотя сам не понял зачем добавил,но как бы работает но как то криво и хотелось бы узнать нельзя ли код "укоротить" а функционал оставить тем же,а то вроле программа простая а код слишком длинный +криво работает
Вопрос. Именно С? Или можно С++?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде xaero93 Помощь студентам 1 30.01.2011 15:08
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Ошибка в коде Maxim1 Общие вопросы C/C++ 1 31.05.2010 14:52
ошибка в коде Си Misha_M. Помощь студентам 2 05.02.2010 15:41
Ошибка в коде Bigtyoma Общие вопросы Delphi 9 10.06.2009 16:35