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

найти номер второго по величине элемента массива

Это не задача, а сплошная загадка.
Второй по величине элемент - это тот, который больше минимума или тот, который меньше максимума?
Числа в массиве целые или действительные?
И попробую угадать язык программирования, на котором вам нужно написать программу.
Программы на трёх различных языках, которые ищут номер наименьшего элемента, величина которого строго больше минимума, элементы массива - целые числа:

1)
<*+ MAIN *>
MODULE N65789922;
IMPORT InOut,STextIO,TimeConv,Random;
VAR n,i,min1,min2:INTEGER;
a:POINTER TO ARRAY OF INTEGER;
c:CHAR;
BEGIN
Random.InitSeed(TimeConv.millisecs());
n:=SHORT(ENTIER(Random.Uniform()*91)+10);
NEW(a, n);
InOut.WriteString("Заданный массив (элементов ");
InOut.WriteInt(n,1);
InOut.WriteString("):");
InOut.WriteLn();
min1:=-1;
FOR i:=0 TO LEN(a^)-1 DO
a^[ i ]:=SHORT(ENTIER(Random.Uniform()*199))-99;
InOut.WriteInt(a^[ i ],4);
IF (i=0) OR (a^[ i ] < a^[min1]) THEN
min2:=min1;
min1:=i
ELSIF (min2=-1) OR (a^[ i ] # a^[min1]) & (a^[ i ] < a^[min2]) THEN
min2:=i
END
END;
InOut.WriteLn();
InOut.WriteString("Номер второго по величине элемента: ");
InOut.WriteInt(min2+1,1);
STextIO.ReadChar(c);
a:=NIL
END N65789922.

2)
module N65789922;
import std.stdio, std.random;
int main(string[] argv)
{
int[] a;
int min1=-1,min2;
int n=uniform(10,101);
a.length=n;
writefln("Заданный массив (элементов %d):",n);
foreach(size_t i,ref int u;a)
{
u=uniform(-99,100);
writef("% 4d",u); //между % и 4d пробел убрать
if(!i || u < a[min1])
{
min2=min1;
min1=i;
}
else
if(min2==-1 || u!=a[min1] && u < a[min2])
min2=i;
}
writefln("\nНомер второго по величине элемента: %d",min2+1);
readln();
return 0;
}

3)
with Text_IO,Ada.Integer_Text_IO,Ada.Numerics.Discrete_Random;
procedure N65789922 is
subtype TRndN is integer range 10..100;
subtype TRndV is integer range -99..99;
package RndN is new Ada.Numerics.Discrete_Random(TRndN);
package RndV is new Ada.Numerics.Discrete_Random(TRndV);
use Text_IO,Ada.Integer_Text_IO,RndN,RndV;
gN:RndN.Generator;
n:TRndN;
begin
Reset(gN);
n:=Random(gN);
declare
a:array(1..n) of TRndV;
min1:integer:=0;
min2:integer;
gV:RndV.Generator;
c:character;
begin
Reset(gV);
Put_Line("Заданный массив (элементов " & Integer'Image(n) & "):");
for i in a'Range loop
a(i):=Random(gV);
Put(a(i),4);
if i=1 or else a(i) < a(min1) then
min2:=min1;
min1:=i;
elsif min2=0 or else (a(i) /= a(min1) and then a(i) < a(min2)) then
min2:=i;
end if;
end loop;
New_Line;
Put("Номер второго по величине элемента: " & Integer'Image(min2));
get_immediate(c);
end;
end N65789922;

P.S. Во всех трёх программах используются динамические массивы, а так как в этих языках есть автоматические сборщики мусора, то явное удаление массивов не требуется.
Сергей Латынцев
Сергей Латынцев
51 590
Лучший ответ
У меня простой был массив, я уже нашел вручную.
2миоко: зачод
тока школоту счас учат не новомодным языкам, а проверенным десятилетиями, веками и тысячелетиями брутальным программерским азбукам
да и второй по величине элемент (сдается мне) - это тот, который меньше максимума
И, говоришь массив динамический?

Вота на самых что ни на есть закаленных временем языках c динамическими тож массивами
BEGIN
print(("enigu kvanton da elementoj",new line));
INT n=read int;
printf(($"enigu "d" elementojn"$,n));
print(new line);
INT i, [1:n] INT tbl, INT imax, INT imx;
imax:=LWB tbl;
imx:=imax;
FOR i FROM LWB tbl TO UPB tbl
DO
tbl[ i]:=read int;
IF tbl[ i] >tbl[ imax] THEN
imax:=i
FI;
IF tbl[ i]< tbl[ imx] THEN
imx:=i
FI
OD;
FOR i FROM LWB tbl TO UPB tbl
DO
IF tbl[ i]< tbl[ imax] & tbl[ i] >tbl[ imx] THEN
imx:=i
FI
OD;
printf(($"numero de dua laŭ grando elemento tio "d$,imx))
END

и ищо одна
program duamax
implicit none
integer,allocatable::tbl(:)
integer i,n,max,min,imx
print *,'enigu kvanton da elementoj'
read *,n
allocate (tbl(n))
write(*,'("enigu ",i0," elementojn")') n
read *,(tbl(i),i=1,n)
max=maxval(tbl)
min=minval(tbl)
do i=1,n
if(tbl(i) .ne. max .and. tbl(i) .gt. min) then
imx=i
min=tbl(i)
endif
enddo
write(*,'("numero de dua laŭ grando elemento tio ",i0)') imx
read *
deallocate (tbl(n))
end program duamax
Пиши в личку
VG
Victor Galin
2 455

Похожие вопросы