28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
1

Найти два наибольших числа из десяти

30.08.2015, 03:01. Показов 4897. Ответов 18
Метки нет (Все метки)

С одним числом написал, а вот чтобы найти два числа ума не хватает. Нужно использовать только одну переменную для ввода чисел. Число вводится в цикле while только один раз, цикл повторяется десять раз. Массивы и т.п. использовать не нужно, скорее всего как-то через if делается.

Добавлено через 1 минуту
Вот пример с одним числом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
    int counter = 0; // счетчик
    double number;   // текущее введенное число
    double largest = 0;  // макс. найденное число
 
    cout << "This program will find largest number of 10 numbers!\n" << endl;
 
    while (counter < 10)
    {
        cout << "Enter number: ";
        cin >> number;
        ++counter;
 
        if (number > largest)
        {
            largest = number;
        }
    }
    
    cout << "Largest number of 10 numbers: " << largest << endl;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2015, 03:01
Ответы с готовыми решениями:

Программа которая выводит два наибольших числа из десяти введенных. Пожалуйста объясните суть работы программы
#include &lt;iostream&gt; using namespace std; int main() { int i; float number,...

Найти два наибольших числа в последовательности
1)Дана последовательность из М чисел. Найти в ней два наибольших числа.

Оператор for,if ( найти два наибольших числа)
Подскажите пожайлуста....начал самостоятельно изучать С++, в основном по Дейтелу Х.М. но и...

Найти два наибольших простых числа в матрице
Помогите,пожалуйста Задана матрица целых чисел A(m,n). Найти два наибольших простых числа....

18
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
30.08.2015, 03:52 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
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <utility>
#include <cassert>
#include <limits>
 
 
std::pair < int , int > get_max ( size_t count )
{
    assert ( count > 1 ) ;
    int max1 = std::numeric_limits<int>::min() ;
    int max2 = std::numeric_limits<int>::min() ;
 
    while ( count-- )
    {
        int number ;
        std::cin >> number ;
        if ( max1 < number )
        {
            max2 = max1 ;
            max1 = number ;
        } else
        {
            if ( max2 < number )
            {
                max2 = number ;
            }
        }
    }
    return std::make_pair ( max1 , max2 ) ;
}
 
 
 
 
int main()
{
    std::pair < int , int > maximum = get_max ( 10 ) ;
    std::cout << "max: " << maximum.first << " | " << maximum.second << std::endl ;
}
1
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
30.08.2015, 04:11  [ТС] 3
Цитата Сообщение от Croessmah Посмотреть сообщение
Как-то так?
Эмм, ну на самом деле, я думаю, что нет, т.к. я многого из вашего кода не понял, т.е. не пройдено такого.
Я нашел тему за 2013г с такой же задачей, там тоже ребята отвечали, но всё не то. Я понимаю, что у Вас другой уровень знаний, но мне бы решить задачу на своем уровне знаний, которую, кстати, я так решить и не могу.

Я скинул пример решенной задачи на основе своих знаний, полученных из раздела. И сейчас процитирую поставленную задачу из учебника:
"Используя подход предыдущего упражнения, найдите два наибольших значения из 10 чисел. (Замечание. Каждое число вы должны вводить только один раз)"

Собственно, я так полагаю, что можно еще добавить несколько переменных, если нужно, а вот всё остальное решать в подобном стиле. Если бы за один цикл можно было бы вводить, к примеру, два значения, то решаемо, а иначе я не понимаю..

Добавлено через 53 секунды
Но всё равно спасибо за как никак, но труд.

Добавлено через 1 минуту
Еще проходил тип bool(даже не проходил, этот тип просто упомянут был один раз), но абсолютно не применял на действии, поэтому делаю вывод, что вряд ли дали бы что-то подобное. (Видел решенную задачу, каким форумчанином, таким способом).

Кстати, да, задача из книги Дейтелов.
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
30.08.2015, 04:18 4
Лучший ответ Сообщение было отмечено kalonord как решение

Решение

Цитата Сообщение от kalonord Посмотреть сообщение
т.к. я многого из вашего кода не понял
ок. Давайте так:
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>
#include <climits>
 
int main()
{
    int max1 = INT_MIN ;
    int max2 = INT_MIN ;
 
    int count = 10 ;
    while ( count-- )
    {
        int number ;
        std::cin >> number ;
        if ( max1 < number )
        {
            max2 = max1 ;
            max1 = number ;
        } else
        {
            if ( max2 < number )
            {
                max2 = number ;
            }
        }
    }
    std::cout << "max: " << max1 << " | " << max2 << std::endl ;
}
1
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
30.08.2015, 04:25  [ТС] 5
Croessmah, один вопрос:
C++
1
2
int max1 = INT_MIN ;
        int max2 = INT_MIN ;
Чем это инициализированы переменные? Что это такое ?
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
30.08.2015, 04:30 6
Цитата Сообщение от kalonord Посмотреть сообщение
Что это такое ?
макрос из climits
Цитата Сообщение от kalonord Посмотреть сообщение
Чем это инициализированы переменные?
climits
INT_MIN - Minimum value for an object of type int
то есть в данном случае мы инициализируем переменные типа int минимальным значением, которое они могут принимать.
0
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
30.08.2015, 04:30  [ТС] 7
Как я понял, минимальное значение типа int ?
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
30.08.2015, 04:30 8
Цитата Сообщение от kalonord Посмотреть сообщение
Как я понял, минимальное значение типа int ?
в точку
1
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
30.08.2015, 04:58  [ТС] 9
Croessmah, ваш код некорректно работает без этой строчки
C++
1
max2 = max1;
Не могу понять, почему это строчка играет ключевое значение.
Т.е. max1 and max2 у нас имею какие-то одинаковые минимальные значения. Зачем присваивать одно и то же значение max1 -> max2 ? И главное, работает ведь..

Добавлено через 17 минут

Не по теме:

Всё раздел не могу закончить, эти задачи жутко тормозят. Печаль.

0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
30.08.2015, 05:14 10
Цитата Сообщение от kalonord Посмотреть сообщение
ваш код некорректно работает без этой строчки
ну она же там не просто так
Цитата Сообщение от kalonord Посмотреть сообщение
Не могу понять, почему это строчка играет ключевое значение.
совет: когда не понимаете что происходит, возьмите карандаш с листочком и распишите что происходит

В данном случае в max1 хранится максимальное найденное значение, а в max2 - второе по величине, значит, если нашли новое максимальное значение, то старое максимальное станет вторым по величине, поэтому его и пишем в max2.
Разберемся на примере. Пользователь вводит 3 9 4 8 (не будем брать 10 чисел, утомительно расписывать).


Алгоритм в цикле:
1) считываем очередное число в number
2) max1 < number. Если да, то идем в пункт 3, иначе идем в пункт 5
3) max2 = max1
4) max1 = number. Переходим в пункт 7.
5) max2 < number. Если да, то идем в пункт 6, иначе переходим в пункт 7.
6) max2 = number.
7) Переход к следующей итерации

Теперь по каждой итерации.
Итерация 1:
max1 и max2 имеют минимально возможное значения.
1) number = 3
2) INT_MIN < 3? Да, значит идем в пункт 3.
3) max2 = INT_MIN
4) max1 = 3
7) Переходим к следующей итерации.

Итерация 2:
max1 = 3
max2 = INT_MIN

1) number = 9
2) 3 < 9? Да, значит идем в пункт 3.
3) max2 = 3
4) max1 = 9
7) Переходим к следующей итерации.

Итерация 3:
max1 = 9
max2 = 3

1) number = 4
2) 9 < 4? Нет, значит идем в пункт 5.
5) 3 < 4. Да, значит идем в пункт 6
6) max2 = 4.
7) Переходим к следующей итерации.


Итерация 4:
max1 = 9
max2 = 4

1) number = 8
2) 9 < 8? Нет, значит идем в пункт 5.
5) 4 < 8. Да, значит идем в пункт 6
6) max2 = 8.
7) Переходим к следующей итерации.

