parengė itmm artūras Šakalys pamoka.pdf · parengė itmm artūras Šakalys kompiuteris nr.3....
TRANSCRIPT
Parengė ITMM Artūras Šakalys
29 pamoka (Kodo narstymas - hakingas)
For ciklas
Užduotys. Supraskite pateiktą uždavinį ir kodą (FreePascal) ir perrašykite jį C++ kalboje.
Uždavinį renkamės pagal sėdimos prie kompiuterio vietos numerį.
Kompiuteris Nr.1.
Užduotis. Parašykite programą, kuri apskaičiuotų skaičių sumą nuo 1/12 + 1/22 +
1/32 + … + 1/n2, kur n reikšmę nustatytų vartotojas.
Sprendimas
********************** program kompiuteris_pirmas;
var
n, i: word;
sum: real;
begin
write ('n = '); readln (n);
sum := 0;
for i := 1 to n do
sum := sum + 1/(i*i);
writeln (sum:6:5);
readln
end.
**********************
Rezultatas
Kompiuteris Nr.2.
Sprendimas
**********************
Užduotis. Rodyti Fibonačio skaičių seką, susidedančios iš N elementų.
Paaiškinimas (matematika)
Fibonačio skaičių seka - sveikųjų skaičių seka {Fn}, nusakoma taip: F0 = 0, F1 = 1, Fn+1 = Fn + Fn-1.
Seka prasideda šiais skaičiais: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233. Kiekvienas šios sekos
skaičius lygus dviejų prieš jį einančių skaičių sumai.
Parengė ITMM Artūras Šakalys
Paaiškinimas (kintamųjų)
n – elementų kiekis;
a, b –dviejų paskutinių elementų reikšmės;
c –atsarginis kintamasis;
i – skaitliukas.
***********************************
Sprendimas
program antras_kompiuteris;
var
a,b,c,i,n: integer;
begin
write('n = ');
readln(n);
a := 0;
write(a,' ');
b := 1;
write(b,' ');
for i:=3 to n do begin
write(a+b,' ');
c := b;
b := a + b;
a := c
end;
readln;
end.
Rezultatas
Parengė ITMM Artūras Šakalys
Kompiuteris Nr.3.
Užduotis. Parengti programą, kad rodytų natūralių skaičių faktorialą.
Faktorialo skaičius yra visų sveikųjų skaičių nuo 1 iki šio skaičiaus imtinai. Pavyzdžiui, iš 7
faktorialas yra keičiamas taip: 1 * 2 * 3 * 4 * 5 * 6 * 7
Po faktorialo dedamas šauktukas.
Su skaičiaus didėjimu didėja ir faktorialas. Taigi, jei 3! = 6, tai jau 10! = 3.628.800.
Natūralių skaičių daugiau nei 12 į Pascal programavimo kalba tiesiog neįmanoma
apskaičiuoti faktorialo.
Natūraliojo skaičiaus n faktorialu vadinama visų natūraliųjų skaičių nuo 1 iki n sandauga:
n! = 1 · 2 · 3 · … · n
Sutarta, kad skaičiaus 0 faktorialas lygus 1 (0! = 1).
Formaliai faktorialo funkciją galima apibrėžti taip:
Apytiksliai suskaičiuoti didelių skaičių faktorialą galima naudojant Stirlingo formulę.
7! = 1 * 2 * 3 * 4 * 5 * 6 * 7 = 5040
***
Sprendimas
***
program trecias_kompiuteris;
var
factorial: longint;
n, i: byte;
begin
write('n = '); readln(n);
factorial := 1;
for i:=2 to n do
factorial := factorial * i;
writeln('n! = ', factorial);
readln;
Parengė ITMM Artūras Šakalys
end.
****
Rezultatas
**********************
Kompiuteris Nr.4.
*********************
Sirakūzų hipotezės patikrinimas.
Paimame bet kokį natūralų skaičių. Jei jis lyginis – padaliname jį perpus, jei nelyginis – dauginame
iš triju, pridedame 1 ir daliname perpus. Pakartojame šiuos veiksmus su gautu skaičiumi. Hipotezės
tvirtinimas, kad nesvarbu kokį pasirinksite pirmą skaičių anksčiau ar vėliau gausime 1.
Užduotis. Patikrinkime šią hipotezę skaičių atkarpai nuo 20 iki 30.
Matematinis sprendimas. Cikle atliksime šiuos veiksmus žingsnių: jei jis yra lyginis, tada padalinti
iš dviejų, kitaip - dauginti iš 3, pridėti vieną ir padalinti iš 2 Šie veiksmai bus atlikti, tol kol skaičius
tampa lygus vienetui.
Sprendimas
program ketvirtas_kompiuteris;
var
n, i: word;
begin
for i:=20 to 30 do begin
n := i;
while n <> 1 do begin
if (n mod 2) = 0 then
n := n div 2
else
n := (3*n + 1) div 2;
write(' |',n,'|');
end;
writeln; writeln;
Parengė ITMM Artūras Šakalys
end;
readln;
end.
*****
Rezultatas
***********
Kompiuteris Nr. 5.
***********
Užduotis. Parengti programą, kuri spausdintų ASCII lentelę.
Paaiškinimas.
ASCII [ˈæski] (American Standard Code for Information Interchange, „Amerikietiškas informacijos
mainų koduotės standartas“) yra simbolių koduotė, pritaikyta anglų kalbos abėcėlei.
ASCII kodai naudojami tekstui kompiuteriuose, mobiliuosiuose telefonuose ir
kituose komunikacijos įrenginiuose įrašyti, saugoti ir atvaizduoti. Dauguma
dabartinių koduočių buvo sukurtos papildant ASCII, rečiau pakeičiant dalį simbolių.
Programa
program penktas_kompiuteris;
var
i: byte;
begin
for i := 0 to 255 do begin
if (i mod 5) = 0 then
writeln;
Parengė ITMM Artūras Šakalys
write (i:3,' - ', chr(i), '; ')
end;
readln
end.
**************
Rezultatas
***************
Kompiuteris Nr.6.
Užduotis. Parašykite programą, kuri suskaičiuotų skirtingų raidžių kiekį žodyje.
Sprendimas
program sestas_kompiuteris;
var s:string;
r:real;
i,j,n:integer;
begin
r:=0;
readln(s);
for i:=1 to length(s) do begin
n:=0;
Parengė ITMM Artūras Šakalys
for j:=1 to length(s) do begin
if s[i]=s[j] then inc(n);
end;
r:=r+1/n;
end;
writeln('Skirtingu raidziu zodyje suma = ', r:1:0);
Readln();
end.
******
Rezultatas
**********
Kompiuteris Nr.7.
Užduotis. Parengti programą, kuri suskaičiuotų teigiamų skaičių (elementų) sumą.
Programa
program septintas_kompiuteris;
var
i,n,x,s : integer;
begin
WriteLn('iveskite for ciklo skaiciu kieki');
Readln(n);
s := 0;
For i := 1 to n do
begin
WriteLn('iveskite skaiciu');
Readln(x);
if x >0 then
Parengė ITMM Artūras Šakalys
s := s + x;
end;
Writeln('suma >0 = ',s);
Readln;
end.
***
Kompiuteris Nr.8.
Užduotis. Parengti programą, kuri suskaičiuotų teigiamų skaičių (elementų) sandaugą.
program astuntas_kompiuteris;
var
i,n,x,s : integer;
begin
WriteLn('iveskite for ciklo skaiciu kieki');
Readln(n);
s := 1;
For i := 1 to n do
begin
WriteLn('iveskite skaiciu');
Readln(x);
if x >0 then
s := s * x;
Parengė ITMM Artūras Šakalys
end;
Writeln('sandauga >0 = ',s);
Readln;
end.
***
Kompiuteris Nr.9.
Užduotis. Nustatykite, kokius skaičius programa išvesk į ekraną.
Sprendimas
******
program astuntas_kompiuteris;
var
k, n : integer;
begin
for k:=1 to 2 do
for n:=4 to 5 do begin
write(k);
write(' ');
writeln(n);
Readln();
end;
end.
*****
Rezultatas
****
********************
Kompiuteris Nr.10.
Užduotis. Parengti laipsnio kėlimo lentelę, kurioje laipsnio skaičių įves vartotojas.
Parengė ITMM Artūras Šakalys
Paaiškinimas (matematika)
Bet kokio laipsnio ieškojimui naudojama ši formulė:
ab =exp(b*(In(a)))
Sprendimas
Programa
program laipsniai;
uses crt ;
var
i, size : integer ;
step : real ;
begin
clrscr ; {Ekrano isvalymas}
writeln('Programma laipsniui pakelti .'); { Del }
writeln('---------------------------') ; { Groziui }
write('Iveskite max. laipsni : ') ; readln(size);
for i:=1 to size do
begin
step := exp(i*(ln(2)));
writeln('2 v : ',i:2, step:10:0);
end;
readln; {kad programa neuzsidarytu}
end.
Parengė ITMM Artūras Šakalys
*******************
Rezultatas
*******************
Kompiuteris Nr.11.
**************
Užduotis.Parašyti programą, kuri ekrane rodytų ,,elektroninį laikrodį“, kuris dirba tik tik nurodytą
minučių laiką, arba vartotojas sustabdo rodymą nuspausdamas bet kurį klaviatūros klavišą.
***
Kaip spręsti šią užduotį?
Mums reiks dviejų ciklų minutėms ir sekundėms nurodyti. Pradžioje darome ciklą sekundėms, nuo 0 iki 60.
Kitas ciklas reikalingas minutėms nurodyti, nuo 0 kuri įves vartotojas, nurodant -1. Jei nebus -1 ciklas
skaičiuos viena minute daugiau.
***************
Programa
program laikrodis;
uses crt ;
var
i , sec , min : integer;
begin
write('Iveskite minuciu kieki : '); readln(min);
for i:=0 to min-1 do
begin
for sec := 0 to 60 do
begin
writeln(i,' : ',sec);
Delay(1000);
Parengė ITMM Artūras Šakalys
clrscr;
if KeyPressed then Halt ;
end;
end;
end.
***
Rezultatas
Kompiuteris Nr.12.
Užduotis. Rasti suma pirmų n nelyginių elementų su ciklu for, elementų skaičių įveda vartotojas
***
Programa
program suma;
uses crt ;
var
sum , i , count : integer ;
begin
clrscr ; {išvalo ekrana}
write('Enter the amount of numbers : '); readln(count);
sum := 0 ;
for i := 1 to count do
begin
if (i mod 2 <> 0) then
sum := sum + i ;
Parengė ITMM Artūras Šakalys
end;
writeln('Summa = ', sum); {isvedame suma . }
readln ; {kad langas nepradingtu .}
end.
***Rezultatas
Kompiuteris Nr.13.
Užduotis. Parašykite programą, kuri šešioliktainės sistemos skaičius verstų į dešimtainę sistemą.
Sprendimas
program antras;
var
hexa: string; {sesioliktainis skaicius}
n: byte; {jo ilgis}
ch: char; {simbolis}
digit: byte; {skaicius}
m: byte; {laipsnis 16}
decimal: integer; {desimtainis skaicius}
i: byte;
function pow16(m: byte):integer;
var i: byte;
begin
pow16 := 1;
for i := 1 to m do
pow16 := pow16 * 16;
end;
Parengė ITMM Artūras Šakalys
begin
write('Iveskite sesioliktaine sistema: ');
readln(hexa);
n := length(hexa);
decimal := 0;
m := n;
for i:=1 to n do begin
ch := hexa[i];
if ch in ['A'..'F'] then
case ch of
'A': digit := 10;
'B': digit := 11;
'C': digit := 12;
'D': digit := 13;
'E': digit := 14;
'F': digit := 15
end
else
digit := ord(ch) - ord('0');
m := m - 1;
decimal := decimal + digit * pow16(m);
end;
writeln('Decimal: ',decimal);
readln
Parengė ITMM Artūras Šakalys
end.
Rezultatas
Kompiuteris Nr.14.
Panaudota
http://acmp.ru/?main=tasks
http://pas1.ru/id-range
http://cyberlesson.ru/