Другие языки программирования и технологии
Pascal - Вывести три наибольших числа
Необходимо без использования массивов из n-го количества вывести три наибольших. Язык - Pascal.
Это как? Где ж они тогда хранятся? Или с экрана вводятся по одному?
Если последнее, то алгоритм такой: заводите 3 переменные max1, max2 и max2. Изначально приравниваете их нулю (или минимально возможному числу, если допускаются отрицательные числа) . Дальше каждое новое число сравниваете сначала с max1. Если оно больше max1, смещаете все максимумы вниз: max3:=max2; max2:=max1; и заменяете max1 на новое число. Соответственно, если оно меньше max1, но больше max2, заменяете max3 на max2 и присваиваете max2 новое значение, ну и, наконец, если число меньше max1 и max2, но больше max3, то просто заменяете max3 на новое. И так в цикле от одного до n. Потом просто выводите max1, max2 и max3.
Программу сами, надеюсь, напишете?
Если последнее, то алгоритм такой: заводите 3 переменные max1, max2 и max2. Изначально приравниваете их нулю (или минимально возможному числу, если допускаются отрицательные числа) . Дальше каждое новое число сравниваете сначала с max1. Если оно больше max1, смещаете все максимумы вниз: max3:=max2; max2:=max1; и заменяете max1 на новое число. Соответственно, если оно меньше max1, но больше max2, заменяете max3 на max2 и присваиваете max2 новое значение, ну и, наконец, если число меньше max1 и max2, но больше max3, то просто заменяете max3 на новое. И так в цикле от одного до n. Потом просто выводите max1, max2 и max3.
Программу сами, надеюсь, напишете?
Виталий Дидковский
Да. Вводятся с экрана. Не обязательно по одному.
var N, N1, N2, N3 : Integer;
begin
Write('Признак окончания ввода чисел: 0');
N1 := Low(Integer); N2 := N1; N3 := N2;
repeat
Write('N = '); ReadLn(N);
if N > N1 then begin N3 := N2; N2 := N1; N1 := N; end
else if N > N2 then begin N3 := N2; N2 := N; end
else if N > N3 then N3 := N;
until N = 0;
WriteLn('Наибольшие числа: ');
if N1 > Low(Integer) then WriteLn(N1);
if N2 > Low(Integer) then WriteLn(N2);
if N3 > Low(Integer) then WriteLn(N3);
end.
begin
Write('Признак окончания ввода чисел: 0');
N1 := Low(Integer); N2 := N1; N3 := N2;
repeat
Write('N = '); ReadLn(N);
if N > N1 then begin N3 := N2; N2 := N1; N1 := N; end
else if N > N2 then begin N3 := N2; N2 := N; end
else if N > N3 then N3 := N;
until N = 0;
WriteLn('Наибольшие числа: ');
if N1 > Low(Integer) then WriteLn(N1);
if N2 > Low(Integer) then WriteLn(N2);
if N3 > Low(Integer) then WriteLn(N3);
end.
яб писал в функции которая оправляет массив в самого себя пока не найдем элемент (тогда нам не страшны многоуровневые массивы) а в остальном уже другии описали
Похожие вопросы
- как решить через abc pascal задачу "Дано натуральное число n. Получить все простые делители этого числа"
- Pascal . Дан массив вещественных чисел. Найти сумму элементов, номера которых являются простыми числами
- PASCAL - Мне необходимо округлить число в большую сторону
- Как в Pascal найти суму числел числа!?
- Pascal: Дано 3-значное число N.Определить,являются ли числа,из которых оно состоит членами геометрической прогрессии
- Pascal. Дана строка, элементы - числа через пробел. Как отсечь числа, которые содержат '0'?
- Pascal. Дан натуральный отрезок чисел [A,B]. Найти те числа этого отрезка, которые являются степенью двойки.
- Помогите ришить задачи. На языке Pascal.Взорание спасибо большое !!!
- Дан линейный массив чисел N. N вводит пользователь. Вывести все простые числа массива.
- Вводится последовательность чисел, 0 – конец последовательности. Найти два наибольших числа (VB) прошу помощи