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

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

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

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

23.10.2011, 10:45. Просмотров 984. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2011, 10:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос по массивам С++ (C++):

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

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

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

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

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

по массивам - C++
Для одномерного массива, состоящего из n вещественных чисел: а) найти минимальный по модулю элемент массива; б) вычислить сумму...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Noa
57 / 34 / 4
Регистрация: 08.04.2008
Сообщений: 158
23.10.2011, 11:05 #2
Цитата Сообщение от magistr011 Посмотреть сообщение
Объясните мне зачем второй раз делать пару циклов for???
Потомучто у вас двумерный массив. Если раскладывать как матрицу, то первый цикл перебирает номера столбцов, а второй - номера строк столбцов.
Цитата Сообщение от magistr011 Посмотреть сообщение
И как сделать так, чтобы вывести цикл ещё раз???
Написать функцию и каждый раз вызывать ее. Или писать один код несколько раз.
Цитата Сообщение от magistr011 Посмотреть сообщение
епонимаю, почему рандом не работает, при каждом запуске программы, одни и те же числа в массиве
Добавьте заголовочный файл <ctime>, а в начале функции main инициируйте его каким-либо значением. Например, srand(time(0)) (текущим временем, тогда значения всегда будут разными).
0
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
23.10.2011, 11:11 #3
если два цикла не нровится то тут есть класный приём очень класный
int a[N][M],i;
for(i=0;i<=sizeof(a);i++)
**(a+i)=rand() % 100
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
23.10.2011, 11:57 #4
Цитата Сообщение от Van111 Посмотреть сообщение
если два цикла не нровится то тут есть класный приём очень класный
Вы же понмаете, что при N и M равных... ну допустим пяти, sizeof(a) вернет 100?
0
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
23.10.2011, 12:11 #5
да ну тогда N*M или sizeof(a)/4
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.10.2011, 21:35 #6
Van111, вы же понимаете, что размеры скалярных типов в стандарте не оговариваются (оговаривается только соотношение между размерами) и в общем случае зависят от реализации?
0
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 утеряны или необъявлены, как-то так...
Прошу прощения ))) Сам не внимателен был.
Скажите, а не каких-то правил в С++ если объявил переменную, я ведь могу с неё что хочу сразу после объявления делать, правильно??? Просто я по описанию ошибки непонял ничего, кроме того, что что-то с переменными не так (((
0
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).
1
magistr011
6 / 6 / 0
Регистрация: 22.10.2011
Сообщений: 164
24.10.2011, 12:44  [ТС] #9
Цитата Сообщение от Noa Посмотреть сообщение
После того, как цикл отработал, то переменная удалилась
это точно??
0
mimicria
return (true);
1957 / 1094 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
24.10.2011, 12:47 #10
Цитата Сообщение от magistr011 Посмотреть сообщение
это точно??
При определении переменной внутри цикла for(int j=0; j<=10; j++)
её область видимости ограничена {циклом}, за пределами её не существует
0
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
24.10.2011, 18:29 #11
Цитата Сообщение от mimicria Посмотреть сообщение
При определении переменной внутри цикла for(int j=0; j<=10; j++)
её область видимости ограничена {циклом}, за пределами её не существует
по стандарту переменную в цикле объявлять нельзя не все компиляторы это съедят и она видна за его пределами я так ранье тоже делал но компилятор навернулся и вам повезло если ваш компилятор выделяет память для этой переменной в оперативке и по окончанию цикла уничтожает её
1
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.10.2011, 20:26 #12
Цитата Сообщение от Van111 Посмотреть сообщение
по стандарту переменную в цикле объявлять нельзя
Всё с точностью до наоборот, по стандарту С++ переменные можно объявлять в любом месте программы.

Добавлено через 47 секунд
Цитата Сообщение от Van111 Посмотреть сообщение
и она видна за его пределами
Ерунда, она уничтожается по выходу из блока, в котором объявлена.
0
Enzzio
67 / 27 / 2
Регистрация: 29.05.2010
Сообщений: 380
Завершенные тесты: 1
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
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
25.10.2011, 18:07 #14
silent_1991, зайди в тему испортился компилятор и посмотри ты же сам там по моему постел

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

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

Цитата Сообщение от Van111 Посмотреть сообщение
по стандарту переменную в цикле объявлять нельзя
Это и не мои слова, так что зря вы меня процитировали.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2011, 20:03
Привет! Вот еще темы с ответами:

По массивам... - C++
Задан случайный массив. Нужно получить без повторений элементы, встречающиеся в массиве более одного раза. Вот что получилось: ...

По массивам.... - C++
Добрый вечер:).На носу итоговая сессия, к сожалению для допуска на нее не могу справится с заданием который дал мне преподаватель (по...

Вопросы по массивам - C++
Напишу сюда. Не стал создавать тему. Если что не так извините. #include &lt;iostreame&gt; using namespace std; int main () { double...

Подскажите по массивам - C++
Всем привет! Пишу игру для платформы Bada=) Суть проблемы: есть 2 класса. Из 1-ого класса вызываю функцию 2-ого. Перед этим во 2-классе...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.10.2011, 20:03
Ответ Создать тему
Опции темы

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