Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двумерный массив случайных чисел заданной величины 
V
    Опции темы
Kruger2
Дата 29.6.2011, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



Дано массив 8 на 8. Надо заполнить случайными числами. Мне выводит просто ряд чисел, а не массив. Ищу помощи)
Код

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int random () {
    int i, j, int array[i][j];
    
        array[i][j] = 1+ rand () % 100;
   
   return array [i][j];
}
    
main ()
{
     int i, j, n, b, c;
     
     srand(time(NULL));
     
     for(i=0; i<=8; i++)
        for(j=0; j<=8; j++)
        printf("%d ", random(b, c));      
        
system("pause");
return 0;     
}



Это сообщение отредактировал(а) Kruger2 - 29.6.2011, 16:35
PM MAIL   Вверх
triclosan
Дата 29.6.2011, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 2
Всего: 12




Цитата(Kruger2 @  29.6.2011,  16:35 Найти цитируемый пост)
     
for(i=0; i<=8; i++)
        for(j=0; j<=8; j++)
        printf("%d ", random(b, c));      



Код

for(i=0; i<=8; i++)
{
        for(j=0; j<=8; j++)
        printf("%d ", random(b, c));
printf("\n");
}  

PM MAIL   Вверх
Kruger2
Дата 29.6.2011, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



Спасибо. Причем смотрел на пример из книги и решил, что переход на следующую строку нужен только в той задаче, а просто фигурные скобки не меняли сути делаsmile.

+ в репу поставьте от меня.


Второй вопрос по функции:
Как правильно объявить переменные функции?

не правильнее ли было бы объявить:

Код

int random (int i, int j, int[i][j])


Но компилятор матюкается. Функции я не до конца понял:(
PM MAIL   Вверх
triclosan
Дата 29.6.2011, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 2
Всего: 12



Цитата(Kruger2 @  29.6.2011,  16:53 Найти цитируемый пост)
int random (int i, int j, int[i][j])

Код

int random (int i, int j, int **arr);


Это сообщение отредактировал(а) triclosan - 29.6.2011, 16:59
PM MAIL   Вверх
Kruger2
Дата 29.6.2011, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



Последний вопросsmile

Хочу вывести это вообще в отдельную функцию, но не работает:(



Код

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int random (void) {
    int i, j;
    int array[i][j];
    
  srand(time(NULL)); 
  
      for(i=0; i<=8; i++) 
      {
          for(j=0; j<=8; j++)
          printf("%d ",   array[i][j] = 10 + rand () % 90);      
      printf("\n"); 
        }
}
    
main ()
{    
    random();
 
system("pause");
return 0;     
}


Где то критическая ошибка. Думал может сранд должен вызываться в мейне, но ничего не меняет.

Это сообщение отредактировал(а) Kruger2 - 29.6.2011, 17:08
PM MAIL   Вверх
newbieone
Дата 29.6.2011, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.3.2010

Репутация: 1
Всего: 1



Что-то странное происходит в этой теме. Kruger2, и после добавления одного printf всё сразу заработало?
Как можно вызывать функцию random() с двумя аргументами, если у неё список параметров пустой?
Код

int random ()
printf("%d ", random(b, c));     

Как можно в функции определять статический массив, если переменные для размерности не инициализированы, а потом еще и обращаться по индексу к элементу массива, которого и существовать-то не должно (происходит выход за рамки массива)?
Код

int i, j, int array[i][j];
array[i][j] = 1+ rand () % 100;

О каком вообще заполнении массива идет речь, если в функции main() никакого массива не определено?
От такого же поседеть можно! Закидайте меня камнями или объясните, что я упустил в коде... По-моему, всё должно быть хотя бы вот так:
Код

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand(time(NULL));
    int arr[8][8]; // вот это ваш массив
    
    for(int i=0;i<8;i++)
        for(int j=0;j<8;j++)
            arr[i][j]=rand()%10+1; //вот это вы его заполнили элементами от 1 до 10

    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
            printf("%d ",arr[i][j]); // вот это вы его вывели на экран
        printf("\n");
    }

    return 0;
}


Это сообщение отредактировал(а) newbieone - 29.6.2011, 17:11
PM MAIL   Вверх
triclosan
Дата 29.6.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 2
Всего: 12



Цитата(Kruger2 @  29.6.2011,  17:07 Найти цитируемый пост)
    int array[i][j];

вы объявляете массив размер которого равен мусору, хранящемуся в неинициализированных i и j

Код

    int i=8, j=8;
    int array[i][j];

PM MAIL   Вверх
h0rn3t
Дата 29.6.2011, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.6.2011

Репутация: нет
Всего: нет



Kruger2
а какой смысл заполнять массив если вы его не сохраняете?
а ошибка говорит о том что уже есть функция random()  в /usr/include/stdlib.h
PM MAIL   Вверх
Kruger2
Дата 29.6.2011, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



Как то я думал, что заполнение = вывод на экран. А то что элементы не определены, так думалось, что цикл фор определяет мне размерность массива, не?

Добавлено через 3 минуты и 42 секунды
Учел указание newbieone о необходимости заполнения массива и всё получилось. Прога работает. Вынес все действия в функцию и вот что получилось:


