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

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2011, 10:45
Ответы с готовыми решениями:

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

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

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

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

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

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

Добавлено через 47 секунд
Цитата Сообщение от Van111 Посмотреть сообщение
и она видна за его пределами
Ерунда, она уничтожается по выходу из блока, в котором объявлена.
0
72 / 30 / 4
Регистрация: 29.05.2010
Сообщений: 478
24.10.2011, 21:26 13
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 14
silent_1991, зайди в тему испортился компилятор и посмотри ты же сам там по моему постел

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

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

Цитата Сообщение от Van111 Посмотреть сообщение
по стандарту переменную в цикле объявлять нельзя
Это и не мои слова, так что зря вы меня процитировали.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
25.10.2011, 20:37 16
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это и не мои слова, так что зря вы меня процитировали.
в смысле я имел в виду что мне самому так говорили(не вы)
0
Заблокирован
25.10.2011, 20:39 17
Цитата Сообщение от Van111 Посмотреть сообщение
в смысле я имел в виду что мне самому так говорили(не вы)
Надо не по слухам осваивать язык программирования, а по его стандарту!
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
26.10.2011, 13:57 18
Цитата Сообщение от Сыроежка Посмотреть сообщение
Надо не по слухам осваивать язык программирования, а по его стандарту
ну тогда то что вы мне сказали тоже слух.
0
6 / 6 / 2
Регистрация: 22.10.2011
Сообщений: 164
26.10.2011, 15:15  [ТС] 19
Ребята, хорош флудить...
Ответ дан, спасибо всем)))
Я попробовал:
1) если до цикла объявить переменную, то можно её использовать всегда...
2) если внутри цикла объявить переменную, то вне цикла её просто нет...
0
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
26.10.2011, 15:40 20
Цитата Сообщение от 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
26.10.2011, 15:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2011, 15:40
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru