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

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

Восстановить пароль Регистрация
 
mazon_aqz
 Аватар для mazon_aqz
8 / 8 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 18:29     Особенности заполнения массивов в цикле с постусловием #1
Всем доброго времени суток!
Собственно вопрос такой. При заполнении массива циклом
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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2013, 18:29     Особенности заполнения массивов в цикле с постусловием
Посмотрите здесь:

C++ Особенности наследования
Особенности инкремента C++
C++ Особенности работы fread
Особенности NTFS C++
Создание нескольких массивов в цикле C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 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);
mazon_aqz
 Аватар для mazon_aqz
8 / 8 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 18:43  [ТС]     Особенности заполнения массивов в цикле с постусловием #3
alsav22, Точно, спасибо.
ITcrusader
20.06.2013, 18:46
  #4

Не по теме:

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

MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
20.06.2013, 18:49     Особенности заполнения массивов в цикле с постусловием #5
ITcrusader, 99% что того требует задание (например сделать одно и то же на трех различных циклах и сравнить)
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
20.06.2013, 18:58     Особенности заполнения массивов в цикле с постусловием #6
Цитата Сообщение от MrGluck Посмотреть сообщение
ITcrusader, 99% что того требует задание (например сделать одно и то же на трех различных циклах и сравнить)
Нууууеслитаааак, то да, а вообще, коль уж тема затронута была, я посчитал уместным поделиться мудростью своею относительно целесообразности использования "такого", брррр, цикла
mazon_aqz
 Аватар для mazon_aqz
8 / 8 / 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;
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 20:25     Особенности заполнения массивов в цикле с постусловием #8
Весь код покажите.

Добавлено через 7 минут
Добавьте перед циклом:
C++
1
j = 0;
mazon_aqz
 Аватар для mazon_aqz
8 / 8 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 20:37  [ТС]     Особенности заполнения массивов в цикле с постусловием #9
alsav22, точно, сам только что нашел ошибку эту. Но вы опередили меня.
Теперь выводит, только для строки надо еще A[j][5] писать.
alsav22
5282 / 4801 / 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");
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
20.06.2013, 21:10     Особенности заполнения массивов в цикле с постусловием #11
alsav22, приведение в стиле С есть зло
alsav22
20.06.2013, 21:12
  #12

Не по теме:

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

mazon_aqz
 Аватар для mazon_aqz
8 / 8 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 21:56  [ТС]     Особенности заполнения массивов в цикле с постусловием #13
MrGluck, что значит приведение в стиле С?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2013, 22:16     Особенности заполнения массивов в цикле с постусловием
Еще ссылки по теме:

C++ Можно ли адресной арифметикой перебрать массив массивов по первому индексу во вложенном цикле, а во внешнем по второму?
Написать программу заполнения двумерного массива A по схеме, результаты заполнения выдать на экран и в файл C++
Особенности вызова функций C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 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));
Yandex
Объявления
20.06.2013, 22:16     Особенности заполнения массивов в цикле с постусловием
Ответ Создать тему
Опции темы

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