Jump to content

Pascal, tuvākā vērtība


cmonlyy
 Share

Recommended Posts

Sveiki! Nespēju līdz galam tikt ar uzdevumu: Viendimensiju masīvā noteikt elementa vērtību un indeksu, kuram ir pāra indekss un vērtība tuvākā vērtībai 6 analizējamajā elementu kopā (pāra indeksi).

 

Pāra indeksus atradu, bet kā lai atrod tuvāko vērtību 6?

program project1;

const   num=20;                       { masiva izmers }
var
oper,                                 { izpildama programmas operacija }
                                      { oper=3333 beigt }
i,j :   integer;                      { darba imdeksi }
ms: array[1..num] of real;            { Masivs, kuru apstrada }
x, dx :real;
k : integer;                          { indeksi rezultatam }
Maxv, MaxTemp : real;                 { rezultats }
label  MENU, SOLVE, BEIGAS;
begin
MENU:
x:=0.27; dx:=0.345;
writeln;
writeln( 'Programma domata ciklu operatoru un masivu apgusanai ');
writeln( ' 3333 - beigt');
writeln( ' 1111 - rekinat ar standarta sakumvertibam ');
writeln( ' jebkurs cits skaitlis - rekinat ar pasa uzdotam sakumvertibam');
read( oper);
if oper=3333 then goto BEIGAS;
if oper=1111 then goto SOLVE;
{ masiva aizpildisana un aprekini }
writeln( 'ievadi divus realus skaitlus, tie noteiks masiva elem. vertibas');
read(x, dx);
SOLVE:
for i:=1 to num do
begin
    ms[i]:=10*sin(x);
    x:=x+dx;
end;          writeln;
for i:=1 to num do  {Uzgenereta masiva izvads}
begin
    write( '      "',i:2, '"', ms[i]:10:5)
end;
writeln;   writeln(' Lai turpinatu ievadi jebkuru skaitli ');
read(j);


{ Meklejam tuvako vertibu vertibai 6 ar para indeksu }
MaxTemp:=ms[2]; k:=2;
for i:=1 to num do
begin
    if(Maxv>MaxTemp) and (i mod 2=0) then
    begin
        Maxv:=ms[i];
        k:=i;
    end;
end;
writeln;
writeln('tuvakais skaitlis vertibai 6 ir ', ms[k]:10:5,' elements: ',k);
goto MENU;
BEIGAS:
end.

P.S. Sagatave no pasniedzēja, mana daļa sākas ar { Meklejam tuvako vertibu vertibai 6 ar para indeksu }.

 

Paldies!

Link to comment
Share on other sites

Ilvazaurs

Ieviess mainīgo d - diference, kas aprēķina ms-6 , ja ms>6;   un 6-ms, ja ms<6
Ja iegūtais i-tais d mazāks par iepriekšējo, attiecīgā ms ir meklētā vērtība un i tās indekss. Ja atradīs mazāku d, atkal no jauna piešķirs, ka šis ms tagad meklētā vērtība.

P.S. Lai meklētu ar pāra indeksiem, iesaku izmantot    

i:=2;

while(i<=20) do
un katra cikla beigās lietot i:=i+2
 
Lai veicas, Tev palikušas mazāk kā 15h līdz nodošanai :)
Link to comment
Share on other sites

@Ilvazaurs,

 

Ja iegūtais i-tais d mazāks par iepriekšējo, attiecīgā ms ir meklētā vērtība un i tās indekss. Ja atradīs mazāku d, atkal no jauna piešķirs, ka šis ms tagad meklētā vērtība.

  Kā pārbaudīt vai tas ir mazākais?

i:=2;
while (i<=20) do
begin
    if (ms[i]>6) then
    begin
        d:=ms[i]-6;
    end
    else
    begin
        d:=6-ms[i];
    end;
    i:=i+2;
end;
Ieteiktu paarrakstiit bez label un goto. Tas kods vienkaarshi nav lasaams.

Tā ir sagatave ar kuru jāstrāda, to pasniedzējs dod.

Labots - cmonlyy
Link to comment
Share on other sites

 

 

Kā pārbaudīt vai tas ir mazākais?

 

Vajag divus "dē".

Viens ir īstais "dē", kas satur jau atrasto labāko vērtību, bet otrs "dē" ir pagaidu "dē", kas satur sajā solī tikko aprēķināto starpību. \

Ja pagaidu "dē" ir mazāks (jebšu labāks) par īsto "dē", tad esam atraduši uzlabojumu.

Ja pagaidu "dē" nav mazāks, tad uzlabojumu neesam atraduši.

Link to comment
Share on other sites

@@VIL,

 

Vajag divus "dē". Viens ir īstais "dē", kas satur jau atrasto labāko vērtību, bet otrs "dē" ir pagaidu "dē", kas satur sajā solī tikko aprēķināto starpību. \ Ja pagaidu "dē" ir mazāks (jebšu labāks) par īsto "dē", tad esam atraduši uzlabojumu. Ja pagaidu "dē" nav mazāks, tad uzlabojumu neesam atraduši.

 

Varētu palūgt pielobot manu daļu, lai parādītu kā tam būtu jāizskatās? :)


Atradu risinājumu, paldies visiem, kas deva padomu! :)

Labots - cmonlyy
Link to comment
Share on other sites

 

var d,dTmp: real;


{ Meklejam tuvako vertibu vertibai 6 ar para indeksu }
MaxTemp:=ms[2]; k:=2;
d:=ABS(6-ms[2]);
for i:=4 to num do
  if i mod 2 =0 then
    begin
    dTmp:=ABS(6-ms[i]);
    if dTmp<d then
      begin
      d:=dTmp;
      k:=i;
      end; //if dTmp<d then
    end; //if i mod 2 =0 then
//Cikla beigās k satur meklēto indeksu, bet d satur terperatūru starpību.
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...