cmonlyy Ierakstīts Oktobris 25, 2014 Share Ierakstīts Oktobris 25, 2014 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 More sharing options...
Ilvazaurs Oktobris 26, 2014 Share Oktobris 26, 2014 Ieviess mainīgo d - diference, kas aprēķina ms-6 , ja ms>6; un 6-ms, ja ms<6Ja 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 More sharing options...
Borja Oktobris 26, 2014 Share Oktobris 26, 2014 Ieteiktu paarrakstiit bez label un goto.Tas kods vienkaarshi nav lasaams. 1 Link to comment Share on other sites More sharing options...
cmonlyy Oktobris 26, 2014 Author Share Oktobris 26, 2014 (labots) @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 Oktobris 26, 2014 - cmonlyy Link to comment Share on other sites More sharing options...
VIL Oktobris 26, 2014 Share Oktobris 26, 2014 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 More sharing options...
cmonlyy Oktobris 26, 2014 Author Share Oktobris 26, 2014 (labots) @@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 Oktobris 26, 2014 - cmonlyy Link to comment Share on other sites More sharing options...
VIL Oktobris 26, 2014 Share Oktobris 26, 2014 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 More sharing options...
Recommended Posts
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 kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!