while (i<j) i = i + 1; Slika 1: Blok diagram stavka While
|
Stavek while uporabljamo za realizacijo ponavljanja zaporedja stavkov, ki se lahko izvedejo 0 ali večkrat. V stavku while najprej preverimo pogoj. Če je pogoj izpolnjen izvedemo zaporedje stavkov, ki so definirani znotraj tega stavka. V našem primeru v stavku while najprej preverimo pogoj (i<j). Če je pogoj izpolnjen (spremenljivka i ima vrednost, ki je manjša od vrednosti spremenljivke j), izvedemo prireditveni stavek (i =i+1). Preverjanje pogoja in izvajanje prireditvenega stavka ponavljamo tako dolgo, dokler je pogoj izpolnjen. Ko pogoj ni več izpolnjen, nadaljujemo z izvajanjem nasledenjega stavka, ki sledi stavku while. |
Poglejmo si najprej algoritem, ki opiše postopek vnosa in seštevanja treh števil.
VHOD:
tri števila.
IZHOD:
vsota treh števil.
ALGORITEM:
Inicializiraj vsoto na 0.
Vpiši prvo število.
Vsoti prištej prvo število.
Vpiši drugo število.
Vsoti prištej drugo število.
Vpiši tretje število.
Vsoti prištej tretje število.
Izpiši vsoto.
Poglejmo si še programsko kodo za ta algoritem:
// Program sešteje tri števili
#include <iostream>
using namespace std;
int main()
{
int celo_stevilo_1, celo_stevilo_2, celo_stevilo_3, vsota; // deklaracija spremenljivk
// Inicializiraj vsoto
vsota=0;
// Vnesi prvo število
cout <<"Vnesi prvo stevilo:"; // pred vsakim vnosom moramo izpisat kaj naj vnesemo!!!
cin >> celo_stevilo_1;
// Vsoti prištej prvo število
vsota=vsota+celo_stevilo_1;
// Vnesi drugo število
cout <<"Vnesi drugo stevilo:"; // pred vsakim vnosom moramo izpisat kaj naj vnesemo!!!
cin >> celo_stevilo_2;
// Vsoti prištej drugo število
vsota=vsota+celo_stevilo_2;
// Vnesi tretje število
cout <<"Vnesi tretje stevilo:"; // pred vsakim vnosom moramo izpisat kaj naj vnesemo!!!
cin >> celo_stevilo_3;
// Vsoti prištej tretje število
vsota=vsota+celo_stevilo_3;
// Izpiši vsoto
cout << "Izračunana vsota treh števil je:" << vsota << endl;
return 0;
} // konec programa
Kaj če bi želeli vnesti 10 števil in jih sešteti? Del kode bi morali ponovno prekopirati (preberi število, vsoti prištej spremenjivko) in uvesti nove spremenljivke (celo_stevilo_4, celo_stevilo_5...). Hitro ugotovimo, da gre za enako nalogo, ki se večkrat ponovi, zato bomo naš algoritem nekoliko spremenili. Dodali bomo števec, ki bo štel, koliko števil smo vnesli, inicializirali ta števec na 0, inicializirali vsoto števil na 0. Dodali pa bomo tudi stavek while, ki preverja ali smo že vnesli tri števila. Znotraj stavka while se bodo izvedli naslednji ukazi: preberi število, vsoti prištej število in povečaj števec vnešenih števil za 1. Ko smo vnesli tri števila (števec vnešenih števil je 3), se ponavljanje ukazov zaključi. Po koncu izvajanja stavka while, se izpiše vsota števil.
ALGORITEM:
Inicializiraj vsoto na 0.
Inicializiraj števec na 0.
while (števec < 3)
Preberi število.
Vsoti prištej število.
števec = števec + 1
Izpiši vsoto.
Programska koda za ta algoritem je naslednja:
//Program za izracun vsote treh stevil
# include <iostream>
using namespace std;
main ()
{ int vsota = 0;
int stevec = 0;
int stevilo;
while (stevec < 3)
{
stevec = stevec + 1;
cout << "Vpisi stevilo: ";
cin >> stevilo;
vsota = vsota + stevilo;
}
cout << "Vsota stevil je: " << vsota << endl;
return 0;
}
Če bi želeli izračunati vsoto desetih števil, bi spremenili pogoj (iz (stevec <3), bi ga spremenili na (stevec <10)). Program bi sedaj izračunal vsoto desetih števil. Poglejmo spremenjeno kodo (spremenjen pogoj je izpisan poudarjeno):
//Program za izracun vsote desetih stevil
# include <iostream>
using namespace std;
main ()
{ int vsota = 0;
int stevec = 0;
int stevilo;
while (stevec < 10)
{
stevec = stevec + 1;
cout << "Vpisi stevilo: ";
cin >> stevilo;
vsota = vsota + stevilo;
}
cout << "Vsota stevil je: " << vsota << endl;
return 0;
}
Poskusite sami ugotoviti kako bi lahko program posplošili tako, da bi najprej vnesli koliko števil želimo vnesti?
ALGORITEM:
Inicializiraj vsoto na 0.
Inicializiraj števec na 0.
Preberi število števil, ki jih želiš vnesti - koliko_stevil
while (števec < koliko_stevil)
Preberi število.
Vsoti prištej število.
števec = števec + 1
Izpiši vsoto.
Programska koda ima naslednjo obliko:
//Program izračuna vsoto števil, kjer število števil vnesemo v času izvajanja programa
#include <iostream>
using namespace std;
main ()
{ int vsota = 0; // inicializiraj vsoto
int stevec = 0; // inicializiraj števec
int stevilo;
//Vnesite za koliko števil se bo izračunala vsota
int koliko_stevil;
cout << "Vnesite za koliko števil se bo izračunala vsota:";
cin >> koliko_stevil;
while (stevec < koliko_stevil)
{
stevec = stevec + 1;
cout << "Vpisi stevilo: ";
cin >> stevilo;
vsota = vsota + stevilo;
}
cout << "Vsota stevil je: " << vsota << endl;
return 0;
}
Poskusite sami ugotoviti kako bi gornji program modificirali tako, da bi računali samo vsoto števil, ki so parna?
ALGORITEM:
Inicializiraj vsoto na 0.
Inicializiraj števec na 0.
Preberi število števil, ki jih želiš vnesti - koliko_stevil
while (števec < koliko_stevil)
Preberi število.
if število je parno
Vsoti prištej število.
števec = števec + 1
Izpiši vsoto.
Parnost števila ugotavljamo tako, da preverimo, če je število deljivo z 2. Pogoj ima obliko: (stevilo %2==0)
Programska koda ima naslednjo obliko:
//Program izračuna vsote števil, kjer število števil vnesemo v času izvajanja programa
#include <iostream>
using namespace std;
main ()
{ int vsota = 0; // inicializiraj vsoto
int stevec = 0; // inicializiraj stevec
int stevilo;
//Vnesite za koliko števil se bo izračunala vsota
int koliko_stevil;
cout << "Vnesite za koliko števil se bo izračunala vsota:";
cin >> koliko_stevil;
while (stevec < koliko_stevil)
{
cout << "Vpisi stevilo: ";
cin >> stevilo;
if (stevilo % 2==0)
vsota = vsota + stevilo;
stevec = stevec + 1;
}
cout << "Vsota stevil je: " << vsota << endl;
return 0;
}
Poskusite sami ugotoviti kako bi lahko gornji program posplošili tako, da bi vnašali števila tako dolgo, dokler ne bomo vnesli števila -1?
ALGORITEM:
Inicializiraj vsoto na 0.
Inicializiraj števec na 0.
while (stevilo!=-1)
Preberi število.
Vsoti prištej število.
števec = števec + 1
Izpiši vsoto.
Programska koda ima naslednjo obliko:
//Program izračuna vsote števil, kjer število števil vnesemo v času izvajanja programa
#include <iostream>
using namespace std;
main ()
{ int vsota = 0; // inicializiraj vsoto
int stevec = 0; // inicializiraj stevec
int stevilo =0; // inicializacija števila
while (stevilo != -1)
{
cout << "Vpisi stevilo: ";
cin >> stevilo;
vsota = vsota + stevilo;
stevec = stevec + 1;
}
cout << "Vsota stevil je: " << vsota << endl;
return 0;
}