Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 164

Не входит в первый if, который ищет минимальный элемент

21.01.2019, 19:33. Показов 1125. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите почему не входит в первый if, который ищет минимальный элемент ?
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
#include "pch.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); // подключение русского языка
    int size; // кол-во элементов массива
    cout << "Введите размер массива:" << endl;
    cin >> size; // ввод размера массива
    int* arr = new int[size]; // создание динамического массива
    for (int i = 0; i < size; i++) // цикл по кол-во элементов
    {
        cout << "arr[" << i << "]: ";
        cin >> arr[i];  // ввод элементов массива
    }   
 
int Min = 0;
    int Max = 0;
    int IndexMin = 0, IndexMax = 0;
    for (int i = 0; i < size; i++) // цикл по кол-во элементов
    {
 
        if (Min > arr[i])
        {
            Min = arr[i];
            IndexMin = i;
        }
        else if (arr[i] > Max)
        {
            Max = arr[i];
            IndexMax = i;
        }
    }
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2019, 19:33
Ответы с готовыми решениями:

Найти минимальный элемент первой последовательности, который не входит во вторую последовательность
даны две последовательности по 30 целых чисел в каждой. Найти наименьшее среди тех чисел 1-ой последовательности, которые не входят во...

Заменить первый максимальный нечетный элемент в заштрихованной области, на первый минимальный четный элемент
#include&lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;time.h&gt; #include&lt;limits.h&gt; using namespace std; int main(){...

Поменять местами первый максимальный четный элемент массива и первый минимальный нечетный элемент
Помогите начало знаю как сделать а дальше нет #include&lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include...

21
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
21.01.2019, 19:40
Цитата Сообщение от noname12345 Посмотреть сообщение
Подскажите почему не входит в первый if, который ищет минимальный элемент ?
все нормально входит
0
0 / 0 / 0
Регистрация: 21.01.2019
Сообщений: 5
21.01.2019, 19:51
Не входить в if может только если условие внутри скобок (условия if) неверно. Следовательно, при прохождении счетчика условие не выполняется, т.е. min не больше того значения, которое вы ввели. Таковым оно может быть, если оно (значение в массиве) больше нуля, ведь min = 0 и идет проверка: Если min(0) больше значения в массиве, то min присваивается значение массива, на котором сейчас счетчик.
К тому же, я подозреваю, что Вы в принципе написали неверное условие для нахождения минимального и максимального значений в массиве. Для нахождения минимального значения min необходимо присвоить 9, а дальше сравнивать его с массивом. Если min меньше значения в массиве, то присваиваем min это значение. Для max все наоборот.
P.S Не забывайте удалять динамически созданный массив.
0
10 / 8 / 2
Регистрация: 01.05.2018
Сообщений: 96
21.01.2019, 19:52
Скорее всего под условие не подходит..
0
0 / 0 / 0
Регистрация: 21.01.2019
Сообщений: 5
21.01.2019, 20:00
В общем, проверьте, что Вы вводите, а также научитесь пользоваться отладчиком, он Вам огромное количество времени сэкономит)
P.S Мой пример с 0 и 9 всего лишь пример. Девять можете заменить другим максимальным значением, все зависит от условия.
0
10 / 8 / 2
Регистрация: 01.05.2018
Сообщений: 96
21.01.2019, 20:04
CaptanMax, а зачем присваивать именно значение 9 или какое-либо другое конкретное, если можно присвоить как минимуму так и максимуму первый элемент массива и потом уже сравнивать?))
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
21.01.2019, 20:06
noname12345, можешь так попробовать
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
#include "pch.h"
#include <iostream>
#include <limits>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); // подключение русского языка
    int size; // кол-во элементов массива
    cout << "Введите размер массива:" << endl;
    cin >> size; // ввод размера массива
    int* arr = new int[size]; // создание динамического массива
    for (int i = 0; i < size; i++) // цикл по кол-во элементов
    {
        cout << "arr[" << i << "]: ";
        cin >> arr[i];  // ввод элементов массива
    }   
 
