for si while

Ca si orice alta activitate, programarea depinde mult de factorul uman. Hai sa vedem ce ne face pe noi sa butonam.

for si while

Postby jolgau » 15 Dec 2010, 21:52

Salut.

Imi poate explica si mie cineva care este diferenta intre for si while in programare c++ varog frumos?
0,0p / 0 votes
User avatar
jolgau
Bit
 
Joined: 11 Dec 2010
Status: 0

Re: for si while

Postby noobakaflo » 15 Dec 2010, 23:32

1.Pentru for:
  1.  
  2. n=3;
  3. for(i=1; i<=n; i++)
  4. cout<<0;
  5.  

Echivalent cu "pentru i intre 1 si n scrie 0 "; Va scrie 0 de n ori ,adica de 3 ori

2.Pentru while
  1.  
  2. a=238;
  3. while (a>1)
  4. {
  5. cout<<0;
  6. a=a/10;
  7. }
  8.  

Echivalent cu " cat timp a mai mare ca 1 , se va scrie 0 si se va elimina ultima cifra a lui a (a=a/10)" ; Va scrie 0 de 2 ori.

Nu stiu daca ai inteles,daca nu ti-ai dat seama. Cel mai bine ia o foaie si un pix si exerseaza cu tabel,o coloana pt fiecare variabila in parte ..asa intelegi.
0,0p / 0 votes
User avatar
noobakaflo
Bit
 
Joined: 10 Dec 2010
Location: Ploiesti
Status: 1

Re: for si while

Postby v0id » 16 Dec 2010, 00:15

@noobakaflo - la al doilea exemplu, cel cu "while", 0 se va afisa tot de 3 ori, nu de 2 ori cum ai scris tu

@jolgau - la nivel teoretic, "for" este o instructiune repetitiva cu numar cunoscut de pasi. "while" este o instructiune repetitiva cu numar necunoscut de pasi si cu test initial. Practic, le poti folosi pe ambele ca sa obtii acelasi lucru, daca vrei. Diferenta va fi ca la "for" contorul se va incrementa automat, iar la "while" va trebui sa ai tu grija sa-l incrementezi, ca sa nu ai bucla infinita.

De asemenea, la "while" nu e obligatoriu sa ai un contor (de-aia ii spune "cu numar necunoscut de pasi"). In functie de ce ai nevoie sa faci, conditia ta de iesire din bucla poate implica verificari pe un contor sau nu. Trebuie numai sa ai grija ca la un moment dat conditia de iesire din bucla sa se indeplineasca, altfel o sa duci procesorul in 100% :)

Echivalentul cu "while" al exemplului dat mai sus de noobakaflo pentru "for", ar fi:

  1.  
  2. n = 3;
  3. i = 1;
  4. while (i <= n)
  5. {
  6.   cout<<0;
  7.   i++;
  8. }
  9.  
1p / 1 votes
A good coder is never on holiday - he may be working on a different machine, that's about as far as it gets.
User avatar
v0id
Word
 
Joined: 05 Jan 2010
Location: 127.0.0.1
Status: 42.5

Re: for si while

Postby smith » 16 Dec 2010, 00:59

În C/C++ instrucțiunile repetitive sunt: while, do-while și for.
For-ul este doar o formă mai specială de while. Adică tot ce se poate face cu un for, se poate face și cu un while (chiar și viceversa, dar în pascal invers nu cred că este posibil).

Forma generală a instrucțiunii for este următoarea:
  1. while (condiție)
  2. {
  3.     //corpul instructiunii while
  4.     //cod care urmează să fie executat/repetat dacă se intră în while
  5.     instructiune1;
  6.     instructiune2;
  7.     ...
  8. }

Asta înseamnă că atât timp cât condiția dintre paranteze este adevărată, se va repeta ce este între acolade { } . Condiția se modifică în interiorul corpului instuctiunii while (noobakaflo a dat deja un exemplu).
De asemenea instrucțiunea while execută doar prima linie sau primul bloc de cod de după ea (la fel și forul). Bloc de cod înseamnă mai mult de o intrucțiune toate încapsulate între acolade.
Fie următorul cod:
  1. int i = 0;
  2. while(i<10)
  3.     cout<<++i;
  4. cout<<i;  //ma da de gol indentarea :))

Outputul va fi următorul:

Explicație: Codul repetă doar primul cout. Astfel i este incrementat și afișat. După ce i are valoarea 10, se iese din bluca while și se execută cout-ul de mai jos. Unii oameni ar fi crezut că codul afișează :

De aceea am menționat că while repetă doar prima linie sau primul bloc între acolade.
Această formă de while se mai numește instrucțiune while condiționată anterior (datorită condiției de intrare în buclă aflate la începutul acesteia)

Cealaltă formă a while-ului este do-while și se mai numește intrucțiune while condiționată ulterior (datorită condiției de intrare în buclă aflate la sfârșitul acesteia)
Forma acestei bucle este următoarea:
  1. do{
  2.     //cod care urmează să fie executat/repetat cel puțin odată
  3. while(condiție);

Astfel putem asigura executarea codului cel puțin odată. Dacă condiția este încă adevărata și după prima iterație codul va continua să fie repetat. Dacă nu, se iese din while.

Forma generală a buclei for este următoarea:
  1. for (initializare;conditie;pas de incrementare)
  2. {
  3.     //corpul for-ului
  4.     //instructiuni ce urmează să fie executate/repetate dacă se intră în for
  5. }

Astefel for-ul ne dă posibilitatea să avem deja un contor(sau mai multe) care parcurge un interval (a dat un exemplu și noobakaflo).
Fiecare 'parametru' al instructiunii for este optional.
Exemplu:
  1. int i = 0;
  2. for( ; ; )
  3. {
  4.     i++;
  5.     cout<<i;
  6.     if (i==10)
  7.         break;
  8. }

În acest exemplu, toți parametrii lipsesc. Astfel am format o buclă "infinită". Totuși bucla este oprită de acel "break" care ne scoate din for când i este 10. Puteți observa că for-ul poate imita și el un while. De asemenea, void spunea că for este, teoretic, o instrucțiune repetitivă cu număr cunoscuți de pași (În pascal, da. În c/c++, nu neapărat)
De asemenea parametrii pot să lipsească în mai multe moduri, nu doar toți deodată.
Exemple:
  1. for(int i=0 ; ; )
  2. for( ; i<10 ; )
  3. for( ; ; ++i )
  4. for(int i=50 ; i<100 ; )
  5. for( ; i>40 ; i-=2 )
  6. for(i=2 ; ; i=i+2 )

Dacă observi, la ultimele două am modificat PASUL. C/C++ permite în bucla for, un pas diferit. Astfel poți sa faci de exemplu, un for care "trece" prin toate numerele divizibile cu 5:
  1. for(int i=5 ; i<=100 ; i+=5)
  2.      cout<<i<<endl;

De asemenea am menționat mai sus că for-ul din C/C++ poate avea mai mulți contori.
Exemplu:
  1. for(int i=0,j=100 ; i<j ; i++,j--)
  2. {
  3.      cout<<i<<" "<<j<<endl;;
  4. }

Poți testa chiar tu să vezi ce face codul. Poți să te joci un pic să vezi cât de flexibil este for-ul, astfel înveți cel mai bine.

Observație: Dacă declari variabile ÎN interiorul instrucțiunii for, acestea au "viață" doar cât timp se execută acel for doar în interiorul corpului for.
Exemplu:
  1. //contor declarat ÎN interiorul instrucțiunii for
  2. for(int i=0 ; i<10 ; i++)
  3. {
  4.               //în corpul for
  5.      cout<<i; //avem acces la i;
  6. }
  7.          //înafara corpului
  8. cout<<i; //eroare - nu mai avem acces la i

Pe când aici:
  1. int i;  //contor declarat înafara instrucțiunii for
  2. for(i = 0; i<10 ; i++)
  3. {
  4.              //în corpul for
  5.     cout<<i; //avem acces la i
  6. }
  7.          //înafara corpului
  8. cout<<i; //și aici avem acces la i


De asemenea, ca și while, for-ul execută doar prima linie SAU primul bloc de cod (cod între acolade).
Exemplu:
  1. int i;
  2. for(i=0;i<10;i++)
  3. cout<<i;
  4. cout<<i*i;  // n-am mai indentat ca să nu mă dau de gol - i just did:))

Output-ul va fi:

Mulți începători vor crede că va afișa 112439 etc. For-ul repetă doar prima linie. La ieșire din for, i-ul are valoarea 10 si se afișează 100 cu cout-ul dinafara for-ului.

Sper ca ai avut răbdare să citești tot :P .
2p / 1 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: for si while

Postby noobakaflo » 16 Dec 2010, 07:06

v0id wrote: la al doilea exemplu, cel cu "while", 0 se va afisa tot de 3 ori, nu de 2 ori cum ai scris tu




  1. a=238;
  2. while (a>10)
  3. {
  4. cout<<0;
  5. a=a/10;
  6. }


Eee.. am gresit si eu , 'mancasem' un 0 din tastatura :">
0,0p / 0 votes
User avatar
noobakaflo
Bit
 
Joined: 10 Dec 2010
Location: Ploiesti
Status: 1

Re: for si while

Postby jolgau » 16 Dec 2010, 18:34

Mersi mult, acuma le-am inteles mult mai bine!
0,0p / 0 votes
User avatar
jolgau
Bit
 
Joined: 11 Dec 2010
Status: 0

Re: for si while

Postby adrianav500 » 11 Jan 2012, 12:50

cred ca este 50%offtopic,dar imi poate da si mie cineva o definitie la do-while,va rog?
0,0p / 0 votes
User avatar
adrianav500
Bit
 
Joined: 21 Dec 2011
Status: 0

Re: for si while

Postby DarkByte » 12 Jan 2012, 19:54

Cauta in tutorialul de Pascal despre bucle ... te intereseaza bucla Repeat (este, practic, do-while din C / C++)
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: for si while

Postby adrianav500 » 12 Jan 2012, 20:56

Pai imi trebuie do din c++.
0,0p / 0 votes
User avatar
adrianav500
Bit
 
Joined: 21 Dec 2011
Status: 0

Re: for si while

Postby eni4ever » 13 Jan 2012, 01:31

DarkByte se referea la un pont privind gândirea ce stă în spatele acestor construcții. Dacă înțelegi echivalentul în Pascal, poți să aplici conceptul în orice alt limbaj de nivel înalt inclusiv, ceea ce te interesează pe tine, : C/C++.
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: for si while

Postby adrianav500 » 13 Jan 2012, 01:34

A,ok...Multumesc!
0,0p / 0 votes
User avatar
adrianav500
Bit
 
Joined: 21 Dec 2011
Status: 0


Return to Discutii despre programare

Who is online

Users browsing this forum: No registered users and 0 guests

cron