Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




C++ 1 skyrius -Pagrindiniai duomenų tipai

Lituaniana


Pagrindiniai duomenų tipai

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.

Skaičiai

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.

Simboliai

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ė".

Loginės reiksmės

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.

Duomenų grupavimas

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

Didziausios (maziausios) reiksmės paieska

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));

Savarankisko darbo uzduotys

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.



Kai kuriose realizacijose sių tipų skaičių kitimo ribos gali ir sutapti.


Document Info


Accesari: 4879
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )