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

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

Войти
Регистрация
Восстановить пароль
 
mazon_aqz
9 / 9 / 1
Регистрация: 16.06.2009
Сообщений: 86
#1

Особенности заполнения массивов в цикле с постусловием - C++

20.06.2013, 18:29. Просмотров 637. Ответов 13
Метки нет (Все метки)

Всем доброго времени суток!
Собственно вопрос такой. При заполнении массива циклом
C++
1
2
3
4
5
do
{
    <тело цикла>
}
while(<условие продолжения цикла>)
какие нюансы нужно учитывать?
Вот есть программа в которой броде бы все верно, однако выходит ошибка,
что есть выход за пределы массива.

Кликните здесь для просмотра всего текста

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
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <cmath>
#include <iomanip>
#include <stdlib.h>
#include <time.h>
using namespace std;
float random(float min, float max);
// Функция, генерирующая случайное действительное число от min до max
float random(float min, float max)
{
    return (float)(rand())/RAND_MAX*(max - min) + min;
}
 
int main(){
 
    int N,M;
    float max = 157.456, min = -1.235;
    cout << "Enter size of matrix A:N " << endl;
    cin >> M;
    cout << "Enter size of matrix A:M " << endl;
    cin >> N;
    cout << "Creating matrix A:" << endl;
    // Создаётся матрица A
    float **A = new float* [M];
    srand((unsigned int)time(0));
    int i = 0;
    do {
        A[i] = new float [N];
        i++;
    }
    while(i<N);
    int j = 0;
    
    do {
        int i = 0;
        do {
            A[i][j] = random(min, max);
            cout << setw(10) << A[i][j];
            i++;
        }
        while(i<M);
        j++;
        cout << endl;
    } 
    while(j<N);
 
    cout << endl << endl;
 
 // Освобождение памяти
    for (int i = 0; i < M; i++) delete [] A[i];
    delete [] A;
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2013, 18:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Особенности заполнения массивов в цикле с постусловием (C++):

Ошибки заполнения массивов - C++
Помогите устранить проблему с данной задачей: &quot;Напишите программу, которая в последовательности натуральных чисел определяет максимальное...

Создание нескольких массивов в цикле - C++
Возможно ли в цикле создать энное количество массивов? Например while(n!=20) {new arr&lt;n&gt;} Что то на подобие этого. В java это...

Можно ли адресной арифметикой перебрать массив массивов по первому индексу во вложенном цикле, а во внешнем по второму? - C++
Можно ли адресной арифметикой перебрать массив массивов по первому индексу во вложенном цикле, а во внешнем по второму?

Написать программу заполнения двумерного массива A по схеме, результаты заполнения выдать на экран и в файл - C++
помогите, пожалуйста, написать программу заполнения двумерного массива A по схеме. Результаты заполнения выдать на экран и в файл. ...

Отключение автоматического заполнения в цикле for - Delphi
Как в Delphi сделать так, чтобы сам делфи не заполнял данные цикла for? вот пример того:

Стеки: особенности реализации на базе массивов - Pascal
Билет 11 1 Стеки: особенности реализации на базе массивов. 2 Решить задачу: Дан рекурсивный алгоритм: procedure F(n: integer); ...

13
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 18:37 #2
Ошибка в 32 строке:
C++
1
2
3
4
5
do {
        A[i] = new float [N];
        i++;
    }
    while(i<M);
1
mazon_aqz
9 / 9 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 18:43  [ТС] #3
alsav22, Точно, спасибо.
0
ITcrusader
20.06.2013, 18:46
  #4

Не по теме:

Ошибка в выборе цикла. Даже старина Бьерн говорит, что это порождение ада. Так зачем испытывать судьбу? (вопрос - риторический)

0
MrGluck
Модератор
Эксперт CЭксперт С++
7769 / 4805 / 745
Регистрация: 29.11.2010
Сообщений: 13,126
20.06.2013, 18:49 #5
ITcrusader, 99% что того требует задание (например сделать одно и то же на трех различных циклах и сравнить)
0
ITcrusader
Эксперт С++
177 / 163 / 8
Регистрация: 12.02.2013
Сообщений: 410
20.06.2013, 18:58 #6
Цитата Сообщение от MrGluck Посмотреть сообщение
ITcrusader, 99% что того требует задание (например сделать одно и то же на трех различных циклах и сравнить)
Нууууеслитаааак, то да, а вообще, коль уж тема затронута была, я посчитал уместным поделиться мудростью своею относительно целесообразности использования "такого", брррр, цикла
0
mazon_aqz
9 / 9 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 20:01  [ТС] #7
ITcrusader, MrGluck Прав насчет задания. И кстати, бывает так, что сломают голову бедному студенту неправильно поставленным заданием.

Вот со второй частью задания не получается.
Необходимо найти сумму элементов i-ой строки этого же массива

вот кусок кода. Он выводит одно число, когда я пытаюсь вывести ту самую i-ую строку.

C++
1
2
3
4
5
6
7
8
9
10
11
    float sum = 0;
    do{
        cout << setw(10) << A[5][j];
        sum += A[5][j];
        j++;
    }
    while(j<N);
 
    cout << endl << endl;
    cout << setw(10) << sum;
    cout << endl << endl;
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 20:25 #8
Весь код покажите.

Добавлено через 7 минут
Добавьте перед циклом:
C++
1
j = 0;
0
mazon_aqz
9 / 9 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 20:37  [ТС] #9
alsav22, точно, сам только что нашел ошибку эту. Но вы опередили меня.
Теперь выводит, только для строки надо еще A[j][5] писать.
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 21:06 #10
Цитата Сообщение от mazon_aqz Посмотреть сообщение
только для строки надо еще A[j][5] писать.
Мне кажется, у вас в коде какая-то путаница со строками и столбцами.

Добавлено через 8 минут
Вот так, по-моему, правильно будет:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <cmath>
#include <iomanip>
#include <stdlib.h>
#include <time.h>
using namespace std;
float random(float min, float max);
// Функция, генерирующая случайное действительное число от min до max
float random(float min, float max)
{
    return (float)(rand())/RAND_MAX*(max - min) + min;
}
 
int main(){
 
    int N,M;
    float max = 157.456, min = -1.235;
    cout << "Enter size of matrix A:N " << endl;
    cin >> M;
    cout << "Enter size of matrix A:M " << endl;
    cin >> N;
    cout << "Creating matrix A:" << endl;
    // Создаётся матрица A
    float **A = new float* [M];
    srand((unsigned int)time(0));
    int i = 0;
    do {
        A[i] = new float [N];
        i++;
    }
    while(i < M);
    
    int j;
    i = 0;
    do {
            j = 0;
            do {
                A[i][j] = random(min, max);
                cout << setw(10) << A[i][j];
                j++;
            }
            while(j < N);
        i++;
        cout << endl;
    } 
    while(i < M);
 
    cout << endl << endl;
 
    j = 0;
    float sum = 0;
    do{
        cout << setw(10) << A[5][j];
        sum += A[5][j];
        j++;
    }
    while(j<N);
 
    cout << endl << endl;
    cout << setw(10) << sum;
    cout << endl << endl;
 
 // Освобождение памяти
    for (int i = 0; i < M; i++) delete [] A[i];
    delete [] A;
    system("pause");
}
1
MrGluck
Модератор
Эксперт CЭксперт С++
7769 / 4805 / 745
Регистрация: 29.11.2010
Сообщений: 13,126
20.06.2013, 21:10 #11
alsav22, приведение в стиле С есть зло
0
alsav22
20.06.2013, 21:12
  #12

Не по теме:

MrGluck, я на это не смотрю. Это на совести ТС, его код.

0
mazon_aqz
9 / 9 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 21:56  [ТС] #13
MrGluck, что значит приведение в стиле С?
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 22:16 #14
Цитата Сообщение от mazon_aqz Посмотреть сообщение
MrGluck, что значит приведение в стиле С?
Вот такое:
C
1
srand((unsigned int)time(0));
Добавлено через 5 минут
C++
1
srand(static_cast <unsigned int>time(0));
0
20.06.2013, 22:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2013, 22:16
Привет! Вот еще темы с ответами:

Использование сканера для заполнения двух массивов - Java SE
После заполнения первого массива, вторую последовательность данный код уже не считывает. Как исправить? Scanner sc = new...

Написал процедуру заполнения процентными значениями четырёх массивов - C#
Добрый вечер. Вот какая проблема. Программа реализует ценовое исследование, опрос покупателей. Написал процедуру заполнения...

Написать процедуру заполнения двух одномерных массивов случайными числами - Turbo Pascal
program mas;uses crt; const n=10;l=-10;k=31; type myarray=arrayof integer; a,b:myarray; procedure zapm(x,y,z:integer;var...

Напишите программу для заполнения трех двумерных массивов и последующего их вывода - Pascal ABC
Напишите программу для заполнения трех двумерных массивов и последующего их вывода. Первый массив, размером m×n, заполняется данными,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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