Форум программистов, компьютерный форум CyberForum.ru

Поменять местами MIN и MAX в массивах - C++

Восстановить пароль Регистрация
 
azzkey
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 19
20.05.2012, 00:10     Поменять местами MIN и MAX в массивах #1
Здравствуйте, ни в какую не получается осуществить сабж.

Вот задание:
Вывести 4 массива, содержащих 4, 3, 4 и 5 компонентов. Найти в каждом массиве MIN и MAX элементы и поменять их местами. Операторы ввода-вывода массивов и формирования новых массивов оформить в виде функций; вычисление значений MIN и MAX элементов выполнить с помощью функций.

Как делаю я:

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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define a 4
#define b 3
#define c 4
#define d 5
 
void vvodmass(int n, int* O)
{
    int i;
    for (i=0; i<n; i++)
    {
        printf("\n[i]=%d   ",i);
        scanf("%d",&O[i]);
    }
    return;
}
void XminXmax(int n, int* O)
{
 
 
 
    int max, min, posmax, posmin;
    int i=0;
    while (i<n)
    {
        if (O[i]>max)
        {max=O[i];
        posmax=i;}
        
        if (O[i]<min)
        {min=O[i];
        posmin=i;}
 
        i++;
    }
 
    O[posmax]=min;
    O[posmin]=max;
 
    return;
}
void vivodmass(int n, int* O)
{
    int i;
    for (i=0; i<n; i++)
    {
        printf("%d ",O[i]);
    }
printf("\n");
return;
}
 
int main ()
{
    int A[a], B[b], C[ c ], D[d];
        printf("\nvvedite element massiva A");
    vvodmass(a, A);
        printf("\nvvedite element massiva B");
    vvodmass(b, B);
        printf("\nvvedite element massiva C");
    vvodmass(c, C);
        printf("\nvvedite element massiva D");
    vvodmass(d, D);
 
 
        XminXmax(a, A);
        XminXmax(b, B);
        XminXmax(c, C);
        XminXmax(d, D);
        
        printf("\nmassiv A");
        vivodmass(a, A);
        printf("\nmassiv B");
    vivodmass(b, B);
        printf("\nmassiv C");
    vivodmass(c, C);
        printf("\nmassiv D");
    vivodmass(d, D);
 
 
    return 0;
}
препод у нас противный, мало че объясняет на практике, но он сразу же пристал к дефайнам, якобы их не должно быть, и к int* O.

прошу помощи завершить это задание, Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
20.05.2012, 00:45     Поменять местами MIN и MAX в массивах #2
Цитата Сообщение от azzkey Посмотреть сообщение
пристал к дефайнам, якобы их не должно быть
А чего им не быть, разрешены ведь по стандарту
Ну не хочет
C++
1
#define d 5
Напиши
C++
1
const int d=5;
А вообще замена min и max проводится так:
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
template<typename T>
void swapMinMax(T* ar,int size)
{
    int* Min,*Max;
    Min=Max=ar;
    for(int i=1;i<size;i++)
    {
        if(ar[i]<*Min)
         Min=&ar[i];
        if(ar[i]>*Max)
         Max=&ar[i];
    }
    swap(*Min,*Max);
}
 
int main()
{
    enum {size=5};
    int ar[size]={1,2,3,4,5};
    swapMinMax(ar,size);
    for(int i=0;i<size;i++)
     cout<<ar[i]<<'\t';
    return 0;
}
azzkey
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 19
20.05.2012, 01:32  [ТС]     Поменять местами MIN и MAX в массивах #3
а как быть с int* O ?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
20.05.2012, 03:17     Поменять местами MIN и MAX в массивах #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
#include <iostream>
 
template<typename T>
void filling(T *, int);
template<typename T>
void print(T *, int);
template<typename T>
T get_min(T *, int);
template<typename T>
T get_max(T *, int);
template<typename T>
void swap_min_max(T *, int);
 
 
int main()
{
    int A[4], B[3], C[4], D[5];
    filling(A, 4);
    print(A, 4);
    swap_min_max(A, 4);
    print(A, 4);
    filling(B, 3);
    print(B, 3);
    swap_min_max(B, 3);
    print(B, 3);
    filling(C, 4);
    print(C, 4);
    swap_min_max(C, 4);
    print(C, 4);
    filling(D, 5);
    print(D, 5);
    swap_min_max(D, 5);
    print(D, 5);
    return 0;
}
 
template<typename T>
void filling(T *arr, int N)
{
    for(int i=0; i < N; i++)
        std::cin>> arr[i];
}
 
template<typename T>
void print(T *arr, int N)
{
    for(int i=0; i < N; i++)
        std::cout<< arr[i]<< " ";
    std::cout<< std::endl;
}
 
template<typename T>
T get_min(T *arr, int N)
{
    T min = arr[0];
    for(int i=0; i < N; i++)
        if(arr[i] < min) min = arr[i];
    return min;
}
 
template<typename T>
T get_max(T *arr, int N)
{
    T max = arr[0];
    for(int i=0; i < N; i++)
        if(arr[i] > max) max = arr[i];
    return max;
}
 
template<typename T>
void swap_min_max(T *arr, int N)
{
    T max = get_max(arr, N);
    T min = get_min(arr, N);
    for(int i=0; i < N; i++)
    {
        if(arr[i] == min) arr[i] = max;
        else if (arr[i] == max) arr[i] = min;
    }
}
azzkey
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 19
20.05.2012, 12:47  [ТС]     Поменять местами MIN и MAX в массивах #5
Если честно, я не могу разобрать ваш код, вы могли бы написать то же самое но через библиотеки <stdio.h> <stdlib.h> ?
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
20.05.2012, 14:31     Поменять местами MIN и MAX в массивах #6
azzkey, у меня не используются никакие преимущества с++, кроме того что класс шаблонный (просто замените все T на int и уберите template<typename T>) и используется функция swap (просто обменяй местами через 3ю переменную Min и Max). Переделать на чистый си совсем не сложно ведь.
azzkey
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 19
20.05.2012, 14:59  [ТС]     Поменять местами MIN и MAX в массивах #7
ну как раз дело в том, что мы на C++ пишем)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
20.05.2012, 23:58     Поменять местами MIN и MAX в массивах #8
azzkey, вы требуете переписать
то же самое но через библиотеки <stdio.h> <stdlib.h>
, они вобще являются С-шными. А потом вы говорите, что
ну как раз дело в том, что мы на C++ пишем)
Вы уж определитесь. Да и изменить код не составит вобще никакого труда, единственное, что нужно убрать - использование шаблонов, как вам уже правильно сообщил Gepar. Ну и изменить функции ввода-вывода. Кстати, у Gepar-а меняются местами только один максимум с одним минимумом, а у меня все максимумы и все минимумы. Как нужно на самом деле - незивесто, т.к. формулировка задачи до конца не ясна. Хотите чисто С++?
Вот он:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main()
{
    int A[4] = {1, 2, 3, 4};
    std::copy(A, A + 4, std::ostream_iterator<int>(std::cout, " ") );
    std::swap(*std::min_element(A, A + 4), *std::max_element(A, A + 4) );
    std::cout<< std::endl;
    std::copy(A, A + 4, std::ostream_iterator<int>(std::cout, " ") );
    return 0;
}
azzkey
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 19
21.05.2012, 00:08  [ТС]     Поменять местами MIN и MAX в массивах #9
Прошу прощения, я и вас и себя запутал, я и не знал что мы оказывается изучаем просто С (на лекциях всегда ведется речь о С++)
странный у нас препод)

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

Спасибо
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
21.05.2012, 00:28     Поменять местами MIN и MAX в массивах #10
Цитата Сообщение от azzkey Посмотреть сообщение
Прошу прощения, я и вас и себя запутал, я и не знал что мы оказывается изучаем просто С (на лекциях всегда ведется речь о С++)
странный у нас препод)

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

Спасибо
Поясните, менять все максимумы на минимумы и наоборот, или только один?
azzkey
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 19
21.05.2012, 00:40  [ТС]     Поменять местами MIN и MAX в массивах #11
в каждом введенном массиве нужно найти мин и макс значение, поменять их местами, то есть мин значение на место макс, а макс на место мин
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
21.05.2012, 00:50     Поменять местами MIN и MAX в массивах #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
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
 
void filling(int *, int);
void print(int *, int);
int get_min(int *, int);
int get_max(int *, int);
void swap_min_max(int *, int);
 
 
int main(void)
{
    int A[4], B[3], C[4], D[5];
    filling(A, 4);
    print(A, 4);
    swap_min_max(A, 4);
    print(A, 4);
    filling(B, 3);
    print(B, 3);
    swap_min_max(B, 3);
    print(B, 3);
    filling(C, 4);
    print(C, 4);
    swap_min_max(C, 4);
    print(C, 4);
    filling(D, 5);
    print(D, 5);
    swap_min_max(D, 5);
    print(D, 5);
    return 0;
}
 
void filling(int *arr, int N)
{
    int i;
    for(i=0; i < N; i++)
        scanf("%d", &arr[i]);
}
 
void print(int *arr, int N)
{
    int i;
    for(i=0; i < N; i++)
        printf("%d ", arr[i]);
    printf("\n");
}
 
int get_min(int *arr, int N)
{
    int min = arr[0], i;
    for(i=0; i < N; i++)
        if(arr[i] < min) min = arr[i];
    return min;
}
 
int get_max(int *arr, int N)
{
    int max = arr[0], i;
    for(i=0; i < N; i++)
        if(arr[i] > max) max = arr[i];
    return max;
}
 
void swap_min_max(int *arr, int N)
{
    int max = get_max(arr, N);
    int min = get_min(arr, N);
    int i;
    for(i=0; i < N; i++)
    {
        if(arr[i] == min) arr[i] = max;
        else if (arr[i] == max) arr[i] = min;
    }
}
Постарайтесь четко формулировать задачу и не ошибайтесь больше разделом форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.05.2012, 15:55     Поменять местами MIN и MAX в массивах #13
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for SwapMaxMin(int *Data, unsigned int n)
{
 int *min;
 int *max;
 int t;
 int *p;
 for (p=Data+n-1, min=Data, max=Data; p>=Data; --p)
 {
   if (*min>*p)
   {
    min=p;
   }
   if (*max>*p)
   {
    max=p;
   }
 }
 t=*max;
 *max=*min;
 *min=t;
}
Что сложного?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
21.05.2012, 17:44     Поменять местами MIN и MAX в массивах #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Что сложного?
бывает и так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2012, 21:14     Поменять местами MIN и MAX в массивах
Еще ссылки по теме:

Поменять местами max и min четных строк матрицы (без функции) C++
Поменять местами max и min четных строк в квадратной матрице C++
Двумерный массив. Поменять местами max и min четных строк C++

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

Или воспользуйтесь поиском по форуму:
azzkey
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 19
21.05.2012, 21:14  [ТС]     Поменять местами MIN и MAX в массивах #15
taras atavin,вообще нет ничего сложного, но если знаешь как делать)
понимаю что вопросы у меня нубские, т.к. нуб)
Спасибо
Yandex
Объявления
21.05.2012, 21:14     Поменять местами MIN и MAX в массивах
Ответ Создать тему
Опции темы

Текущее время: 11:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru