PC Laborator 6: Diferență între versiuni

De la WikiLabs
Jump to navigationJump to search
 
(Nu s-au afișat 8 versiuni intermediare efectuate de alți 4 utilizatori)
Linia 31: Linia 31:
Ce va afisa acest program?
Ce va afisa acest program?
<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
#include<stdio.h>
#include <stdio.h>


int main(){
int main() {
   int x;
   int x;
   for (x = 0; x < 10; x++) {
   for (x = 0; x < 10; x++) {
Linia 67: Linia 67:
Ce va afișa următorul cod în urma execuției?
Ce va afișa următorul cod în urma execuției?
<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
#include<stdio.h>
#include <stdio.h>


int main(){
int main() {
   int x = 0;   
   int x = 0;   
   while (x < 10){
   while (x < 10) {
     printf("%d\n", x);
     printf("%d\n", x);
     x++;       
     x++;       
Linia 83: Linia 83:
a)
a)
<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
do{
do {
       instrucțiune;
       instrucțiune;
}while (condiție);
} while (condiție);
</syntaxhighlight>
</syntaxhighlight>
b)
b)
<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
do{
do {
       instrucțiune1;
       instrucțiune1;
       instrucțiune2;
       instrucțiune2;
..............................
..............................
}while (condiție);
} while (condiție);
</syntaxhighlight>
</syntaxhighlight>


Linia 100: Linia 100:
* după condiția de continuitate se folosește obligatoriu semnul de punctuație <font color="green">''';'''</font> .
* după condiția de continuitate se folosește obligatoriu semnul de punctuație <font color="green">''';'''</font> .
</div>
</div>
Organigrama instrucțiunii ''while'' se regăsește în imaginea următoare:<br/>[[Fișier:Do_while.jpg]]
Organigrama instrucțiunii ''do-while'' se regăsește în imaginea următoare:<br/>[[Fișier:Do_while.jpg]]


<div class="regula">'''<font color="red"> Atenție:</font>''' Se observă că datorită faptului că se verifică abia la sfârșitul structurii condiția de continuitate, orice structură iterativă de tip ''do while'' va fi executată întotdeauna cel puțin o dată.
<div class="regula">'''<font color="red"> Atenție:</font>''' Se observă că datorită faptului că se verifică abia la sfârșitul structurii condiția de continuitate, orice structură iterativă de tip ''do while'' va fi executată întotdeauna cel puțin o dată.
Linia 108: Linia 108:
Ce se va afișa în urma execuției?
Ce se va afișa în urma execuției?
<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
#include<stdio.h>
#include <stdio.h>


int main(){
int main() {
   int x;
   int x;
   x = 0;
   x = 0;
   do{
   do {
     printf( "Hello, world!\n" );
     printf("Hello, world!\n");
   }while (x != 0);
   } while (x != 0);
   return 0;
   return 0;
}
}
Linia 124: Linia 124:
'''break''' va ieși din bucla cea mai apropiată indiferent de condițiile de continuare ale acesteia. Utilitatea acestei instrucțiuni apare atunci când trebuie părăsită bucla în anumite circumstanțe.<br/>
'''break''' va ieși din bucla cea mai apropiată indiferent de condițiile de continuare ale acesteia. Utilitatea acestei instrucțiuni apare atunci când trebuie părăsită bucla în anumite circumstanțe.<br/>
'''continue''' oprește iterația curentă, face update contorului (în cazul buclei ''for'') și continuă cu execuția structurii repetitive de la prima instrucțiune. Cu alte cuvinte, ''continue'' ignoră tot ceea ce urmează după el în cadrul buclei și trece la următoarea iterație a buclei.
'''continue''' oprește iterația curentă, face update contorului (în cazul buclei ''for'') și continuă cu execuția structurii repetitive de la prima instrucțiune. Cu alte cuvinte, ''continue'' ignoră tot ceea ce urmează după el în cadrul buclei și trece la următoarea iterație a buclei.
'''Exemplu'''<br/>
Ce va afisa acest program?
<syntaxhighlight lang="C">
#include <stdio.h>
int main() {
  int a = 10;
  while (a < 20) {
      a++;
      if (a == 13) {
        continue;
      }
      printf("value of a: %d\n", a);
      if (a > 16) {
        break;
      }
  }
  return 0;
}
</syntaxhighlight>


==Exerciții==
==Exerciții==
Linia 135: Linia 156:
<li>Verificați dacă un număr întreg fără semn introdus de la tastatură este prim.</li>
<li>Verificați dacă un număr întreg fără semn introdus de la tastatură este prim.</li>
<li>Să se afișeze cmmdc și cmmmc a două numere întregi fără semn citite de la tastatură.</li>
<li>Să se afișeze cmmdc și cmmmc a două numere întregi fără semn citite de la tastatură.</li>
<li>Să se citească un număr întreg fără semn n de la tastatură. Să se afișeze primele n numere prime.</li></ol>
<li>Să se citească un număr întreg fără semn n de la tastatură. Să se afișeze primele n numere prime.</li>
<li>Să se citească un număr întreg fără semn n de la tastatură. Să se convertească în baza 2.</li>
<li>Să se realizeze un joc în care un jucător introduce un număr între 1 și 100 de la tastatură, apoi alt jucător încearcă să-l ghicească. Calculatorul va oferi indicii ("prea mic", "prea mare"), până la ghicirea numărului. La final se va afișa numărul de încercări de care a fost nevoie pentru a ghici numărul.</li>
</ol>

Versiunea curentă din 8 noiembrie 2016 19:49

Obiective

La sfârșitul acestui laborator studenții vor fi capabili:

  • să înțeleagă funcționarea blocurilor repetitive;
  • să conceapă programe care folosesc blocuri repetitive.

Structura repetitivă

Structura repetitivă, cunoscută și sub numele de loop sau buclă, reprezintă o bucată de cod care poate fi executată în mod repetat. Structurile repetitive trebuie sa aibă o condiție de continuare. La fiecare iterație a codului această condiție este verificată, iar în momentul în care condiția devine falsă se oprește execuția buclei și se trece mai departe în program. Există 2 tipuri de structuri repetitive:

  • structuri repetitive cu număr cunoscut de pași;
  • structuri repetitive cu număr necunoscut de pași.

Structuri repetitive cu număr cunoscut de pași

Instrucțiunea for creează o structură repetitivă cu număr cunoscut de pași. Sintaxa instrucțiunii for este următoarea:
a)

for (inițializare contor; condiție logică; modificare contor)
        instrucțiune;

b)

for (inițializare contor; condiție logică; modificare contor){
        instrucțiune1;
        instrucțiune2;
..............................
}

Instrucțiunea for se parcurge conform schemei următoare:

Exemplu
Ce va afisa acest program?

#include <stdio.h>

int main() {
  int x;
  for (x = 0; x < 10; x++) {
    printf("%d\n", x);
  }
  return 0;
}

Structuri repetitive cu număr necunoscut de pași

Există două instrucțiuni pentru a crea structuri repetitive cu număr necunoscut de pași:

  • instrucțiunea while;
  • instrucțiunea do..while;

Instrucțiunea while

Instrucțiunea while verifică înainte de fiecare iterație condiția de intrare: dacă această condiție este îndeplinită se execută codul din corpul instrucțiunii, iar dacă nu se îndeplinește condiția se iese din această buclă. Sintaxa instrucțiunii este următoarea:
a)

while (condiție)
        instrucțiune;

b)

