我有数组编号生成器程序,我需要它来搜索Pascal中奇数位的最小正数。
这是我的计划:
Program UZD5_linx;
uses crt, Math;
var MasGen:array [1..20] of real;
i,id:integer;
x,sk,MinVP:real;
MAKE:text;
funk:string;
label SAKUMS,DZOB,REZ,BEIGAS;
begin
assign(MAKE, 'Gnerejums.txt');
rewrite(MAKE);
clrscr;
randomize;
SAKUMS:
writeln('Darbibas');
writeln('Ievadisana - Darbs');
writeln('Uzdevumu beigsana - Beigas');
writeln('Parbaude - Test');
read(funk);
if funk='Darbs' then goto DZOB; //main generetor
if funk='Beigas' then goto BEIGAS;//end
if funk='Test' then goto REZ;//The main algorithm
readln;
DZOB:
writeln('Ievadiet savu mainigo sin vertibu');//Read in the value
readln(x);
{skaitlu generacija}
for i:=1 to 20 do
MasGen[i]:=cos(random(20))+(random(10))*sin(x)-tan(random(30))-random(25)-cot(x);
for i:=1 to 20 do
begin
writeln('Nr= ',i,' ','Vertiba=',MasGen[i]:2:3);
writeln(MAKE,'Nr= ',i,' ','Vertiba=',MasGen[i]:2:3);
end;
readln;
writeln(MAKE);
goto SAKUMS;
REZ:
//Algorimhm here
goto SAKUMS; //Sakums = Start
BEIGAS:
close (MAKE);
end.
我需要在生成的数组之后测试并写出最小的正数sk[i]
,然后写出它在数组I中的位置,这是一个奇数位(如1,3,5,7,9,11,13,15,17,18
) 。并告诉哪一个包含最小的正可能值。但是,如果它没有任何打印,它没有这个数字。
我希望你真的明白我需要这个算法做什么。英语不是我的母语。谢谢你的帮助。
答案 0 :(得分:0)
重复直到循环从i = 1开始并且每个循环加2将使您能够定位奇数索引。
minIx变量控制是否找到正的最小值以及它具有哪个索引。
i := 1;
minIx := 0;
minVal := 0;
repeat
if (arr[i] > 0) then begin // Positive value
if (minIx = 0) or (arr[i] < minVal) then begin
minVal := arr[i];
minIx := i;
end;
end;
i:= i+2;
until i > 19;
if (minIx > 0) then
WriteLn('Min:',minVal,' Ix:',minIx)
else
WriteLn('No positive values in odd index positions.');