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

найти ошибку замена максимального - C++

Восстановить пароль Регистрация
 
beats
 Аватар для beats
98 / 36 / 4
Регистрация: 09.12.2012
Сообщений: 565
10.07.2013, 07:20     найти ошибку замена максимального #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
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
#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <string>
#include <time.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale( LC_ALL,"Russian" );
 
 
    int k;
    cout << "Введите размер массива: ";
    cin >> k;
    cout << endl << endl;
    int  *mas = new int[k];
 
    cout << "Заполнить массив автоматичиски (y/n)? ";
    string str;
    int i;
    cin >> str;
    cout << endl;
    if (str == "y"){ 
        //автоматичиски     
        srand(time(0));
    for (i=0; i<k; i++)
        mas[i] = rand() % 201 - 99;
    }
    else { //вручную
        cout << "Тогда вводи вручную: " << endl;
        for (i=0; i<k; i++)
        cin >> mas[i];
    }
 
    //первый вывод
    cout << "Имеем mas[" << k << "]= ";
     for (i=0; i<k; i++)
        cout << mas[i] << " ";
     cout << endl;
 
     //поиск максимального и минимального
     int Min = mas[0];
     int Max = mas[0];
     int posMax = -1;
     int posMin = -1;
 
     for (i=0; i<k; i++){
        //Сначала минимальный
    if(mas[i]<Min){
    Min = mas[i];  //записыавем значение минимального
    posMin = i;    //записываем его позицию
    }
 
       //Потом максимальный
    if(mas[i]>Max){
    Max = mas[i];  //записыавем значение максимального
    posMax = i;     //записываем его позицию
    }
     }
    //вывод максимального и минимального
    cout << "Максимальный= " << Max << endl;
    cout << "Минимальный= " << Min << endl;
 
    //меняем местами (перезаписывая значения)
    mas[posMax]=Min;
    mas[posMin]=Max;
 
    //последний вывод
    cout << "Результат mas[" << k << "]= ";
     for (i=0; i<k; i++)
        cout << mas[i] << " ";
     cout << endl << endl;
 
    system ("pause");
    return 0;
}
Код вроде верный, однако максимальный так и не заменяется на минимальный! подскажите в чем может быть загвоздка?
Миниатюры
найти ошибку замена максимального  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2013, 07:20     найти ошибку замена максимального
Посмотрите здесь:

C++ Составьте программу обмена местами максимального и минимального элементов на побочной диагонали матрицы B[n][n]. Помогите найти ошибку.
C++ Замена первого максимального элемента в одномерном массиве на 0
C++ Поиск и замена максимального элемента двумерного массива
Поиск максимального значения матрицы,замена элементов C++
Замена максимального на минимальный C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,866
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 07:39     найти ошибку замена максимального #2
C++
1
2
     int posMax = 0;
     int posMin = 0;
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
10.07.2013, 07:44     найти ошибку замена максимального #3
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
     int posMax = 0;
     int posMin = 0;
А если все значения будут больше нуля, минимальное он не найдёт, и posmin будет -1. Такой вариант не подойдёт, я щитаю

Добавлено через 27 секунд
о нет, я перепутал всё, удалите пост

Добавлено через 1 минуту
:-D
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,866
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 07:44     найти ошибку замена максимального #4
Цитата Сообщение от Praktolock Посмотреть сообщение
А если все значения будут больше нуля,
Причем тут больше нуля? У Вас минимум и максимум инициализируются первым элементом массива, соответственно и индекс должен быть 0:
C++
1
2
     int Min = mas[0];
     int Max = mas[0];
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
10.07.2013, 07:46     найти ошибку замена максимального #5
Цитата Сообщение от Praktolock Посмотреть сообщение
о нет, я перепутал всё, удалите пост
Добавлено через 1 минуту
:-D
:-(
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,866
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 07:48     найти ошибку замена максимального #6
И тут желательно проверить, что k > 0
C++
1
    cin >> k;
если это не так, то либо заново спрашиваем, либо выход
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2013, 08:13     найти ошибку замена максимального
Еще ссылки по теме:

Двумерный массив, сравнение, поиск максимального, замена C++
Где в коде происходит замена максимального и минимально элемента в строке массива? C++
Замена максимального и минимального элементов прямоугольной матрицы их средним геометрическим C++

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

Или воспользуйтесь поиском по форуму:
beats
 Аватар для beats
98 / 36 / 4
Регистрация: 09.12.2012
Сообщений: 565
10.07.2013, 08:13  [ТС]     найти ошибку замена максимального #7
Это уже дело техники)
C++
1
2
int posMax = 0;
int posMin = 0;
Помогло! Спасибо!
Yandex
Объявления
10.07.2013, 08:13     найти ошибку замена максимального
Ответ Создать тему
Опции темы

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