Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
magistr011
6 / 6 / 0
Регистрация: 22.10.2011
Сообщений: 164
#1

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

23.10.2011, 10:45. Просмотров 946. Ответов 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) И как сделать так, чтобы вывести цикл ещё раз??? Просто непонимаю, почему рандом не работает, при каждом запуске программы, одни и те же числа в массиве ((((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2011, 10:45     Вопрос по массивам С++
Посмотрите здесь:

C++ программа по массивам!!!!
По массивам... C++
C++ Небольшой вопрос по массивам
По массивам.... C++
C++ Вопрос по массивам
C++ Вопрос по одномерным массивам.
C++ лаба по массивам
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Noa
57 / 34 / 4
Регистрация: 08.04.2008
Сообщений: 158
23.10.2011, 11:05     Вопрос по массивам С++ #2
Цитата Сообщение от magistr011 Посмотреть сообщение
Объясните мне зачем второй раз делать пару циклов for???
Потомучто у вас двумерный массив. Если раскладывать как матрицу, то первый цикл перебирает номера столбцов, а второй - номера строк столбцов.
Цитата Сообщение от magistr011 Посмотреть сообщение
И как сделать так, чтобы вывести цикл ещё раз???
Написать функцию и каждый раз вызывать ее. Или писать один код несколько раз.
Цитата Сообщение от magistr011 Посмотреть сообщение
епонимаю, почему рандом не работает, при каждом запуске программы, одни и те же числа в массиве
Добавьте заголовочный файл <ctime>, а в начале функции main инициируйте его каким-либо значением. Например, srand(time(0)) (текущим временем, тогда значения всегда будут разными).
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
23.10.2011, 11:11     Вопрос по массивам С++ #3
если два цикла не нровится то тут есть класный приём очень класный
int a[N][M],i;
for(i=0;i<=sizeof(a);i++)
**(a+i)=rand() % 100
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
23.10.2011, 11:57     Вопрос по массивам С++ #4
Цитата Сообщение от Van111 Посмотреть сообщение
если два цикла не нровится то тут есть класный приём очень класный
Вы же понмаете, что при N и M равных... ну допустим пяти, sizeof(a) вернет 100?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
23.10.2011, 12:11     Вопрос по массивам С++ #5
да ну тогда N*M или sizeof(a)/4
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
23.10.2011, 21:35     Вопрос по массивам С++ #6
Van111, вы же понимаете, что размеры скалярных типов в стандарте не оговариваются (оговаривается только соотношение между размерами) и в общем случае зависят от реализации?
magistr011
6 / 6 / 0
Регистрация: 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 утеряны или необъявлены, как-то так...
Прошу прощения ))) Сам не внимателен был.
Скажите, а не каких-то правил в С++ если объявил переменную, я ведь могу с неё что хочу сразу после объявления делать, правильно??? Просто я по описанию ошибки непонял ничего, кроме того, что что-то с переменными не так (((
Noa
57 / 34 / 4
Регистрация: 08.04.2008
Сообщений: 158
24.10.2011, 06:13     Вопрос по массивам С++ #8
Цитата Сообщение от magistr011 Посмотреть сообщение
int - не объявлял, сразу писал i=0
У вас в цикле for не были переменные объявлены. Откуда компилятору о них знать? После того, как цикл отработал, то переменная удалилась, в следующем цикле надо ее заново объвлять.
Цитата Сообщение от magistr011 Посмотреть сообщение
Я непонимал зачем надо два раза цикл for выводить, а потом опять два раза его выводить, чтобы вывести в консоль(форму)...
А как вы предлагаете обращаться последовательно ко всем элементам массива? Вручную их выводить?
А если их миллион и более? Не устанете?
P.S. Может у вас есть более красивый вариант?
rand() вы опять не инициировали, поэтому у вас опять будут генерироваться одни и теже значения.

Добавлено через 2 минуты
Цитата Сообщение от magistr011 Посмотреть сообщение
кажите, а не каких-то правил в С++ если объявил переменную, я ведь могу с неё что хочу сразу после объявления делать, правильно???
Правильно, только я советовал бы при объявлении сразу присваивать переменным значение (например, 0).
magistr011
6 / 6 / 0
Регистрация: 22.10.2011
Сообщений: 164
24.10.2011, 12:44  [ТС]     Вопрос по массивам С++ #9
Цитата Сообщение от Noa Посмотреть сообщение
После того, как цикл отработал, то переменная удалилась
это точно??
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
24.10.2011, 12:47     Вопрос по массивам С++ #10
Цитата Сообщение от magistr011 Посмотреть сообщение
это точно??
При определении переменной внутри цикла for(int j=0; j<=10; j++)
её область видимости ограничена {циклом}, за пределами её не существует
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
24.10.2011, 18:29     Вопрос по массивам С++ #11
Цитата Сообщение от mimicria Посмотреть сообщение
При определении переменной внутри цикла for(int j=0; j<=10; j++)
её область видимости ограничена {циклом}, за пределами её не существует
по стандарту переменную в цикле объявлять нельзя не все компиляторы это съедят и она видна за его пределами я так ранье тоже делал но компилятор навернулся и вам повезло если ваш компилятор выделяет память для этой переменной в оперативке и по окончанию цикла уничтожает её
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
24.10.2011, 20:26     Вопрос по массивам С++ #12
Цитата Сообщение от Van111 Посмотреть сообщение
по стандарту переменную в цикле объявлять нельзя
Всё с точностью до наоборот, по стандарту С++ переменные можно объявлять в любом месте программы.

Добавлено через 47 секунд
Цитата Сообщение от Van111 Посмотреть сообщение
и она видна за его пределами
Ерунда, она уничтожается по выходу из блока, в котором объявлена.
Enzzio
10 / 12 / 2
Регистрация: 29.05.2010
Сообщений: 295
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 перед выводом. Что я упустил?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
25.10.2011, 18:07     Вопрос по массивам С++ #14
silent_1991, зайди в тему испортился компилятор и посмотри ты же сам там по моему постел

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

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

Цитата Сообщение от Van111 Посмотреть сообщение
по стандарту переменную в цикле объявлять нельзя
Это и не мои слова, так что зря вы меня процитировали.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
25.10.2011, 20:37     Вопрос по массивам С++ #16
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это и не мои слова, так что зря вы меня процитировали.
в смысле я имел в виду что мне самому так говорили(не вы)
Сыроежка
Заблокирован
25.10.2011, 20:39     Вопрос по массивам С++ #17
Цитата Сообщение от Van111 Посмотреть сообщение
в смысле я имел в виду что мне самому так говорили(не вы)
Надо не по слухам осваивать язык программирования, а по его стандарту!
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
26.10.2011, 13:57     Вопрос по массивам С++ #18
Цитата Сообщение от Сыроежка Посмотреть сообщение
Надо не по слухам осваивать язык программирования, а по его стандарту
ну тогда то что вы мне сказали тоже слух.
magistr011
6 / 6 / 0
Регистрация: 22.10.2011
Сообщений: 164
26.10.2011, 15:15  [ТС]     Вопрос по массивам С++ #19
Ребята, хорош флудить...
Ответ дан, спасибо всем)))
Я попробовал:
1) если до цикла объявить переменную, то можно её использовать всегда...
2) если внутри цикла объявить переменную, то вне цикла её просто нет...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 15:40     Вопрос по массивам С++
Еще ссылки по теме:

Вопрос по Массивам. C++
C++ Вопрос по символьным массивам
Подскажите по массивам C++
Учебник по массивам C++
C++ по массивам

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

Или воспользуйтесь поиском по форуму:
TheAthlete
151 / 151 / 12
Регистрация: 31.08.2010
Сообщений: 529
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;
}
Yandex
Объявления
26.10.2011, 15:40     Вопрос по массивам С++
Ответ Создать тему
Опции темы

Текущее время: 04:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru