vineri, 12 noiembrie 2010

L11. Instructiunea WHILE

Exista trei instructiuni (structuri) repetitive folosite in toate limbajele:

  • instructiunea repetitiva cu test initial CAT TIMP (WHILE) (se foloseste cand numarul de repetitii este nedefinit)

  • instructiunea repetitiva cu test final REPETA-PANA CAND (DO WHILE sau REPEAT) (se foloseste cand numarul de repetitii este nedefinit)

  • instructiunea repetitiva cu un numar cunoscut de pasi PENTRU (FOR) (se foloseste cand numarul de repetitii este cunoscut - un numar fix de ori.)


Instructiunea WHILE


Sintaxa :

  • while (expL) instructiune;


Efect

  1. Se evalueaza expresia logica

  2. Daca valoarea expresiei logice este 1 (adevarata) se executa instructiunea si se revine la pasul 1

  3. daca valoarea expresiei logice este zero (falsa) se continua cu instructiunea de dupa punct-virgula


Observatii:

  • in esenta, cat timp valoarea expresiei logice este adevarata, se executa instructiunea

  • daca valoarea expresiei logice este falsa de la inceput atunci instructiunea nu se mai executa

  • daca WHILE trebuie sa repete mai mult de o instructiune, acestea se vor incadra intre acolade;

  • instructiunea WHILE se mai numeste "repetitiva cu test initial" sau "conditionata anterior", pentru ca intai verifica valoarea conditiei si apoi executa secventa ce trebuie repetata


Problema exemplu. Fie A si B doua valori naturale. Sa se simuleza impartirea cu rest a lui A la B (prin scaderi repetate) si sa se determine catul si restul impartirii.
#include <iostream.h>
void main()
{//declararea
int A, B, C=0;
//citirea
cin>>A>>B;
//prelucrarea
while(A>=B) {A=A-B; C++;};
//Afisarea rezultatelor
cout<<"catul este :"<<C<<endl;
cout<<"restul este : "<<A;
}

Explicatii. Cand impartim pe A la B cautam "de cate ori se cuprinde" B in A, altfel spus cate scaderi ale lui B din a se pot face.

Un tip e problema ce necesita folosirea instructiunii WHILE este prelucrarea unui sir de valori ce se incheie cu zero.

Ideea : Se citeste fiecare valoare si daca este nenula se prelucreaza; Acest pas se repeta pana citim valoarea zero. (Ex: 23, -4, 5, 12, 79, 0).

Codul corespunzator este:
cin>>x;
While (x!=0) { //prelucrez valoarea X citita;
               ..............................
               //citesc urmatoarea valoare din sir
               cin>>x;};

Probleme ce folosesc acest algoritm pot umari:

  • numarul de valori din sir

  • valoarea maxima/minima

  • numarul de aparitii a unei valori K


5 comentarii:

  1. Va rog sa faceti cea mai "babeasca" explicatie posibila ca sa inteleg si eu ceva ok?

    RăspundețiȘtergere
  2. am explicat EFECT-ul. instructiunea trebuia sa fie clara daca ai fi facut partea de algoritmica mai intai ( http://mchelariu.wordpress.com/2009/08/12/l5-instructiunea-repetitiva-cat-timp/ )
    In sectiune scrie "cat timp conditia este adevarata execut un set de instructiuni" . Evident setul se repeta pana cand conditia este... falsa.

    RăspundețiȘtergere
  3. Cum pot face produsul elementelor unui vector fara a folosi operatorul " * " ???
    inceputul trebuie sa arate astfel
    #include
    int produs (int a, int b)
    {
    return a*b;
    }
    int main ()
    {
    int a[35],n, p,i;
    cout<>n;
    cout<<"dati elementele vectorului"
    for (i=0; i>a[i];

    RăspundețiȘtergere
  4. p=1;
    for(i=0;i<n;i++) {cin>>a[i];p=produs(p,a[i]);}
    cout<<p;
    :D

    RăspundețiȘtergere