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

Дан массив размера N. Поменять местами его минимальный и максимальный элементы

22.01.2019, 14:25. Показов 7932. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан массив размера N. Поменять местами его минимальный и максимальный элементы.
Подскажите, правильно ли сделан код?
И если не сложно, то прошу объяснить
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
#include <iostream>
using namespace std;
int main()
{
    const int n=5;
    int A[n];
    int f,f1,x,y;
    for( int i=0; i<n; i++)
    {
        cout<<"vvedite A["<<i<<"]"<<endl;
        cin>>A[i];
    }
    for( int i=0; i<n; i++)
    cout<<" A["<<i<<"]="<<A[i]<<endl;
       
    
    int min=A[0];
    for( int i=0; i<n; i++)
    {
       if (min>A[i])
       {
           min=A[i];   //Находим наименьший элемент и записываем его индекс
           f=i;        
       }
    }
    cout<<"min="<<min<<endl;
    
    int max=A[0]; 
    for( int i=0; i<n; i++)
    {
       if (max<A[i])
       {
           max=A[i];      
           f1=i;          //Находим наибольший элемент и записываем его индекс
       }
    }
    cout<<"max="<<max<<endl;
    
    x=A[f];
    y=A[f1];                //Меняем местами         
    A[f]=y; A[f1]=x;           
    
    for(int i=0; i<n; i++)
    cout<<" A["<<i<<"]="<<A[i]<<endl;
    system("PAUSE >> VOID");
    return 0;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2019, 14:25
Ответы с готовыми решениями:

Дан массив действительных чисел A размера n. Найти и поменять местами его минимальный и максимальный элементы
Статический массив

Дан массив А[0:n-1].Поменять местами его минимальный чётный и максимальный нечетный элементы
помогите пожалуйста

Дана матрица размера M*N. Поменять местами столбцы содержащие минимальный и максимальный элементы матрицы
Я прошу проверить данную программу на правильность выполнения этого задания, если не правильно что-...

Дана матрица размера M × N. Поменять местами строки, содержащие минимальный и максимальный элементы матрицы
Я написал программу меняющую максимальный и минимальный элемент местами, но поменять строчки в...

8
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
22.01.2019, 14:38 2
Цитата Сообщение от Дмитрий20 Посмотреть сообщение
Подскажите, правильно ли сделан код?
Нет. Если min и/или max - первый элемент, то if никогда не выполнится, и индекс не будет записан, следовательно, при свапе вместо индексов будет мусор, что вызовет ошибку
1
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
22.01.2019, 15:19 3
Лучший ответ Сообщение было отмечено Дмитрий20 как решение

Решение

Цитата Сообщение от Дмитрий20 Посмотреть сообщение
if (min>A[i])
Заменить на if (A[i]<min) {...}
Цитата Сообщение от Дмитрий20 Посмотреть сообщение
if (max<A[i])
Заменить на if (A[i]>max) {...}
Цитата Сообщение от Дмитрий20 Посмотреть сообщение
x=A[f];
y=A[f1]; //Меняем местами
A[f]=y;
A[f1]=x;
Заменить на
Код
int tmp = A[f];
A[f] = A[f1];
A[f1] = tmp;
Совет : создавайте переменные как можно ближе к их инициализации и давайте им подходящие имена, а также комментируйте код - это поможет Вам в нем разобраться быстрее и понимать, что Вы делаете :
Как искать хорошие названия для идентификаторов в выбранной предметной области
Написать подробные комментарии к каждой строке кода

Вот код с комментариями :

Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
int main()
{
    const int size = 20;
    double Array[size]; // создаем статический одномерный массив 
 
    int cnt; cout << " Enter cnt = "; cin >> cnt; // вводим длину массива
 
    for (int i = 0; i < cnt; i++)
    {
        cout << " Array[" << i << "] = "; // вводим массив поэлементно
        cin >> Array[i];
    }
 
    for (int i = 0; i < cnt; i++) {
        cout << " " << Array[i]; // выводим массив
    }
    cout << endl;
 
    double min = Array[0]; // переменная, что отвечает за минимальный элемент, изначально первый элемент массива
    int min_index = 0; // переменная, что отвечает за индекс минимального элемента, изначально равна 0
    for (int i = 0; i < cnt; i++)
    {
        if (Array[i] < min) // если элемент меньше минимального
        {
            min = Array[i]; // минимальный элемент становится им
            min_index = i; // и находится индекс минимального элемента
        }
    }
    cout << " min : " << min << endl; // выводим минимальный элемент 
 
    double max = Array[0]; // переменная, что отвечает за максимальный элемент, изначально первый элемент массива
    int max_index = 0; // переменная, что отвечает за индекс максимального элемента, изначально равна 0
    for (int i = 0; i < cnt; i++)
    {
        if (Array[i] > max) // если элемент больше максимального
        {
            max = Array[i];  // максимальный элемент становится им
            max_index = i; // и находится индекс максимального элемента 
        }
    }
    cout << " max : " << max << endl; // выводим максимальный элемент
 
    double tmp = Array[min_index];
    Array[min_index] = Array[max_index];
    Array[max_index] = tmp;
 
    for (int i = 0; i < cnt; i++) {
        cout << " " << Array[i]; // выводим массив
    }
    cout << endl;
 
    return 0;
}


Добавлено через 29 минут
Дмитрий20, если Вам еще что-то не понятно - спрашивайте!
1
0 / 0 / 0
Регистрация: 19.09.2017
Сообщений: 36
22.01.2019, 17:38  [ТС] 4
Пытаюсь научиться писать на С++, да пока что всё туго доходит
0
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.01.2019, 19:03 5
Цитата Сообщение от Дмитрий20 Посмотреть сообщение
Подскажите, правильно ли сделан код?
2 цикла вполне достаточно. кроме того, находить значения min и max не нужно (не требуется по условию). размер
лучше задавать с клавиатуры, поэтому применяется динамический массив.
код предложенный Вам JohnBlack123, скажем так, не самый оптимальный, проще будет так:
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 <iostream>
using namespace std;
 
int main()
{
    int N, imin=0, imax=0;
    cout <<"N="; cin >>N;
 
    double*a = new double[N];
 
    cout <<"Enter "<<N<<" elements:\n";
    for (int i = 0; i < N; i++)
      {
      cin >>a[i];
      if (a[i]<a[imin]) imin=i;
      if (a[i]>a[imax]) imax=i;
      }
    
    swap(a[imin],a[imax]);  
      
    for (int i = 0; i < N; i++)
      cout <<a[i]<<" ";
      cout <<"\n";
    delete[]a;
system("pause");
return 0;
}
такой код поменяет местами первый min и первый max. если значений min (max) несколько и нужно заменить все min значения на максимальные и наоборот, сообщите
1
83 / 20 / 0
Регистрация: 30.10.2018
Сообщений: 106
22.01.2019, 19:13 6
Yetty, обязательно ли освобождать память командой delete[]a??
0
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
22.01.2019, 21:55 7
kusancho, да обязательно. Иначе программа будет использовать много уже использованной памяти.
0
0 / 0 / 0
Регистрация: 05.10.2021
Сообщений: 2
05.10.2021, 19:43 8
Можете помочь?
0
Yetty
05.10.2021, 20:40     Дан массив размера N. Поменять местами его минимальный и максимальный элементы
  #9

Не по теме:

Цитата Сообщение от Scitherium Посмотреть сообщение
Можете помочь?
в чём состоит Ваш вопрос ?

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2021, 20:40

Дан Массив размера N. Поменять местами его минимальный и Максимальный элементы.
Помогите пожалуйста:)

Дан массив размера N. Поменять местами его минимальный и максимальный элементы
1.Дан массив размера N. Поменять местами его минимальный и максимальный элементы. 2.Дан...

Дан целочисленный массив размера 10. Поменять местами минимальный и максимальный элементы массива
Дан целочисленный массив размера 10. Поменять местами минимальный и максимальный элементы массива.

Дан массив из 10 элементов. Поменять местами максимальный и минимальный элементы
Дан массив из 10 элементов. Поменять местами максимальный и минимальный элементы. Правила...


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

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

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