1.1.1.
program vidurkis3;
var a, b, c, vid: real;
begin
read(a);
read(b);
read(c);
vid := (a+b+c)/3;
writeln(vid: 8: 2)
end.
1.1.2. Paskalio kalbos sistemos terpėje esančiu dorokliu
renkami ir taisomi programų tekstai. Paskalio kalbos transliatorius
arba kompiliatorius išverčia programos tekstą iš Paskalio
kalbos į kompiuterio kalbą.
1.3.1. Taip.
1.3.2.
255 255
255 11
1.3.3. 256
1.5.1.
a(5)
varduose skliaustai nevartojami;
Lt.
varduose taškai nevartojami;
a'
varduose apostrofai nevartojami;
begin vardas negali
sutapti su baziniu žodžiu;
prekės kaina varduose
negali būti tarpų.
1.5.2. Yra 3 skirtingi vardai. Sutampa:
vid
VID Vid
Trik Plotas Trikplotas
1.5.3.
Sveikieji
Realieji
Simboliai Eilutės
skaičiai skaičiai
1998
1.25E4
'+'
'1.25'
0
125E2 ' ' '
'
'STALAS'
-56
1.25
'
'
'a+b'
0.0
'5'
'nulis'
' '
Simboliai gali būti traktuojami kaip vieno simbolio eilutės.
1.5.4.
12E-13
3E6
-1E-9
1.5.5. Visos eilutės skirtingos. Taigi, jų yra 9.
1.5.6.
Baziniai žodžiai: program, var, begin, end.
Standartiniai vardai: read, writeln.
Programuotojo sudaryti vardai: vidurkis, a, b,
vid.
1.6.1.
program pasveikinimas;
begin
writeln('Sveiki, visi')
end.
1.6.2. Komentarai gali būti įvairūs. Pateikiame vieną
galimų variantų.
var prad: real; { pradinė pinigų
suma }
proc: real;
{ metinių palūkanų procentas }
mn: integer; { indėlio
laikymo banke trukmė (mėn.) }
galut: real; {
galutinė suma su palūkanomis }
2.1.1. Jeigu prieskyros sakinyje būtų užrašyta konstanta n,
tai pataisius programą (kai reikia rašyti tikslesnius rezultatus),
susigadintų skaičiavimai.
2.2.1.
sveikojo: c, d, e.
realiojo: a, b, f.
2.2.2. a)2; b)1.
2.2.3. b, c, f, i.
2.2.4.
program GeomVidurkis;
var a, b, geom: real;
begin
read(a);
read(b);
geom := sqrt(a*b);
writeln(geom: 8: 2)
end.
2.2.5.
Lt := trunc(suma);
ct := round((suma-Lt)*100)
2.3.1.
22 33 22
2.3.2.
444 333 444
2.3.3. Š programa neturi prasmės, nes kompiuteriui liepiama
spausdinti kintamojo a reikšmę prieš tai negu ji buvo perskaityta
atliekant pirmąjį sakinį kintamojo reikšmė dar neapibrėžta.
2.4.1.
program centai;
var
suma,
{ pinigų suma }
mon:
integer; { monetų skaičius
}
begin
read(suma);
mon := suma div 50; suma := suma mod
50;
mon := mon + suma div 20; suma := suma mod
20;
mon := mon + suma div 10; suma := suma mod
10;
mon := mon + suma div 5; suma := suma mod 5;
mon := mon + suma div 2; suma := suma mod
2;
mon := mon + suma { mod 1 };
writeln(mon)
end.
2.4.2.
c := a;
a:= b;
b:= c;
2.4.3. a)
program SkSuma3;
var
a,
{ triženklis skaičius }
sum:
integer;
{ ir jo skaitmenų suma }
begin
read(a);
sum := a div 100 + a mod 100 div
10 + a mod 10;
writeln(sum)
end.
b)
program Keitimas3;
var
a,
{ triženklis skaičius }
atv:
integer;
{ perrašytas atbulai }
begin
read(a);
atv := a mod 10 * 100 +
a mod 100 div 10 * 10 +
a div 100;
writeln(atv)
end.
2.5.1.
program TrysBylos;
var
prad,
{ rezultatų byla }
pirma, antra:
text; { pradinių duomenų
bylos }
x, y:
integer;
{ perskaityti skaičiai }
begin
assign(prad, 'A:\SKAIČIAI.TXT'); rewrite(prad);
assign(pirma, 'C:\DUOMENYS\PIRMA.TXT'); reset(pirma);
assign(antra, 'C:\DUOMENYS\ANTRA.TXT'); reset(antra);
read(pirma, x); writeln(prad, x);
read(antra, x, y); writeln(prad, x, y:10);
end.
2.5.2.
program TiesLygtis;
var a,
b,
{ lygties koeficientai }
x:
real;
{ lygties šaknis }
byla:
text;
{ pradinių duomenų byla }
begin
assign(byla, 'C:\PRAD.XXX'); reset(byla);
read(byla, a, b);
x := b/a;
writeln(x)
end.
2.6.1. Ten pat, kur ir Paskalio programa.
2.6.2.
program laikas;
var
p,
{ parų skaičius }
h,
{ valandų skaičius }
min:
integer; {
minučių skaičius }
begin
assign(input, 'DUOM.TXT'); reset(input);
assign(output, 'REZ.TXT'); rewrite(output);
read(p);
h := p*24; write(h: 4);
min := h*60; writeln(min: 6)
end.
3.1.1.
a ir b: sveikųjų skaičių tipo kintamajam negalima priskirti
loginės reikšmės;
e ir d: loginio tipo kintamajam neleidžiama priskirti skaičių
reikšmės;
e: negalima lyginti sveikųjų skaičių su loginėmis reikšmėmis;
f ir g: aritmetinės operacijos su loginėmis reikšmėmis
neatliekamos;
h: sveikųjų skaičių tipo kintamajam neleistina priskirti loginės
reikšmės.
3.1.2.
TRUE
FALSE
TRUE
3.1.3. Jeigu kintamieji a ir x yra tokių duomenų tipų,
kurių reikšmes galima lyginti (pvz., abi reikšmės skaičiai, abi
simboliai ir pan.), o kintamasis b yra loginio tipo, tai dviguba
nelygybė virsta taisyklingu Paskalio reiškiniu, tik ji nebeturi įprastos
matematinės skaičių intervalo prasmės.
3.1.4.
a |
b |
a<b |
a<=b |
a=b |
a<>b |
a>b |
a >=b |
false |
false |
false |
true |
true |
false |
false |
true |
false |
true |
true |
true |
false |
true |
false |
false |
true |
false |
false |
false |
false |
true |
true |
true |
true |
true |
false |
true |
true |
false |
false |
true |
3.1.5. a) true; b) false; c) true; d) true; e) true;
f) false; g) true; h) false; i) true; k) false; l) true.
3.1.6.
a) rez := (a = b) and (b = c);
b) rez := (a <> b) and (b <> c) and (a
<> c);
c) rez := (a = b) or (b = c) or (a = c);
d) rez := (a mod 2 = 0) and
(b mod 2 = 0) and
(c mod 2 = 0);
e) rez := (a > 0) and (b > 0) and (c > 0) and
(a <= 100) and (b <= 100) and (c <=
100).
3.1.7.
a) (a < b) and (b < c) and (c < d)
b) (a <= b) and (b <= c) and (c <= d)
3.1.8.
a)(a < b+c) and (b < a+c) and (c < a+b);
b)(a < b+c) and (b < a+c) and (c < a+b) and
((a = b) or (b = c) or (a = c));
c) (a = b) and (b = c).
3.1.9.
sqrt(sqr(cx-tx) + sqr(cy-ty)) < r
3.1.10.
a) a and not b and c and not
d or
not a and b and not c and d
b) a and b or c and d
c) not a and not b and not c
and not d or
not a and not d or
not b or not d
3.1.11. a and (b or d)or
c and (b or d)
3.1.12.
(m mod 400 = 0) or (m mod 100 <> 0) and
(m mod 4 = 0)
3.3.1. a =4 , b = 8
3.3.2. a = 10, b = 5 arba
a = 5, b = 10.
3.3.3. Programa teisinga ir ji duos tą patį rezultatą,
kaip ir programa minimumas.
3.3.4.
if a mod 2 = 0 then f := a+b
else f := a*b
3.3.5. 4.
3.3.6.
program olimpiadanra;
var metai,
nr:
integer;
{ olimpiados eilės numeris }
begin
read(metai);
write(metai: 4, ' metai yra ');
if (metai >= 1896) and (metai mod
4 = 0)
then writeln('olimpiniai')
else writeln('neolimpiniai')
end.
3.3.7. Jeigu rašymo sakiniuose nebūtų nurodyta tarpų, tai
tarp rašomų žodžių bei skaičių taip pat nebūtų tarpų ir
jie susilietų. Būtų rašoma, pavyzdžiui, taip:
Skaičius12345nedalusiš7
3.3.8. Perpratus apgaulingą uždavinio formuluotę matyti,
kad tereikia pakeisti skaičiaus ženklą priešingu.
program LabaiPaprasta;
var x: integer;
begin
x := -x;
writeln(x)
end.
3.4.1. Taip, programos minimumas ir mini ekvivalenčios,
t.y., visada duoda tą patį rezultatą.
3.4.2.
a) if a <> b then if a < b then
b := b - a
else a := a - b;
if a < b then b := b - a
else if a > b then a := a - b
b) if a < b then a := a + 1
else if a > b then b := b + 1
c) if a < b then b := b 1
else if a > b then a := a 1
3.4.3. a) 1 2 3 4
b) 4 3 1 2
Kai a = b, tai neatliekama nė viena sąlyginio
sakinio šaka, neįvedami kiti du pradiniai duomenys, kintamųjų c
ir d reikšmės lieka neapibrėžtos.
3.4.4.
if a > b then begin c := 1; d := 2 end
else
begin c := 3; d := 4 end
3.4.5. Taip
3.4.6. Ne visada. Kai a. = 5, rezultatai skiriasi: a) c
= 0, b) c = 2.
3.4.7.
program perdaug;
var a, b: integer;
begin
read(a, b);
if a > 10 then b := b - 5;
if a > 5 then begin
a := 5;
b := b - 5
end;
writeln(a, b: 6)
end.
3.4.8. a 0,
b 0, c
10.
3.4.9.
a) if (a > b) and (b < c) then a :=
a + 1;
b) if not log then a := a + 1;
3.4.10.
program dalus7;
var x: integer;
begin
read(x);
write('Skaičius ', x, ' ');
if x mod 7 <> 0
then write('ne');
writeln('dalus iš 7')
end.
3.6.1. a) 5; b) 6.
3.6.2. 2 kartus, a = 3, b = 5, s = 8.
3.6.3. a = 4, b = 2. Ciklui priklauso tik
vienas sakinys, esantis po jo antraštės. Sakinys b := b
+ 1 ciklui nepriklauso ir atliekamas tik vieną kartą. Kad programa
būtų aiškesnė ir neklaidintų skaitytojo, šį sakinį reikėtų
rašyti naujoje eilutėje ir lygiuoti su ciklo antraštės pradžia:
while a <= 3 do
a := a+1;
b := b+1
3.6.4
program minimumas;
var prad: text;
sk,
{ perskaitytas skaičius }
min:
integer;
{ mažiausias skaičius tarp jau perskaitytų }
skbyla:
text;
{ skaičių byla }
begin
assign(skbyla, 'SKAIČIAI.TEK'); reset(skbyla);
min :=
maxint;
{ tikrai nemažesnis už bet kurį skaičių }
while not eof(skbyla) do
begin
read(skbyla,
sk);
if
sk <
min
{ rastas skaičius, mažesnis už min }
then min := sk
end;
writeln(min)
end.
3.7.1. a ir c.
3.7.2. Ciklo sakinys, prasidedantis žodžiu while
valdo vieno sakinio kartojimą, o ciklo sakinys,
prasidedantis žodžiu repeat valdo sakinių sekos
kartojimą.
3.8.1.
program log1;
const epsilon =
1E-6;
{ liekamasis narys }
var k : integer;
ex, narys: real;
begin
ex := 0.0;
narys := 1.0;
k := 1;
while narys >= epsilon do
begin
ex := ex + narys;
narys := narys*ex/k;
k := k + 1
end;
writeln(ex)
end.
3.8.2.
program pipi;
const epsilon =
1E-10;
{ liekamasis narys }
var k : integer;
pi, narys: real;
begin
pi := 0.0;
narys := 1.0;
k := 1;
while abs(narys) >= epsilon do
begin
pi := pi + narys;
if narys < 0 then narys := 1/k
else narys := -1/k;
k := k + 2
end;
writeln(pi)
end.
4.1.1. a) bevardis; d) false; f) Liūtas; g) false,
kiti netaisyklingi.
4.1.2.
{ 3, 4, 5 } tipų vardų (asmuo, giminė)
negalima vartoti prieskyros sakiniuose;
{ 7 }
abu lyginimo operacijos operandai turi būti to paties tipo;
{ 10 }
funkcijos pred parametras negali būti pirmoji tipo reikšmė.
4.1.3.
if (a = b) and (b = c) and(c = d) then
forma := kv
else if (a = b) and
(c = d) or
(a = c) and (b = d) or
(a = d) and (c = b) then forma := st
else forma := ne
4.1.4.
if a =
sekm
{ sekmadienis paskutinė diena }
then gretimos := b = šešt
else if a =
pirm
{ pirmadienis pirmoji diena }
then gretimos := b = antr
else gretimos := (b = pred(a) or b = succ(a);
4.2.1. Visada teisingi: 3, 4;
visada neteisingi 5,6;
ne visada teisingi: 1, 2.
4.2.2.
var x1: -9..15;
x2: -15..9;
x3: -10..10;
x4: -5..-1;
x5: -50..50;
x6: -58..66;
x7: -28..40;
4.3.1.
program mėnuo;
var mėnnr: integer;
begin
read(mėnnr);
case mėnnr of
1: write('sausis'); 2:
write('vasaris');
3: write('kovas'); 4:
write('balandis');
5: write('gegužė'); 6: write('birželis');
7: write('liepa'); 8: write('rugpjūtis');
9: write('rugsėjis'); 10:
write('spalis');
11: write('lapkritis'); 12:
write('gruodis')
end;
writeln
end.
4.3.2.
if log then b := b+1
else a := a+1
4.3.3.
program dienos;
var metai, mėnuo, diena: integer;
begin
read(metai, mėnuo);
case mėnuo of
1, 3, 5, 7, 8, 10, 12: diena:=
31;
4, 6, 9, 11: diena:= 30;
2: if (metai mod 400
= 0)
or ((metai mod 100 <> 0) and (metai mod
4 = 0))
then diena := 29
else diena := 28
end;
writeln(diena)
end.
4.4.1. a) 11; b) 0; c) 3; d) 1; e) 11; f) 2a+1; g) 11; h) 0.
4.4.2. 0 1 2 3 4 5
4.4.3.
program kvadratnelyg;
var j, suma: integer;
begin
suma := 0;
for j := 10 to 99 do
if j div 2
<> 0 then suma := suma + j*j;
writeln(suma)
end.
4.4.4.
program GeomProgresija;
var
a,
{ pirmasis narys }
q,
{ vardiklis }
k: integer;
begin
read(a, q);
write(a);
for k := 2 to 10 do
begin
a := a * q;
write(a)
end
end.
4.4.5.
program AritmProgresija;
var
a,
{ pirmasis progresijos narys }
d,
{ skirtumas }
n,
{ pirmasis sumuojamas narys }
k: integer;
begin
read(a, d, n);
a := a + d*(n - 1);
write(a);
for k := 2 to 10 do
begin
a := a + d;
write(a: 5)
end;
writeln
end.
4.4.6.
a) n=5, m=2;
b) n=10; m=1;
c) n=10; m=0;
d) n=1; m=12;
n=2; m=6;
n=3; m=4;
n=4; m=3;
n=6; m=2;
n=12; m=1;
e) n=1; m=13;
f) tokių reikšmių nėra.
4.4.7. 10 kartų. Reikšmės reiškinių, esančių ciklo for
antraštėje, apskaičiuojamos vieną kartą, prieš atliekant ciklą.
Todėl tolesni jų keitimai nebeturi įtakos ciklo kartojimų skaičiui.
4.4.8. Ne.
4.4.9. 1) Ciklo kintamojo reikšmės negalima keisti ciklo
viduje (sakinys k := k+1); 2) Ciklo kintamojo reikšmė neapibrėžta
baigus ciklą (sakinys writeln(k)).
4.4.10. Programoje pirma yra dvi klaidos: 1) panaudota
neapibrėžta kintamojo k reikšmė ir 2) kintamojo k reikšmė
atliekant ciklą paskutinį kartą viršija jo apraše nurodytą
atkarpos tipo rėžį.
4.4.11. 1) Ne visi transliatoriai (tarp jų ir Turbo
Paskalis) tikrina, ar keičiama ciklo kintamojo reikšmė cikle. 2)
Tai, kad ciklo kintamojo reikšmė neapibrėžta, dar nereiškia,
kad jis neturi jokios reikšmės. Jis gali turėti reikšmę, tiktai
Paskalio kalba nenustato kokia ta reikšmė turi būti. Ta pati
programa, sutransliuota kitu transliatoriumi, gali priskirti kitą
reikšmę.
4.5.1.
program dalikliai3;
var
n,
{ duotas skaičius }
dal:
integer;
{ kandidatas į duoto skaičiaus daliklius }
begin
read(n);
dal := 1;
while dal*dal <= n do
begin
if n mod
dal = 0
then begin
write(dal, ' ');
if n div dal <> dal
then writeln(' ', n div dal)
else writeln
end;
end;
dal := dal + 1
end.
Į vieną eilutę rašomi du skaičiai: daugiklis ir už jį
didesnis jo porininkas. Kadangi vieneto porininkas yra n,
tai nebereikia programos pabaigoje spausdinti n. Dar vienas sąlyginis
sakinys reikalingas tam, kad būtų išvengta dviejų vienodų
daliklių rašymo, kai daliklis lygus savo porininkui.
4.5.2.
program
daugikliai;
{ pirminiai }
var
n,
{ duotas skaičius }
d:
integer;
{ kandidatas į duoto skaičiaus daugiklius }
begin
read(n);
d := 2;
while d >= n do
begin
while n
mod d = 0 do
begin
writeln(d);
n := n div d
end;
d := d
+ 1
end
end.
4.5.3.
program dalus235;
const žingsnis = 2*3*5;
var k: 1..10;
sk: integer;
begin
sk := 0;
for k := 1 to 10 do
begin
sk := sk + žingsnis;
writeln(sk)
end
end.
4.6.1. Kokie bus aritmetinių operacijų su realiaisiais skaičiais
rezultatai, tiksliai pasakyti negalima. Kompiuteris, kuriame
realieji skaičiai vaizduojami taip, kaip aprašyta šiame
skyrelyje, turėtų pateikti tokius (apytikslius) rezultatus:
7.00000E-05
7.54321E-05
4.6.2. d ir g.
5.1.1. Ne. Pavyzdžiui, kai n = -5, tai pagal pirmąją
formuluotę turi būti sumuojami skaičiai -4, -2, o pagal antrąją
-6, -4, -2.
5.2.2. Nepasakyta, kaip turi būti pateikiamas rezultatas.
Formuluotę būtų galima papildyti šitaip: jeigu yra bent
vienas nulis, spausdinti žodį TAIP, priešingu atveju NE.
5.4.1. Kai a = 0, pagal pirmąjį sakinį bus
atliekamas veiksmas b := 10, pagal antrąjį b := 5
5.4.2.
a) a 15;
b) (a = 0) or (a = 1).
5.4.3.
a) ir b) a 10.
5.4.4.
a) k > 0;
b) k 0;
c) (k 0) and
(k mod 2 = 0).
5.8.1.
program simboliai;
var a, i, s: integer;
begin
read(a);
s := 0;
for i := 1 to a do
begin
s :=
s+i*i*(i+1)
end;
writeln(s)
end.
5.8.2.
5
program tvarka;
var i, s: integer;
begin
s := 1;
i := 10;
while i mod 7 = 0 do
i := i - 1; s := s
+ i*i;
if s > 25
then if s = 99
then
s := s+1
else
s := s div i - 2
else s := s - 1;
writeln(s);
end.
5
5.9.1.
program NatSuma;
var n, suma: integer;
begin
read(n);
suma := (n*n + n) div 2;
writeln(suma)
end.
6.2.1. d) ir f) faktinių parametrų skaičius nelygus
formaliųjų parametrų skaičiui;
e) faktinių parametrų tipas nesutampa su formaliųjų parametrų
tipu.
6.2.2.
function min(a, b: integer): integer;
begin
if a <= b then min := a
else min := b
end;
6.2.3.
function fakt(n: integer): integer;
var f, k: integer;
begin
f := 1;
for k := 1 to n do
f := f * k;
fakt := f
end;
6.2.4. write(max4(a mod 10, b mod 10, c mod
10, d mod 10))
6.2.5.
function sksuma(n: integer): integer;
var suma: integer;
begin
suma := 0;
while n > 0 do
begin
suma := suma
+ n mod 10;
n := n div
10
end;
sksuma := suma
end;
6.2.6.
function progresija(a, b, c: integer): boolean;
begin.
progresija := b-a = c-b
end;
6.2.7.
function tūkst (n: integer);
const priedas =
500;
{ apvalinimo konstanta }
begin
if n > 0 then n := n + priedas
else n := n - priedas;
tūkst := n div 1000
end;
6.3.1. Taip.
6.3.2. a) jeigu viena data yra prieš kalendoriaus reformą,
o kita po jos, tai iš gauto dienų skaičiaus atimti 10 (tiek
dienų dingo keičiant kalendorių).
b) jeigu būtų į programą įjungta funkcija, tikrinanti, ar
teisingi pradiniai duomenys, tai reikėtų prie neegzistuojančių
datų priskirti datas nuo 1582 m. spalio 5 d. iki tų pat metų
spalio 14 d.
6.3.3.
function ArDataTeisinga (m, mėn, d: integer): boolean;
var mp: 28..31;
{ paskutinė mėnesio diena }
function kel (m : integer): boolean;
begin
kel := (m mod 400 = 0) or
(m mod 100 <> 0) and
(m mod 4 = 0)
end;
begin
case
mėn of
1, 3, 5, 7, 8, 10, 12: mp := 31;
2: if kel(m) then mp := 29
else mp := 28;
4, 6, 9, 11: mp := 30
end;
ArDataTeisinga := (m >= 1563) and (m <= 3000) and
mėn in [1..12] and
d in [1..mp]
end;
6.4.1. a) ir b) faktinių parametrų skaičius turi būti
lygus formalių jų parametrų skaičiui; c) b = 30; d) b = 20; e) b
= 14; f) b = 22; g) ir h) formalųjį parametrą kintamąjį
galima keisti tik kintamuoju (ne konstanta ir ne reiškiniu); i) a =
50; k) formaliųjų ir juos atitinkančių faktinių parametrų
tipai turi sutapti.
6.4.2.
kvkub(m-1, a, b);
kvkub(n, c, d);
x := c-a;
y := d-b
6.4.3.
procedure trikampis (a, b, c: integer;
var stat, lyg: boolean);
begin
stat := a*a + b*b = c*c;
lyg := (a = b) or (b = c)
end;
6.5.1.
25 30
4 0
6.5.2. Pirmasis parametras x apvalinamas 10y
tikslumu.
a) 2000; b) 0; c) 1500.
6.5.3.
procedure laipsnis (var p: integer; n: integer);
{ p keliamas laipsniu n }
var pn, i: integer;
begin
pn := 1;
for i := 1 to n do
pn := pn * p;
p := pn
end;
6.5.4.
procedure sek (var h, min, s: integer);
begin
if
s < 59 then s := s+1
else begin
s := 0;
if min < 59 then min := min+1
else begin
min := 0;
if h < 12 then h := h+1
else h := 1
end
end
end;
Kitas variantas
procedure sekundė (var h, min, s: integer);
begin
s := s + 1;
min := min + s div 60;
s := s mod 60;
h := h + min div 60;
min := min mod 60;
if h = 13 then h := 1
end;
6.5.5.
2 2 2
1 1 2
3 3 2
6.6.1.
function vid (a, b: real): real;
begin
vid := (a+b)/2
end;
6.6.2.
function pinigai (prad, proc: real; mn: integer): real;
begin
pinigai := prad + prad*(proc/100*mn/12)
end;
6.6.3.
procedure LtCt (prad, proc: real; mn: integer;
var Lt, ct: integer);
var suma: real;
{ galutinė suma (su palūkanomis) }
begin
suma := prad + prad*(proc/100*mn/12);
Lt := trunc(suma);
ct := round((suma-Lt)*100)
end;
6.6.4.
type forma: (kv, st, ne);
{ kv kvadratas (tuo pačiu ir stačiakampis) }
{ st stačiakampis bet ne kvadratas }
{ ne ne stačiakampis }
function kvstat (a, b, c, d: real): forma;
begin
if
(a = b) and (b = c) and(c = d) then
forma := kv
else if (a = b) and (c = d) or
(a = c) and (b = d) or
(a = d) and (c = b) then forma := st
else forma := ne
end;
7.1.1
a) record x, y: real end;
b) record a, b, c: real end;
7.1.2 a)
function lygu (a, b: laikas): boolean;
begin
lygu := (a.p = b.p) and
(a.h = b.h) and
(a.min = b.min) and
(a.s = b.s) and
end;
b)
function trumpesnis (a, b: laikas): boolean;
begin
trumpesnis := a.s + 60*(a.min + 60*(a.h + 24*a.p))
< b.s + 60*(b.min + 60*(b.h + 24*b.p))
end;
c)
procedure suma(a, b: laikas; var c: laikas);
var s: integer;
begin
s := a.s + b.s +
60*(a.min + b.min + 60*(a.h + b.h + 24*(a.p + b.p));
c.s := s mod 60;
s := s div 60;
c. min := s mod 60;
s := s div 60;
c.h := s mod 24;
c.p := s div 24
end;
Kitas variantas
procedure suma(a, b :laikas; var c: laikas);
var s: integer;
p: 0..1;
begin
s := a.s + b.s;
c.s := s mod 60; p := s div 60;
s := a.min + b.min + p;
c. min := s mod 60; p := s div 60;
s := a.h + b.h +p;
c.h := s mod 24; p := s div 24
c.p := a.p + b.p + p
end;
d)
function paros (a: laikas); real;
begin
paros := ((a.s/60 + a.min)/60 + a.h)/24 + p
end;
7.1.3.
type kampas = record
laipsn: 0..maxint;
min, s: 0..59
end;
function radianai (k: kampas): real;
const pi = 3.1415926536;
begin
radianai := ((k.s/60 + k.min)/60 + k.laipsn)/360*2*pi
end;
7.1.4.
type matas = record
jardas: 0..maxint;
pėda: 0..2;
colis: 0..11
end;
procedure sudėti (a, b: matas; var c: matas);
var x: integer;
begin
x := a.colis + b.colis +
12*(a.pėda + b.pėda + 3*(a.jardas + b.jardas));
c.colis := x mod 12;
x := x div 12;
c.pėda := x mod 3;
c.jardas := x div 3
end;
function metrai (a: matas): real;
begin
metrai := (((a.jardas * 3) +
a.pėda) * 12 + a.colis)*25.4/1000
end;
7.2.1.
record
n: 3..maxint; { kampų skaičius }
a: real { kraštinės ilgis }
end;
7.2.2.
function plotas (t: trikampis): real;
var atk: atkarpa;
a, b, c, { kraštinių ilgiai }
p: real; { pusė perimetro }
begin
atk.a := t.a; atk.b := t.b;
a := ilgis(atk);
atk.a := t.b; atk.b := t.c;
b := ilgis(atk);
atk.a := t.c; atk.b := t.a;
c := ilgis(atk);
p := (a + b + c)/2;
plotas := sqrt(p*(p-a)*(p-b)*(p-c)
end;
7.3.1.
type temp = array[1..12] of
record
vid, min, max: real
end
7.3.2. a)
procedure kalendorius(mėn: kalend);
var sav: savnr;
sd: savd;
begin
for
sd := pirm to sekm do
begin
for sav := 1 to 6 do
if mėn[sav, sd] <> 0
then write(mėn[sav, sd]: 3)
else write(' ');
writeln
end
end;
b)
procedure kalendorius (mėn: kalend);
var sav: savnr;
sd: savd;
begin
for
sav := 1 to 6 do
begin
for sd := pirm to sekm do
if mėn[sav, sd] <> 0
then write(mėn[sav, sd]: 3)
else write(' ');
writeln
end
end
7.3.3. Vidiniame cikle operaciją < pakeisti operacija
>.
7.4.1. a ir c
7.5.1.
type spalva = (balta, žalia, raudona, oranžinė, mėlyna);
siena = array [1..3] of
array [1..3] of spalva;
šonas = (kairė, dešinė, priekis, užpakalis, viršus, apačia);
kubas = array [šonas] of siena
7.5.2.
function Rubikas(x: kubas): boolean;
var spal: array [spalva] of 0..54;
sp: spalva;
š: šonas;
i, j: 1..3;
b: boolean;
begin
for
sp := balta to mėlyna do
spa[sp] := 0;
for š := kairė to apačia do
for
i := 1 to 3 do
for j := 1 to 3 do
begin
sp := kubas[š][i][j];
spal[sp] := spal[sp] + 1
end;
b := true;
for sp := balta to mėlyna do
b := b and (spal[sp] = 9);
Rubikas := b
end;
7.6.1. d.
7.6.2. a=b, c=d.
7.6.3.
b) abu operandai (ir antrasis!) turi būti aibės;
c) operacijos in pirmasis operandas turi būti aibės
elemento tipo;
e) neteisinga antrojo operando aibė: antrasis atkarpos rėžis
turi būti nedidesnis už pirmąjį.
7.6.4.
program skirtingi;
var byla: text; { skaičių byla }
skirtingi: boolean;
{ ar visi perskaityti skaičiai skirtingi }
sk: integer; { perskaitytas skaičius }
esami: set of 0..99;
{ perskaitytų skaičių aibė }
begin
assign(byla, 'SK.TEK'); reset(byla);
skirtingi := true;
while not eof(byla) do
begin
read(byla, sk);
if sk in [0..99]
then
begin
if
sk in esami then skirtingi := false;
esami := esami + [sk]
end
end;
write('Byloje SK.TEK ');
if not skirtingi then write('ne');
writeln('visi skaičiai iš [0; 99] yra skirtingi')
end.
8.1.1.
function laip (n: integer): integer;
begin
if
n = 0 then laip := 1
else laip := laip(n - 1) * 2
end;
8.1.2. a) 2; b) 1; c) 14; div.
8.1.3. Rekursija būtų nebaigtinė.
Sąlygą n = 1 reikėtų pakeisti sąlyga n < 1.
8.1.4.
function narys (n: integer): integer;
begin
if
n = 1
then narys := 1
else if n mod 2 = 0
then narys := narys(n div 2
else narys := narys(n div 2) + narys(n div 2
+ 1)
end;
8.1.5.
function suma (n, d: integer): integer;
{ rekursinė }
begin
if
n < 0
then suma := 0
else suma := n*n + suma(n-d)
end;
function suma (n, d: integer): integer; { ne rekursinė }
var s: integer;
begin
s := 0;
while n > 0 do
begin
s := s + n*n;
n := n-d
end;
suma := s
end;
8.1.6.
function ff (n: integer): integer;
begin
if
(n = 0) or (n = 1)
then ff := 1
else ff := n*ff(n-2)
end;
8.3.1.
function bdd (a, b: integer): integer;
begin
if
a = b then bdd := a
else if a < b then bdd := bdd(a, b-a)
else bdd := bdd(a-b, b)
end
8.3.2.
program dalikliai;
var d, daliklis: integer;
function dbd(x, y: integer): integer;
begin
if
x = 0 then dbd := y
else dbd := dbd(y mod x, x)
end;
begin
daliklis := 0;
read(d);
while d <> 0 do
begin
daliklis := dbd(daliklis, abs(d));
read(d)
end;
write(daliklis)
end.
8.3.3.
program kartotiniai;
var k, kartotinis: integer;
function mbk(a, b: integer): integer;
function dbd(x, y: integer): integer;
begin
if
x = 0 then dbd := y
else dbd := dbd(y mod x, x)
end;
begin
mbk := a div dbd(a, b) * b
end;
begin
kartotinis := 1;
for k := 2 to 10 do
kartotinis := mbk(kartotinis, k);
writeln(kartotinis)
end.
8.3.4.
function tarpusavyp (a, b: integer): boolean;
function dbd (x, y: integer): integer;
begin
if
x = 0 then dbd := y
else dbd := dbd(y mod x, x)
end;
begin
tarpusavyp := dbd(a, b) <= 1
end;
8.4.1.
15 14 13 12 11
10
10 11 12 13 14
15
8.4.2. a) kai n
5, rašoma *; kai n < 5, skaičiavimas
nesibaigs;
b) kai b = false, nebus atliekami jokie veiksmai; kai b
= true, skaičiavimas nesibaigs.
9.1.1. Prieš skaitymą procedūra readreal byla turi būti
paruošta analogiškai kaip ir prieš skaitymą standartine procedūra
read.
9.1.2.
type skai = 0..9;
simb = '0'..'9';
function sk (si: simb): skai;
begin
sk := ord(si) - ord('0')
end;
function si (sk: skai): simb;
begin
si := chr(ord('0') + sk + 1)
end;
9.1.3.
procedure readsveikas (var byla: text; var p:
integer);
var s: char;
neigiamas: boolean;
begin
p:= 0; neigiamas := false;
read(byla, s);
while s = ' ' do
{ praleidžiami tarpai }
read(byla, s);
if s = '-'
then begin
neigiamas := true;
read(byla, s)
end
else if s = '+' then read(byla, s);
while s in ['0'..'9'] do
begin
p := p*10 + (ord(s) - ord('0'));
read(byla, s)
end;
if neigiamas then p := -p
end;
9.2.1.
function mažr (s : char) : char;
const dr = 'AĄBCČDEĘĖFGHIYĮJKLMNOPQRSŠTUŲŪWVXZŽ';
mr = 'aąbcčdeęėfghiyįjklmnopqrsštuųūwvxxž';
var nr: integer;
{ raidės numeris }
ss: string;
begin
nr := pos(s, dr);
if nr = 0 then ss := s
else ss := copy(mr, nr, 1);
mažr := ss[1]
end;
9.2.2. Abiem atvejais ne.
|