Код

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int randomArray (void) {
    int i, j, array[8][8];
    
  srand(time(NULL)); 
  
      for(i=0; i<=8; i++) 
        for(j=0; j<=8; j++)
       array[i][j] = 10 + rand () % 90;      
  
      for(i=0; i<8; i++)
       {
        for(j=0; j<8; j++)
         printf("%d ", array[i][j]);
       printf("\n");  
       }
}
main ()
{      
    randomArray();
 
system("pause");
return 0;     
}



Многие очевидные для вас вещи я не понимаю и часто делаю методом подбора. Читаю 1 книгу и 1 справочник, но по моим наблюдениям только вот такая практика и помощь форумчан помогает как то понять ту абракадабру, о которой там пишутsmile ЗЫ, самообучение, первый язык программирования.

Добавлено через 5 минут и 9 секунд
Сейчас программа имеет цивильный вид, или есть ещё ошибки?smile

Добавлено через 5 минут и 49 секунд
Поставьте newbieone + в репутацию от меня пожалуйста.
PM MAIL   Вверх
newbieone
Дата 29.6.2011, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.3.2010

Репутация: 1
Всего: 1



Код

Как то я думал, что заполнение = вывод на экран

Заполнение и вывод на экран - это совершенно разные операции, и вообще считается хорошим тоном не мешать их в одном месте. Заполнять - в одном месте (функции/цикле), выводить - в другом. Вот смотрите: захотелось вам вывести данные на экран еще разок. А они нигде не сохранены, так как у вас даже массива для их хранения в теле функции main() не было. Не получится, то есть, повторно на те же числа посмотреть.
Код

цикл фор определяет мне размерность массива, не?

Нет, не определяет. Кстати, будьте внимательнее в циклах: если в массиве должно быть 8*8=64 элемента, то и итераций в цикле должно быть столько же. У вас же в первом вашем посте
Код

     for(i=0; i<=8; i++)
        for(j=0; j<=8; j++)

итераций получается 9*9=81. Условие (после первой ";" в шапке цикла) должно быть строгое: i<8 (то же самое для j соответственно).

Это сообщение отредактировал(а) newbieone - 29.6.2011, 17:32
PM MAIL   Вверх
Kruger2
Дата 29.6.2011, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



Да, то что я вышел за пределы массива я увидел, когда пару раз вывел данные на экран правильно и в последней программе исправил. Спасибо.
PM MAIL   Вверх
xvr
Дата 30.6.2011, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Kruger2 @  29.6.2011,  17:17 Найти цитируемый пост)
А то что элементы не определены, так думалось, что цикл фор определяет мне размерность массива, не?

Может вам на perl перейти? Там и массивы сами определятся будут, и размеры их адаптироваться по месту (в том числе и в циклах for)  smile C и С++ таких вольностей не прощают  smile 

PM MAIL   Вверх
borisbn
Дата 30.6.2011, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



xvr, так вот откуда пошёл термин "перл" в смысле "нечто нелепое, смешное, бессмысленное" smile
Это ж, вроде, write-only язык...

Цитата(Kruger2 @  29.6.2011,  17:17 Найти цитируемый пост)
Поставьте newbieone + в репутацию от меня пожалуйста.

поставил
Цитата(Kruger2 @  29.6.2011,  17:17 Найти цитируемый пост)
Сейчас программа имеет цивильный вид, или есть ещё ошибки?

кроме тех, на которые указал newbieone и кроме какого-то корявого выравнивания можно ещё чуть-чуть покритиковать стиль кодирования ?
1. 
Цитата(Kruger2 @  29.6.2011,  17:17 Найти цитируемый пост)
 int i, j, array[8][8];

Не описывай в одной строке несколько переменных, тем более разных типов (int и двумерный массив int'ов). ну... разве что i и j
2.
Цитата(Kruger2 @  29.6.2011,  17:17 Найти цитируемый пост)
for(i=0; i<=8; i++) 
        for(j=0; j<=8; j++)
       array[i][j] = 10 + rand () % 90;

даже если в цикле одна операция (строка), лучше использовать {}, т.к. если тебе потребуется в будущем добавить в тело цикла строку, то всё равно придётся их вставлять, а если потребуется закомментировать эту строку, то есть вероятность, что забудешь закомментировать и сам цикл и в тело цикла попадёт следующая строка...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Kruger2
Дата 30.6.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



Спасибо, учту. В конечном варианте ещё добавил #define и избавился от 8 в коде (говорят непонятные цифры это плохо  smile )
PM MAIL   Вверх
voral
Дата 30.6.2011, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

Репутация: нет
Всего: нет



я бы еще добавил, что лучше привыкать иначе задавать размерность массива
Код

#define ARRAYSIZE 8
.....
int main()
{
      int array[ARRAYSIZE][ARRAYSIZE];
...    
      for(i=0; i < ARRAYSIZE; ++i) 
        for(j=0; j < ARRAYSIZE; ++j)
...

или
Код

int main()
{
      const int asize = 8;
      int array[asize][asize];
...    
      for(i=0; i < asize; ++i) 
        for(j=0; j < asize; ++j)
...


Если понадобиться в последствии изменить размерность, достаточно будет сделать только в одном месте

Добавлено через 1 минуту и 11 секунд
Упс проглядел ответ про define
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1171 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.