Конец. В результате имеем
max1 = 9
max2 = 8

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от kalonord Посмотреть сообщение
Всё раздел не могу закончить, эти задачи жутко тормозят. Печаль.
они не тормозят, они позволяют освоить, привыкнуть, понять, подумать :) без практики далеко не уйдешь

1
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
30.08.2015, 05:23  [ТС] 11
Цитата Сообщение от Croessmah Посмотреть сообщение
совет: когда не понимаете что происходит, возьмите карандаш с листочком и распишите что происходит
В следующий раз попробую
Цитата Сообщение от Croessmah Посмотреть сообщение
Теперь по каждой итерации.
Я понял, большое спасибо. Просто я почему-то не смотрю наперёд, вижу, что зачем то присваиваем одно и то же значение, а про дальнейшую судьбы переменной даже не думаю.
Надеюсь, что со временем этот идиотизм с моей стороны пройдет.

Не по теме:

Кстати, у Вас случаем не лагает форум? Сейчас какие-то проблемы были, да и частенько по утрам такое происходит, мб тех. работы..

0
Croessmah
30.08.2015, 05:26
  #12

Не по теме:

Цитата Сообщение от kalonord Посмотреть сообщение
Кстати, у Вас случаем не лагает форум? Сейчас какие-то проблемы были, да и частенько по утрам такое происходит, мб тех. работы..
бывает. Не закончились в нашем мире еще поганцы, желающие всё у всех сломать и отобрать :)

0
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
30.08.2015, 05:28  [ТС] 13
Сейчас поймал себя на мысли, что это вполне всё логично и просто, но сам бы я вряд ли бы до такого додумался.
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
30.08.2015, 06:31 14
Цитата Сообщение от kalonord Посмотреть сообщение
что это вполне всё логично и просто
по мере накопления опыта и знаний, будет легче
1
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 12
12.12.2016, 13:44 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
#include <iostream>
using std::cin;
using std::cout;
 
class LargestNumber
{
public:
    void twoLargest()
    {
        int number;
        int largest1 = 0;
        int largest2 = 0;
 
        int count = 1;
 
        while(count<=10)
            {
            cout<<"Привет! Введи число: ";
            cin>>number;
 
            if(number>largest1)
            {
                largest2=largest1;
                largest1=number;
            }
            else
                {
                if (number>largest2)
                largest2=number;
                }
            count++;
            }
        cout<<"Largest1 = " << largest1 <<"\nLargest2 = " << largest2;
    }
};
 
int main()
{
    LargestNumber Numb;
    Numb.twoLargest();
    return 0;
 
}
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
12.12.2016, 13:55 16
LemonMuffin, что делать, если все числа будут отрицательными?
1
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 12
12.12.2016, 14:33 17
Вот это мой косяк) Можно вообще инициализировать переменные как double со значением -9999 9999 9999 9999.
Но иных способов в книге на данном этапе рассматривается(вернее даже упоминания нет о такой возможности), тем более как минимально-возможное значение.
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
12.12.2016, 14:40 18
LemonMuffin, тогда предлогаю ввести сначала два числа,
записать их в два максимальных,
а затем уже запрашивать и обрабатывать остальные.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 12
12.12.2016, 14:44 19
Можно, но не будет ли это неоправданным усложнением кода?
Но и идея классная)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2016, 14:44
Помогаю со студенческими работами здесь

Даны четыре разных числа. Найти среди них два наибольших
Задача: Даны четыре разных числа. Найти среди них два наибольших. С применением if. Помогите...

Даны четыре разных числа. Найти среди них два наибольших
Даны четыре разных числа. Найти среди них два наибольших. Чет я не понимаю как это все написать...

Найти два наибольших числа из всех введенных, при условии что цифры не повторяются
Вот сижу над очередной задачкой. Найти 2 наиболее высоких числа из 10 введенных, при условии что...

Найти два наименьших|наибольших из данных десяти элементов
2. Найти два наименьших|наибольших из данных десяти элементов. Помогите кто чем может.:cry:


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

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

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