int Min = std::numeric_limits<int>::min();
    int Max = std::numeric_limits<int>::max();
    int IndexMin = 0, IndexMax = 0;
    for (int i = 0; i < size; i++) // цикл по кол-во элементов
    {
 
        if (Min > arr[i])
        {
            Min = arr[i];
            IndexMin = i;
        }
        else if (arr[i] > Max)
        {
            Max = arr[i];
            IndexMax = i;
        }
    }
 
}
0
0 / 0 / 0
Регистрация: 21.01.2019
Сообщений: 5
21.01.2019, 20:14
Ну да, можно и так, тут тупанул немного) Просто вспомнил изначально задачку, где давался не массив, а просто какое-то число. А в числе уже, как известно, цифры от 0 до 9 :-)
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
21.01.2019, 20:40
Цитата Сообщение от noname12345 Посмотреть сообщение
Подскажите почему не входит в первый if, который ищет минимальный элемент ?
min инициализирован неправильным значением:
Цитата Сообщение от noname12345 Посмотреть сообщение
int Min = 0;
нужно инициализировать min максимальным значением для используемого типа данных. если у Вас массив типа int min=2147483647; ( можно подключить #include <climits> и тоже самое записать так: int min=INT_MAX; )
также min можно инициализировать значением первого элемента массива:
min=a[0]; (или чтобы не записывать строку min=a[0]; указать это в условии: if (i==0 || a[i]<min)

и уберите слово else - нахождение min и max не связано одно с другим.
0
 Аватар для analogov net
2532 / 1130 / 494
Регистрация: 17.11.2018
Сообщений: 2,836
22.01.2019, 00:42
Цитата Сообщение от Yetty Посмотреть сообщение
и уберите слово else - нахождение min и max не связано одно с другим.
Ну, это ты погорячился...
Конечно же, связаны, поскольку они оба сравниваются с одним и тем же элементом массива. А этот самый элемент не может быть одновременно меньше min и больше max. Отсюда следует, что если выполнится первый if(...), то второй проверять уже не нужно. Вот здесь-то else и пригодится.

Хотя, можно и так. Просто будет лишняя проверка.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.01.2019, 01:32
Цитата Сообщение от analogov net Посмотреть сообщение
Вот здесь-то else и пригодится.
это не так. наличие else может приводить к неправильному вычислению начального max, например в таких строках:
C++
1
2
if (i==0 || a[i]<min) min=a[i];
if (i==0 || a[i]>max) max=a[i];
0
 Аватар для analogov net
2532 / 1130 / 494
Регистрация: 17.11.2018
Сообщений: 2,836
22.01.2019, 08:36
Да, но этих строк нет в его коде.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.01.2019, 15:02
Цитата Сообщение от analogov net Посмотреть сообщение
Да, но этих строк нет в его коде.
дело не в строках ТС (свои строки ТС предоставил, чтобы их исправили), а в том, что Ваше утверждение ошибочно.
такие строки Вас устроят ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> 
#include <climits>
using namespace std;
 
int main()
{
    int n=3, min=INT_MAX, max=INT_MIN; 
    
    int a[] = {500, 400, 200}; 
    for (int i = 0; i < n; i++) 
    {
        
        if (a[i] < min) min=a[i];
        if (a[i] > max) max=a[i];
        cout <<a[i]<<" ";
    }   
 
    cout << "\nmin=" <<min;
    cout << "\nmax=" <<max<< "\n";
system("pause");
return 0;
}
поставьте else как Вы советуете и получите неверный результат.
0
 Аватар для analogov net
2532 / 1130 / 494
Регистрация: 17.11.2018
Сообщений: 2,836
22.01.2019, 16:27
Цитата Сообщение от Yetty Посмотреть сообщение
такие строки Вас устроят ?
Нет, ну меня вообще всё устраивает, дело не в этом.
Обычно, изначально известно, какими значениями будет заполняться массив( не в числовом смысле, а в плане, откуда они будут 'добываться', эти значения). И в зависимости от этого, нужно выбрать начальную инициализацию этих самых min и max.
В этом твоём примере(конкретно, в этом) видно, что ты сделал это не верно.
Сделай так:
C++
1
min = max = a[0];
и проблем было бы меньше. Но, опять же, я не считаю, что твой вариант ошибочен. Просто, я говорил о коде ТС, а там видно, что убирать else не обязательно.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.01.2019, 17:30
Цитата Сообщение от analogov net Посмотреть сообщение
ты сделал это не верно
что не верно ? я привёл 4 варианта решения задачи и все работают верно без else. а вариант, который Вы предлагаете кроме того что содержит строку min = max = a[0]; потребует дополнительный цикл (значение a[0] нужно где-то брать), т.е. приведёт к увеличению количества строк примерно в 2 раза - и всё это чтобы применить else ?
0
 Аватар для analogov net
2532 / 1130 / 494
Регистрация: 17.11.2018
Сообщений: 2,836
22.01.2019, 17:59
Цитата Сообщение от Yetty Посмотреть сообщение
что не верно ?
я говорил про твой последний пример.
это не верно:
C++
1
min=INT_MAX, max=INT_MIN;
я имел ввиду так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    int n = 3, min = INT_MAX, max = INT_MIN;
    int a[] = { 200, 400, 500 };
 
    min = max = a[0];
    for( int i = 0; i < n; i++ )
    {
 
        if( a[i] < min ) min = a[i];
        if( a[i] > max ) max = a[i];
        cout << a[i] << " ";
    }
 
    cout << "\nmin=" << min;
    cout << "\nmax=" << max << "\n";
    system( "pause" );
    return 0;
}
Цитата Сообщение от Yetty Посмотреть сообщение
потребует дополнительный цикл
какой цикл?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.01.2019, 19:10
Цитата Сообщение от analogov net Посмотреть сообщение
это не верно:
кто Вам такое сказал ?
Цитата Сообщение от analogov net Посмотреть сообщение
какой цикл?
массив не задан изначально, а заполняется с клавиатуры - для Вашего варианта потребуется 2 цикла. а если инициализировать min=INT_MAX, max=INT_MIN; дополнительный цикл не требуется, т.к. min и max вычисляются в цикле заполнения - надеюсь объяснил понятно.
0
 Аватар для analogov net
2532 / 1130 / 494
Регистрация: 17.11.2018
Сообщений: 2,836
22.01.2019, 19:30
Цитата Сообщение от Yetty Посмотреть сообщение
кто Вам такое сказал ?
Так ты же и сказал, вернее показал на своём последнем примере.
Цитата Сообщение от Yetty Посмотреть сообщение
массив не задан изначально, а заполняется с клавиатуры
Ну и что? Какая разница? Ну, сделай так:
C++
1
2
3
4
5
cin>> a[0];
min = max = a[0];
for(int i = 1; i < n; i++)
    cin >> a[i];
// ...
Цитата Сообщение от Yetty Посмотреть сообщение
надеюсь объяснил понятно.
Вроде бы, да. А чего там непонятного.
Так я с самого начала всё понял. Кроме дополнительного цикла, правда. Но это не важно.
Ладно, Yetty, я объяснил, как мог. Извини, если что. Лучше не могу.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.01.2019, 19:46
Цитата Сообщение от analogov net Посмотреть сообщение
Так я с самого начала всё понял. Кроме дополнительного цикла, правда.
вот рабочий вариант: (1 цикл)
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 <iostream> 
#include <climits>
using namespace std;
 
int main()
{
    int n, min=INT_MAX, max=INT_MIN;
    cout <<"n="; cin >>n;
 
    int*a = new int[n];
 
    cout <<"Enter "<<n<<" elements:\n";    
    for (int i = 0; i < n; i++) 
    {
        cin >>a[i];
        if (a[i] < min) min=a[i];
        if (a[i] > max) max=a[i];        
    }   
 
    cout <<"min=" <<min<<"\nmax="<<max<<"\n";
    delete[]a;
system("pause");
return 0;
}
вот вариант (тоже рабочий), который я так понял Вы предлагаете вместо него (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
#include <iostream>
using namespace std;
 
int main()
{
    int n, min, max;
    cout <<"n="; cin >>n;
 
    int*a = new int[n];
 
    cout <<"Enter "<<n<<" elements:\n";    
    for (int i = 0; i < n; i++) 
    {
        cin >>a[i];
    }
        
    min=max=a[0];    
    for (int i = 0; i < n; i++)
    {        
        if (a[i] < min) min=a[i];
        else if (a[i] > max) max=a[i];        
    }   
 
    cout <<"min=" <<min<<"\nmax="<<max<<"\n";
    delete[]a;
system("pause");
return 0;
}
заводить cin>>a[0] отдельно, как Вы решили сделать в последнем посте, можно. но всё равно 2 лишние строки:
Цитата Сообщение от analogov net Посмотреть сообщение
cin>> a[0];
min = max = a[0];
0
 Аватар для analogov net
2532 / 1130 / 494
Регистрация: 17.11.2018
Сообщений: 2,836
22.01.2019, 20:02
Цитата Сообщение от Yetty Посмотреть сообщение
вот вариант (тоже рабочий), который я так понял Вы предлагаете вместо него (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
int main()
{
    int n, min, max;
    cout << "n="; cin >> n;
 
    int*a = new int[n];
 
    cout << "Enter " << n << " elements:\n";    
    cin >> a[0];
    min = max = a[0];
    for( int i = 1; i < n; i++ )
    {
        cin >> a[i];
 
        if( a[i] < min ) min = a[i];
        else if( a[i] > max ) max = a[i];
    }
 
    cout << "min=" << min << "\nmax=" << max << "\n";
    delete[]a;
    system( "pause" );
    return 0;
}
Цитата Сообщение от Yetty Посмотреть сообщение
заводить cin>>a[0] отдельно, как Вы решили сделать в последнем посте, можно. но всё равно 2 лишние строки:


могу быть не прав, но мне кажется, что эффективность кода не определяется количеством его строк...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.01.2019, 20:02
Помогаю со студенческими работами здесь

Функция находит в строке первый символ, который не входит в другую строку
Нужно написать собственную функцию, которая находит в строке первый символ, который не входит в другую заданную строку. Есть код, но...

Функция находит в строке первый символ, который входит в другую заданную строку
нужно написать собственную функцию, которая находит в строке первый символ, который входит в другую заданную строку. есть код, но...

Функция, находящая в строке первый символ, который входит в другую заданную строку
Доброго времени суток! Есть такое задание: написать функцию, которая находит в строке первый символ, который входит в другую заданную...

Строка: Как найти в строке первый символ, который входит во другую заданную строку?
Как найти в строке первый символ, который входит во другую заданную строку используя указатели и функции? Строки вводятся вручную.

Деструктор (программа, которая ищет минимальный элемент массива)
Вот написал простенькую программу, которая ищет минимальный элемент массива! С конструктором более менее разобрался, а с деструктором...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru