Capitlul 3.6. Bucle Do - While

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitlul 3.6. Bucle Do - While

Mesaj  zooky la data de Mier Mar 18, 2009 12:13 pm

Buclele while si for impartasesc atributul de testare a conditiei de terminare la inceputul buclei mai degraba decit la sfirsitul ei, asa cum am discutat in Capitolul 1. Al treilea tip de bucle in C - bucla do-while - testeaza conditia la sfirsit, dupa ce a executat intreg corpul buclei; corpul este executat cel putin o data. Sintaxa ei este

do
instructiune
while (expresie);

"Instructiune" este executata si apoi "expresie" este evaluata. Daca este adevarata, "instructiune" se executa din nou, s.a.m.d. Daca "expresie" devine falsa, bucla se termina.

Asa cum este de asteptat, bucla "do-while" este folosita mai putin decit while si for, probabil 5% din totalul de folosire a buclelor. Cu toate acestea, ea este din timp in timp valoroasa, ca in exemplul urmator, unde functia itoa converteste un numar intr-un sir de caractere (inversa lui atoi). Lucrarea este putin mai complicata decit se pare la prima vedere, deoarece metodele usoare de generare de cifre le genereaza intr-o ordine gresita. Am ales calea de a genera sirul invers apoi de a-l inversa.

itoa (n, s) /* converteste pe n in caractere in s */
char s[];
int n;
{
int i, sign;
if ((sign = n) < 0) /* semnul inregistrarii */
n = -n; /* face pe n pozitiv */
i = 0;
do { /* genereaza cifre in ordine inversa */
s[i++] = n % 10 +'0';/*ia uramatoarea cifra*/
}
while ((n /= 10) > 0); /* sterge-o */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}

Bucla do-while este necesara, sau cel putin convenabila deoarece cel putin un caracter trebuie pus in matricea s, indiferent de valoarea lui n. Am folosit de asemenea acoladele in jurul singurei instructiuni ce compune corpul buclei do-while, chiar daca nu sint necesare pentru ca cititorul grabit sa nu considere gresit partea cu while ca fiind inceputul unei bucle while.

Exercitiul 3.3. In reprezentarea numerelor ca si complemente fata de 2 versiunea noastra pentru itoa nu functioneaza pentru numarul negativ cel mai mic, adica pentru valoarea lui n egala cu -(2 la puterea dimensiune cuvint-1). Explicati de ce.
Modificati functia pentru a functiona corect si pentru aceasta valoare, indiferent de calculatorul pe care se executa.

Exercitiul 3.4. Scrieti o functie analoaga itob(n, s) care converteste intregii fara semn n intr-o reprezentare binara pe caracter in s. Scrieti itoh, care converteste un intreg intr-un numar haxazecimal.

Exercitiul 3.5. Scrieti o versiune a lui itoa care accepta trei argumente in loc de doua. Al treilea argument este un cimp de lungime minima; numarul convertit trebuie completat cu blancuri la stinga, daca e necesar, pentru a se inscrie in cimpul dat.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum