Programska petlja do..while

Sjedište: CARNET - Arhiva 2021 Loomen
E-kolegij: III. Gimnazija Osijek - Informatika 2
Knjiga: Programska petlja do..while
Otisnuo/la: Gost (anonimni korisnik)
Datum: ponedjeljak, 28. listopada 2024., 12:19

1. Petlja do..while

Programska petlja do-while je petlja u kojoj se uvjet ponavljanja ispituje na kraju bloka naredbi. Upotrebljava se u slučajevima kada je blok naredbi unutar petlje potrebno izvršiti barem jedanput, neovisno o istinitosti danog uvjeta.

Njezin je opći oblik ovaj:

     do
     {
           blok_naredbi;        
     } while (uvjet);

A to znači: ponavljaj blok naredbi sve dok je uvjet istinit ili različit od 0.

Dijagram tijeka naredbe do-while:

Napomena: Kao što smo mogli ugnježđivati petlju for, isto tako možemo ugnježđivanje petlje while i do-while jedne u drugoj ili kombinirati dvije (ili više) različite petlje, ovisno o zahtjevima zadatka.


1.1. Primjer 1.

Nakon izvođenja programa:

#include <stdio.h>
int main()
{
     int i=1;
     do
     {
           printf("%d ",i);
           i++;
     }while(i<=10);
     return 0;
}

na zaslonu će se ispisati brojevi: 1, 2, 3, 4, 5, 6, 7, 8, 9 i 10 /*odvojeni razmakom jer u naredbi za ispis nije drukčije definirano*/.

 

Stavimo li u prethodnom primjeru početnu vrijednost kontrolne varijable i na 11, program izgleda ovako:


#include <stdio.h>
int main()
{
     int i=11;
     do
     {
           printf("%d ",i);
           i++;
     }while(i<=10);
     return 0;
}
 

Nakon njegova izvođenja, na zaslonu će se ispisati samo broj 11.

Zašto?

Početna vrijednost kontrolne varijable je 11 i ona ne zadovoljava dani uvjet, ali uvjet se provjerava tek na kraju i sve naredbe koje se nalaze ispred provjere uvjeta će se izvršiti. Tek kada se provjeri uvjet, program izlazi iz petlje. Zbog toga treba biti vrlo oprezan pri uporabi petlje s provjerom uvjeta na kraju bloka naredbi.


1.2. Primjer 2.

Koje od ovih do-while oblika nisu ispravni i zašto?

a)

i=1;
do (i<=10)
{
     printf("%d ",i);
     i++;
}while;


b)

i=1;
while
{
     printf("%d ",i);
     i++;
}do(i<=10);


 c)

i=1;
do
     printf("%d ",i);
while(i<=10);

 

d)

i=1;
do
{
     printf("%d ",i);
     i+=2;
} while(i<=10);

 

Rješenje

  • Oblik a) nije ispravan jer uvjet ponavljanja u do-while petlji  treba biti na kraju bloka naredbi koje se ponavljaju.
  • Oblik b) nije ispravan jer ključna riječ do mora biti na početku, a while na kraju bloka naredbi.
  • Oblik c) ima ispravnu sintaksu, ali ima logičku pogrešku. Kontrolna varijabla i nigdje ne mijenja svoju vrijednost, cijelo vrijeme ostaje 1. Program će ući u beskonačnu petlju. Zamijetite da u ovom primjeru nismo napisali vitičaste zagrade jer se unutar bloka do-while nalazi samo jedna naredba.
  • Oblik d) je ispravan i na zaslonu će ispisati brojeve: 1, 3, 5, 7 i 9 jer se kontrolna varijabla i povećava za 2 pri svakoj promjeni vrijednosti.

 

1.3. Primjer 3.

Kolika je vrijednost varijable a nakon izvođenja sljedećih naredbi?

     int a=0;
    do
       a++;
    while (a>10);  

 

Zašto?

Rješenje

Varijabla a=1 jer uvjet nije istinit. S obzirom na to da se uvjet ispituje na kraju, jedanput se izvrši naredba unutar petlje!

U ovom primjeru vitičaste zagrade nisu potrebne jer se unutar naredbe do-while izvršava samo jedna naredba.


1.4. Primjer 4.

Kolika je vrijednost varijabli a i b nakon izvođenja sljedećeg niza naredbi?

     int a=10,b;
     do
     {
           b=a/2;
           a=pow(a,2);
     } while (a<50);

 

Rješenje

a = 100, b = 5


2. Zadaci za vježbu

1. Što će se ispisati na zaslonu nakon izvođenja sljedećeg programa?

#include <stdio.h>
int main()
{
     int i=1, s=0;
     do
     {
           s+=i;
           i++;
     }while (i<=10);
     printf("%d ",s);
     return 0;
}

Kako glasi tekst kojim bi se zadao prethodni program?

2. Napišite program koji će s pomoću petlje do-while zbrojiti troznamenkaste brojeve djeljive s 19. Osim dobivenog zbroja, program treba na zaslonu ispisati i koliko ima takvih brojeva.

Testni primjeri

Izlaz:     Zbroj je 28832, a ima ih 53 

 

3. Napišite program koji će korisniku omogućiti učitavanje brojeva sve dok se ne upiše  -1. Program treba na zaslonu ispisati koliko je među upisanim brojevima onih koji su djeljivi s 5.

Testni primjeri

Ulaz:      13  2  1  7  6  28  -1
Izlaz:     0

Ulaz:      15  21  5  10  13  -1
Izlaz:     3


4. Napišite program koji će omogućiti upisivanje brojeva sve dok se ne upiše broj djeljiv s 3. Program treba ispisati koliko je ukupno upisano brojeva (uključujući i posljednji upisan broj), njihov zbroj i prosječnu vrijednost upisanih brojeva.

Testni primjeri

Ulaz:      2  7  13  17  21
Izlaz:     ima ih 5
             zbroj: 60
             prosjek: 12.00

Ulaz:      4  22  41  32  16  18
Izlaz:     ima ih 6
             zbroj: 133
             prosjek: 22.17

Rješenja zadataka od 2. do 4. pronađite na e-sferi.

3. Za one koji žele znati više!

1. Napišite program koji će tražiti upisivanje prirodnog broja n. Program treba pronaći i ispisati na zaslonu najmanji prosti broj koji je veći od n.

/* Prosti brojevi su prirodni brojevi koji su djeljivi samo s 1 i sa samim sobom */

2. Napišite program koji od korisnika traži upisivanje prirodnog broja n. Program treba pronaći i ispisati na zaslonu sve savršene brojeve od 1 do upisanog broja n. Broj je savršen ako je jednak zbroju svih svojih djelitelja, isključujući njega.


Rješenja ovih zadataka možete pronaći na e-sferi.

4. Dodatni materijali

Video lekcija - do..while petlja: