Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Cicluri

c



+ Font mai mare | - Font mai mic



Cicluri

Probleme rezolvate

P5.1 Urmatorul program simplu ilustreaza utilizarea ciclului cu test initial: se introduc continuu caractere de la tastatura, pana cand este tastata litera ,q'.



#include <stdio.h>

#include <stdlib.h>

int main()

printf('nnAti introdus q!');

printf('n');

system('PAUSE');

return 0;

Discutie

-  Accentuam faptul ca in C, ciclurile accepta pentru testarea conditiei orice fel de expresii. Mai mult, se pot realiza operatii complexe in expresia ce semnifica testul de conditie; astfel, partea de program urmatoare:

ch = getch();

while(ch != 'q')

se poate scrie mai simplu astfel:

while((ch = getch()) != 'q')

P5.2 Urmatorul program simplu ilustreaza utilizarea ciclului cu test final: se afiseaza patratele numerelor intregi cuprinse intre a si 2a, unde a este un intreg pozitiv care se citeste de la tastatura.

#include <stdio.h>

#include <stdlib.h>

int main() while(a <= b);

printf('stopn');

system('PAUSE');

return 0;

Daca se introduce de la tastatura, de exemplu, numarul 4, programul va afisa:

Introduceti un numar intreg pozitiv (<100): 4

start

stop

Discutie

-  Cu aceeasi observatie ca cea facuta la problema 5.1, ciclul cu test final din problema se mai poate scrie, de exemplu, astfel (reamintim ca un operator de incrementare sau decrementare utilizat ca prefix determina ca valoarea noua sa fie calculata inaintea evaluarii expresiei):

do while(++a <= b);

P5.3 Urmatorul program simplu ilustreaza forma de baza a ciclului cu contor: se citeste un numar natural si se afiseaza suma .

#include <stdio.h>

#include <stdlib.h>

int main()

printf('Suma numerelor de la 1 la %d este %d', n, s);

printf('n');

system('PAUSE');

return 0;

Discutie

-  O varianta a programului anterior, utilizand un ciclu cu test initial, este urmatoarea:

#include <stdio.h>

#include <stdlib.h>

int main()

printf('Suma numerelor de la 1 la %d este %d', n, s);

printf('n');

system('PAUSE');

return 0;

P5.4 Sa se explice ce afiseaza urmatorul program dupa compilare si executie, ca si particularitatile ciclului for utilizat. Ce se intampla daca se introduce de la tastatura un numar intreg negativ? Dar daca se introduce un numar natural impar?

#include <stdio.h>

#include <stdlib.h>

int main()

system('PAUSE');

return 0;

Daca se introduce de la tastatura, de exemplu, numarul 8, programul va afisa:

Introduceti un numar natural par: 8

512

216

64

8

Discutie

-  Programul numara descrescator, din doi in doi, de la valoarea introdusa de utilizator si pana la 2, apoi afiseaza aceste numere, impreuna cu cuburile acestora, pe randuri succesive.

-  Sunt ilustrate o serie de variatii in modul de utilizare ale ciclului cu contor in C:

  sectiunea initializare a ciclului lipseste, deoarece contorul i este initializat practic de catre utilizator in afara ciclului (atentie insa ca semnul trebuie sa fie prezent!);

  testul de conditie are urmatoarea semnificatie: ciclul se reia atat timp cat i este "adevarat", adica diferit de zero; de asemenea, se observa ca modificarea contorului se poate face cu orice valoare, si nu numai cu 1 (ca in Pascal, de exemplu);

  contorul este utilizat si in corpul ciclului, in cazul problemei de fata pentru calculul lui j (acest lucru este posibil, asa cum s‑a specificat si la partea teoretica, deoarece valoarea contorului nu este modificata de operatiile din cadrul ciclului).

-  Daca numarul introdus de la tastatura este negativ, sau pozitiv impar, ciclul se repeta la infinit (justificati aceasta afirmatie!).

P5.5 Scrieti un program care citeste de la tastatura doua numere naturale a si b, cu , afiseaza numerele naturale din intervalul in ordine crescatoare si apoi descrescatoare, si de asemenea calculeaza si afiseaza media aritmetica a numerelor a si b.

#include <stdio.h>

#include <stdlib.h>

int main()

printf('n');

printf(

'Numerele dintre a si b in ordine descrescatoare:n');

i--; /* dupa ultima iteratie a ciclului

anterior, i = b + 1! */

do while (i >= a);

printf('n');

printf('Media aritmetica a numerelor dintre a si b: ');

for (i = a; i <= b; i++) s = s + i;

printf('%.3f',(float)s / (b - a + 1));

printf('n');

system('PAUSE');

return 0;

P5.6 Scrieti un program care citeste de la tastatura un numar intreg n din intervalul , calculeaza si afiseaza pe n!

#include <stdio.h>

#include <stdlib.h>

int main()

if(n > 0)

}

else

printf('Pentru n = %d, n! = %gn', n, fact);

/* specificatorul de format '%g' asigura tiparirea in

formatul e sau f, care dintre ele este mai compact */

system('PAUSE');

return 0;

P5.7 Scrieti un program care afiseaza toti divizorii unui numar natural n citit de la tastatura; daca numarul este prim, se va afisa acest lucru printr un mesaj.

#include <stdio.h>

#include <stdlib.h>

int main()

}

if(k == 1) printf('sunt divizorii lui %d', n);

else printf('Numarul %d este prim!', n);

printf('n');

system('PAUSE');

return 0;

Daca se introduce de la tastatura, de exemplu, numarul 36, programul va afisa:

Introduceti un numar natural: 36

2 3 4 6 9 12 18 sunt divizorii lui 36

Discutie

-  Programul foloseste un ciclu cu contor pentru a cauta divizorii; se parcurge intervalul , incrementand unitar contorul i si se cauta numerele la care n se imparte exact (n%i==0). Variabila auxiliara k, initializata cu 0, devine 1 daca s‑a gasit cel putin un divizor.

-  Justificati conditia de terminare a ciclului i<=n/2; este testul de conditie formulat corect indiferent daca n este par sau impar?

P5.8 Scrieti un program care citeste de la tastatura doua numere naturale a si b () si afiseaza toate numerele prime din intervalul .

#include <stdio.h>

#include <stdlib.h>

int main()

if(k == 0)

}

if(m == 1)

printf('sunt numerele prime dintre %d si %d', a, b);

else

printf('Intre %d si %d nu exista numere prime!', a, b);

printf('n');

system('PAUSE');

return 0;

Daca se introduc de la tastatura, de exemplu, perechile de numere 3, 18 si respectiv 24, 28, programul va afisa in cele doua situatii:

Introduceti a (natural): 3

Introduceti b (natural, b>a): 18

3 5 7 11 13 17 sunt numerele prime dintre 3 si 18

Introduceti a (natural): 24

Introduceti b (natural, b>a): 28

Intre 24 si 28 nu exista numere prime!

Discutie

-  Problema este ceva mai complicata decat cea anterioara, in special daca se doreste tratarea tuturor cazurilor posibile. Primul ciclu for foloseste contorul i pentru a parcurge intreg intervalul ; se presupune mai intai ca fiecare numar i din interval este prim si se initializeaza cu 0 variabila k. Se parcurge apoi cu al doilea ciclu for (contor j) intervalul pentru a se cerceta daca fiecare i are sau nu divizori, similar algoritmului utilizat in problema 5.7; daca se gaseste un divizor, k va lua valoarea 1. Daca dupa parcurgerea intregului ciclu interior k ramane 0, inseamna ca i este prim, se afiseaza, si ciclul exterior continua cu urmatoarea valoare a lui i

Variabila auxiliara m foloseste in acest program pentru a se putea trata si cazul special in care in intervalul nu exista numere prime; m se initializeaza cu 0 inainte de primul ciclu, si devine 1 daca a fost gasit cel putin un numar prim (care s‑a afisat).

P5.9 Urmatorul program ilustreaza folosirea instructiunilor break si continue: se afiseaza numerele impare dintre 1 si un numar natural ales de utilizator; trebuie sa se permita reluarea exercitiului (fara iesirea din program), daca utilizatorul doreste acest lucru, iar daca valoarea introdusa este , programul va tipari un mesaj de eroare si va fi abandonat.

#include <stdio.h>

#include <stdlib.h>

int main()

for(i = 1; i <= n; i++)

printf('sunt numerele impare intre 1 si %d', n);

printf('nDoriti sa reluati? (D/N): ');

ch = getche();

if(ch == 'N')

k=0;

printf('nn');

} while(k);

system('PAUSE');

return 0;

Probleme propuse

Scrieti un program care citeste pe n natural si afiseaza valoarea expresiei:

.

Scrieti un program care citeste pe n natural si afiseaza valoarea expresiei:

Scrieti un program care afiseaza numerele dintr‑un interval ce se divid cu un numar natural k citit.

Scrieti un program care afiseaza numerele prime mai mici decat un numar natural k citit.

Scrieti un program care sa descompuna in factori primi un numar natural n citit.

Reluati problema 5.9, cu urmatoarea modificare: se vor afisa numerele divizibile cu 3 dintre 1 si un numar natural n citit.

Este corect urmatorul fragment de program? Ce functie realizeaza? Ce face, in principiu, ciclul cu contor scris sub forma for(;;)

for( ; ;)



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2524
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved