start     Articole     Despre mine    

cheia programarii adevarate

Deja cu ceea ce ai invatat in lectiile anterioare (instructiuni (1/2, 2/2), variabile, instructiunea “daca”) poti construi programe destul de complexe. Pentru a face programe serioase, insa, iti mai lipseste o singura lectie. Este vorba despre o instructiune cu ajutorul careia vei putea, printre altele, scrie in cateva randuri programe care altfel ti-ar fi necesitat zeci sau sute de linii. O instructiune ce iti va deschide poarta catre programarea adevarata, permitandu-ti sa faci si alte lucruri nebanuite. Instructiunea aceasta este while (“cat timp” — in limba romana). Formatul in care ea se scrie in programe este urmatorul:

while (conditie)

{

       // instructiuni

       …

}

Ca si in cazul instructiunii if (“daca”) invatate in lectia anterioara, in loc de conditie se pot pune verificari de egalitati sau inegalitati intre expresii ce pot contine valori, variabile si operatori. De fapt, instructiunea while seamana mult cu instructiunea if.

Singura diferenta dintre instructiunea scrisa mai sus (adica: while (conditie) {//instructiuni …}) si instructiunea if (conditie) {//instructiuni …} este aceea ca daca conditia conditie este adevarata, in cazul instructiunii if blocul de instructiuni se executa o singura data, in vreme ce in cazul instructiunii while acesta se poate executa de mai multe ori, atata timp cat conditia conditie ramane adevarata (sau, altfel spus, pana cand conditia conditie nu mai este adevarata).

Scrisa in limbaj natural, instructiunea while de mai sus s-ar traduce in “cat timp conditia este adevarata, executa instructiunile scrise intre acolade”.

Evident, daca in blocul de instructiuni scrise intre acolade nu exista nimic care sa afecteze conditia, atunci (in cazul in care aceasta a fost initial adevarata) ea va ramane mereu adevarata, ceea ce inseamna ca blocul de instructiuni se va repeta la nesfarsit. In mod normal, insa, conditia testata contine o variabila a carei valoare se va modifica pe parcursul executarii blocului de intructiuni.

 

Haide sa vedem un exemplu. Sa zicem ca dorim sa aprindem linia de jos (adica linia cu y egal cu 1) din ecranul nostru de 10×10 puncte.

Bineinteles, putem face asta cu urmatorul program (asa cum am vazut inca din prima lectie):

Aprinde(1, 1);
Aprinde(2, 1);
Aprinde(3, 1);
Aprinde(4, 1);
Aprinde(5, 1);
Aprinde(6, 1);
Aprinde(7, 1);
Aprinde(8, 1);
Aprinde(9, 1);
Aprinde(10, 1);

In regula, dar mai simplu nu se poate?

Ba da. Sa observam, mai intai, ca x-ul transmis instructiunii Aprinde(x, y) variaza de la 1 la 10, in vreme ce y-ul ramane constant (si egal cu 1). Ce-ar fi, atunci, sa luam o variabila (pe care o putem numi chiar x) cu ajutorul careia sa parcurgem intreaga gama de valori 1, 2, 3, …, 10. Putem face asta cu urmatorul pogram:

var x = 1;
while (x <= 10)
{
       Aprinde(x, 1);
       x = x+1;
}

Hai sa vedem pas cu pas ce face programul acesta:

– 1) Mai intai defineste o variabila numita x, si o initializeaza cu valoarea 1.

– 2) Urmeaza apoi instructiunea “cat timp x este mai mic sau egal cu 10…”

– 3) “… aprinde punctul de la coordonatele (x, 1), si mareste cu 1 valoarea memorata in variabila x“.

Daca ar fi sa derulam pasii 2) si 3), am vedea ca mai intai x este egal cu 1 (de la pasul 1) ), dupa care:

– 2.1) se testeaza daca (x <= 10). Rezultatul este “adevarat” (caci x este egal cu 1), deci se executa pasul 3):

– 3.1) Aprinde(1, 1); x = 1+1;

– 2.2) apoi se testeaza din nou daca (x <= 10). Rezultatul este tot “adevarat” (caci x este acum egal cu 2), deci se executa din nou pasul 3):

– 3.2) Aprinde(2, 1); x = 2+1;

– 2.3) si iar se verifica daca (x <= 10). Cum rezultatul este “adevarat” (x fiind egal acum cu 3), se executa pasul 3):

– 3.3) Aprinde(3, 1); x = 3+1;

… (si asa mai departe… Hai sa trecem peste cativa pasi si sa ajungem direct la pasul in care x are valoarea 10.)

– 2.10) se verifica daca (x <= 10). Rezultatul este “adevarat” (caci x este egal cu 10), deci se executa pasul 3):

– 3.10) Aprinde(10, 1); x = 10+1;

– 2.11) iarasi se verifica daca x este mai mic sau egal cu 10. De asta data, insa, rezultatul este “fals” (caci x are acum valoarea 11), deci nu se mai executa pasul 3), ci se iese din instructiunea while.

Acum testeaza, te rog, programul anterior (cu copy&paste) folosind caseta de mai jos.

(Browserul tau nu suporta Canvas!…)

Ce s-a intamplat dupa ce ai apasat butonul “Executa programul”? Asa cum ne asteptam, s-a aprins intreaga linie de jos din afisaj.

 

Bun, dar daca dorim acum sa aprindem pe linia 2 nu intreaga linie, ci doar punctele de pe coloanele 1, 3, 5, 7 si 9?

In primul rand, observam ca ne dorim de fapt sa aprindem toate punctele aflate la coordonatele (x, y), cu proprietatea ca y este egal cu 2, iar x ia pe rand valorile 1, 3, 5, 7, 9 (adica toate valorile impare de la 1 la 10).

Folosind aceasta observatie, programul rezulta cu destula usurinta. Practic putem folosi programul anterior, in care in loc de Aprinde(x, 1) punem Aprinde(x, 2) (caci nu dorim sa aprindem puncte de pe linia 1, ci de pe linia 2). De asemenea, instructiunea Aprinde nu trebuie sa se mai apeleze la fiecare pas, ci doar la pasii pentru care x are valoare impara. Prin urmare, trebuie sa ne folosim de instructiunea if pentru a-i transmite o comanda de genul “executa instructiunea Aprinde(x, 2) doar daca x este numar impar”.

Cum putem testa daca x este numar impar? O varianta posibila este sa verificam restul impartirii lui x la 2. Daca acest rest este egal cu 1, inseamna ca x este impar.

Acum avem tot ce ne trebuie, asa ca hai sa construim programul:

var x = 1;
while (x <= 10)
{
       if ( (x % 2) == 1)
       {
              Aprinde(x, 2);
       }
       x = x+1;
}

Testeaza-l si pe acesta, te rog. Merge, nu? (Ce-ar fi sa-l modifici astfel incat pe linia 3 sa se aprinda “beculetele” situate pe coloane pare?)

 

Iata ca deja am ajuns sa scriem programe serioase. Probabil ca un neinitiat s-ar uita la programul anterior ca la un text in chineza scris cu litere arabe. Insa daca ai urmarit cu atentie cele trei lectii anterioare, ai vazut ca lucrurile nu sunt nici pe departe atat de complicate pe cat par, ci totul este perfect logic.

Propun sa incheiem lectia aceasta cu un exemplu ceva mai complicat. Sa zicem ca am dori sa aprindem toate punctele de pe ecranul de 10×10 puncte.

Ce ar trebui sa facem, deci? Bineinteles, am putea sa punem 100 de instructiuni de tip Aprinde(x, y). Sau am putea sa observam ca de fapt tot ce trebuie sa facem este sa avem doua variabile (numite, de exemplu, chiar x si y) cu ajutorul carora sa apelam Aprinde(x, y). Si ar mai trebui sa observam si ca variabila x trebuie sa parcurga toate valorile de la 1 la 10 pentru fiecare valoare a variabilei y (care, la randul ei, ar trebui sa parcurga toate valorile de la 1 la 10).

Aceasta inseamna ca ne vom puteam folosi de primul program de mai sus (cel care aprindea toate punctele de pe linia cu y egal cu 1), numai ca in blocul de insctructiuni din acel while nu vom scrie Aprinde(x, 1), ci Aprinde(x, y), unde y va fi o variabila pe care o vom fi declarat la inceputul programului si o vom fi initializat cu 1.

Va trebui apoi ca intreg acel program sa fie executat din nou pentru y avand valoarea 2. Si apoi pentru y avand valoarea 3. Si asa mai departe, pana la y egal cu 10. Se poate observa ca dorim sa facem cu y o serie de operatii similare celor pe care le facem cu x. Prin urmare, intreg acest program de care vorbim va face parte din blocul de instructiuni al unei instructiuni while ce va testa conditia (y <= 10).

Hai sa vedem cum ar arata programul:

var y;
var x;
y = 1;
while (y <= 10)
{
       x = 1;
       while (x <= 10)
       {
              Aprinde(x, y);
              x = x+1;
       }
       y = y+1;
}

Pentru a-l testa, revino la caseta de testare de mai sus, apasa butonul “Reseteaza afisajul”, dupa care introdu acest program si apasa butonul “Executa programul”.

A mers, nu? Ti s-au aprins toate punctele de pe ecran? (Ma intreb daca ai putea sa il modifici astfel incat sa nu-ti aprinda toate punctele, ci sa “deseneze” un soi de “tabla de sah” formata din 10×10 patratele. (Idee: foloseste if-uri; eventual unele in interiorul altora…))

 

Stiu ca lectia aceasta a fost mai solicitanta decat cele de pana acum. Asa ca te rog sa o parcurgi cu atentie, incercand sa intelegi foarte bine ce se intampla in realitate intr-un program ce contine instructiunea “cat timp” (while), precum si cum se poate imbina aceasta instructiune cu instructiunea “daca” (if) pentru a construi programe serioase. Si bineinteles, nu uita ca imi poti pune orice intrebare (in sectiunea de comentarii de mai jos, sau la adresa de email florin [at] igotopia . ro).





244 comments
Eduard_H
Eduard_H

Am gasit si o varianta cu 2 while :D

var y;

var x;

y = 1;

while (y <= 10)

{

if((y%2)==1)

      x = 1;

       while (x <=10)

       {

              if((x%2)==1)

              {

              Aprinde(x,y);

              Aprinde(x+1,y+1)

              }

              x = x+1;

       }

       y = y+1;

}

Eduard_H
Eduard_H

var y;

var x;

y = 1;

while (y <= 10)

{

if((y%2)==1)

  {    x = 1;

       while (x <=10)

       {

              if((x%2)==1)

              Aprinde(x,y);      

              x = x+1;

       }

   }

  else

   {

     x = 1;

       while (x <=10)

       {

              if((x%2)==0)

              Aprinde(x,y);         

              x = x+1;

       }

   } 

       y = y+1;

}

Remus Pop
Remus Pop

Baieti pe mine m-ati pierdut la "while".Recunosc, nu ma duce capul. Mult success.

DanielPatrascu
DanielPatrascu

var y=1;

var x;

while (y <= 10)

{

     x = 1;

       while (x <= 10)

       {

         if ( ( ( x + y ) % 2) == 1)

              Aprinde(x, y);

              x = x+1;

       }

       y = y+1;

}

Micinr1
Micinr1

Nu am prea inteles de ce la construirea tablei de șah ați condiționat ca x sa fie egal cu 12 ( if x==12). E bine cum am folosit eu 2*while ?

elenada84
elenada84

var x = 1;

var y = 1;

while (y <= 10){

  x=1;

while (x <= 10)

{

     if ( (x % 2) == 1 && (y % 2) == 1 || (x % 2) == 0 && (y % 2) == 0)

       {

              Aprinde(x, y);

       }

       x = x+1;

}

y=y+1;

}

Tase
Tase

x=1;

while (x<=10)

{

y=1;

  while (y<=10)

  {

    if ((x+y)==10)

    Aprinde (x,y, ALBASTRU);

    y=y+1; 

  }

  x=x+1;

}

x=1;

while (x<=10)

{

  y=1;

  while (y<=10)

  {

    if ((x+y)==5)

    Aprinde (x,y, GALBEN);

    y=y+1; 

  }

  x=x+1;

}

x=1;

while (x<=10)

{

  y=1;

  while (y<=10)

  {

    if ((x+y)==17)

    Aprinde (x,y, VERDE);

    y=y+1; 

  }

  x=x+1;

}

var y;

var x;

x=1;

y=10;

while ((x>0)&&(x<=10)&&(y>0)&&(y<=10))

{

  Aprinde (x,y,ALBASTRU)

  x=x+1;

  y=y-1;

}

x=1;

while (x<=10)

{

  y=1;

  while (y<=10)

  {

    if ((x+y)==11)

    Aprinde (x,y, ROSU);

    y=y+1; 

  }

  x=x+1;

}

XBR0THER
XBR0THER

Salut Florin ! Am tot incercat lectia si nu am reusit sa o inteleg in totalitate... Am inteles pana la imbinarea celor doua while-uri. Reusesc sa fac cu while si if, dar cand trebuie sa imbin doua while-uri... se cam termina tot... Ma poti ajuta, te rog ?

Florin Birleanu
Florin Birleanu moderator

@XBR0THER  Daca ai inteles cum ruleaza un program care are doar un while e super! In momentul in care acel while il pui intr-un alt while, el (adica while-ul din interior) se va executa de mai multe ori.


E ca si cum ai avea un robotel de jucarie caruia in momentul in care ii apesi un buton face trei pasi inainte si se opreste. Deci "algoritmul" lui e un fel de while care repeta un pas de trei ori.

Daca vrei ca robotelul sa se deplaseze in linie dreapta pe o distanta de 12 pasi, atunci cum vei face?

1) Apesi butonul => robotelul va face trei pasi din pozitia in care se gasea.

2) Apesi inca o data butonul => robotelul va face trei pasi din noua pozitie in care se gaseste => in total a parcurs 6 pasi fata de pozitia de start.

3) Apesi inca o data butonul => robotelul va face trei pasi din noua pozitie in care se gaseste => in total a parcurs 9 pasi fata de pozitia de start.

4) Apesi inca o data butonul => robotelul va face trei pasi din noua pozitie in care se gaseste => in total a parcurs 12 pasi fata de pozitia de start.


Pasii astia 1, 2, 3, 4 de mai sus sunt de fapt un fel de while, nu? E vorba despre while-ul din afara, care repeta cei 3 pasi (adica while-ul din interior) de 4 ori.


Scris ca "program" ar arata cam asa:


nr_apasari = 1;

while (nr_apasari <= 4)

{

 nr_pasi = 1;

   while(nr_pasi <= 3)

   {

      FaUnPas();

      nr_pasi = nr_pasi+1;

   }

   nr_apasari = nr_apasari+1;

}


S-a mai clarificat vreun pic? :-)

XBR0THER
XBR0THER

@Florin Birleanu Daa, am inteles perfect ceea ce mi-ai spus. Excelent exemplul cu robotelul. Voi trece de indata la problema finala, sper sa iasa bine ! Multumesc !

Florin1990
Florin1990

var x;
var y;
x = 1;
while (x<=10)
{
  y = 1;
  while(y <=10)
  {
  if((x%2)==1)
    {
      if((y%2)==1)
         {
         Aprinde(x,y);
         }
    }
    if((x%2) == 0)
    {
      if((y%2) == 0)
      {
        Aprinde(x,y);
      }
    }
    y = y +1;
  }
  x = x +1;
}

dip71
dip71

O varianta mai concentrata:

//tabla sah

var x;

var y;

x=1;

while (x<=10)

{

y=1;

while (y<=10)

{

if ((((x%2)==1)&&((y%2)==1))||(((x%2)===0)&&((y%2)===0)))

{

Aprinde (x,y);

}

y=y+1;

}

x=x+1;

}

dip71
dip71

Varianta mea:

//tabla sah

var x;

var y;

x=1;

while (x<=10)

{

y=1;

     while (y<=10)

       {

         Aprinde(x,y);

         //Pauza();

         y=y+2;

       }

    x=x+2;

}

x=2;

while (x<=10)

{

y=2;

       while (y<=10)

       {

         Aprinde(x,y);

         //Pauza();

         y=y+2;

       }

    x=x+2;

}

Chicken123456789
Chicken123456789

var y;

var x;

y = 1;

while (y <= 10)

{

  x = 1;

  while (x <= 10)

  {

    if ( (x % 2)== 1)

    {

      if ( (y % 2)== 1)

      {

        Aprinde(x,y,ALBASTRU);

      }

    }

    if ( (x % 2)== 0)

    {

      if ( (y % 2)== 0)

      {

        Aprinde(x,y,ROSU);

      }

    }

    x = x+1;

  }

  y = y+1;

}

tonynecula
tonynecula

var y;

var x;

y = 1;

while (y <= 10)

{

     x = 1;

       while (x <= 10)

       {

         if((y%2)==1)

         {

           if((x%2)==1)

           {

             Aprinde(x,y,ROSU)

           }

         }

         if((y%2)==0)

         {

           if((x%2)==0)

           {

             Aprinde(x,y,ALBASTRU)

           }

         }

         x=x+1

       }

  y=y+1

}

DanielUsurelu
DanielUsurelu

Deocamdata am reusit sa mai reduc un while, o sa mai exersez! :-)

DanielUsurelu
DanielUsurelu

var y;

var x;

y = 1;

while (y <= 10)

{

       if ((y % 2)== 1)

         {

             x = 1;

             while (x <= 10)

             {

              Aprinde(x, y);

              x = x+2;

             }

         }

        if ((y % 2)== 0)

         {

             x = 2;

             while (x <= 10)

             {

              Aprinde(x, y);

              x = x+2;

             }

         }

       y = y+1;

}


Florin Birleanu
Florin Birleanu moderator

@DanielUsurelu In loc de cel de-al doilea "if" puteai sa pui "else" pentru primul "if" (caci cea de-a doua conditie este de fapt echivalenta cu prima conditie, negata). :-)

DanielUsurelu
DanielUsurelu

var y;

var x;

y = 1;

while (y <= 10)

{

     x = 1;

       while (x <= 10)

       {

              Aprinde(x, y);

              x = x+2;

       }

       y = y+2;

}


y = 2;

while (y <= 10)

{

       x = 2;

       while (x <= 10)

       {

              Aprinde(x, y);

              x = x+2;

       }

       y = y+2;

}

calex61
calex61

Chiar nu am inteles nimic din aceasta lectie :-(. M-am indepartat mult de esenta, sunt total pe langa. M-ai bagat in ceata maxim. :-(

Florin Birleanu
Florin Birleanu moderator

@calex61 Ca sa te pot scoate din ceata trebuie sa imi spui exact pana la ce punct ai inteles si ce anume ai inteles :-). (Cu un pic de perseverenta s-ar putea sa treci peste acest blocaj si sa descoperi lucruri fascinante!)

calex61
calex61

@Florin Birleanu @calex61 Multumesc Florin! Se pare doar ca am avut o zi putin mai proasta ieri, azi mi-am rezervat mai multa rabdare, m-am jucat putin cu programul schimband in mod repetat valorile variabilelor x si y si astfel am reusit sa-mi dau seama cum folosesc aceasta noua instructiune. Te rog, totusi, sa-mi explici putin urmatoarea afirmatie: if ( (x % 2) == 1). Multumesc!

Florin Birleanu
Florin Birleanu moderator

@calex61 @Florin Birleanu "if ( (x % 2) == 1)" inseamna "daca ( (restul impartirii valorii variabilei x la 2) este egal cu 1 )" -- sau, cu alte cuvinte, "daca valoarea memorata in variabila x este impara".

VictorManea
VictorManea

var y;
var x;
y = 1;
while (y <= 10)
{
  if((y%2)==1)
     x = 1
       while (x <= 10)
       {
         if((x%2)==1)
        
              Aprinde(x, y);
              x = x+1;
       }
  if((y%2)==0)
       x = 1
       while (x <= 10)
       {
         if((x%2)==0)
        
              Aprinde(x, y);
              x = x+1;
       }
       y = y+1;
}

Florin Birleanu
Florin Birleanu moderator

@VictorManea Programul merge, dar conform indentarii nu este ceea ce ai intentionat sa faci :-). Vreau sa zic: Esti constient de faptul ca fiecare dintre cele doua if-uri cu y au in corpul lor o singura instructiune? (adica "x = 1") Daca voiai sa bagi si while-ul acolo, trebuia sa pui niste acolade. :-)

VictorManea
VictorManea

var y;
var x;
y = 1;
while (y <= 10)
{
  if((y%2)==1)
  {x = 1
     while (x <= 10)
       {
         if((x%2)==1)
        
              Aprinde(x, y);
              x = x+1;
       }
  }
  else
  {x = 1
       while (x <= 10)
       {
         if((x%2)==0)
        
              Aprinde(x, y);
              x = x+1;
       }
  }
       y = y+1;
}


Sper ca este mai bine acum :)

AncaDitiu
AncaDitiu

var y;

var x;

y = 1;

while (y <= 10)

{

     x = 1;

       while (x <= 10)

       {

         if(x%2 == 1 )

         {

           if(y%2 == 1)

           {

             Aprinde(x, y);      

           }

         }

         if(x%2 == 0)

         {

           if(y%2 == 0)

           {

             Aprinde(x,y);

           }

         }

         x = x+1;

       }

       y = y+1;

}

Florin Birleanu
Florin Birleanu moderator

@AncaDitiu Felicitari! Apreciez faptul ca ai rezolvat problema folosind doar informatiile prezentate in lectiile de pana acum, fara sa "tragi cu ochiul" la lectiile urmatoare. :-)

Adi3600
Adi3600

var y;

var x;

y = 1;

while (y <= 10)

{ if(y%2==1)

     x = 1;

       while (x <= 10)

       { if(x%2==1)

              Aprinde(x, y);

              x = x+1;

       }

 if(y%2==0)

       x = 1;

       while (x <= 10)

       { if(x%2==0)

              Aprinde(x, y);

              x = x+1;

       }

       y = y+1;

 }

Marian
Marian

var y;
var x;
y = 1;
while (y <= 10)
{
     x = 1;
       while (x <= 10)
       {
         if ( (y % 2) == 0)
           if ( (x % 2) == 1)
              Aprinde(x, y);
         if  ( (y % 2) == 1)
           if ( (x % 2) == 0)
              Aprinde(x, y);
        x = x+1;
       }
       y = y+1;
}

Marian
Marian

var y;
var x;
y = 1;
while (y <= 10)
{
     x = 1;
       while (x <= 10)
       {
         if ( (y % 2) == 1)
           if ( (x % 2) == 1)
              Aprinde(x, y);
         if  ( (y % 2) == 0)
           if ( (x % 2) == 0)
              Aprinde(x, y);
        x = x+1;
       }
       y = y+1;
}

Andrei
Andrei

O simpla intrebare vreau sa adresez si eu. Ce reprezinta semnul % (adica "la suta"). Este semn din programare care reprezinta restul unei impartiri? Am luat pas cu pas exercitiul aferent zilei nr. 4 si in prima faza am crezut ca asa se noteaza impartirea in programare (adica prin semnul %). De exemplu, nu inteleg de ce

5 % 2 = 1 ? Daca imi spuneti ca % e semn specific pt. a obtine restul impartirii numerelor intregi, atunci am inteles. Daca nu este asa, va rog sa ma ajutati.

Ce inseamna % ?

Andrei P
Andrei P

@Andrei Se pare ca mi-ai raspuns prin intermediul lectiei 7. Ai stiut ca odata ajuns acolo, gasesc si raspunsul. Ms. mult incaodata!

CozmaVlad
CozmaVlad

lam facut cum lam inteles dar nu il inteleg inca trebe sa mai invat mai mult ar trebui ma uit mai bine la explicare hmmm


var a = 1;

while (a <= 10)

{

     if ( (a % 2) == 1)

       {

              Aprinde(a, 1);

       }

       a = a+1;

}

var b = 1;

while (b <= 10)

  {

    if ( (b % 2) ==0)

      {

        Aprinde(b, 2);

        }

    b = b+1

    }


var c = 1;

while (c <= 10)

  {

    if ( (c % 2) ==1)

      {

        Aprinde(c, 3);

        }

    c = c+1

    }


var d = 1;

while (d <= 10)

  {

    if ( (d % 2) ==0)

      {

        Aprinde(d, 4);

        }

    d = d+1

    }


var e = 1;

while (e <= 10)

  {

    if ( (e % 2) ==1)

      {

        Aprinde(e, 5);

        }

    e = e+1

    }


var f = 1;

while (f <= 10)

  {

    if ( (f % 2) ==0)

      {

        Aprinde(f, 6);   

        }

    f = f+1

    }


var g = 1;

while (g <= 10)

  {

    if ( (g % 2) ==1)

      {

        Aprinde(g, 7);   

        }

    g = g+1

    }


var h = 1;

while (h <= 10)

  {

    if ( (h % 2) ==0)

      {

        Aprinde(h, 8);   

        }

    h = h+1

    }

var i = 1;

while (i <= 10)

  {

    if ( (i % 2) ==1)

      {

        Aprinde(i, 9);   

        }

    i = i+1

    }

var j = 1;

while (j <= 10)

  {

    if ( (j % 2) == 0)

      {

        Aprinde(j, 10);   

        }

    j = j+1

}    

Florin Birleanu
Florin Birleanu moderator

@CozmaVlad E OK rezultatul programului. Doar ca poti face exact aceleasi lucruri folosind un while in interiorul altui while :-).

CozmaVlad
CozmaVlad

nu pre am inteles domnu florin im putetzi spune ce am gresit si cum as putea face as multzumi daca mias spune ce nam facut bine 


var y = 1;

while (y <= 10)

{

     if ( (y % 2) == 1)

       {

              Aprinde(y, 1);

       }

       y = y+1;

}

var x = 1;

while (x <= 10)

  {

    if ( (x % 3) ==2)

      {

        Aprinde(x, 2);

        }

    x = x+1

    }

Florin Birleanu
Florin Birleanu moderator

@CozmaVlad E foarte fain: pe prima linie de jos ai aprins punctele din doi in doi, iar pe a doua linie ai aprins punctele din trei in trei :-). Daca pui while-ul cu x in interiorul while-ului cu y poti parcuge intreg ecranul punct cu punct...

Selaru Daniel
Selaru Daniel

Hei. Am vrut sa fac toate beculetele sa se aprinda si uite ce a iesit :

var x

var y

x=1

while (x<=10)

{

y=1

  while (y<=10)

  {

    Aprinde (x,y)

    { 

      x=x+1

      {

        y=y+1

      }

    }

  }

}

;))

Florin Birleanu
Florin Birleanu moderator

@Selaru Daniel :-)


1) Nu stiu de ce ai pus pe y=y+1 intre acolade, caci n-are niciun efect. :-)


2) Si nici x = x+1 (urmat de y = y+1) nu are sens sa fie plasat intre acolade, caci nu are niciun efect. :-)


3) Deci practic in al doilea while tu ai 3 instructiuni:

{

Aprinde(x, y)

  x = x+1

  y = y+1 

}


4) Asa ca e normal sa nu iti aprinda toate punctele de pe ecran, ci doar prima diagonala (caci la fiecare crestere cu 1 a lui y, si x creste cu 1). :-)


5) Daca voiai sa aprinzi toate punctele de pe ecran, instructiunea x = x+1 trebuia sa sa gaseasca dupa blocul de instructiuni al celui de-al doilea while (adica fix inainte de ultima acolada din programul tau). :-)


6) Spor in continuare! :-)

Trackbacks

  1. […] mod personal. Am vorbit despre instructiuni, despre variabile, despre instructiunea daca, despre instructiunea cat timp, despre vectori si matrici, despre functii si despre […]

  2. […] Si daca mai inveti si cum sa faci ca intr-un program sa repeti de cate ori doresti o serie de instructiuni, deja poti spune ca stii bazele programarii. Vezi in lectia asta. […]