while (condiție){
        instrucțiune1;
        instrucțiune2;
..............................
}

Organigrama instrucțiunii while se regăsește în imaginea următoare:

Exemplu
Ce va afișa următorul cod în urma execuției?

#include <stdio.h>

int main() {
  int x = 0;  
  while (x < 10) {
    printf("%d\n", x);
    x++;       
  }
  return 0;
}

Instrucțiunea do while

Instrucțiunea do while verifică după fiecare iterație condiția de continuare. Sintaxa instrucțiunii "do while este următoarea:
a)

do {
      instrucțiune;
} while (condiție);

b)

do {
      instrucțiune1;
      instrucțiune2;
..............................
} while (condiție);
Atenție: Se observă că sintaxa instrucțiunii do while este puțin diferită:
  • indiferent de numărul de instrucțiuni din cadrul structurii repetitive, se folosesc acoladele;
  • după condiția de continuitate se folosește obligatoriu semnul de punctuație ; .

Organigrama instrucțiunii do-while se regăsește în imaginea următoare:

Atenție: Se observă că datorită faptului că se verifică abia la sfârșitul structurii condiția de continuitate, orice structură iterativă de tip do while va fi executată întotdeauna cel puțin o dată.

Exemplu
Ce se va afișa în urma execuției?

#include <stdio.h>

