Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
gaard9n
0 / 0 / 1
Регистрация: 09.01.2018
Сообщений: 30
1

Обработка одномерных статических массивов

14.02.2018, 20:09. Просмотров 817. Ответов 7
Метки нет (Все метки)

Проблема в том, что программа не находит наименьший положительный элемент. Она работает на костыле и именно поэтому случаются проблемы по типу тех, что указаны во вложениях.
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
#include "stdafx.h"
#include <iostream>
#include <locale>
using namespace std;
 
int main()
{
    setlocale(NULL, "Rus");
    int k = 0;
    const int r = 4;
    int x[r];
    for (int i = 0; i < r; i++) 
    {
        cout << "Заполните " << i+1 << "-й" << " элемент массива: "; cin >> x[i];
    }
    int min=x[0];
    for (int i = 0; i < r; i++) 
    {
        if (x[i] < 0) { min = x[i + 1]; } //костыль
        if ((x[i] >= 0) && (x[i] < min)) { min = x[i]; }
    }
    cout << endl;
    cout << "Наименьший положительный элемент массива: " << min << endl;
    cout << endl;
    system("pause");
    return 0;
}
0
Миниатюры
Обработка одномерных статических массивов  
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2018, 20:09
Ответы с готовыми решениями:

Обработка одномерных массивов. Сортировка массивов
Здравствуйте, помогите пожалуйста решить задачу легким способом. В одномерном массиве, состоящем...

Обработка одномерных массивов. Сортировка массивов
Здравствуйсте! Помогите пожалуйста написать программу! В одномерном массиве, состоящем из n...

Обработка одномерных массивов
При заданных XT,YT, абциссах X1,X2,..,Xn и ординатах Y1,Y2,..,Yn n точек плоскости XOY...

Обработка одномерных массивов С++
Написать программу решения задачи, используя оператор цикла FOR. Значения элементов массива ввести...

Обработка одномерных массивов
Помогите пожалуйста с написанием программы. ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫПОЛНЕНИЯ: 1. Сформировать...

7
Hitoku
1723 / 1318 / 1405
Регистрация: 28.10.2016
Сообщений: 4,265
Завершенные тесты: 4
14.02.2018, 20:12 2
Лучший ответ Сообщение было отмечено gaard9n как решение

Решение

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
#include "stdafx.h"
#include <iostream>
#include <locale>
using namespace std;
 
int main()
{
    setlocale(NULL, "Rus");
    int k = 0;
    const int r = 4;
    int x[r];
    for (int i = 0; i < r; i++)
    {
        cout << "Заполните " << i + 1 << "-й" << " элемент массива: "; cin >> x[i];
    }
    int min = INT_MAX; //вот и всё
    for (int i = 0; i < r; i++)
        if ((x[i] > 0) && (x[i] < min)) { min = x[i]; }
    cout << endl;
    cout << "Наименьший положительный элемент массива: " << min << endl;
    cout << endl;
    system("pause");
    return 0;
}
1
gaard9n
0 / 0 / 1
Регистрация: 09.01.2018
Сообщений: 30
14.02.2018, 20:43  [ТС] 3
Цитата Сообщение от Hitoku Посмотреть сообщение
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
#include "stdafx.h"
#include <iostream>
#include <locale>
using namespace std;
 
int main()
{
    setlocale(NULL, "Rus");
    int k = 0;
    const int r = 4;
    int x[r];
    for (int i = 0; i < r; i++)
    {
        cout << "Заполните " << i + 1 << "-й" << " элемент массива: "; cin >> x[i];
    }
    int min = INT_MAX; //вот и всё
    for (int i = 0; i < r; i++)
        if ((x[i] > 0) && (x[i] < min)) { min = x[i]; }
    cout << endl;
    cout << "Наименьший положительный элемент массива: " << min << endl;
    cout << endl;
    system("pause");
    return 0;
}
Допустим, так разве не подойдёт? Только я вот не совсем понимаю, что творится в строчке с "флагом" (flag = !flag) там, где начинается условие.
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
#include "stdafx.h"
#include <iostream>
#include <locale>
using namespace std;
 
int main()
{
    setlocale(NULL, "Rus");
    int k = 0;
    const int r = 9;
    int x[r];
    int min = x[0];
    bool flag = true;
    for (int i = 0; i < r; i++)
    {
        cout << "Заполните " << i + 1 << "-й" << " элемент массива: "; cin >> x[i];
        if (x[i] > 0 && flag) {
            min = x[i];
            flag = !flag;
        }
        if ((x[i] >= 0) && (x[i] < min)) { min = x[i]; }
    }
    cout << endl;
    cout << "Наименьший положительный элемент массива: " << min << endl;
    cout << endl;
    system("pause");
    return 0;
}
0
Hitoku
1723 / 1318 / 1405
Регистрация: 28.10.2016
Сообщений: 4,265
Завершенные тесты: 4
14.02.2018, 23:20 4
12-ю строку долой. В этом условии min присваивается первое значение и flag становится false, когда первое значение найдено.
1
14.02.2018, 23:20
Yetty
3045 / 2112 / 1372
Регистрация: 18.12.2017
Сообщений: 6,740
15.02.2018, 01:43 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int x[9], k=0, min=0;    
    
    for (int i = 0; i < 9; i++)
    {
        cout << "Заполните " << i + 1 << "-й" << " элемент массива: "; cin >> x[i];
        if (x[i] > 0) k++;
        if ((x[i] > 0) && (k==1 || x[i]<min)) min=x[i];        
    }    
    cout << "Наименьший положительный элемент массива: " << min << endl;    
    system("pause");
    return 0;
}
1
gaard9n
0 / 0 / 1
Регистрация: 09.01.2018
Сообщений: 30
15.02.2018, 11:15  [ТС] 6
Цитата Сообщение от Hitoku Посмотреть сообщение
12-ю строку долой. В этом условии min присваивается первое значение и flag становится false, когда первое значение найдено.
12-ю строку? Без неё компилятор выдаст ошибку, мол необъявленный идентификатор. Как быть?
0
Hitoku
1723 / 1318 / 1405
Регистрация: 28.10.2016
Сообщений: 4,265
Завершенные тесты: 4
15.02.2018, 11:29 7
gaard9n, можно просто
C++
12
int min;
а то присваивать x[0] - бесполезное действие, т.к. массив ещё не заполнен в этот момент
1
gaard9n
0 / 0 / 1
Регистрация: 09.01.2018
Сообщений: 30
15.02.2018, 13:36  [ТС] 8
Цитата Сообщение от Hitoku Посмотреть сообщение
gaard9n, можно просто
C++
12
int min;
а то присваивать x[0] - бесполезное действие, т.к. массив ещё не заполнен в этот момент
Понял. Спасибо.
0
15.02.2018, 13:36
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2018, 13:36

Обработка одномерных массивов С++
Написать программу решения задачи, используя оператор цикла FOR. Значения элементов массива ввести...

Обработка одномерных массивов

Обработка одномерных массивов
1. a) Одномерный массив из 5 элементов целого типа в диапазоне ; b) Дополнить исходный массив,...


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

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

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