11. Ciklas cikle | |||
Kartais kartojami veiksmai taip pat yra ciklai. Tokios konstrukcijos vadinamos ciklais cikle. Ciklas cikle užrašomas:
for i := m to n do
{išorinis ciklas}
begin sakinys1 sakinys2 for j := k to p do {vidinis ciklas} . . . while s < h do {vidinis ciklas} . . . end Kompiuteris, kiekvieną kartą atlikdamas išorinio ciklo sakinius, vidinius ciklus atlieka iš naujo. Tokiu būdu vidiniam ciklui for priklausantys sakiniai atliekami (n – m + 1)*(p – k + 1) kartą. Kai vidinis ciklas while, tai galimi įvairūs atvejai – viskas priklauso nuo sąlygos teisingumo. Pvz. 11.1Parašykime programą, kuri rastų sumą 1k + 2k + 3k + … + nk
program suma;
1 tikrinamasis darbas
var n, k, i, j : integer; d, sum : longint; begin writeln('Įveskite n ir k.'); read(n, k); sum := 0; for i := 1 to n do begin d := 1; for j := 1 to k do d := d * i; sum := sum + d end; writeln('sum = ', sum) end. Pvz. 11.2 Duotas natūraliųjų skaičių intervalas [m, n]. Parašykime programą, kuri rastų intervalo skaičių turintį daugiausia daliklių (į daliklių skaičių įskaitant 1 ir patį skaičių).
program skdal;
var m, n, i, j, d, ds, kd : integer; begin read(m, n); d := m; ds := 1; for i := m to n do begin kd := 1; for j := 2 to i do if i mod j = 0 then kd := kd + 1; if kd > ds then begin d := i; ds := kd end end; writeln('d = ', d) end. Pvz. 11.3 Parašykime programą, kuri suskaičiuotų kiek yra triženklių skaičių, kurių vidurinis skaitmuo lygus pirmojo ir trečiojo skaitmenų sumai.
program kieksk;
var s1, s2, s3, ks : integer; begin ks := 0; for s1 := 1 to 9 do for s2 := 0 to 9 do for s3 := 0 to 9 do if s2 = s1 + s3 then ks := ks + 1; writeln('ks = ', ks) end. Užduotys Nr. 1 Pavyzdyje 11.1 parašytą programą pertvarkykite programą, kad ji rastų sumą: a) 1n + 2n + 3n + … + nn b) 11 + 22 + 33 + … + nn Nr. 2Parašyta programa, kuri skaičiuoja kiek duotame intervale [m, n] yra skaičių, kurie dalijasi iš juos sudarančių skaitmenų sumos. Įrašykite vietoje tritaškių trūkstamas dalis. program kiekskd;
var m, n, ks, ss, sk, i : integer; begin writeln('Įveskite intervalo galus m ir n.'); read(...); ks := ... ; for i := ... to ... do begin sk := i; ss := ...; while sk > 0 do begin ss := ... + sk ... 10; sk := ... div ... end; if i mod ss = ... then ks := ... + ... end writeln('... = ',...) end. Nr.3 Pakeiskite Nr.2 programą, kad ji: a) atspausdintų tuos skaičius; b) atspausdintų tik lyginius iš tų skaičių; c) atspausdintų mažiausią iš tų skaičių; d) atspausdintų didžiausią iš tų skaičių. Nr. 4 Parašykite programą sumai rasti 1*2 + 2*3*4 + 3*4*5*6 + … + n*(n + 1)*… *2n. Nr. 5 Parašykite programą n-ženkliams skaičiams rasti, kurių pirmą skaitmenį perkėlus į
galą būtų gaunamas skaičiaus kartotinis. |
|||