int main() {
  int x;
  x = 0;
  do {
    printf("Hello, world!\n");
  } while (x != 0);
  return 0;
}

Cuvintele cheie break și continue

Pentru structurile repetitive există două cuvinte cheie de mare importanță: break și continue.
break va ieși din bucla cea mai apropiată indiferent de condițiile de continuare ale acesteia. Utilitatea acestei instrucțiuni apare atunci când trebuie părăsită bucla în anumite circumstanțe.
continue oprește iterația curentă, face update contorului (în cazul buclei for) și continuă cu execuția structurii repetitive de la prima instrucțiune. Cu alte cuvinte, continue ignoră tot ceea ce urmează după el în cadrul buclei și trece la următoarea iterație a buclei.

Exemplu
Ce va afisa acest program?

#include <stdio.h>
 
int main() {
   int a = 10;
   while (a < 20) {
      a++;
      if (a == 13) {
         continue;
      }
      printf("value of a: %d\n", a);
      if (a > 16) {
         break;
      }
   }
   return 0;
}

Exerciții

  1. Să se afișeze pe o linie toate literele în ordine alfabetică, scrise cu majuscule, și pe o altă linie toate literele în ordine invers alfabetică, scrise cu litere mici. Rezolvați exercițiul în 3 moduri (folosind toate tipurile de bucle).
  2. Să se citească un număr întreg fără semn n<20 de la tastatură. Afișați rezultatul operației n!.
  3. Să se citească un număr întreg fără semn de la tastatură și să se verifice dacă acesta este palindrom.
  4. Să se citească un număr întreg fără semn n de la tastatură. Să se afișeze primele n numere impare.
  5. Să se citească un număr întreg fără semn n de la tastatură. Să se citească apoi n numere întregi de la tastatură și să se afișeze suma numerelor pare introduse.
  6. Refaceți exercițiul anterior în așa fel încât să folosiți instrucțiunea continue.
  7. Să se citească de la tastatură o serie de numere întregi până la întâlnirea numărului 0. Să se afișeze apoi media aritmetică a acestor numere.
  8. Verificați dacă un număr întreg fără semn introdus de la tastatură este prim.
  9. Să se afișeze cmmdc și cmmmc a două numere întregi fără semn citite de la tastatură.
  10. Să se citească un număr întreg fără semn n de la tastatură. Să se afișeze primele n numere prime.
  11. Să se citească un număr întreg fără semn n de la tastatură. Să se convertească în baza 2.
  12. Să se realizeze un joc în care un jucător introduce un număr între 1 și 100 de la tastatură, apoi alt jucător încearcă să-l ghicească. Calculatorul va oferi indicii ("prea mic", "prea mare"), până la ghicirea numărului. La final se va afișa numărul de încercări de care a fost nevoie pentru a ghici numărul.