Другие языки программирования и технологии

Как написать программу в паскале

Задание
Написать программу которая :
1.Описывает одномерный массив из 10 элементов
2.вводит значение элементов массива с клавиатуры
3.выводит на экран значение второго по величине элемента
4.если такого значения нет вывести No
программа должна осуществлять поиск за однократный проход по массиву.

Я могу написать программу которая проходится 2 раза по массиву но как написать такую чтобы она проходилась только один раз
begin
var a := ArrRandom(10,0,9);
a.Println;
var max_vals1, max_vals2:integer;
if a[0] > a[1] then begin
max_vals1 := a[0];
max_vals2 := a[1];
end else begin
max_vals1 := a[1];
max_vals2 := a[0];
end;
for var i := 2 to 9 do
if a[i] > max_vals1 then begin
max_vals2 := max_vals1;
max_vals1 := a[i];
end
else if a[i] > max_vals2 then max_vals2 := a[i];
writeln('max_vals1=',max_vals1,'; max_vals2=',max_vals2);
end.
Андрей Власенко
Андрей Власенко
13 080
Лучший ответ
Николай Каратаев спасибо осталось разобраться как это все работает.
Я только не могу понять для чего в строке : var a := ArrRandom(10,0,9); в скобках стоят именно числа 10,0,9
Что будет если поставить другие?
var min_vals : array [1..2] of integer;
data: array [1..10] of integer;
...
Здесь ввод
...
if data[1] < data[2] then begin
min_vals[1] := data[1];
min_vals[2] := data[2]
end else begin
min_vals[1] := data[2];
min_vals[2] := data[1]
end;
for i := 3 to 10 do begin
if data[i] < min_vals[1] then begin
min_vals[2] := min_vals[1];
min_vals[1] := data[i]
end else if data[i] < min_vals[2] then begin
min_vals[2] := data[i]
end;

В результате в min_vals[1] - минимальный, в min_vals[2] - следёющий по величине.
Но если в массиве есть два идентичных минимальных элемента, они оба окажутся в min_vals.
3 переменных
1я -- есть или нет (изначально ноль)
2я -- текущее значение
3я -- входное
и по ходу ввода во вторую отправлять меньшее текущего или текущее, если новое больше
и первой присваивать единичку если такое случилось
Kaxa Nacvlishvili
Kaxa Nacvlishvili
75 320
if a[i]>premax then
begin
a[i]:=premax;
if premax>max then max=premax;
end;
вроде в premax должен оказаться второй по величине элемент
[Alex Frontman Of Highway]
[Alex Frontman Of Highway]
13 084
Николай Каратаев сек щас попробую