Naredbe

1.Naredbe

    Ovo poglavlje opisuje razne oblike C++ naredbi koje služe za pisanje programa.

 Kao i većina ostalih programskih jezika, C++ nudi različite vrste naredbi koje se koriste u različite svrhe. Tako se deklaracione naredbe koriste za definisanje varijabli, naredbe pridruživanja za jednostavne proračune, itd.

 

1.1 Jednostavne i složene naredbe

Jednostavna naredba je svaka naredba koja završava tačka-zarezom. Definicije varijabli i izrazi koji završavaju sa tačka-zarezom su neki primjeri:

 

        int i;                      // deklaraciona naredba

        ++i;                        // naredba sa popratnim efektom

        double d = 10.5; // deklaraciona naredba

        d + 5;                     // beskorisna naredba

 

   Posljednji primjer pokazuje beskorisnu naredbu, jer nema nikakvih popratnih efekata.

Najjednostavniji oblik naredbe je linija koja sadrži samo tačka-zarez, tzv. null-naredba.

No, i ovakva naredba ponekad ima smisla, što će se pokazati u kasnijem tekstu. Mnogostruke naredbe se mogu kombinovati u složene naredbe kada se grupišu između velikih zagrada ({}), kao na primjer:

 

               { int min, i = 10, j = 20;

               min = (i < j ? i : j);

               cout << min << '\n';

               }

 

Ovakve naredbe su korisne iz dva razloga:

 a) omogućuju da se mnogostruka naredba postavi tamo gdje bi inaće mogla da se postavi samo jedna, i

 b) omogućuju da se u program uvede scope (prostor).

      Scope predstavlja dio programa unutar kojeg varijabla ostaje definisana. Izvan scope-a ona  više to nije.

1.2 Naredba if

    Ponekad je poželjno da se izvrši određena naredba koja zavisi od ispunjenja nekog uslova. Upravo tu mogućnost pruža if naredba, čiji je opšti oblik:

 

                if (izraz)

                naredba;

 

Prvo se izvršava izraz, i ako je rezultat različit od nule izvršava se naredba. U suprotnom, ništa se ne dešava.

    Na primjer, ako bismo željeli provjeriti da li je pri djeljenju djelilac različit od nule, imali bismo:

 

               if (djelilac != 0)

               Kolicnik=djelitelj/djelilac;

 

Da bismo izvršili više naredbi koje ovisi o nekom istom uslovu, koristimo složenu naredbu, tj. Sve naredbe stavljamo između zagrada.

Varijanta if naredbe koja omogućuje da se specificiraju dvije alternativne naredbe, jedna koja se izvršava kada je uslov ispunjen i druga kada nije, se naziva if-else naredba i ima oblik:

 

               if (izraz)

              naredba;

              if (izraz)

              naredba1;

              else

              naredba2;

 

Ovdje se najprije izvršava izraz, i ako je rezultat različit od nule, izvršava se naredba1. U suprotnom, izvršava se naredba2, što pokazuje i sljedeći primjer:

 

          #include <iostream>

          using namespace std;

          main()

          {

          int x;

          cout << "Unesite neki broj";

          cin >> x;

          if (x % 2 == 0)

          cout << "Broj je paran" << endl;

          else

          cout << "Broj je neparan" << endl;

          }

 

Pored prethodno navedenih varijanti, postoji i ugniježdena if naredba, u kojoj se javljaju više od dvije alternative. Primjer takve varijente je:

 

     if (callHour > 6) {

     if (duzinaPoziva <= 5)

     cijena = duzinaPoziva * tarifa1;

     else

     cijena = 5 * tarifa + (duzinaPoziva - 5) * tarifa2;

     } else

     cijena = osnovnaCijena;

 

1.3 Naredba  switch

switch naredba omogućuje izbor između više alternativa, koje su zasnovane na vrijednosti izraza.

Opšti oblik switch naredbe je:

 

     switch (izraz) {

     case konstanta_1:

     naredbe;

     ...

     case konstanta_n:

     naredbe;

     default:

     naredbe;

     }

 

 

Prvo se računa izraz (koji se naziva switch tag), a zatim se rezultat poredi sa svakom od

numeričkih konstanti (koje se nazivaju labele), po redu kako se javljaju, dok se ne poklopi sa

jednom od komponenti. Nakon toga se izvršavaju naredbe koje slijede. Izvršavanje se izvodi sve dok se ne naiđe na naredbu break ili dok se ne izvrše sve naknadne naredbe. Posljednji slučaj (default) može, a i ne mora da se koristi, i pokreće se ako nijedna od prethodnih konstanti nije zadovoljena.

Klasični primjer ocijenjivanja nekog rada na osnovu osvojenih bodova dat je u daljem tekstu:

                   PRIMJER:

          #include <iostream>

          using namespace std;

          main()

          {

          int ocj;

          cout << "Unesite ocjenu: ";

          cin >> ocj;

          switch (ocj)

          {

          case 5:

          cout << "Imate 90 – 100 bodova" << endl;

          break;

          case 4:

          cout << "Imate 80 – 89 bodova" << endl;

          break;

          case 3:

          cout << "Imate 70 – 79 bodova" << endl;

          break;

          case 2:

          cout << "Imate 60 – 69 bodova" << endl;

          break;

         default:

         cout << "Imate ispod 60 bodova" << endl;

         }

         }

 

1.4 Naredba while

Naredba while (naziva se i while petlja) omogućuje ponavljanje neke naredbe sve dok je ispunjen neki uslov.

 Opšti oblik ove naredbe je:

 

              while (izraz)

              naredba;

 

Prvo se izračunava izraz (naziva se i uslov petlje). Ako je rezultat različit on nule tada se izvršava naredba (naziva se i tijelo petlje) i cijeli proces se ponavlja. U suprotnom, proces se zaustavlja.

Na primjer, ako bismo željeli izračunati zbir svih brojeva od 1 do n, upotreba while naredbe bi izgledala kao:

 

               i = 1;

               sum = 0;

               while (i <= n)

               sum += i++;

 

Interesantno je da nije neuobičajeno za while naredbu da ima prazno tijelo petlje, tj. null-naredbu.Takav primjer je problem nalaženja najvećeg neparnog faktora nekog broja:

 

              while (n % 2 == 0 && n /= 2)

                                ;

Ovdje uslov petlje izvršava sve neophodne kalkulacije, tako da nema potrebe za tijelom.

 

1.5 Naredba  do

Naredba do (naziva se i do petlja) je slična naredbi while, osim što se prvo izvršava tijelo petlje, a zatim se provjerava uslov. Opšti oblik naredbe je:

 

               do

               naredba;

               while (izraz);

 

Prvo se izvršava naredba, a zatim provjerava izraz. Ako je izraz različit od nule cijeli proces se

ponavlja. U suprotnom, petlja se zaustavlja.Treba napomenuti da se do petlja  manje koristi nego while petlja. Obično se koristi kada se tijelo petlje mora izvršiti najmanje jedanput bez obzira na ispunjenje uslova. Takav primjer je ponovljeno unošenje nekog broja i izračunavanje njegovog kvadrata dok se ne unese 0:

 

                do {

                cin >> n;

                cout << n * n << '\n';

                } while (n != 0);

 

Za razliku od while petlje, do petlja se nikada ne koristi sa praznim tijelom prvenstveno zbog

jasnoće.

 

1.6 Naredba  for

Naredba for (for petlja) je slična naredbi while, ali ima dvije dodatne komponente:

  a- izraz koji seizračunava samo jednom prije svega, i

  b- izraz koji se izračunava jednom na kraju svake iteracije.

Opšti oblik naredbe for je:

 

              for (izraz1; izraz2; izraz3)

              naredba;

Prvo se izračunava izraz1. Svakim prolazom kroz petlju se izračunava izraz2. Ako je rezultat

različit od nule izračunava se izraz3. U suprotnom petlja se zaustavlja. Oblik while petlje koja je ekvivalenta do petlji je:

 

                  izraz1;

                  while (izraz2) {

                 naredba;

                  izraz3;

                  }

 

for petlja se najčće koristi u situacijama kada se neka promjenljiva povećava ili smanjuje za

neku veličinu u svakoj iteraciji, odnosno kada je broj iteracija unaprijed poznat. Sljedeći primjer računa zbir svih brojeva od 1 do n:

 

                 sum = 0;

                 for (i = 1; i <= n; ++i)

                 sum += i;

 

Bilo koja od komponenti u petlji može biti prazna. Na primjer, ako se uklone prvi i treći izraz, onda do petlja liči na while petlju:

 

          for (; i != 0;) // je ekvivalentno sa: while (i != 0)

          bilo-sta;       // bilo-sta;

 

Uklanjanje svih izraza u petlji daje beskonačnu petlju:

 

          for (;;) // beskonačna petlja

          bilo-sta;

 

Pošto petlje predstavljaju naredbe, mogu se pojaviti unutar drugih petlji (tzv. ugniježdene petlje).

                 Na primjer:

          for (int i = 1; i <= 3; ++i)

          for (int j = 1; j <= 3; ++j)

          cout << '(' << i << ',' << j << ")\n";

 

 daje parove skupa {1,2,3}