Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для magistr011
6 / 6 / 2
Регистрация: 22.10.2011
Сообщений: 164

Вопрос по массивам С++

23.10.2011, 10:45. Показов 2189. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <iomanip>
using namespace std;
 
int main ()
{
int a[10][10];
    for(int i=0; i<=10; i++)  // почему этого цикла для вывода не достаточно???
            {
                                              // cout << endl; почему так нельзя сразу????? 
                 for(int j=0; j<=10; j++)
                         {
                              a[i][j]=rand()%100;
                                                                                 // cout << setw (2) << n << " "; и это тоже...
                      }
                   }
    for(int i=0; i<=10; i++)  // повтор цыкла здесь...
            {
                 cout << endl;       
                 for(int j=0; j<=10; j++)
                         {
                              int n=a[i][j];
                              cout << setw (2) << n << " "; 
                             }
                    }
system ("pause >> void");
}
Я пробовал вывести на консоль массив, получилось только после того как я повторил пару циклов for().

1) Объясните мне зачем второй раз делать пару циклов for??? Почему нельзя сразу после объявления и инициализации переменной (массива), вывести его на консоль...

2) И как сделать так, чтобы вывести цикл ещё раз??? Просто непонимаю, почему рандом не работает, при каждом запуске программы, одни и те же числа в массиве ((((
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.10.2011, 10:45
Ответы с готовыми решениями:

Вопрос по Массивам.
Всем Гуру и знатокам C++ Привет. Я хочу изучать язык С++, но он мне очень трудно потдаётся). Помогите пож-та: Я не могу составить...

Вопрос по массивам
Как в массиве сделать так: Если элемент повторяется дважды - удалить один из них например: 1 2 2 3 4 5 5 6 7 8 8 9 Вывод 1 2 3...

Вопрос по одномерным массивам.
Всем доброго времени суток. 1. Написал код но при запуске выкидывает ошибку и условия не считает. В одномерном массиве формируемом...

21
58 / 35 / 0
Регистрация: 08.04.2008
Сообщений: 153
23.10.2011, 11:05
Цитата Сообщение от magistr011 Посмотреть сообщение
Объясните мне зачем второй раз делать пару циклов for???
Потомучто у вас двумерный массив. Если раскладывать как матрицу, то первый цикл перебирает номера столбцов, а второй - номера строк столбцов.
Цитата Сообщение от magistr011 Посмотреть сообщение
И как сделать так, чтобы вывести цикл ещё раз???
Написать функцию и каждый раз вызывать ее. Или писать один код несколько раз.
Цитата Сообщение от magistr011 Посмотреть сообщение
епонимаю, почему рандом не работает, при каждом запуске программы, одни и те же числа в массиве
Добавьте заголовочный файл <ctime>, а в начале функции main инициируйте его каким-либо значением. Например, srand(time(0)) (текущим временем, тогда значения всегда будут разными).
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
23.10.2011, 11:11
если два цикла не нровится то тут есть класный приём очень класный
int a[N][M],i;
for(i=0;i<=sizeof(a);i++)
**(a+i)=rand() % 100
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
23.10.2011, 11:57
Цитата Сообщение от Van111 Посмотреть сообщение
если два цикла не нровится то тут есть класный приём очень класный
Вы же понмаете, что при N и M равных... ну допустим пяти, sizeof(a) вернет 100?
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
23.10.2011, 12:11
да ну тогда N*M или sizeof(a)/4
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
23.10.2011, 21:35
Van111, вы же понимаете, что размеры скалярных типов в стандарте не оговариваются (оговаривается только соотношение между размерами) и в общем случае зависят от реализации?
0
 Аватар для magistr011
6 / 6 / 2
Регистрация: 22.10.2011
Сообщений: 164
24.10.2011, 05:24  [ТС]
Вопрос снят)))
Я непонимал зачем надо два раза цикл for выводить, а потом опять два раза его выводить, чтобы вывести в консоль(форму)...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
   for 
      {
       for
          {
 
          }
      }
    // и второй раз, чтобы вывести на кансоль(форму)
   for
      {
       for
          {
 
          }
      }
...
решил проблему так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <iomanip>
using namespace std;
 
int main ()
{
int a[10][10];
    for(int i=0; i<=10; i++)
            {
                 cout << endl;
                 for(int j=0; j<=10; j++)
                         {
                              a[i][j]=rand()%100;
                              int n=a[i][j];
                              cout << setw (2) << n << " ";                               
                         }
                 cout << endl;       
            }
system ("pause >> void");
}
Почему-то раньше неполучалось ((( или в for (int - не объявлял, сразу писал i=0), компилятор писал мне ошибку, что типа i и j утеряны или необъявлены, как-то так...
Прошу прощения ))) Сам не внимателен был.
Скажите, а не каких-то правил в С++ если объявил переменную, я ведь могу с неё что хочу сразу после объявления делать, правильно??? Просто я по описанию ошибки непонял ничего, кроме того, что что-то с переменными не так (((
0
58 / 35 / 0
Регистрация: 08.04.2008
Сообщений: 153
24.10.2011, 06:13
Цитата Сообщение от magistr011 Посмотреть сообщение
int - не объявлял, сразу писал i=0
У вас в цикле for не были переменные объявлены. Откуда компилятору о них знать? После того, как цикл отработал, то переменная удалилась, в следующем цикле надо ее заново объвлять.
Цитата Сообщение от magistr011 Посмотреть сообщение
Я непонимал зачем надо два раза цикл for выводить, а потом опять два раза его выводить, чтобы вывести в консоль(форму)...
А как вы предлагаете обращаться последовательно ко всем элементам массива? Вручную их выводить?
А если их миллион и более? Не устанете?
P.S. Может у вас есть более красивый вариант?
rand() вы опять не инициировали, поэтому у вас опять будут генерироваться одни и теже значения.

Добавлено через 2 минуты
Цитата Сообщение от magistr011 Посмотреть сообщение
кажите, а не каких-то правил в С++ если объявил переменную, я ведь могу с неё что хочу сразу после объявления делать, правильно???
Правильно, только я советовал бы при объявлении сразу присваивать переменным значение (например, 0).
1
 Аватар для magistr011
6 / 6 / 2
Регистрация: 22.10.2011
Сообщений: 164
24.10.2011, 12:44  [ТС]
Цитата Сообщение от Noa Посмотреть сообщение
После того, как цикл отработал, то переменная удалилась
это точно??
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
24.10.2011, 12:47
Цитата Сообщение от magistr011 Посмотреть сообщение
это точно??
При определении переменной внутри цикла for(int j=0; j<=10; j++)
её область видимости ограничена {циклом}, за пределами её не существует
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
24.10.2011, 18:29
Цитата Сообщение от mimicria Посмотреть сообщение
При определении переменной внутри цикла for(int j=0; j<=10; j++)
её область видимости ограничена {циклом}, за пределами её не существует
по стандарту переменную в цикле объявлять нельзя не все компиляторы это съедят и она видна за его пределами я так ранье тоже делал но компилятор навернулся и вам повезло если ваш компилятор выделяет память для этой переменной в оперативке и по окончанию цикла уничтожает её
1
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.10.2011, 20:26
Цитата Сообщение от Van111 Посмотреть сообщение
по стандарту переменную в цикле объявлять нельзя
Всё с точностью до наоборот, по стандарту С++ переменные можно объявлять в любом месте программы.

Добавлено через 47 секунд
Цитата Сообщение от Van111 Посмотреть сообщение
и она видна за его пределами
Ерунда, она уничтожается по выходу из блока, в котором объявлена.
0
 Аватар для Enzzio
72 / 30 / 4
Регистрация: 29.05.2010
Сообщений: 478
24.10.2011, 21:26
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{   
        FILE *in;//ôàéë èñõîäíûõ äïííûõ
        FILE *out;// ôàéë íà çàïèñü
        FILE *t;//òåñòîâûé
        FILE *mx;//ìàòðèöà ïåðåçàãðóçêà :D
        FILE *test1;//ïðîâåðêà ñ÷èòûâàíèÿ èç ôàéëà
        FILE *test2;
        in = fopen("input.txt", "r");
        float f; //F - ýòàëîí
        //fscanf(in, "%d\n", &N);
        //ìàññèâû
        int x[4], i;
        double e[4];
        double xx[4];//ìàññèâ èíòåðâàëîâ
        //float r[100];
        test2 = fopen("test2.txt", "w");
        for(i=0; i < 4; i++)
        {
                 fscanf(in, "%d ", &x[i]);
                 fscanf(in, "%d", &e[i]);
                 e[i]=e[i]/100;//ïåðåâîä ïðîöåíòîâ
                 fprintf(test2, "%d ", e[i]);
        }
        fclose(in);
        //êîðåíü ïðîãðàììû
        f=2*x[4]*(x[2]+x[3])*log((1+2*((x[1]*x[2]+x[0]*x[3])/(x[0]*(x[2]+x[3])))));
        for(i=0; i<2; i++)
        {
                 xx[i]=x[i]-(x[i]*e[i]);
        }
        test1 = fopen("test1.txt", "w");
                for(i=0; i < 4; i++)
        {
                 fprintf(test1, "%d", x[i]);
                 fprintf(test1, "%d", e[i]);
        }
        fclose(in);
        fclose(test1);
В текстовом файле на ввод имеется
10000 10
100000 10
12000 10
240000 10
0.01 10
Считывает столбик 1 правильно, а вот выдача по массиву е - непонятные числа, кроме первой 10-ки, которую не должна быть =10, т.к. делится на 100 перед выводом. Что я упустил?
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
25.10.2011, 18:07
silent_1991, зайди в тему испортился компилятор и посмотри ты же сам там по моему постел

Добавлено через 1 минуту
вот у меня как раз в навернувшимся компиляторе mv c++ 2006 она и не уничтожается

Добавлено через 32 секунды
Цитата Сообщение от silent_1991 Посмотреть сообщение
по стандарту переменную в цикле объявлять нельзя
это не мои слова мне самому так сказали
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
25.10.2011, 20:03
Цитата Сообщение от Van111 Посмотреть сообщение
зайди в тему испортился компилятор и посмотри
Вам в той теме сказали, что компилятор 6 студии древний, он был выпущен ещё до первой редакции стандарта. И там действительно были косяки с областями видимости переменных.

Цитата Сообщение от Van111 Посмотреть сообщение
по стандарту переменную в цикле объявлять нельзя
Это и не мои слова, так что зря вы меня процитировали.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
25.10.2011, 20:37
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это и не мои слова, так что зря вы меня процитировали.
в смысле я имел в виду что мне самому так говорили(не вы)
0
Заблокирован
25.10.2011, 20:39
Цитата Сообщение от Van111 Посмотреть сообщение
в смысле я имел в виду что мне самому так говорили(не вы)
Надо не по слухам осваивать язык программирования, а по его стандарту!
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
26.10.2011, 13:57
Цитата Сообщение от Сыроежка Посмотреть сообщение
Надо не по слухам осваивать язык программирования, а по его стандарту
ну тогда то что вы мне сказали тоже слух.
0
 Аватар для magistr011
6 / 6 / 2
Регистрация: 22.10.2011
Сообщений: 164
26.10.2011, 15:15  [ТС]
Ребята, хорош флудить...
Ответ дан, спасибо всем)))
Я попробовал:
1) если до цикла объявить переменную, то можно её использовать всегда...
2) если внутри цикла объявить переменную, то вне цикла её просто нет...
0
 Аватар для TheAthlete
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 575
26.10.2011, 15:40
Цитата Сообщение от magistr011 Посмотреть сообщение
Скажите, а не каких-то правил в С++ если объявил переменную, я ведь могу с неё что хочу сразу после объявления делать, правильно??? Просто я по описанию ошибки непонял ничего, кроме того, что что-то с переменными не так (((
Просьба писать понятно, нормальным человеческим языком без ошибок.

a[10][10]
for(int i=0; i<=10; i++)

индексация начинается с нуля, т.е. в данном цикле будет переполнение массива (выход за пределы массива).

Во-вторых, мой пример программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using std::cout;
using std::endl;
 
int main ()
{
  srand(time(0));
  size_t i, j;
  int a[10][10];
 
  for(i = 0; i != 10; ++i)
    for(j = 0; j != 10; ++j)
      a[i][j] = rand() % 100;
 
  for(i = 0; i != 10; ++i) {
    for(j = 0; j != 10; ++j) {
      cout << a[i][j] << " "; 
    }
    cout << endl;
  }
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2011, 15:40
Помогаю со студенческими работами здесь

Небольшой вопрос по массивам
В общем столкнулся с одной проблемой. Ведь в массивах все элементы начинаются с 0, то когда я пишу какую-нить прогу для решения какой-либо...

Вопрос по символьным массивам
Задание: с клавиатуры в символьный одномерный массив вводится название типа. С помощью оператора switch нужно вывести sizeof(тип). ...

Вопрос по массивам.
В массиве определить среднее арифметическое элементов принадлежащих отрезку . Подправьте пожалуйста программу program z_1; const ...

Вопрос по массивам.
Есть массив типа запись. В этой записи есть текстовое поле, содержащее ФИО. Помогите отсортировать этот массив по данному полю в...

Вопрос по массивам
Есть текстовый файл, files.txt, в нем : Есть php файл, в нем : &lt;? $my_array = file('files.txt'); $shit=str_replace (&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru