Programavimo pamokėlės

pamokelesm

Mokymų ciklas „Programavimo pamokėlės" skirtos visiems, kurie nori išmokti programuoti.

IT galvosūkiai

itgalvosukiai

Konkurso tikslas – skatinti moksleivius domėtis IT sprendžiant įvairiausius galvosūkius.

Informikas

informikasm

Konkurso tikslas – supažindinti moksleivius su menu informacinėse technologijose ir mūsų talismanu.

Dr. J. P. Kazicko konkursai

kkonkursai

Žemaitijos, Aukštaitijos, Suvalkijos ir Dzūkijos regionuose vykdomas IT konkursas.

       

 Iki šiol mes sprendėme uždavinius, kuriuose visi veiksmai atliekami nuosekliai vienas po kito, tačiau gyvenime labai dažnai reikia pasirinkti vieną veiksmą, poelgį, sprendimą iš kelių galimų. Tokiu atveju rašomas sąlyginis sakinys.

Paprastas sąlyginis sakinys

Visi kartu išspręskime uždavinį:

Du draugai Jonas ir Povilas žaidžia šachmatais. Jie surinko skirtingą taškų skaičių: Jonas – n taškų, Povilas – m taškų. Parašykite programą, kuri ekrane parodytų rezultatą: „Turnyrą laimėjo Jonas“, jei daugiau taškų surinko Jonas, arba „Turnyrą laimėjo Povilas“, jei daugiau taškų surinko Povilas.

Pasitikrinkite: kai n = 3, m = 2, tuomet ekrane turi būti rodomas pranešimas: Turnyrą laimėjo Jonas; kai  n = 2, m = 3, tuomet ekrane turi būti rodomas pranešimas: Turnyrą laimėjo Povilas.

// Turnyras
#include 
using namespace std;
int main ()
{
    int n, m;
    cout << "Kiek taškų surinko Jonas?"; cin >> n;
    cout << "Kiek taškų surinko Povilas?"; cin >> m;
    if (n > m) cout << "Turnyrą laimėjo Jonas" << endl;
    else cout << "Turnyrą laimėjo Povilas" << endl;
    return 0;
}

Spręsdami uždavinį užrašėme sąlyginį sakinį:

if (n > m) cout << "Turnyrą laimėjo Jonas" << endl;
else cout << "Turnyrą laimėjo Povilas" << endl;

 

Teisingą rezultatą gautume užrašę ir tokius sąlyginius sakinius:

if (m < n) cout << "Turnyrą laimėjo Jonas" << endl;
else cout << "Turnyrą laimėjo Povilas" << endl;

 

if (m > n) cout << "Turnyrą laimėjo Povilas" << endl;
else cout << "Turnyrą laimėjo Jonas" << endl;

 

if (n < m) cout << "Turnyrą laimėjo Povilas" << endl;
else cout << "Turnyrą laimėjo Jonas" << endl;

 

Kaip matome, sąlyginio sakinio sintaksė yra nesudėtinga:

if (<sąlyga>) <veiksmas, kai="" sąlyga="" tenkinama="">;
else <veiksmas, kai="" sąlyga="" netenkinama="">;

 

Jei reikia atlikti kelis veiksmus, kai sąlyga tenkinama, arba kai sąlyga netenkinama, tuomet tie veiksmai apgaubiami skliaustais {}:

if (<sąlyga>) {<veiksmai, kai="" sąlyga="" tenkinama="">;}
else {<veiksmai, kai="" sąlyga="" netenkinama="">;}


Išnagrinėkime dar vieną pavyzdį:

Pirmosios olimpinės žaidynės įvyko 1896 metais ir toliau organizuojamos kas ketveri metai. Jei žaidynės neįvyksta, tie metai vis tiek laikomi olimpiniais, o žaidynėms skiriamas eilės numeris. Parašykite programą, kuri surastų m-ųjų metų olimpinių žaidynių numerį n. Jei metai neolimpiniai, turi būti spausdinama „Metai neolimpiniai“.

Pasitikrinkite. Kai m = 1904, ekrane turi būti rodoma: n = 3. Kai m = 2005, turi būti rodoma: Metai neolimpiniai.

// Olimpiniai metai
#include
using namespace std;
int main ()
{
int n, m;
cout << "Kurie metai? "; cin >> m;
if ((m - 1896) % 4 == 0) {
n = (m - 1896) / 4 + 1;
cout << "n = " << n << endl;
}
else cout << "Metai neolimpiniai" << endl;
return 0;
}

Spręsdami šį uždavinį sąlyginį sakinį galime užrašyti ir kitaip:

if ((m – 1896) % 4 != 0) cout << "Metai neolimpiniai" << endl;
else
{
n = (m – 1896) / 4 + 1;
cout << "n = " << n << endl;
}

     

Sudėtingas sąlyginis sakinys

Kai reikia patikrinti, ar tenkinama viena iš kelių sąlygų, rašomas sudėtingas sąlyginis sakinys. Išnagrinėkime pavyzdį:

 

Parenkite programą, kuri praneštų, kada baigiasi pamoka, jei iki pamokos pabaigos liko t minučių:

    1. jei iki pamokos pabaigos liko daugiau negu 30 minučių, turi būti spausdinamas pranešimas „Liko dar labai daug laiko“,
    2. jei iki pamokos pabaigos liko mažiau negu 30, bet daugiau negu 15 minučių, turi būti spausdinamas pranešimas „Liko dar nemažai laiko“,
    3. jeigu iki pamokos pabaigos liko nuo 15 iki 7 minučių, turi būti spausdinamas pranešimas „Liko nedaug laiko“,
    4. o jei 7 ir mažiau minučių – turi būti spausdinama „Pamoka baigiasi“.

Pasitikrinkite: kai t = 5, tuomet ekrane turi būti rodoma: „Pamoka baigiasi“.

Kai t = 40, tuomet ekrane turi būti rodoma: „Liko dar labai daug laiko“.

Kai t = 20, tuomet ekrane turi būti rodoma: „Liko dar nemažai laiko“.

Kai t = 10, tuomet ekrane turi būti rodoma: „Liko nedaug laiko“.


// Laikas iki pamokos pabaigos
#include
using namespace std;
int main ()
{
int t;
cout << "Kiek minučių liko iki pamokos pabaigos?"; cin >> t;
if (t < 7) cout << "Pamoka baigiasi." << endl;
else if (t <= 15) cout << "Liko nedaug laiko." << endl;
else if (t < 30) cout << "Liko dar nemažai laiko." << endl;
else cout << "Liko dar labai daug laiko." << endl;
return 0;
}

 

Kaip pastebėjote, tikrinama viena sąlyga mažiau, negu jų yra iš viso.

 

Kelių sąlygų jungimas loginėmis operacijomis

 

Labai dažnai tenka spręsti uždavinius, kai vienu metu turi būti tenkinamos kelios sąlygos, arba bent viena iš kelių sąlygų. Tokiu atveju sąlygos jungiamos loginėmis operacijomis ir arba arba. Kaip tai daroma išsiaiškinsime nagrinėdami pavyzdžius.

1 pavyzdys

Norėdama paskatinti mokinius nuosekliai dirbti, mokytoja nusprendė pusmečio gale parašyti po dešimtuką visiems:

  • kurie sąžiningai sprendė namų darbus (n1 = 1, kai mokinys sąžiningai sprendė namų darbus, n1 = 0, kai mokinys atliko ne visus namų darbus arba sprendė juos nesąžiningai),
  • kurių užrašai yra tvarkingi ir pilni (n2 = 1, kai mokinys veda tvarkingus užrašus ir jie yra pilni, n2 = 0, kai mokinio užrašai yra netvarkingi arba nepilni),
  •  kurie be pateisinamos priežasties nepraleido nė vienos pamokos (n3 = 1, kai mokinys be pateisinamos priežasties nepraleido nė vienos pamokos, n3 = 0, kai mokinys praleido pamokas be pateisinamos priežasties).

