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

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

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

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

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

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

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

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

Особенности инкремента - C++
Здравствуйте!Возник вопрос касательно операции инкремента(++) допутим у нас есть код #include &lt;iostream&gt; int main() { ...

Особенности наследования - C++
Я не понимаю ProperFraction f1(1,2) вызывается цепочка ProperFraction(int n, int d){ FloatFraction(){ ...

Особенности NTFS - C++
Доброго времени суток! Уважаемые форумчане, проясните мне пожалуйста один вопрос. Пишу программу, которая ищет на диске...

Цикл с постусловием - C++
Мне нужно доделать чуть программу.Нужно что бы она в конце работы спрашила про новый ввод данных.кто может помочь помогите вот она &lt;ссылка...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 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
9 / 9 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 18:43  [ТС]     Особенности заполнения массивов в цикле с постусловием #3
alsav22, Точно, спасибо.
ITcrusader
20.06.2013, 18:46
  #4

Не по теме:

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

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

Добавлено через 7 минут
Добавьте перед циклом:
C++
1
j = 0;
mazon_aqz
9 / 9 / 1
Регистрация: 16.06.2009
Сообщений: 86
20.06.2013, 20:37  [ТС]     Особенности заполнения массивов в цикле с постусловием #9
alsav22, точно, сам только что нашел ошибку эту. Но вы опередили меня.
Теперь выводит, только для строки надо еще A[j][5] писать.
alsav22
5416 / 4812 / 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
Модератор
Эксперт CЭксперт С++
7158 / 4324 / 630
Регистрация: 29.11.2010
Сообщений: 11,746
20.06.2013, 21:10     Особенности заполнения массивов в цикле с постусловием #11
alsav22, приведение в стиле С есть зло
alsav22
20.06.2013, 21:12
  #12

Не по теме:

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

mazon_aqz
9 / 9 / 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++
Дана непустая последовательность различных целых чисел, за которой следует нуль. Определить порядковый номер и величину наибольшего среди...

Особенности работы деструктора - C++
Есть вот такой код. Все работает.#include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; class complex{ private: ...

Особенности вызова функций - C++
Какие особенности вызова функций, в описании которых использованы ключевые слова _stdcall, _cdecl, inline? Спасибо!)

перегрузка операций. особенности. - C++
Здравствуйте. Есть вот такой кусок кода: #include &lt;iostream&gt; #include &lt;iostream&gt; using namespace std; class stroka { ...

Особенности использования const_cast - C++
Почему не работает код: 1. const int* const pInt = new int(0); const_cast&lt;int*&gt;(pInt) = new int(4); 2. void...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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     Особенности заполнения массивов в цикле с постусловием
Ответ Создать тему
Опции темы

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