С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
10 / 10 / 3
Регистрация: 16.06.2009
Сообщений: 86
1

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

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

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Собственно вопрос такой. При заполнении массива циклом
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2013, 18:29
Ответы с готовыми решениями:

Особенности массивов с++
Почему на место параметра - указатель на массив при вызове функции можно использовать , как...

Посчитать в цикле с постусловием сумму натурального ряда чисел со значениями от 3 до 33
Посчитать в цикле с постусловием сумму натурального ряда чисел со значениями от 3 до 33, вывести...

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

Стеки: особенности реализации на базе массивов
Билет 11 1 Стеки: особенности реализации на базе массивов. 2 Решить задачу: Дан рекурсивный...

13
5499 / 4894 / 831
Регистрация: 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
10 / 10 / 3
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 18:43  [ТС] 3
alsav22, Точно, спасибо.
0
ITcrusader
20.06.2013, 18:46
  #4

Не по теме:

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

0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.06.2013, 18:49 5
ITcrusader, 99% что того требует задание (например сделать одно и то же на трех различных циклах и сравнить)
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
20.06.2013, 18:58 6
Цитата Сообщение от MrGluck Посмотреть сообщение
ITcrusader, 99% что того требует задание (например сделать одно и то же на трех различных циклах и сравнить)
Нууууеслитаааак, то да, а вообще, коль уж тема затронута была, я посчитал уместным поделиться мудростью своею относительно целесообразности использования "такого", брррр, цикла
0
10 / 10 / 3
Регистрация: 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
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 20:25 8
Весь код покажите.

Добавлено через 7 минут
Добавьте перед циклом:
C++
1
j = 0;
0
10 / 10 / 3
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 20:37  [ТС] 9
alsav22, точно, сам только что нашел ошибку эту. Но вы опередили меня.
Теперь выводит, только для строки надо еще A[j][5] писать.
0
5499 / 4894 / 831
Регистрация: 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
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.06.2013, 21:10 11
alsav22, приведение в стиле С есть зло
0
alsav22
20.06.2013, 21:12
  #12

Не по теме:

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

0
10 / 10 / 3
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 21:56  [ТС] 13
MrGluck, что значит приведение в стиле С?
0
5499 / 4894 / 831
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2013, 22:16
Помогаю со студенческими работами здесь

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

Алгоритм заполнения двумерных массивов
помогите написать алгоритм для заполнения матрицы nXn 1 6 7 2 5 8 3 4 9 и вторая на фото

Заполнения массивов факториалами значений индексов
Составить программу заполнения массивов А(N) и В(K) факториалами значений индексов их элементов....

Реализация заданного алгоритма заполнения двумерных массивов
Добрый день, уважаемые форумчане! Помогите пожалуйста реализовать следующие алгоритмы заполнения...


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

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