0 / 0 / 0
Регистрация: 25.10.2018
Сообщений: 3
1

Циклы: неожиданное поведение программы (найти и исправить ошибки)

25.10.2018, 00:38. Показов 571. Ответов 4

При попытке возобновления программы после использования рандомных чисел программа идет дальше, а не возвращается к циклу, нужна помощь.
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include<iostream>
#include<math.h>
#include<ctime>
using namespace std;
 
int main() {
    setlocale(LC_ALL, "rus");
    int *arr = 0;
    int i, n, q;
    char j;
    while (true) {
        while (true) {
            cout << "Для заполнения массива случайными числами нажмите - 1, для ввода с клавиатуры нажмите любую другую клавишу";
            cin >> j;
            if (j == '1') {
                int a, b, n;
                cout << "Введите диапазон от a до b и размер массива n" << endl;
                cin >> a >> b >> n;
                srand(time(0));
                arr = new int[n];
                for (int i = 0; i < n; i++) {
                    arr[i] = rand() % (b - a + 1) + a;
                }
                for (int i = 0; i < n; i++) {
                    cout << arr[i] << "   ";
                }
                cout << endl;
                int min = arr[0];
                int index = 0;
                for (int i = 0; i < n; ++i)
                {
                    if (arr[i] < min)
                    {
                        min = arr[i];
                        index = i;
                    }
                }
                int sum = 0;
                for (int i = index + 1; i < n; ++i)
                    sum += arr[i];
 
                cout << "Min= " << min << '\n';
                cout << "Sum= " << sum << '\n';
                cout << "Хотите продолжить? Да - Y Нет - N" << endl;
                char x;
                while (true) {
                    cin >> x;
                    if (x == 'y' || x == 'Y' || x == 'n' || x == 'N') {
                        switch (x) {
                        case 'y': true; break;
                        case 'Y': true; break;
                        case 'n': false; delete[]arr; return 0;
                        case'N': false; delete[]arr; return 0;
                        }
                        break;
                    }
                    else cout << "Введите Y если хотите продолжить, N если хотите выйти" << endl;
                }
 
            }
            while (true) {
            cout << "Размер требуемого массива = ";
                cin >> n;
                if (cin.good()) break;
                else {
                    cin.clear();
                    cin.ignore(numeric_limits<streamsize>::max(), '\n');
                    cout << "Введите численное значeние : ";
                }
            }
            while (n <= 0) {
                cout << "Введите значение большее 0 : ";
                cin >> n;
            }
            arr = new int[n];
            cout << "Введите элементы выбранного Вами массива" << endl;
            for (i = 0; i < n; ++i) {
                cout << "a[" << i << "]  ";
                cin >> arr[i];
            }
            int min = arr[0];
            int index = 0;
            for (int i = 0; i < n; ++i)
            {
                if (arr[i] < min)
                {
                    min = arr[i];
                    index = i;
                }
            }
            int sum = 0;
            for (int i = index + 1; i < n; ++i)
            {
                sum += arr[i];
            }
            cout << "Min= " << min << '\n';
            cout << "Sum= " << sum << '\n';
            cout << "Хотите продолжить? Да - Y Нет - N" << endl;
            char x;
            while (true) {
                cin >> x;
                if (x == 'y' || x == 'Y' || x == 'n' || x == 'N') {
                    switch (x) {
                    case 'y': true; break;
                    case 'Y': true; break;
                    case 'n': false; delete[]arr; return 0;
                    case'N': false; delete[]arr; return 0;
                    }
                    break;
                }
                else cout << "Введите Y если хотите продолжить, N если хотите выйти" << endl;
            }
        }
    }
    delete[]arr;
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2018, 00:38
Ответы с готовыми решениями:

Прохождение лабиринта: неожиданное поведение программы (найти и исправить ошибки)
Всем доброго времени суток. В общем написал я программу для генерации лабиринта и программу для его...

Неожиданное поведение программы: лишний виток цикла (найти и исправить ошибки в коде)
#include &lt;iostream&gt; using namespace std; int main() { int c =0; int ma; cout &lt;&lt;...

Неожиданное поведение программы: исправить ошибку в коде
извиняюсь за возможно глупый вопрос, но почему программа говорит,что в выделенной строке ошибка?...

Вычислить значение функции (неожиданное поведение программы - как исправить?)
Мне нужно вичислить значение функции у= (4*(x^3)-2*(x^2)+5);для значении x от -3 до 1.Написан такой...

4
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 467
25.10.2018, 01:39 2
Относительно вашего кода все работает верно:
Для заполнения массива случайными числами нажмите - 1, для ввода с клавиатуры нажмите любую другую клавишу 1
Введите диапазон от a до b и размер массива n
1 3 2
3 2
Min= 2
Sum= 0
Хотите продолжить? Да - Y Нет - N
y
Размер требуемого массива = 2
Введите элементы выбранного Вами массива
a[0] 2
a[1] 3
Min= 2
Sum= 3
Хотите продолжить? Да - Y Нет - N
y
Для заполнения массива случайными числами нажмите - 1, для ввода с клавиатуры нажмите любую другую клавишу 1
Введите диапазон от a до b и размер массива n
0
0 / 0 / 0
Регистрация: 25.10.2018
Сообщений: 3
25.10.2018, 08:14  [ТС] 3
Но проблема в том, что я хочу что бы после продолжения программа снова спрашивала у меня о способе заполнения массива, а если заполнять его рандомно а потом продолжить, то он запрашивает ввод с клавиатуры
0
7421 / 5016 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
25.10.2018, 09:56 4
Peperooni, это Ваша программа ? много повторов, сократил в 2 раза, так нужно ?:
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
#include <iostream>
#include <limits>
#include <ctime>
using namespace std;
 
int main()
{    
    srand((int)time(0));
    int n, p=1, A, B;
    
    while (p==1)
{
    cout <<"n=";
    while (!(cin >> n)) { 
        cout <<"ENTER ERROR !!! n number! Repeat please...\n";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
        }    
    while (n <= 0) {
        cout <<"n>0 Repeat please...\n";
        cin >> n;
        }            
            
        double *a = new double[n], min=0.0, sum=0.0;
        
    char c;            
    cout << "Make a choice: random - r, keyboard - k\n";
    cin >> c;
    if (c == 'r')
        {                
        cout <<"Enter limits range:\n";
        cout <<"A="; cin >>A;
        cout <<"B="; cin >>B;
                
        for (int i = 0; i < n; i++) {
            a[i]=rand()%(B-A+1)+A;
            cout <<a[i]<<" ";
            } 
            cout <<endl;
        }
    else if (c == 'k')
        {           
            cout <<"Enter "<<n<<" elements:\n";
            for (int i = 0; i < n; ++i) {               
            cin >> a[i];       
            }
        }
        
        for (int i = 0; i < n; ++i) {    
        if (i==0 || a[i]<min) min=a[i];
        sum+=a[i];
        } 
                
    cout <<"min="<<min<<"\nsum="<<sum<<'\n';
             
    delete[]a;
    cout <<"Continue? (1 - YES) "; cin >>p;
} 
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 25.10.2018
Сообщений: 3
25.10.2018, 10:41  [ТС] 5
Да, код мой, так много повторений потому, что я только начинаю, а за Ваш код спасибо, подкорректирую проверки и все отлично.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2018, 10:41
Помогаю со студенческими работами здесь

Вычислить значение тригонометрического выражения (неожиданное поведение программы - как исправить?)
Мне нужно вычислить значение выражения Я написал такой код , но с числами больше 6 не...

Неожиданное поведение программы: найти ошибку в коде
Программа запрашивает у пользователя «Сколько Вам лет?» . Вы вводите положительное число до 100....

Найти минимальный и максимальный элементы (неожиданное поведение программы: массив не передаётся в функцию)
Ребята,помогите,пожалуйста,разобраться с функциями. Программа не хочет передавать значение массива...

Вычислить и вывести значение суперпозиции функций (неожиданное поведение программы: найти ошибку в коде)
Вот смотрите, есть условие задачи: ввести произвольные значения х, i (номер варианта 20), a, b, c,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru