Programose veiksmai atliekami su duomenimis. Jų yra įvairių rūsių. Jūs zinote sveikuosius ir realiuosius skaičius, mokate atlikti veiksmus su jais. Siame skyriuje trumpai aprasysime keletą dar kitų Paskalio kalboje vartojamų paprastųjų duomenų, tiksliau - duomenų tipų. Tai loginiai bei simboliniai duomenys. Jie bus reikalingi vėliau sudarant uzdavinių programas.
Visų sio skyriaus pratimų programas kursime taip, kaip ir 2-ame skyriuje, naudodami tik TLabel TEdit TButton ir TMemo tipų komponentus. Panaudosime tik keletą naujų savybių ir metodų. Programose nebeisskirsime juodu sriftu programos kūrėjo rasomo teksto.
Object Pascal kalboje vartojami dviejų rūsių skaičiai - sveikieji ir realieji. Sveikasis skaičius - tai skaičius, neturintis trupmeninės dalies, pavyzdziui:
-5 10 13
Visi kiti skaičiai laikomi realiaisiais skaičiais, pavyzdziui:
20.3 0.2 5.0 0.0 -10.0 1E5
Kintamieji, įgyjantys sveikųjų skaičių reiksmes, vadinami sveikojo tipo kintamaisiais, o realiųjų skaičių reiksmes - realiojo tipo kintamaisiais.
Sveikojo tipo kintamiesiems zymėti Paskalyje vartojamas zodis integer, o realiojo tipo kintamiesiems - real. Object Pascal kalboje yra ir kitokių sveikųjų bei realiųjų tipų, pavyzdziui, byte word longint double ir kt. Paskutinieji (longint double) vertingi tada, kai reikia didelių skaičių: longint apraso didesnius sveikuosius skaičius negu integer tipo[1], double - didesnius realiuosius skaičius negu real tipo.
Pateikiame sveikojo ir realiojo tipo aprasų pavyzdzių:
a, b : integer;
r : real;
i : integer;
Su skaičiais atliekamos įprastos aritmetinės operacijos: sudėtis, atimtis, daugyba, dalyba bei lyginimas. Dalybos operacijos yra net trijų rūsių. Jos zymimos div mod ir . Pirmosios dvi atliekamos tik su sveikaisiais skaičiais: operaciją div vartojame, kai norime gauti dalmenį, operaciją mod - kai norime gauti dalybos liekaną. Įstrizu brūksniu zymime realiųjų skaičių dalybą, t. y. jos rezultatas visuomet bus realusis skaičius, netgi tuomet, kai abu operandai sveikieji skaičiai ir dalijasi be liekanos, pavyzdziui, padaliję 4/2 gausime 2.0 (o ne 2).
Jei aritmetinių operacijų abu operandai yra sveikojo tipo, tuomet ir rezultatas bus sveikojo tipo, isskyrus realiųjų skaičių dalybą . Siai operacijai rezultatas visuomet bus realiojo tipo, jei bent vienas is operandų yra realiojo tipo.
Jei vienas is lyginimo operacijos operandų yra realiojo tipo, tai kitas keičiamas realiuoju. Realieji skaičiai kompiuteryje saugomi tam tikru tikslumu. Todėl nelabai prasminga lyginti realiojo tipo kintamųjų reiksmes (vartojant lygybės operaciją). Paprastai du realiojo tipo skaičiai laikomi lygiais, jeigu jie vienas nuo kito skiriasi nedaug, t.y. lyginama duotu tikslumu. Tam skaičiuojamas absoliutus skaičių skirtumas ir gauta reiksmė lyginama su nurodytu tikslumu. Pavyzdziui, jeigu a ir b yra realiojo tipo kintamieji, tai jie laikomi lygiais tuomet, kai |a - b| < ε, čia ε - nurodytas tikslumas (pvz., ε = 0,001).
Priskyrimo sakinio rezultatas visuomet bus realiojo tipo, jeigu priskyrimo zenklo kairėje pusėje bus realiojo tipo kintamasis.
3.1 pratimas. Plokstumoje duota n trikampių. Zinomos jų virsūnių koordinatės (x, y). Reikia rasti, kiek tarp tų trikampių yra lygiasonių (lygiakrasčiai taip pat tenkina lygiasonių savybę).
Krastinių ilgiams rasti pritaikykime atstumo tarp dviejų taskų (x1, y1) ir (x2, y2) koordinačių plokstumoje skaičiavimo formulę:
Lygiasoniu trikampiu laikysime tokį, kurio bet kurios dvi
krastinės bus lygios duotu tikslumu.
Programos lango kūrimas
Is Standard komponentų paletės įkeliame visus reikalingus komponentus ir pasinaudodami Object Inspector, nustatome tokias sių komponentų savybių reiksmes:
Objektas |
Savybė |
Reiksmė |
Form1 |
Caption |
3.1 pratimas. Lygiasoniai trikampiai |
Label1 |
Caption |
Trikampių skaičius: |
Label2, Label3 |
Caption | |
Label4 |
Caption |
x1 = |
Label5 |
Caption |
y1 = |
Label6 |
Caption |
x2 = |
Label7 |
Caption |
y2 = |
Label8 |
Caption |
x3 = |
Label9 |
Caption |
y3 = |
Edit1 - Edit7 |
Text | |
Memo1 |
Lines | |
Button1 |
Caption |
Įvesti trikampių skaičių |
Button2 |
Caption |
Įvesti koordinates |
Enabled |
False |
Object Inspector lange nustatyta Button2 mygtuko Enabled savybės reiksmė False reiskia, kad sis mygtukas programos vykdymo metu nereaguos į pelės paspaudimus tol, kol si reiksmė nebus pakeista į True. Pagal nutylėjimą Enabled reiksmė nustatoma True
Mūsų sukurtos programos langas skaičiavimų metu parodytas 3.1 pav.
3.1 pav. 3.1 pratimo programos langas darbo metu
Mygtukų veiksmų programavimas
Sioje programoje 1-ą kartą panaudosime naują darinį - konstantą. Konstanta - tai d 616k105g ydis, kuris nekinta programos vykdymo metu. Konstantos negali būti aprasytos klasės viduje, todėl jas aprasysime ankstesnėms Paskalio versijoms įprastoje vietoje - pries tipų aprasus.
Programoje atskirsime trikampių kiekio (n) ir trikampių koordinačių įvedimą. Naudosime du mygtukus: Button1 ('Įvesti trikampių skaičių') ir Button2 ('Įvesti koordinates'). Pastarąjį reikės spausti tiek kartų, kiek yra trikampių. Programa skaičiuoja, kiek kartų vartotojas nuspaudė Button2 mygtuką ir, įvedus visų n trikampių koordinates, sis mygtukas nustoja reaguoti į pelės paspaudimą. Tai pasiekiama, pakeitus Enabled savybės reiksmę į False
TEdit tipo komponento Clear metodas isvalo to komponento lauką, t.y. Text savybei suteikia reiksmę (tusčia eilutė). FloatToStrF funkcija konvertuoja realųjį skaičių į simbolių eilutę, panaudojant nurodytą formatą, Abs funkcija grązina skaičiaus modulį (absoliutinį didumą).
Konstanta ir TForm1 klasė:
const Tikslumas = 0.1;
type
TForm1 = class(TForm)
Label1: TLabel; // 'Trikampių skaičius:'
Label2: TLabel; //
Label3: TLabel; //
Label4: TLabel; // 'x1 ='
Label5: TLabel; // 'y1 ='
Label6: TLabel; // 'x2 ='
Label7: TLabel; // 'y2 ='
Label8: TLabel; // 'x3 ='
Label9: TLabel; // 'y3 ='
Edit1: TEdit; // n
Edit2: TEdit; // x1
Edit3: TEdit; // y1
Edit4: TEdit; // x2
Edit5: TEdit; // y2
Edit6: TEdit; // x3
Edit7: TEdit; // y3
Memo1: TMemo; // Rezultatams
Button1: TButton; // 'Įvesti trikampių skaičių'
Button2: TButton; // 'Įvesti koordinates'
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
n, // Trikampių skaičius
nr, // Trikampio numeris
kiek : integer; // Lygiasonių trikampių skaičius
x1, y1, x2, y2, x3, y3, // Trikampio koordinatės
a, b, c : real; // Trikampio krastinės
public
end;
Metodas, vykdomas nuspaudus mygtuką 'Įvesti trikampių skaičių'
procedure TForm1.Button1Click(Sender: TObject);
begin
n := StrToInt(Edit1.Text); nr := 1; kiek := 0;
Button2.Enabled := True; Button1.Enabled := False;
Label2.Caption := '1';
Label3.Caption := '-o trikampio koordinatės:';
end;
Metodas, vykdomas nuspaudus mygtuką 'Įvesti koordinates'
procedure TForm1.Button2Click(Sender: TObject);
begin
x1 := StrToFloat(Edit2.Text);
y1 := StrToFloat(Edit3.Text);
x2 := StrToFloat(Edit4.Text);
y2 := StrToFloat(Edit5.Text);
x3 := StrToFloat(Edit6.Text);
y3 := StrToFloat(Edit7.Text);
Memo1.Lines.Add('Koordinatės: '+FloatToStr(x1)+
' '+FloatToStr(y1)+' '+FloatToStr(x2)+
' '+FloatToStr(y2)+' '+FloatToStr(x3)+
' '+FloatToStr(y3));
a := Sqrt(Sqr(x1 - x2) + Sqr(y1 - y2));
b := Sqrt(Sqr(x1 - x3) + Sqr(y1 - y3));
c := Sqrt(Sqr(x2 - x3) + Sqr(y2 - y3));
Memo1.Lines.Add('Krastinės: ' + FloatToStrF(a,ffFixed,7,2)+
' ' +FloatToStrF(b,ffFixed,7,2) + ' ' +
FloatToStrF(c,ffFixed,7,2));
if (Abs(a-b) <= Tikslumas)or(Abs(a-c) <= Tikslumas)or
(Abs(c-b) <= Tikslumas)
then begin
Memo1.Lines.Add('Trikampis lygiasonis');
kiek := kiek + 1;
end
else Memo1.Lines.Add('Trikampis nelygiasonis');
Edit2.Clear; Edit3.Clear; Edit4.Clear;
Edit5.Clear; Edit6.Clear; Edit7.Clear;
nr := nr+1;
Label2.Caption := IntToStr(nr);
if nr > n then
begin
nr := 1; Button2.Enabled := False;
Edit1.Clear; Button1.Enabled := True;
Label2.Caption := ''; Label3.Caption := '';
end;
end;
Kontrolinių duomenų pavyzdys
Testo numeris |
n |
Trikampio virsūnių koordinatės |
Rezultatas |
|||||
x1 |
y1 |
x2 |
y2 |
x3 |
Y3 |
|||
Trikampis lygiasonis |
||||||||
Trikampis nelygiasonis |
||||||||
Trikampis lygiasonis |
||||||||
Trikampis nelygiasonis |
||||||||
|
Trikampis lygiasonis |
Deja, si programa nevisiskai uzbaigta - nerodomas galutinis rezultatas, t.y. bendras lygiasonių trikampių skaičius. Be to, siam uzdaviniui pradinius duomenis reikia parinkti labai kruopsčiai, kad būtų pateiktos is tikrųjų trikampio virsūnių koordinatės. Kitaip galime gauti kurioziską pranesimą, pavyzdziui, kai visų virsūnių koordinatės lygios, t. y. duotas tik vienas taskas, tai vis tiek bus pranesama: "Trikampis nelygiasonis". Visus siuos trūkumus jūs galite apgalvoti ir pataisyti programą.
Kontrolinės uzduotys
Papildykite 3.1 pratimo programą taip, kad rezultatui - rastų lygiasonių trikampių skaičiui - spausdinti būtų sukurtas naujas laukas programos lange.
Pateiktoje 3.1 pratimo programoje lygiakrasčiai trikampiai priskiriami prie lygiasonių. Programą papildykite taip, kad būtų atskirai spausdinama, kiek rasta lygiasonių ir kiek lygiakrasčių trikampių.
Sudarykite programą, kuri paprasytų surinkti du natūraliuosius skaičius ir isspausdintų jų sumą, isskleistą sudėties eilute. Pavyzdziui:
Papildykite programą, kad tai būtų daroma su visomis aritmetinėmis operacijomis.
Kompiuterio klaviatūroje yra daug klavisų. Kiekvienas jų turi savo paskirtį. Tekstui rinkti naudojami klavisai atitinka tekste vartojamus simbolius. Valdymo klavisai taip pat atitinka tam tikrus kompiuteryje vartojamus simbolius. Visi naudojami simboliai yra aprasomi specialiomis kodavimo lentelėmis. Simbolius lentelėje atitinka jų eilės numeris. Simbolį galima nurodyti jo numeriu arba jo vaizdu (pavyzdziui, raidę A galima nurodyti numeriu 65, o raidę a numeriu 97).
Galima aprasyti kintamuosius, kurie įgytų simbolines reiksmes. Kintamieji, kurių tipas nurodomas zodziu char, vadinami simboliniais. Juos. kaip ir kitus kintamuosius, galima naudoti priskyrimo sakiniuose, pavyzdziui,
x : char;
. . .
x := 'A';
Simboliai rasomi tarp apostrofų.
Lyginimo operacijose lyginami simbolių kodai pagal kodavimo lentelę. Didesnis simbolis bus tas, kurio numeris didesnis. Pavyzdziui, sakinyje
if 'A' > 'a' then ... else ...
bus vykdoma else saka, nes raidės 'A' numeris yra mazesnis.
Kintamojo reiksmę galima nurodyti ir simbolio numeriu:
x := #65
arba panaudojant standartinę funkciją Chr, kurios rezultatas yra argumentu nurodyto numerio simbolis:
x := Chr(65)
Simbolio numerį galima suzinoti, panaudojus standartinę funkciją Ord, pvz.,
nr := Ord('A')
Čia kintamasis nr turi būti sveikojo tipo.
Simbolinio tipo reiksmes galima įvesti klaviatūra bei isvesti ekrane.
3.2 pratimas. Sudarysime programą didziųjų ir mazųjų raidzių kodams parodyti ekrane.
Programos lango kūrimas
Is Standard komponentų paletės įkeliame visus reikalingus komponentus ir pasinaudodami Object Inspector, nustatome tokias sių komponentų savybių reiksmes:
Objektas |
Savybė |
Reiksmė |
Form1 |
Caption |
3.2 pratimas. Raidzių kodai |
Memo1 |
Lines | |
Button1 |
Caption |
Rodyti |
Mūsų sukurtos programos langas skaičiavimų metu parodytas 3.2 pav.
3.2 pav. 3.2 pratimo programos langas darbo metu
Mygtuko veiksmų programavimas
Visi reikalingi veiksmai atliekami nuspaudus Button1 ('Rodyti') mygtuką. Programoje panaudota UpCase funkcija maząją raidę keičia į atitinkamą didziąją raidę. Atkreipkite dėmesį į tai, kad for ciklo kintamasis i yra simbolinio tipo.
TForm1 klasė:
TForm1 = class(TForm)
Memo1: TMemo; // Rezultatams
Button1: TButton; // 'Rodyti'
procedure Button1Click(Sender: TObject);
private
public
end;
Metodas, vykdomas nuspaudus mygtuką 'Rodyti'
procedure TForm1.Button1Click(Sender: TObject);
var i: char;
begin
Memo1.Lines.Add('--- Raidzių kodai ---');
Memo1.Lines.Add('Didziosios Mazosios');
for i := 'a' to 'z' do
Memo1.Lines.Add(UpCase(i) + ' - ' +
IntToStr(Ord(UpCase(i))) + ' ' + i +
' - ' + IntToStr(Ord(i)));
end;
Kontrolinės uzduotys
Pakeiskite 3.2 pratimo programą taip, kad ciklo kintamojo reiksmėmis būtų ne raidės, bet raidzių kodai.
Sudarykite programą, kuri parodytų Edit1 lauke įvestų simbolių kodus.
Duotas sveikasis skaičius s. Sudarykite programą, kuri nustatytų, ar jo reiksmė sutampa su kurios nors raidės kodu. Jei taip, isveskite tą raidę, jei ne - sakinį "Ne raidė".
Lyginimo ir loginių operacijų rezultatas yra loginė reiksmė True (tiesa) arba False (netiesa, melas). Loginiams duomenims vaizduoti vartojamos dvi loginės reiksmės - True ir False. Kintamieji, kurių tipas nurodomas zodziu boolean, vadinami loginiais kintamaisiais:
x : boolean;
Jiems galima priskirti logines reiksmes, pavyzdziui:
x := True;
x := (a > b) and (a > c);
Loginiams kintamiesiems galioja lyginimo ir loginės operacijos (or and not). Siems kintamiesiems taip pat galima naudoti standartinę funkciją Ord Ord(False) Ord(True) = 1
3.3 pratimas. Is Kauno į Klaipėdą isvaziavo du automobiliai. Pirmojo automobilio greitis v1 km/val. Antrasis isvaziavo viena valanda vėliau greičiu v2 km/val. Automobiliai visą kelią juda pastoviu greičiu. Ar antrasis automobilis pasivys pirmąjį? Jeigu pasivys, programa turi pranesti, kad pavijo ir nurodyti, kelintame kilometre tai įvyko. Jeigu nepavys, tuomet programa turi pranesti, kad nepavijo ir isspausdinti, kiek antrajam automobiliui dar liko kilometrų iki Klaipėdos.
Atstumas tarp miestų yra km kilometrų. Skaičiavimus reikia atlikti kilometrų tikslumu.
Programos lango kūrimas
Is Standard komponentų paletės įkeliame visus reikalingus komponentus ir pasinaudodami Object Inspector, nustatome tokias sių komponentų savybių reiksmes:
Objektas |
Savybė |
Reiksmė |
Form1 |
Caption |
3.3 pratimas. Kelionė į pajūrį |
Label1 |
Caption |
Atstumas Kaunas - Klaipėda: |
Label2 |
Caption |
Pirmojo automobilio greitis: |
Label3 |
Caption |
Antrojo automobilio greitis: |
Edit1 - Edit3 |
Text | |
Memo1 |
Lines | |
Button1 |
Caption |
Skaičiuoti |
Mūsų sukurtos programos langas skaičiavimų metu parodytas 3.3 pav.
3.3 pav. 3.3 pratimo programos langas darbo metu
Mygtuko veiksmų programavimas
Visi reikalingi veiksmai atliekami nuspaudus Button1 ('Skaičiuoti') mygtuką. Skaičiavimų ciklas nutraukiamas, kai 1-asis automobilis nuvaziuoja visą atstumą arba kai jį paveja 2-asis automobilis.
TForm1 klasė:
TForm1 = class(TForm)
Label1: TLabel; // 'Atstumas Kaunas - Klaipėda:'
Label2: TLabel; // 'Pirmojo automobilio greitis:'
Label3: TLabel; // 'Antrojo automobilio greitis:'
Edit1: TEdit; // km
Edit2: TEdit; // v1
Edit3: TEdit; // v2
Button1: TButton; // 'Skaičiuoti'
Memo1: TMemo; // Rezultatams
procedure Button1Click(Sender: TObject);
private
t1, km1, v1, // Pirmojo automobilio duomenys
t2, km2, v2, // Antrojo automobilio duomenys
km : real; // Atstumas tarp miestų
pavijo : boolean; // True, kai pavyta
public
end;
Metodas, vykdomas nuspaudus mygtuką 'Skaičiuoti'
procedure TForm1.Button1Click(Sender: TObject);
begin
km := StrToFloat(Edit1.Text);
v1 := StrToFloat(Edit2.Text);
v2 := StrToFloat(Edit3.Text);
Memo1.Lines.Clear;
// -------- ----- ------ ---------
Pavijo := False;
t1 := 1; // Pirmasis automobilis isvaziavo 1 valanda anksčiau
km1 := t1 * v1; // Pirmojo automobilio duomenys antrajam isvaziuojant
t2 := 0; km2 := 0; // Antrojo automobilio duomenys
while (km1 < km) and not Pavijo do
begin
km1 := km1 + 1; // Pirmasis nuvaziavo dar vieną km
t2 := km1 / v1 - 1; // Antrasis vaziavo t2 valandų
km2 := t2 * v2; // Antrasis per t2 val. nuvaziavo km2 atstumą
pavijo := km1 <= km2; // Ar antrasis nuvaziavo daugiau?
end;
// -------- ----- ------ ----------
if Pavijo
then
Memo1.Lines.Add('Pavijo, kai buvo nuvaziuota ' +
FloatToStrF(km2,ffFixed,6,2)+' kilometrų.')
else
Memo1.Lines.Add('Nepavijo. Liko ' +
FloatToStrF(km-km2,ffFixed,6,2)+' kilometrų.')
end;
Kontrolinių duomenų pavyzdys
Testo numeris |
Atstumas (km) |
I greitis v1 |
II greitis v2 |
Rezultatas |
Pavijo, kai buvo nuvaziuota 50 kilometrų. |
||||
Nepavijo. Liko 150 kilometrų. |
Kontrolinės uzduotys
3.3 pratimo programą isbandykite su įvairiais kontroliniais duomenimis. Aprėpkite visus galimus atvejus: kai pasivejama, kai nepasivejama ir kai abu automobiliai atvyksta kartu.
Perkopijuokite 3.3 pratimo programą nauju vardu. Tai galite padaryti ir Delphi terpėje naudojant meniu komandą File.Save Project As
3.3 pratimo programą papildykite taip, kad rezultatų pranesimas būtų spausdinamas atskirame lauke.
Papildykite 3.4 pratimo programą siame skyrelyje aprasytais sakiniais. Isbandykite programą su įvairiais kontroliniais duomenimis.
Daznai is pateiktų duomenų tenka atsirinkti tinkamus arba suskirstyti juos pagal nurodytus pozymius į grupes. Pavyzdziui, sudarant krepsinio rinktinę, is kandidatų sąraso atrenkami įvykdę nustatytus minimalius reikalavimus. Arba mokiniai suskirstomi į pogrupius pagal tai, kurią uzsienio kalbą mokosi ir pan.
Taigi visuose uzdaviniuose turi būti zinomi pozymiai, pagal kuriuos atrenkami duomenys arba jie gali būti skirstomi į grupes. Juos ir vadinsime atrankos pozymiais.
Grupavimo operacijos rezultatai naudojami toliau apdorojant duomenis. Tai reiskia, kad sugrupuotus duomenis būtina issaugoti. Kol kas to dar nemokame daryti, todėl pamėginsime tik sugrupuoti duomenis.
3.4 pratimas. Nuimtas arbūzų derlius. Reikia juos isrūsiuoti į dvi krūvas: lengvesnius uz a1 kg ir visus kitus. Zinoma, kad lengvesniųjų kaina yra K1 Lt/kg, o visų kitų - K2 Lt/kg. Reikia parasyti programą, kuri suskaičiuotų, kiek arbūzų yra kiekvienoje krūvoje, koks jų bendras svoris ir kokia kiekvienos krūvos piniginė vertė litais.
Arbūzų svorius įvesime klaviatūra. Įvedimo pabaiga zymėsime nuliu arba neigiamu skaičiumi (negalimas arbūzo svoris). Rezultatus pateiksime taip, kaip parodyta 3.4 paveiksle.
Programos lango kūrimas
Is Standard komponentų paletės įkeliame visus reikalingus komponentus ir pasinaudodami Object Inspector, nustatome tokias sių komponentų savybių reiksmes:
Objektas |
Savybė |
Reiksmė |
Form1 |
Caption |
3.4 pratimas. Arbūzų derlius |
Label1 |
Caption |
Arbūzų atrankos pozymis: svoris (kg) = |
Label2, Label3 |
Caption | |
Label4 |
Caption |
Įvedimo pabaiga - neteigiamas skaičius |
Font.Color |
Red |
|
Label5 |
Caption |
Pirmoji krūva |
Label6 |
Caption |
Antroji krūva |
Edit1, Edit2 |
Text | |
Memo1 - Memo4 |
Lines | |
Button1 |
Caption |
Įvesti pozymį |
Button2 |
Caption |
Įvesti arbūzo svorį |
Enabled |
False |
|
Default |
True |
Object Inspector lange nustatyta Button2 mygtuko Enabled savybės reiksmė False reiskia, kad sis mygtukas programos vykdymo metu nereaguos į pelės paspaudimus tol, kol si reiksmė nebus pakeista į True. Pagal nutylėjimą Enabled reiksmė nustatoma True. To paties mygtuko Default savybės reiksmė True reiskia, kad programos vykdymo metu Button2Click metodas bus atliekamas ne tik nuspaudus Button2 mygtuką, bet ir nuspaudus Enter klavisą. Taip galima pagreitinti arbūzų svorių įvedimą, po kiekvienos reiksmės spausdami ne Button2 mygtuką, bet Enter klavisą. Pagal nutylėjimą Default reiksmė nustatoma False
Mūsų sukurtos programos langas skaičiavimų metu parodytas 3.4 pav.
3.4 pav. 3.4 pratimo programos langas darbo metu
Mygtukų veiksmų programavimas
Lengvesniųjų ir sunkesniųjų arbūzų kainas (K1 K2) pateiksime kaip konstantas. Čia pateikiama programa antrosios arbūzų krūvos ekrane neformuoja ir reikalingų skaičiavimų su tos grupės duomenimis neatlieka. Paliekame patiems papildyti programą.
Programoje atskirsime arbūzų atrankos pozymio (svorio a1) ir arbūzų svorių įvedimą. Naudosime du mygtukus: Button1 ('Įvesti pozymį') ir Button2 ('Įvesti arbūzo svorį'). Programa nutraukia arbūzų svorių įvedimą, jeigu įvedamas neteigiamas skaičius. Tai pasiekiama, pakeitus Enabled savybės reiksmę į False. Atkreipkite dėmesį į tai, kaip Button2Click metode pasiekiama, kad Memo1 lauke būtų rasoma į tas pačias (1-ą ir 2-ą) eilutes.
Konstantos ir TForm1 klasė:
const
K1 = 3.5; // Lengvesnių arbūzų kaina
K2 = 4.5; // Sunkesnių arbūzų kaina
type
TForm1 = class(TForm)
Label1: TLabel; // 'Arbūzų atrankos pozymis: svoris (kg) ='
Label2: TLabel; // ' '
Label3: TLabel; // ' '
Label4: TLabel; // 'Įvedimo pabaiga - neteigiamas skaičius'
Label5: TLabel; // 'Pirmoji krūva'
Label6: TLabel; // 'Antroji krūva'
Edit1: TEdit; // a1
Edit2: TEdit; // sv
Memo1: TMemo; // Rezultatams (1-oji krūva)
Memo2: TMemo; // Rezultatams (2-oji krūva)
Memo3: TMemo; // 1-os krūvos arbūzų svoriai
Memo4: TMemo; // 2-os krūvos arbūzų svoriai
Button1: TButton; // 'Įvesti pozymį'
Button2: TButton; // 'Įvesti arbūzo svorį'
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
svoris1, suma1, // 1-os arbūzų krūvos svoris ir piniginė vertė
svoris2, suma2, // 2-os arbūzų krūvos svoris ir piniginė vertė
sv, // Arbūzo svoris
a1 : real; // Atrankos pozymis
nr : integer; // Arbūzo numeris
public
end;
Metodas, vykdomas nuspaudus mygtuką 'Įvesti pozymį'
procedure TForm1.Button1Click(Sender: TObject);
begin
a1 := StrToInt(Edit1.Text); nr := 1;
svoris1 := 0; suma1 := 0;
Button2.Enabled := True; Button1.Enabled := False;
Label2.Caption := '1';
Label3.Caption := '-o arbūzo svoris =';
Memo1.Lines.Add('Lengvesnių arbūzų kaina: '+
FloatToStr(K1));
Memo1.Lines.Add(' svoris: ');
Memo1.Lines.Add(' bendra kaina: ');
end;
Metodas, vykdomas nuspaudus mygtuką 'Įvesti arbūzo svorį'
procedure TForm1.Button2Click(Sender: TObject);
begin
sv := StrToFloat(Edit2.Text);
if sv > 0 then // Jei yra arbūzų
begin
if sv < a1 then // Ar tinka pirmajai krūvai?
begin
svoris1 := svoris1 + sv;
suma1 := suma1 + sv * K1;
Memo1.Lines.Strings[1] := ' svoris: '
+FloatToStr(svoris1);
Memo1.Lines.Strings[2] := ' bendra kaina: '
+FloatToStr(suma1);
Memo3.Lines.Add(IntToStr(nr)+'-o arbūzo svoris = '+
FloatToStrF(sv,ffFixed,6,3));
end;
Edit2.Clear; nr := nr+1;
Label2.Caption := IntToStr(nr);
end
else // Arbūzai baigėsi
begin
nr := 1; Button2.Enabled := False;
Edit1.Clear; Edit2.Clear; Button1.Enabled := True;
Label2.Caption := ''; Label3.Caption := '';
end;
end;
Kontrolinės uzduotys
Papildykite programą, kad būtų skaičiuojami antrosios arbūzų krūvos rezultatai bei jie vaizduojami ekrane.
Papildomai pakeiskite programą taip, kad arbūzų kainos K1 ir K2 būtų įvedamos programos vykdymo metu..
Programą papildykite taip, kad būtų spausdinami matavimo vienetai: pinigams - Lt, svoriui - kg
Tai tradiciniai programavimo uzdaviniai. Populiariausias jų sprendimo būdas yra toks. Aprasomi kintamieji įvedamai (x) ir didziausiai (d) reiksmėms laikyti. Įvedant pirmąją reiksmę, daroma prielaida, kad si yra didziausia (kai ieskoma didziausios reiksmės):
d := x;
Po to paeiliui skaitomos kitos reiksmės ir lyginamos su d. Jei randama didesnė, kintamojo d reiksmė keičiama nauja:
if x > d then d := x;
Jeigu reikia, kartu gali būti įsimenamas ir reiksmės numeris.
Taip patikrinus visą įvedamą duomenų srautą, kintamojo d reiksmė bus didziausia įvesta reiksmė.
Ne visuomet patogu pirmąją reiksmę laikyti pradine didziausia (arba maziausia) reiksme. Ypač tuomet, kai ta reiksmė turi būti apskaičiuojama (pavyzdziui, ieskant maziausio teigiamo skaičiaus, kai sraute pradzioje gali būti daug neigiamų skaičių). Tokiu atveju galima pradine didziausia reiksme laikyti pakankamai mazą reiksmę, tokią, kuri tikrai būtų mazesnė uz visas galimas reiksmes, tarp kurių ieskoma didziausia. Kartojant analizuojamos visos reiksmės. Ieskant maziausios reiksmės, pradine reiksme reikia imti pakankamai didelį skaičių, geriausia jį laikyti lygiu standartinei Paskalio konstantai maxint (arba maxlongint, jei sveikasis tipas - longint
3.5 pratimas. Turguje ant prekystalio guli n n>0) arbūzų, kurių svoriai zinomi. Reikia sudaryti programą sunkiausiam arbūzui nustatyti.
Programos lango kūrimas
Is Standard komponentų paletės įkeliame visus reikalingus komponentus ir pasinaudodami Object Inspector, nustatome tokias sių komponentų savybių reiksmes:
Objektas |
Savybė |
Reiksmė |
Form1 |
Caption |
3.5 pratimas. Sunkiausias arbūzas |
Label1 |
Caption |
Arbūzų kiekis = |
Label2, Label3 |
Caption | |
Edit1, Edit2 |
Text | |
Memo1 |
Lines | |
Button1 |
Caption |
Įvesti kiekį |
Button2 |
Caption |
Įvesti arbūzo svorį |
Enabled |
False |
|
Default |
True |
Object Inspector lange nustatyta Button2 mygtuko Enabled savybės reiksmė False reiskia, kad sis mygtukas programos vykdymo metu nereaguos į pelės paspaudimus tol, kol si reiksmė nebus pakeista į True. Pagal nutylėjimą Enabled reiksmė nustatoma True. To paties mygtuko Default savybės reiksmė True reiskia, kad programos vykdymo metu Button2Click metodas bus atliekamas ne tik nuspaudus Button2 mygtuką, bet ir nuspaudus Enter klavisą. Taip galima pagreitinti arbūzų svorių įvedimą, po kiekvienos reiksmės spausdami ne Button2 mygtuką, bet Enter klavisą. Pagal nutylėjimą Default reiksmė nustatoma False
Mūsų sukurtos programos langas skaičiavimų metu parodytas 3.5 pav.
3.5 pav. 3.5 pratimo programos langas darbo metu
Mygtukų ir formos aktyvinimo veiksmų programavimas
Programoje atskirsime arbūzų kiekio n ir arbūzų svorių įvedimą. Naudosime du mygtukus: Button1 ('Įvesti kiekį') ir Button2 ('Įvesti arbūzo svorį'). Programa nutraukia arbūzų svorių įvedimą įvedus n-o arbūzo svorį. Tai pasiekiama, pakeitus Enabled savybės reiksmę į False
Kadangi programos vykdymo metu bet kuriuo atveju pirmiausia reikia įvesti arbūzų kiekį, naudinga, kad įvedimo zymeklis pradzioje atsidurtų Edit1 lauke. Tai padaro TEdit klasės metodas SetFocus, kurį siuo atveju galime panaudoti pagrindinės formos OnActivate įvykio FormActivate metodo viduje. Tokiu pačiu metodu zymeklį perkeliame į Edit2 lauką.
TForm1 klasė:
TForm1 = class(TForm)
Label1: TLabel; // 'Arbūzų kiekis ='
Label2: TLabel; // ' '
Label3: TLabel; // ' '
Edit1: TEdit; // n
Edit2: TEdit; // sv
Memo1: TMemo; // Rezultatams
Button1: TButton; // 'Įvesti kiekį'
Button2: TButton; // 'Įvesti arbūzo svorį'
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
n : integer; // Arbūzų skaičius
sv : real; // Arbūzo svoris
nr : integer; // Arbūzo numeris
D : real; // Sunkiausio arbūzo svoris
Dn : integer; // Sunkiausio arbūzo numeris
public
end;
Metodas, vykdomas formos aktyvinimo metu
procedure TForm1.FormActivate(Sender: TObject);
begin
Edit1.SetFocus;
end;
Metodas, vykdomas nuspaudus mygtuką 'Įvesti kiekį'
procedure TForm1.Button1Click(Sender: TObject);
begin
n := StrToInt(Edit1.Text); nr := 1;
d := 0; Dn := 0;
Button2.Enabled := True; Button1.Enabled := False;
Edit2.SetFocus;
Label2.Caption := '1';
Label3.Caption := '-o arbūzo svoris =';
Memo1.Lines.Add('Arbūzų skaičius: '+Edit1.Text);
Memo1.Lines.Add('----- ----- ----------------');
end;
Metodas, vykdomas nuspaudus mygtuką 'Įvesti arbūzo svorį'
procedure TForm1.Button2Click(Sender: TObject);
begin
sv := StrToFloat(Edit2.Text);
if sv > D then // Radome sunkesnį arbūzą
begin
D := sv; Dn := nr;
end;
Memo1.Lines.Add(IntToStr(nr)+'-o arbūzo svoris = '+
FloatToStrF(sv,ffFixed,6,2));
if nr = n then // Jei tai buvo paskutinis arbūzas
begin
Memo1.Lines.Add('----- ----- ----------------');
Memo1.Lines.Add('Sunkiausias arbūzas - '+
IntToStr(Dn)+' arbūzas');
Memo1.Lines.Add('Sio arbūzo svoris = '+
FloatToStrF(D,ffFixed,6,2));
nr := 1; Button2.Enabled := False;
Edit1.Clear; Edit2.Clear; Button1.Enabled := True;
Label2.Caption := ''; Label3.Caption := '';
end
else
begin
Edit2.Clear; nr := nr+1;
Label2.Caption := IntToStr(nr);
end;
end;
Kontrolinės uzduotys
Papildykite 3.5 pratimo programą 'Baigti' mygtuku, nutraukiančiu programos darbą.
Padarykite 3.5 pratimo programos kopiją ir ją pakeiskite taip, kad būtų ieskoma ne sunkiausio, bet lengviausio arbūzo.
Padarykite 3.5 pratimo programos kopiją ir ją pakeiskite taip, kad nereikėtų įvesti arbūzų kiekio ir svorių įvedimas būtų nutraukiamas įvedus neteigiamą skaičių.
Kontroliniai pratimai
Parasykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus siuose programų fragmentuose.
Pradinių duomenų rinkiniai:
Variantai |
Kintamieji |
||||
S1 |
S2 |
a |
b |
c |
|
V1 |
R |
T | |||
V2 |
K |
F | |||
V3 |
a |
c | |||
V4 |
b |
d |
Pratimuose kintamieji aprasyti taip:
S1, S2 : char;
a, b, c : integer;
T : boolean;
if a > b then T := True else T := False; if T and (a > c) then Memo1.Lines.Add(S1+' '+IntToStr(a)+' '+IntToStr(b)) else Memo1.Lines.Add(S2+' '+IntToStr(b+c)); |
|
T := True; if a < b then T := False; if a > c then T := not T; Memo1.Lines.Add(IntToStr(Ord(T))+' '+IntToStr(a+b+c)); |
|
T := not( a < b); if T then T := T and (a > c) else T := a < c; Memo1.Lines.Add(IntToStr(Ord(T))+IntToStr(Ord(a+b>c))); |
|
if S1 > S2 then T := True else T := False; if T then Memo1.Lines.Add(S1+' '+IntToStr(a)+' '+ S2+' '+IntToStr(b)) else Memo1.Lines.Add(S1+' '+IntToStr(a+b)+' '+S1+ ' '+S2+' '+S1+' '+IntToStr(c)); |
|
T := (S1 < S2) and (a > b); if T then Memo1.Lines.Add(S1+' '+IntToStr(a+b)+' '+ S2+' '+IntToStr(a+c)+' '+ S1+' '+IntToStr(a-c)) else Memo1.Lines.Add(S1+' '+S2+' '+S2+' '+IntToStr(a)+ ' '+IntToStr(b)+' '+S1); |
Parasykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus siuose programų fragmentuose.
Pratimuose kintamieji aprasyti taip:
S1, S2 : char;
a, b, c : integer;
T : boolean;
S1 := 'a'; S2 := 'b'; b := 14; c := 3; a := 2; if a > c then T := True else T := False; if T and (a > c) then Memo1.Lines.Add(S1+'='+IntToStr(a)) else Memo1.Lines.Add(S2+'='+IntToStr(b)); Memo1.Lines.Add('c= '+IntToStr(c)); |
|
S2 := 'b'; S1 := 'c'; a := 3; T := False; b := 14; c := 15; if b > a then Memo1.Lines.Add(S2+'='+IntToStr(a+b+c)); a := 2; if a > b then T := True; if T then Memo1.Lines.Add('a>b') else Memo1.Lines.Add(S2+'<'+S1); |
|
S1 := 'a'; S2 := 'b'; c := 10; a := 13; T := True; b := 10; c := 3; while T and (a > b) do begin a := a - 2; b := b + 2; if a < c then T := False; end; Memo1.Lines.Add(IntToStr(a)+ IntToStr(b)+IntToStr(c)); if T then Memo1.Lines.Add(S1) else Memo1.Lines.Add(S2); |
|
S1 := 'A'; S2 := 'Z'; a := 14; b := 8; c := 13; b := 5; if S1 > S2 then T := True else T := False; while (T and (a > b)) or (not T and (a > c)) do begin a := a - 2; b := b + 1; c := c + 2; end; Memo1.Lines.Add(IntToStr(a)+IntToStr(b)+ IntToStr(c)+S1+S2); |
|
S1 := 'a'; S2 := 'b'; b := 10; if (S1 < S2) and (b div 2 > b mod 2) then T := True else T := False; a := 10; b := 3; c := 5; if T then Memo1.Lines.Add(S1+IntToStr(a+b)+IntToStr(c)) else Memo1.Lines.Add(S2+IntToStr(a)+IntToStr(b+c)+S1); Memo1.Lines.Add(S1+'+'+S2+IntToStr(2*a-b)); Memo1.Lines.Add(S2+'---'+S1); |
Parasykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus siuose programų fragmentuose.
Pratimuose kintamieji aprasyti taip:
S1, S2 : char;
a, b, c : integer;
T : boolean;
S1 := 'a'; S2 := 'b'; b := 14; c := 3; a := 2; T := (a > b) and (a > c); if T then Memo1.Lines.Add(S1+'='+IntToStr(a)) else Memo1.Lines.Add(S2+'='+IntToStr(b)); T := T and (c > b); if T then Memo1.Lines.Add('c= '+IntToStr(c)) else Memo1.Lines.Add(S1+S2); |
|
S2 := 'a'; S1 := 'b'; a := 3; T := False; Memo1.Lines.Add(IntToStr(Ord(T))+S1+IntToStr(a)); b := 14; c := 5; Memo1.Lines.Add(IntToStr(Ord(a>b))+S2+IntToStr(a+b+c)); a := 2; T := a > b; if T then Memo1.Lines.Add(IntToStr(Ord(T))+ 'a>b'+IntToStr(Ord(a > b))) else Memo1.Lines.Add(IntToStr(Ord(S2>S1))); |
|
S1 := 'a'; S2 := 'c'; c := 10; a := 13; T := True; b := 10; c := 3; while T and (a > b) do begin a := a - 2; b := b + 2; T := a > c; end; Memo1.Lines.Add(IntToStr(a)+IntToStr(b)+IntToStr(c)); if T then Memo1.Lines.Add(IntToStr(Ord(T))+S2) else Memo1.Lines.Add(IntToStr(Ord(T))+S1); |
|
S2 := 'A'; S1 := 'Z'; b := 14; a := 8; c := 13; b := 5; T := S1 > S2; while (T and (a > b)) or (not T and (a > c)) do begin a := a - 2; b := b + 1; c := c + 2; end; Memo1.Lines.Add(IntToStr(Ord(T))+IntToStr(a)+ IntToStr(b)+IntToStr(c)); Memo1.Lines.Add(S1+S2+IntToStr(Ord(not T))); |
|
S1 := 'a'; S2 := 'a'; b := 10; T := (S1 < S2) and (b div 2 > b mod 2); b := 8; a := 13; c := 5; T := not T and (a+b < c ); if T then Memo1.Lines.Add(S1+IntToStr(a+b)+IntToStr(c)) else Memo1.Lines.Add(S2+IntToStr(a)+IntToStr(b+c)+S1); Memo1.Lines.Add(S1+'+'+S2+IntToStr(2*a-b)); Memo1.Lines.Add(S2+'---'+S1); |
Parasykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus siuose programų fragmentuose.
x, y, x1, x2, hx, a, b, S1, S2 : integer; |
|
x1 := -10; x2 := 10; hx := 4; a := -3; b := 3; S1 := 0; S2 := 0;x := x1; while x <= x2 do begin y := Abs(x) -1; if x >= a then if x <= b then S1 := S1 + y else S2 := S2 + y else S2 := S2 + y; x := x + hx; end; Memo1.Lines.Add('S1= '+IntToStr(S1)+' S2= '+IntToStr(S2)); |
|
x, y, xp, xg, hx, c, d, S1, S2 : integer; |
|
xp := 7; xg := 12; hx := 5; c := 18; d := 3; S1 := 2; S2 := 0; x := xp; while x <= xg do begin y := x mod 3; if x < c then S1 := S1 + y else if x <= d then S2 := S2 + y else S1 := S1 + y; x := x + hx; end; Memo1.Lines.Add('S1= '+IntToStr(S1)+' S2= '+IntToStr(S2)); |
|
x, y, xa, xb, hx, u, v, S1, S2 : integer; |
|
xa := 3; xb := 12; hx := 2; u := 1; v := 6; S1 := 1; S2 := 0; x := xa; while x <= xb do begin y := x div 3; if (x >= u) and (x <= v) then S1 := S1 + y else S2 := S2 + y; x := x + hx; end; Memo1.Lines.Add('S1= '+IntToStr(S1)+' S2= '+IntToStr(S2)); |
|
x, y, x1, x2, hx, a, S1, S2 : integer; |
|
x1 := 3; x2 := 12; hx := 3; a := 1; S1 := 0; S2 := 1; x := x1; while x <= x2 do begin y := x div 3; if x > a then S1 := S1 + y else S2 := S2 + y; if x - y < 10 then S2 := S2 + y; if x + y > 10 then S1 := S1 + y; x := x + hx; end; Memo1.Lines.Add('S1= '+IntToStr(S1)+' S2= '+IntToStr(S2)); |
Krepsinio kamuolio skersmuo D. Turime dėzę, kurios vidaus aukstis, plotis ir ilgis - zinomi dydziai. Reikia nustatyti, ar visas kamuolys tikrai telpa dėzėje.
Koordinačių plokstumoje nubrėztas spindulio R apskritimas. Apskritimo centras yra taske (xc, yc). Reikia nustatyti, ar taskas, kurio koordinatės (xt, yt), yra turimo apskritimo viduje.
Koordinačių plokstumoje yra padėtas taskas, kurio koordinatės (x, y). Reikia nustatyti tasko padėtį: koordinačių plokstumos ketvirtį arba koordinačių asį (jei taskas yra joje).
Ūkininkas nukasė bulves ir supylė į B maisų. Reikia rasti, kiek kartų teks ūkininkui vaziuoti į lauką, norint parvezti visą derlių, jeigu vezime telpa ne daugiau, kaip N maisų.
Naujai pastatyto tilto keliamoji galia T tonų. Tilto ilgis L metrų. Yra dvi eismo juostos. Ar tilto maksimali apkrova nevirsys keliamosios galios? Bandymai vykdomi sustatant vieną prie kitos be tarpo dviejų tipų masinas: ilgas ir trumpas. Trumposios masinos ilgis rt metrų ir svoris st tonų. Ilgoji masina yra rl metrų ir svoris sl tonų. Ilgųjų ir trumpųjų masinų skaičiai gali būti bet kokie.
Stačiakampė dėzė, kurios pagrindas yra AxB, o aukstis C, iki pusės pripilta vandens. Kiek galima į dėzę priberti vysnių (kaip zinome, jos skęsta), jeigu vysnios skersmuo R mm ir vanduo neturi isbėgti?. A B ir C reikmės ne mazesnės kaip 50 cm.
Vaikai iki 5 metų kasdien suvalgo D1 gramų duonos, vyresni (iki 10 metų) - D2 gramų duonos, vyresni kaip 10 metų ir suaugę iki 75 metų vidutiniskai suvalgo po D3 gramų duonos kasdien. Dar vyresni tenkinasi D4 gramų duonos per dieną. Kiek reikia duonos vienai dienai Jūsų miestui (miesteliui, kaimui), jeigu zinote, kiek kokio amziaus gyventojų yra?
Du kaimynai nutarė pasidalyti salą ezere pusiau. Kiek jiems reikia pasigaminti stulpelių tvorai, jeigu jos ilgis bus L metrų, o stulpeliai turi būti kasami kas N metrų?
Petriukas sapnuoja, kad jį vejasi 5 tigrai, 8 liūtai ir 9 mokytojai. Sapno pradzioje Petriukas bėgo labai greitai ir persekiotojus paliko labai toli: liūtai atsiliko L km, tigrai - T km, o mokytojai M km. Vėliau Petriukas taip pavargo, kad nebegalėjo bėgti greičiau kaip 1 km/val greičiu. Kas Petriuką pavys, o kas ne, jeigu jį laikrodis pazadins po 8 val. nuo to momento, kai jis pradėjo lėtai bėgti? Tigrai vijosi Tg km/val greičiu, liūtai - Lg km/val o mokytojai - Mg km/val. greičiu.
Petriukas spalio 12 d. 11 val. 30 min. nusipirko slides ir ėmė laukti sniego. Snigti pradėjo sausio 25 d. 9 val. 14 min. Kiek minučių Petriukas laukė sniego?
Gyveno kartą isradingas zmogus. Jis nutarė viename savo buto kambarių įsirengti garazą. Įvaziavimui reikia pagaminti ir sumontuoti nuozulnią platformą. Platforma gaminama is 4 cm storio lentų. Vienos lentos plotis P cm, o ilgis L m. Kampas, kurį platforma sudaro su saligatviu, yra K laipsnių. Buto grindų aukstis nuo saligatvio yra B m. Kiek reikia pirkti lentų platformos gamybai, jeigu garazo durų plotis yra 3 m?
Krepsinio kamuolio skersmuo D. Turime daug dėzių, kurių vidaus aukstis, plotis ir ilgis zinomi. Reikia nustatyti, keliose is dėzių telpa tas kamuolys.
Koordinačių plokstumoje yra nubrėztas apskritimas, kurio spindulys R. Apskritimo centras taske (xc, yc). Reikia nustatyti, kiek taskų, kurių koordinatės (xt, yt) zinomos, yra turimo apskritimo viduje.
Daug ūkininkų nukasė bulves ir supylė į maisus. Zinome, kiek kuris ūkininkas turi maisų su bulvėmis. Reikia rasti, kiek kartų teks vaziuoti į laukus, norint parvezti visą derlių kiekvienam ūkininkui atskirai, jeigu vezime telpa ne daugiau, kaip N maisų. Per kiek dienų bus suveztas derlius, jeigu vezėjas vienas ir per dieną jis pajėgia nuvaziuoti į laukus ne daugiau kaip K kartų.
Naujai pastatyto tilto keliamoji galia T tonų. Tilto ilgis L metrų. Yra dvi eismo juostos. Ar tilto maksimali apkrova nevirsys keliamosios galios? Bandymai vykdomi sustatant vieną prie kitos be tarpo dviejų tipų masinas: ilgas ir trumpas. Trumpiausios masinos ilgis Rt metrų ir svoris St tonų. Ilgiausia masina yra Rl metrų ir svoris Sl tonų. Ilgųjų ir trumpųjų masinų skaičiai gali būti bet kokie. Parasykite programą, kuri analizuotų N tiltų galią.
Turine N skirtingų stačiakampių dėzių. Kiekvienos dėzės pagrindas AxB ir aukstis C zinomi. Visos dėzės iki pusės pripiltos vandens. Kiek galima į kiekvieną dėzę priberti vysnių (kaip zinome, jos skęsta), jeigu vysnios skersmuo R mm ir vanduo neturi isbėgti? A B ir C reikmės ne mazesnės kaip 50 cm. Koks derlius bus supiltas?
Vaikai iki 5 metų kasdien suvalgo D1 gramų duonos, vyresni (iki 10 metų) - D2 gramų duonos, vyresni kaip 10 metų ir suaugę iki 75 metų vidutiniskai suvalgo po D3 gramų duonos kasdien. Dar vyresni tenkinasi D4 gramų duonos per dieną. Kiek duonos suvalgoma kasdien didziuosiuose Lietuvos miestuose? Duomenys apie kiekvieną is jų atskirai zinomi.
Katino seima vakarienei nutarė pasigauti zuvelių. Meskerioja senis katinas, bet ne visas zuveles deda į krepsį. Ima tik tas, kurios didelės ir skanios. Sudarykite programą, kuri suskaičiuotų, kiek katinas parnesė zuvelių į namus ir koks jų bendras svoris, jeigu apie kiekvieną sugautą zuvelę turime tokius duomenis: svoris ir skani ar neskani. Duomenys įvedami klaviatūra apie kiekvieną zuvelę atskirai: surenkamas skaičius, reiskiantis svorį, ir skanumo pozymis 1, kai skani ir -1, kai neskani. Duomenų įvedimo pabaiga nurodoma, surinkus du nulius. Turi būti isspausdinta, kiek zuvelių parnesė katinas, koks jų bendras svoris. Įdomu, kiek buvo tinkamų zuvelių, bet neskanių? Papildykite sudarytą programą siais skaičiavimais.
|