找到奇数位置的最小正数

时间:2013-10-20 21:39:25

标签: arrays algorithm optimization pascal

我有数组编号生成器程序,我需要它来搜索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) 。并告诉哪一个包含最小的正可能值。但是,如果它没有任何打印,它没有这个数字。

我希望你真的明白我需要这个算法做什么。英语不是我的母语。谢谢你的帮助。

1 个答案:

答案 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.');