Parašykite programą, kuri kompiuterio ekrane parodytų pranešimą, ar mokinys gaus dešimtuką už gerą pusmečio darbą.

 

Pasitikrinkite: kai n1 = 0, n2 = 0, n3 = 0, tuomet ekrane turi būti rodomas pranešimas Mokinys dešimtuko negaus, kai n1 = 0, n2 = 1, n3 = 0, tuomet ekrane turi būti rodomas pranešimas Mokinys dešimtuko negaus, kai n1 = 1, n2 = 1, n3 = 1, tuomet ekrane turi būti rodomas pranešimas Mokinys dešimtuką gaus.

Norint gauti dešimtuką reikia įvykdyti visas sąlygas. Tokiu atveju sąlygos jungiamos logine operacija ir. Programa būtų tokia:

// Paskatinimas
#include
using namespace std;
int main ()
{
int n1, n2, n3;
cout << "Ar mokinys sąžiningai atliko namų darbus? Jei taip, įveskite 1, jei ne – 0 ";
cin >> n1;
cout << "Ar mokinio užrašai tvarkingi ir pilni? Jei taip, įveskite 1, jei ne - 0 ";
cin >> n2;
cout << "Ar mokinys nepraleido pamokų be pateisinamos priežasties? Jei taip, įveskite 1, jei ne - 0 ";
cin >> n3;
if ((n1 == 1) && (n2 == 1) && (n3 == 1)) cout << "Mokinys dešimtuką gaus." << endl;
else cout << "Mokinys dešimtuko negaus." << endl;
return 0;
}

2 pavyzdys

Rinkdamasi audinį išleistuvių suknelei Toma galvoja, kad jai geriausiai tiktų melsvos, rusvos ar žalsvos spalvos suknelė. Parduotuvėje ji apžiūrinėja audinius (m1 = 1, tai melsvos spalvos audinio yra, m1 = 0 – melsvos spalvos audinio parduotuvėje nėra; m2 = 1, tai rusvos spalvos audinio yra, m2 = 0 – rusvos spalvos audinio parduotuvėje nėra; m3 = 1, tai žalsvos spalvos audinio yra, m3 = 0 – žalsvos spalvos audinio parduotuvėje nėra).

Parašykite programą, kuri kompiuterio ekrane parodytų pranešimą, ar pavyks Tomai parduotuvėje įsigyti audinio išleistuvių suknelei.

 

Pasitikrinkite: kai m1 = 1, m2= 1, m3= 1,  tuomet kompiuterio ekrane turi būti rodoma: Toma audinio suknelei įsigis. Kai m1 = 1, m2 = 0, m3 = 0,  tuomet kompiuterio ekrane turi būti rodoma: Toma medžiagą suknelei įsigis. Kai m1 = 0, m 2 = 0, m3 = 0,  tuomet kompiuterio ekrane turi būti rodoma: Toma audinio suknelei neįsigis.

 

Toma medžiagą suknelei įsigis, jei parduotuvėje bus bent vienos iš pageidaujamų spalvų medžiaga. Tokiu atveju sąlygos jungiamos logine operacija arba. Programa būtų tokia:

// Tomos noras
#include
using namespace std;
int main ()
{
int m1, m2, m3;
cout << "Ar parduotuvėje yra melsvos spalvos audinio? Jei taip, įveskite 1, jei ne - 0 ";
cin >> m1;
cout << "Ar parduotuvėje yra rusvos spalvos audinio? Jei taip, įveskite 1, jei ne - 0 ";
cin >> m2;
cout << "Ar parduotuvėje yra žalsvos spalvos audinio? Jei taip, įveskite 1, jei ne - 0 ";
cin >> m3;
if ((m1 == 1) || (m2 == 1) || (m3 == 1))
cout << "Toma audinio suknelei įsigis." << endl;
else cout << "Toma audinio suknelei neįsigis." << endl;
return 0;
}

 

Į viršų