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

Найти максимальный элемент массива и поменять его местами с первым положительным элементом

20.11.2018, 12:00. Просмотров 2293. Ответов 6
Метки нет (Все метки)

Здравствуйте. Есть задание
Дан массив чисел а0, а1, …, а15. Найти максимальный элемент этого массива и поменять его местами с первым положительным элементом.
Есть код
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>
 
using namespace std;
 
int main() 
{
    setlocale(LC_ALL, "rus");
    
    int N, max, first, imax, ifirst;
    cout << "Размерность массива " << endl;
    cin >> N;
    
    int Arr[N];
    cout << "Вводим числа " << endl;
    
    for (int i=0; i < N; i++)
    {
        cin >> Arr[i];      
    }
    
    for(int i=0; i<N; i++)
    {   
        if(Arr[i]> 0 ) 
        {
            first=Arr[i];
            ifirst=i; 
        break;
    }
    }
                
    for (int i=0; i<N; i++)
    {
        if (Arr[i] > max)
        {
            max = Arr[i];
            imax=i; 
        }
    }
    cout << "Первый положительный " << first << endl;
    cout << "Максимальный " << max << endl; 
    
    int tmp = Arr[imax];
    Arr[imax] = Arr[ifirst];
    Arr[ifirst] = tmp;
    
     for (int i = 0; i < N; i++)
    {
        cout << Arr[i] << endl;
    }
        
    system("pause");
    return 0;   
}
Что то до меня не доходит, как добавить условие, что если в нашем массиве все числа будут отрицательные и ни одного положительного. Чтобы выдал сообщение об этом. Добавляю условие else но он что то не хочет работать..

Добавлено через 23 минуты
я так понимаю, что мы можем взять ifirst = -1 и как то учесть ее, чтобы в случае всех отрицательных элементов у нас выдало сообщение и программа закрылась
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2018, 12:00
Ответы с готовыми решениями:

Найти максимальный элемент стека и поменять его местами с первым элементом
Информационное поле элемента стека числовое. Найти максимальный элемент стека и поменять его...

Найти максимальный и минимальный элемент в каждой строке массива и поменять местами с первым и последним элементом
Дана матрица M*N. Нужно найти максимальный и минимальный элемент в каждой строке массива и поменять...

В массиве из 6 целых чисел найти наибольший элемент и поменять его местами с первым элементом массива
Очень прошу, помогите развязать: 1)В массиве из 6 целых чисел найти наибольший элемент и поменять...

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

Поменять местами максимальный элемент матрицы с его первым элементом а минимальный с последним
ДВУМЕРНЫЙ МАССИВ: Поменять местами максимальный элемент матрицы F(k,p)в его первым элементом, а...

6
Axmap
15 / 9 / 5
Регистрация: 05.04.2018
Сообщений: 14
20.11.2018, 13:53 2
Лучший ответ Сообщение было отмечено Ek2403 как решение

Решение

Будучи быдлокодером, я бы написал вот так.

Да, обрати внимание на имя переменной "max". В моей среде (CodeBlocks 17.12) это имя было зарезервировано и я использовал другое.

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
#include <iostream>
#include <windows.h> //для system("pause")
 
const int N = 3;
/*Сделал N глобальной константой, чтобы работало. Нельзя объявить массив с переменной длиной
(определяемой во время исполнения программы), это уже будет работа с динамическим выделением
памяти. Вроде это так называется*/
using namespace std;
 
int main() 
{
    setlocale(LC_ALL, "rus");
    
    //удалил N, ifirst приравнял к -1, как ты уже правильно написал
    int max, first, imax, ifirst = -1;
    
    int Arr[N];
    cout << "Вводим числа " << endl;
    
    for (int i=0; i < N; i++)
    {
        cin >> Arr[i];      
    }
    
    for(int i=0; i<N; i++)
    {   
        if(Arr[i]> 0 ) 
        {
            first=Arr[i];
            ifirst=i; 
        break;
        }
    }
    if (ifirst == -1) //Если не нашли положительных элементов, заканчиваем работу программы
    {
        cout << "В массиве нет положительных элементов" << endl;
        system << "pause";
        return 0;
    }
                
    for (int i=0; i<N; i++)
    {
        if (Arr[i] > max)
        {
            max = Arr[i];
            imax=i; 
        }
    }
    cout << "Первый положительный " << first << endl;
    cout << "Максимальный " << max << endl; 
    
    int tmp = Arr[imax];
    Arr[imax] = Arr[ifirst];
    Arr[ifirst] = tmp;
    
     for (int i = 0; i < N; i++)
    {
        cout << Arr[i] << endl;
    }
        
    system("pause");
    return 0;   
}
1
Mr_Klim
21 / 15 / 6
Регистрация: 13.11.2016
Сообщений: 24
20.11.2018, 13:56 3
Лучший ответ Сообщение было отмечено Ek2403 как решение

Решение

Ek2403,
C++
1
2
3
4
5
6
int N, max, first, imax, ifirst;
    cout << "Размерность массива " << endl;
    cin >> N;
    
    int Arr[N];//Так нельзя делать.
    cout << "Вводим числа " << endl;
Нельзя создавать массив размер которого не константная величина, если нужно что бы массив создавался во время выполнения, то нужно создавать динамический массив(Это позволяет выбирать размер массива с помощью запроса). Делается это с помощью new.В вашем случае например так
C++
1
int* Arr = new int [N];
.
Далее вы сравниваете
C++
1
2
3
4
5
6
7
8
 for (int i=0; i<N; i++)
    {
        if (Arr[i] > max)
        {
            max = Arr[i];
            imax=i; 
        }
    }
При этом max у вас ни как не инициализирован, поэтому определите его либо при объявлении, либо же инициализируете его значение ( 0 к примеру) перед использованием. Например
C++
1
int max = 0;
или же
C++
1
2
3
4
5
6
7
8
int max;
//любое место в коде главное что бы до использования max
max = 0;
if (Arr[i] > max)
{
.....
.....
}
Ну и в конце кода не забудьте добавить delete[] Arr;
1
Axmap
15 / 9 / 5
Регистрация: 05.04.2018
Сообщений: 14
20.11.2018, 14:10 4
Лучший ответ Сообщение было отмечено Ek2403 как решение

Решение

Да, забыл строчку добавить перед циклом поиска максимального элемента, тут выше уже написали про это. Так как max не определена, то там будет случайная величина, которая, скорее всего, будет наибольшей
C++
1
2
3
4
5
6
7
8
9
    [B]max = Arr[0];[/B]
    for (int i=0; i<N; i++)
    {
        if (Arr[i] > max)
        {
            max = Arr[i];
            imax=i; 
        }
    }
1
Ek2403
0 / 0 / 0
Регистрация: 15.05.2018
Сообщений: 33
20.11.2018, 15:53  [ТС] 5
Axmap
Mr_Klim
Большое спасибо за такие развернутые ответы! Очень помогло. Хорошего дня
0
Yetty
1858 / 1330 / 951
Регистрация: 18.12.2017
Сообщений: 4,483
21.11.2018, 03:06 6
Цитата Сообщение от Mr_Klim Посмотреть сообщение
При этом max у вас ни как не инициализирован, поэтому определите его либо при объявлении, либо же инициализируете его значение ( 0 к примеру) перед использованием. Например
int max = 0;
или же
int max;
//любое место в коде главное что бы до использования max
max = 0;
if (Arr[i] > max)
{
.....
.....
}
это неправильно. например для массива отрицательных чисел определит max=0 хотя 0 даже не входит в такой массив

max инициализируется минимальным числом используемого типа, например для int это константа INT_MIN при подключении #include <climits>, т.е. int max=INT_MIN
или принимает значение первого элемента:
Цитата Сообщение от Axmap Посмотреть сообщение
max = Arr[0];
но можно строку не расходовать:
C++
1
2
for (int i=0; i<N; i++)    
        if (i==0 || Arr[i] > max) {max = Arr[i];imax=i;}
1
Axmap
15 / 9 / 5
Регистрация: 05.04.2018
Сообщений: 14
21.11.2018, 12:38 7
Цитата Сообщение от Yetty Посмотреть сообщение
но можно строку не расходовать:
C++Выделить код
1
2
for (int i=0; i<N; i++) * *
* * * * if (i==0 || Arr[i] > max) {max = Arr[i];imax=i;}
Так, пожалуй, красивше, но тогда мы будем проверять, не равен ли i нулю при каждой итерации цикла. Я, конечно, быдлокодер и не разбираюсь, но мне кажется полезной привычка избегать лишних вычислений.
0
21.11.2018, 12:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2018, 12:38

Найти первый максимальный элемент и поменять его местами с последним элементом массива
Задача: Сформируйте массив из 6 элементов, организовав ввод данных с консоли. Подсчитайте сумму...

Поменять местами минимальный элемент с первым элементом массива, а максимальный элемент с последним
Здравствуйте. Помогите пожалуйста написать программу: для поиска минимального и максимального...

Найти максимальный элемент и поменять его с первым элементом
В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с...


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

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

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