Top Banner
Autori: Alina PINTESCU, Iuliana MĂRIEȘ Maria BELBE, Carmen ANTON, Violeta KALMAR, Diana CONTRAȘ Material auxiliar didactic ISBN 978-973-0-21637-0 Baia Mare, 2016
31

Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &2175$ Material auxiliar didact ic ISBN

Mar 07, 2018

Download

Documents

lytuyen
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &2175$ Material auxiliar didact ic ISBN

Autori:

Alina PINTESCU, Iuliana MĂRIEȘ

Maria BELBE, Carmen ANTON,

Violeta KALMAR, Diana CONTRAȘ

Material auxiliar didactic

ISBN 978-973-0-21637-0

Baia Mare, 2016

Page 2: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &2175$ Material auxiliar didact ic ISBN

Coordonatori: Alina PINTESCU, Iuliana MĂRIEȘ

Redactori: Maria BELBE, Carmen ANTON, Violeta KALMAR, Diana CONTRAȘ

Prezenta lucrare a fost suportul de curs pentru

Tabăra de informatică Ediţia I, 18 - 22 aprilie 2016

ISBN 978-973-0-21637-0

Page 3: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &2175$ Material auxiliar didact ic ISBN

Prof. Alina PINTESCU { C++ } 18 aprilie 2016

ALGORITMI în C++ Pahare preferate

Anca şi Matei îşi fac împreună temele la matematică. Mama le serveşte ce au dorit fiecare: Anca a

cerut limonadă iar Matei a cerut un suc de portocale. La un moment dat se iveşte următoarea problemă: copiii şi-au dat seama că fiecare a primit băutura în paharul preferat al celuilalt copil.

Ajutaţii pe Anca şi Matei să rezolve această situaţie, şi anume să poată bea fiecare ceea ce a dorit şi din paharul preferat.

Teorie i explica ii Structura liniară (numită şi secvenţială) este alcătuită din următoarele instrucţiuni: - comentarii

- declararea variabilelor - instrucţiunea de citire - instrucţiunea de scriere - instrucţiunea de atribuire - instrucţiunea compusă (sau blocul de instrucţiuni)

Comentarii

În textul unui program sunt necesare uneori note explicative (comentarii) ataşate unor secvenţe de operaţii, care nu au rol activ în derularea programului. Comentariile

• pot fi scrise pe un singur rând şi sunt precedate de caracterele // • pot fi scrise pe mai multe rânduri şi sunt cuprinse între caracterele /* */

Exemplu: // acesta este un comentariu pe un rând /* acesta este un comentariu pe mai multe rânduri */

Declararea variabilelor

La începutul algoritmului trebuie să se precizeze datele de intrare, datele de ieşire, datele de manevră şi tipul lor. O variabilă nu se poate declara de mai multe ori în cadrul aceluiaşi algoritm. Instruc iunea de citire

Efectul instrucţiunii este de a da valori (de la tastatură sau dintr-un fişier) variabilelor de intrare cu care lucrăm. Instruc iunea de scriere

Instrucţiunea afişează pe ecran sau în fişier valorile variabilelor. Instruc iunea de atribuire

Efectul instrucţiunii este acela de a atribui valoarea din dreapta operatorului specificat în stânga. În cazul în care în dreapta avem o expresie, aceasta se va evalua şi apoi valoarea va fi atribuită variabilei din stânga. Blocul de instruc iuni Este folosit pentru a efectua mai multe instrucţiuni, în ordinea în care sunt scrise. //Exemplu 1 | instructiune1 | instructiune2 | instructiune3 |_▄

//Exemplu 2 { instructiune1 instructiune2 instructiune3 }

Identificatori

Un identificator este o succesiune de litere, eventual cifre care începe cu o literă. Se folosesc: literele mici și mari ale alfabetului englez și caracterul subliniere. ATEN IE!!! În C++ se face distincție între literele mici și cele mari Max max, ordonat ORDONAT Exemplu: Max, _min, distincte, frecv, Max2 - reprezintă identificatori corecţi 2min, 67prim, 7_org, A+B, a&, - nu reprezintă identificatori

Page 4: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &2175$ Material auxiliar didact ic ISBN

prof. Alina PINTESCU

Colegiul Național “Gheorghe Șincai” Baia Mare

2

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Cuvinte rezervate

Cuvintele rezervate sunt identificatori cu semnificaţie fixată, care nu pot fi folosiţi în alt context decât cel precizat în definirea limbajului. Exemplu: if, while, do, printf, int, main, void etc. Tipuri de date numerice întregi în C++

Prin dată se înţelege orice entitate asupra căreia calculatorul poate opera. Orice dată care apare într-un program trebuie declarată, pentru a fi cunoscută la compilare. Unele date îşi modifică valoare în timpul execuţiei programului şi ele se numesc date variabile. Exemplu: int a,b; // se declară două variabile de tip întreg de maxim 5 cifre long v1, x, a1; // se declară trei variabile de tip întreg de maxim 9 cifre int x=12; /* declararea unei variabile x de tip întreg - este o dată asupra căreia se operează care are valoarea iniţială 12 */ Datele care nu îşi modifică valoare în timpul execuţiei programului se numesc date constante. Exemplu: const int a=5, b=12; // declar două constante întregi de maxim 5 cifre care au valorile 5 respectiv 12 Un tip de dată precizează mulţimea valorilor pe care le poate lua o dată, operaţiile care se pot efectua asupra ei şi lungimea de reprezentare internă. Operatori C++

Tipuri de operatori

aritmetici

+ adunare - scădere * înmulțire

/ împărțire, câtul împărțirii a două numere întregi ex: 7 / 3 = 2 % restul împărțirii a două numere întregi ex: 7 % 3 = 1

rela ionali < , >, <= (≤), >= (≥) , == (pt testare egalitate =), != (pt testare diferit ≠)

logici && și || sau ! negare

Operatorul de atribuire

În limbajul C++ se defineşte operatorul de atribuire =. Acest operator este binar iar sintaxa lui este: variabila = expresie Efectul acestui operator este: se evaluează expresia şi variabila primeşte acea valoare.

Observa ie!! A nu se confunda condiţia a==b cu expresia a=b, ultima având valoarea adevărat pentru orice valoare a lui b diferită de 0. Exemplu 1:

// primul program în C++ #include <iostream> int main () { int a, b; cout<<”Buna ziua!!!”<<endl; cout<<”a= ”; cin>>a; cout<<”b= ”; cin>>b; // aici citim cele 2 variabile a și b cout << a + b; // sau cout<<”suma = “<<a+b;

return 0; }

Ecran:

Buna ziua!!! a= 5 b= 3 8 //sau suma= 8

OBS: Soft utilizat = CodeBlocks (se poate downloada de la adresa http://www.cnlr.ro/?pagina=349 opţiunea Oji Kit 2014) Paşi: Lansez aplicaţia CodeBlocks, Create a new project – Console application - C++ - Setez folderul de lucru (în zona 2) şi numele dorit pentru proiect (în zona 1),(se recomandă un nume sugestiv) – Next – Finish.

Programul se rulează cu F9.

Aten ie! Biblioteca iostream se foloseşte pentru instrucţiuni de citire şi afişare: cin, cout.

Page 5: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Alina PINTESCU

Colegiul Național “Gheorghe Șincai” Baia Mare

3

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Interschimbarea a două valori (numită şi regula celor trei pahare) Fie două variabile întregi a şi b. Valorile lor se citesc de la tastatură. Să se interschimbe valorile celor două variabile apoi să se afişeze noile valori, pe acelaşi rând cu un spaţiu între ele. Exemplu: dacă pentru variabilele a şi b se citesc valorile 5 şi 8, se va afişa: 8 5 PSEUDOCOD

algortim Interschimbare

a, b, aux intregi; citeşte a, b; scrie a, b; aux = a; a = b; b = aux; scrie a, b; sfârşit algoritm

// Interschimbare în C++ #include <iostream> int main () { int a, b, aux; cout <<”a= “; cin>>a; cout <<”b= “; cin>>b; // aici citim a şi b cout <<a<<” “<<b<<endl; aux=a;

a=b;

b=aux;

cout <<a<<” “<<b; return 0;}

Algoritmul de interschimbare se mai numeşte şi “Regula celor trei pahare”, deoarece este necesară o a treia variabilă pentru a face interschimbarea. Realizaţi un alt algoritm pentru interschimbarea celor două variabile fără a folosi a treia variabilă.

Aplica ie: Se cite te latura L a unui pătrat. Să se calculeze aria pătratului (A=LxL) şi perimetrul său (P=4xL).

#include<iostream> using namespace std; int main() { int L, A, P; cout<<"latura= "; cin>>L; A=L*L; P=4*L; cout<<"aria="<<A<<endl; cout<<"perimetrul="<<P; return 0; }

Aplica ie: Se citesc de la tastatură două numere naturale a i b. Să se afişeze suma, produsul i media lor aritmetică.

#include<iostream> using namespace std; int main() { int a, b; cout<<"a= "; cin>>a; cout<<"b= "; cin>>b; cout<<"Suma= "<<a+b<<endl; cout<<"Produs= "<<a*b<<endl; cout<<"Media= "<<1.0*(a+b)/2; return 0; }

Page 6: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Alina PINTESCU

Colegiul Național “Gheorghe Șincai” Baia Mare

4

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Aplica ie: Cifrele unui număr Fie x un număr întreg format din exact 5 cifre. Să se afişeze cifra unităţilor şi cea a sutelor, pe acelaşi rând, cu un spaţiu între ele. Exemplu: dacă pentru x se citeşte valoarea 12345 se va afişa 5 3.

x întreg //date de intrare c1, c2 întregi //date de manevră citeşte x c1 ← x % 10 //reţin cifra unităţilor în c1 x ← x/100 //elimin cifra unităţilor şi a zecilor c2 ← x % 10 //reţin cifra sutelor în c2 scrie c1, c2

using namespace std; int main() { int x, c1, c2; cout<<"x= "; cin>>x; c1=x%10; x=x/100; c2=x%10; cout<<"c1= "<<c1<<endl; cout<<"c2= "<<c2; return 0; }

Explicarea algoritmului: Pentru a obţine cifrele unui număr trebuie să efectuăm împărţiri la 10. Am arătat că operatorul „%” returnează restul împărţirii. În cazul în care un număr se împarte la 10, atunci restul este chiar ultima cifră, iar câtul împărţirii este numărul fără ultima cifra. În cazul împărţirii la 100 restul returnează ultimele 2 cifre, iar câtul este numărul fară ultimele 2 cifre. Pentru a afişa cifra sutelor este suficient să eliminăm ultimele 2 cifre (prin împărţire la 100) şi să afişăm ultima cifră a numărului nou obţinut.

EXERCI II propuse

1. Se citesc de la tastatură trei numere naturale a, b și c. Să se afişeze Media aritmetică formată din ultima cifră a fiecărui număr citit. 2. Să se scrie un program care citeşte de la tastatură un număr natural cu exact trei cifre şi determină numărul obţinut prin eliminarea cifrei din mijloc. (pbinfo.ro) 3. Să se afişeze figura geometrică folosind caracterul *.

* * * * * * * * 4. Se citeşte de la tastatură vârsta lui Ionel în variabila a. Să se afişeze mesajul Ionel are “a” ani. 5. Se dau de la tastatură 2 cifre nelule şi distincte. Afişaţi cele două numere care se pot forma folosind aceste aceste cifre. 6. Într-un brad sunt a globuri albe, de două ori mai multe globuri roșii și globuri verzi cu 3 mai puține ca numărul de globuri roșii. Câte globuri sunt în total ? (pbinfo.ro) 7. Să se scrie un program care citeşte de la tastatură un număr natural cu cel puţin două cifre şi determină suma dintre cifra zecilor şi cifra unităţilor numărului citit. (pbinfo.ro) 8. Să se scrie un program care citeşte de la tastatură un număr natural cu exact trei cifre și determină suma cifrelor sale. (pbinfo.ro) 9. Într-o curte sunt G găini și O oi. Să se determine numărul de capete și numărul de picioare din curte. (pbinfo.ro) 10. Să se scrie un program care citeşte de la tastatură cele trei note ale unui elev și determină media lor. (pbinfo.ro)

Bibliografie: 2009 Giovanna Stănică, Structura liniară www.pbinfo.ro

Page 7: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Maria BELBE { C++ } 19 aprilie 2016

STRUCTURAăALTERNATIV în C++ Cump r turi Mihai are la dispoziție suma S din care ar dori să cumpere două reviste care costă câte n ron fiecare,

un kg de banane care costă p ron și o ciocolată care costă m ron. Ajutati-l pe Mihai să decidă dacă suma de care dispune îi este suficientă sau trebuie să se împrumute de la bunicul?

Teorieășiăexplicații 1. Definiție Structura alternativă dirijează execuția unei secvențe de instrucțiuni în funcție de valoarea unei condiții plasate în blocul de decizie.

2.Mecanismul de execuție

- se evalueaza expresia logica

- daca aceasta este adevărată se executa instructiune 1 , dacă este falsă se executa instructiunea2

3.Sintaxă

. Sintaxa in pseudocod

daca (expresie logica)

atunci instructiune1

altfel instructiune2

Sintaxa in C++

if (expresia_logica)

instructiune1;

else instructiune 2;

//Exemplu

Daca a>b

atunci afiseaza a

altfel afiseaza b

//Exemplu

if (a>b)

cout <<a;

else cout <<b;

4.Observații

Observație!! Instrucțiune 1 și instrucțiune 2 pot reprezenta un set de instrucțiuni caz în care în C++ se scriu între {}

//Exemplu pseudocod

Daca a>9

atunci b=a%10

afiseaza (a-b)/10

altfel afiseaza a

//Exemplu C++

if (a>9)

{b=a%10;

cout <<(a-b)/10;}

else cout<<a;

Observație!! Instrucțiune 1 și instrucțiune 2 pot fi orice instrucțiuni, inclusiv instrucțiunea if //Exemplu pseudocod

Daca a>b

atunci afiseaza a

altfel daca a==b atunci afiseaza “ egale”

altfel afiseaza b

//Exemplu C++

if (a>b)

cout <<a;

else if (a==b) cout<<” egale”;

else cout<<b;

Page 8: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Maria BELBE

Colegiul Național “Gheorghe Șincai” Baia Mare

2

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Observație!! Expresia logică poate fi multiplă (formată din mai multe condiții legate prin operatori logici)

5.Operatori logici

!- operatorul not neagă valoarea de adevăr a operandului (dacă acesta are valoarea de adevăr 1 îl face 0 i dacă este 0 îl face 1)

&&- operatorul „ i logic” returnează valoarea de adevăr 1 dacă i numai dacă amândoi operanzii au valoarea de adevăr 1

||- operatorul „sau logic” returnează valoarea de adevăr 1 dacă cel puțin unul dintre operanzi au

valoarea de adevăr 1

Tabela operatorilor logici

A B !A A && B A || B

0 0 1 0 0

0 1 1 0 1

1 0 0 0 1

1 1 0 1 1

Prioritatea operatorilor logici

! are cea mai mare prioritate (prioritate 1)

&& are urmatoarea prioritate (prioritate 2)

|| are prioritatea cea mai mica (prioritate 3) Observație!! Dacă se dorește influențarea priorității operațiilor, se folosesc parantezele rotunde.

6.Operatori relaționali Sunt operatorii care se utilizează pentru a comparara două valori numerice.

== operatorul egal

!= operatorul diferit

< operatorul mai mic

<= operatorul mai mic sau egal

> operatorul mai mare

>= operatorul mai mare sau egal

//Exemplu pseudocod

Daca a%2==0 && b%2==0

atunci afiseaza “numere pare”

altfel afiseaza “nu”

//Exemplu C++

if (a%2==0 && b%2==0)

cout <<” numere pare”;

else cout “nu”

Observație!! Instructiune 2 poate lipsi, caz în care instrucțiunea se numește structură decizională cu ramură vidă. În aceste condiții lipsește și cuvântul else.

//Exemplu pseudocod

Daca a%2==0

atunci afiseaza “a numar par”

//Exemplu C++

if (a%2==0)

cout <<a<<” numar par”;

Page 9: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Maria BELBE

Colegiul Național “Gheorghe Șincai” Baia Mare

3

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

7.Aplicații

Aplicație1:

Se citesc 2 numere a i b. Sa se afi eze numărul care are cifra unităților mai mare.

Exemplu: dacă pentru a se citeşte valoarea 12345 i pentru b se cite te valoarea 91se va afişa 12345.

Analiza problemei

a si b întreg //date de intrare

c,d întregi //date de lucru

citeşte a , b

c ← a % 10 //reţin cifra unităţilorlui a în c

d ← b ș 10 // reţin cifra unităţilorlui b în d

se compara c cu d si se scrie numarul al carei cifra

a unitatilor este cea mai mare.

int a,b,c,d;

cout << "a=";

cin >> a;

cout << "b=";

cin >> b;

c= a%10;

d= b%10;

if (c>d)

cout << a;

else cout << b;

Aplicație2: Se cite te un număr x. Daca numărul este pozitiv sa se afi eze pătratul său, in caz contrar să se afi eze numărul.

Analiza problemei

x întreg //date de intrare

citeşte x

se testeaza daca x este pozitiv caz in care se

afiseaza patratul sau. Daca numarul nu este

pozitiv( este negativ sau nul) se afiseaza valoarea

lui

int x;

cout << "x=";

cin >> x;

if (x>0)

cout << x*x;

else cout << x;

Aplicație3: Sa se determine ultima cifra a numarului 2n, pentru n - număr natural.

2n 2

1 2

2 2

3 2

4 2

5 2

6 2

7 2

8 2

9

U(2n) 2 4 8 6 2 4 8 6 2

Page 10: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Maria BELBE

Colegiul Național “Gheorghe Șincai” Baia Mare

4

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Analiza problemei

n întreg //date de intrare

citeşte n

2 la puterea 0 este 1

se observa din tabelul de mai sus ca prin ridicarea

lui 2 la o putere nenula se obtin ca ultime cifre

2, 4, 8, 6 cu repetitie din 4 in 4.

int n;

cout<<"n=";

cin>>n;

if (n==0) cout<<"ultima cifra este 1";

else

if(n%4==0) cout<<"ultima cifra este 6";

else

if (n%4==1) cout<<"ultima cifra este 2";

else

if(n%4==2) cout<<"ultima cifra este 4";

else cout<<"ultima cifra este 8";

8. Exerciții propuse

1. Se dă un număr natural n. Să se determine cele mai mari două numere impare, mai mici decât n.

2. Să se scrie un program care citeşte de la tastatură un număr întreg şi determină semnul său.

3. Fiind date vârstele a doi copii afi ați care dintre ei este cel mai mare i cu cât.

4. Fiind dată nota unui elev să se afi eze dacă acesta este corigent sau promovat

5. Determinați câte sticle de x litri cu apă trebuie deschise pentru a umple un vas de y litri.

6. Sa se determine ultima cifra a numarului 9n, pentru n - numă r natural.

7. La un curs de înot s-au înscris n persoane. tiind că bazinul are 8 culoare, determinați câte grupe complete se pot

forma astfel încât fiecare persoană dintr-o grupă să înoate pe un culoar.În cazul în care a rămas o grupîă

incompletă, afi ați câte persoane conține.

8. Alina are n pungulițe de semințe de zorele a câte 20 g, să- i facă o grădinuță de m straturi lungi de nr metri

fiecare. tiind că pentru fiecare metru semănat trebuie s grame de semințe, calculați dacă îi ajung Alinei semințele

pentru întreaga grădină (fiecare strat are lățimea de 1 m).

8. Rezolvare exerciții propuse

1. int main()

{int n;

cout<<"n=";

cin>> n;

if (n%2==0) cout<< n-1<<" "<<n-3;

else cout<< n-2<<" "<<n-4;

Page 11: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Maria BELBE

Colegiul Național “Gheorghe Șincai” Baia Mare

5

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

return 0;

}

2. int main()

{int n;

cout<<"n=";

cin>> n;

if (n>0) cout<<" NUMARUL "<<n <<" ESTE POZITIV";

else if (n==0) cout<<" NUMARUL "<<n <<" ESTE NUL";

else cout<<" NUMARUL "<<n <<" ESTE NEGATIV";

return 0;

}

3. int main()

{

int a,b;

cout<<"dati varsta primului copil ";

cin>>a;

cout<<"dati varsta celui de-al doilea copil copil ";

cin>>b;

if (a>b) cout<< "primul copil este mai mare cu "<<a-b<<" ani decat al doilea";

else if (a==b) cout <<" copiii au varste egale";

else cout<< "al doilea copil este mai mare cu "<<b-a<<" ani decat primul";

cout << "Hello world!" << endl;

return 0;

}

4. int main()

{int a;

cout<<"dati nota elevului ";

cin>>a;

if (a>=5) cout<< "elevul este promovat ";

else cout<< "elevul este corigent ";

return 0;

}

5. int main()

{int x,y;

cout<<"dati capacitatea recipientului care trebuie umplut ";

cin>>y;

Page 12: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Maria BELBE

Colegiul Național “Gheorghe Șincai” Baia Mare

6

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

cout<<"dati capacitatea sticlei ";

cin>>x;

if (y%x==0) cout<< "trebuie deschise "<<y/x<<" sticle";

else cout<< "trebuie deschise "<<y/x+1<<" sticle";

return 0;

}

6. int main()

{int n;

cout<<"dati puterea la care trebuie ridicat numarul 9 ";

cin>>n;

if (n==0) cout<< "ultima cifra este "<<1;

else if (n%2==0) cout<< "ultima cifra este "<<1;

else cout<< "ultima cifra este "<<9;

return 0;

}

7. int main()

{int n;

cout<<"dati numarul de persoane inscrise la inot ";

cin>>n;

if (n%8==0) cout<< "numarul de grupe complete este "<<n/8;

else cout<< "numarul de grupe complete este "<<n/8<<" si numarul de persoane ramase este

"<<n%8;

return 0;

}

8. int main()

{int n,m,nr,s,x;

cout<<" dati numarul se pungulite cu seminte ";

cin>>n;

cout<<" dati numarul de straturi ";

cin>>m;

cout<<" dati numarul lungimea straturilor ";

cin>>nr;

cout<<" dati numarul de grame de seminte ";

cin>>s;

x=m*nr;

if (x*s<=n*20) cout<< "Alinutei ii ajung semintele ";

else cout<< "Alinutei nu ii ajung semintele ";

Page 13: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Maria BELBE

Colegiul Național “Gheorghe Șincai” Baia Mare

7

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

return 0;

}

Page 14: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Carmen Anton { C++ } 20 aprilie 2016

Structura repetitivă – while

Melcul

Un melc urcă 2m ziua și cade 1m noaptea. În câte zile iese dintr-o fântână adâncă de 10m? Răspuns: în nouă zile, deoarece la începutul celei de-a noua el a urcat 8m, iar la sfîrșitul zilei va ieși din fîntînă.

Teorie și explicații

Structura repetitivă de tip WHILE(câtă vreme - execută) este o structură în care câtă vreme condiția <cond> este adevărată se execută prelucrarea <prel>, după care se revine înaintea blocului de decizie. Atunci cînd <cond> devine falsă se iese din structură.

Sintaxa instrucțiunii în C++ este:

while (conditie)

{

instructiuni;

} …

Principiul funcţionării este: se evaluează conditia iar 1. dacă valorea rezultată este diferită de 0 se

execută instructiunile subordonate şi se revine la evaluarea expresiei;

2. dacă valoarea expresiei este egală cu 0 atunci se trece la instrucţiunea următoare lui while (…).

Exerciţii

a. Ce va afişa următoarea secvenţă de program?

int x=32567, s=0; while (x>0) { s=s*10+x%10; x=x/10; } cout<<s;

b. Ce va afişa următoarea secvenţă de program? int x=13531, s=0, y; y=x; while (x>0) { s=s*10+x%10; x=x/10; } if (s==y) cout<<”DA”; else cout<<”NU”;

c. Ce va afişa următoarea secvenţă de program? int x=24, s=1; while (s<=x) { if (x%s==0) cout<<s; s=s+1; } cout<<s;

Page 15: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Carmen Anton { C++ } 20 aprilie 2016

2

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

d. Ce va afişa următoarea secvenţă de program şi ce determină? int x=17, s=1,y=0; while (s<=x) { if (x%s==0) y++; s=s+1; } if (y==2) cout<<”DA”; else cout<<”NU”;

e. Ce va afişa următoarea secvenţă de program şi ce determină? int x=24, y=18; while (y!=x) { if (x>y) x=x-y; else y=y-x; } cout<<x;

Probleme rezolvate

P1: Se citeşte de la tastatură un număr natural n. Se cere să se afișeze cifrele în ordine inversă citirii.

Implementare C++ Schema logică #include <iostream> using namespace std; int main() { int n; cin>>n; while (n>0)

{ cout<<n%10<<” “; n=n/10;

} return 0;

} Date de intrare: 2705

Date de ieșire: 5 0 7 2

P2: Se citeşte de la tastatură un număr natural n. Se cere să se calculeze suma cifrelor sale.

Implementare C++ Schema logică #include <iostream> using namespace std; int main() { int n, s;

cin>>n; s=0; while (n>0)

{ s=s+n%10; n=n/10;

} cout<<"suma cifrelor

este:"<<s; return 0;

} Date de intrare: 2705

Ce trebuie calculat: 5+0+7+2

Date de ieșire: 14

P3: Se citeşte de la tastatură un număr natural n. Se cere să se calculeze oglinditul acestuia. Implementare C++ Schema logică

Page 16: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Carmen Anton { C++ } 20 aprilie 2016

3

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

#include <iostream> using namespace std; int main() { int n, r;

cin>>n; r=0; while (n>0)

{ r=r*10+n%10; n=n/10;

} cout<<"Oglinditul numarului:"<<s;

return 0; }

Date de intrare: 2705

Ce trebuie calculat: (((0*10+5)*10+0)*10+7)*10+2

Date de ieșire: 5072

Probleme propuse

Prelucrarea cifrelor unui număr

1. “ rieţi u progra C++ are iteşte u u ăr atural şi deter i ă su a ifrelor pare şi su a cifrelor impare.

2. “e itește u u ăr atural de el ult ifre. “ă se s rie progra ul C++ are deter i ă și afișează âte ifre pare şi âte ifre i pare are u ărul itit. De exe plu, pe tru = , se va tipări ifre pare şi ifre i pare.

3. “e itește u u ăr atural de el ult ifre şi o ifră . “ă se s rie progra ul C++ are deter i ă și afișează âte apariţii are ifra î u ărul itit. De exe plu, pe tru = şi = , se va tipări apariţii.

4. “ rieţi u progra C++ are iteşte u u ăr atural şi deter i ă şi afişează ea ai are di tre ifrele sale şi u ărul de apariţii ale a estei ifre. De exe plu, pe tru = , se va tipări ax= şi rap= .

. Nu i pali dro u u ăr atural u proprietatea ă iti d ifrele sale de la dreapta la stâ ga se o ţi e a elaşi u ăr adi ă este egal u ogli ditul său . Ex: este pali dro “ rieţi u progra C++ are afişează toate

pali droa ele u trei ifre pre u şi u ărul a estora.

6. “e itește u u ăr atural de el ult ifre. “ă se s rie progra ul C++ are deter i ă și afișează u ărul for at doar di ifrele pare şi u ărul for at doar u ifrele i pare ale lui . De exemplu, pentru n=2754, se va

tipări p = şi i = .

7. “e iteşte u u ăr atural de el ult ifre. “ rieţi u progra are verifi ă da ă u ărul are toate cifrele în

ordi e res ătoare şi afişează DA sau NU .Exe plu: pe tru = se va afişa DA, iar pe tru = se va afişa NU.

Page 17: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Violeta Kalmar { C++ } 21 aprilie 2016

Structura repetitivă – FOR

Cadoul

Georgel are o înțelegere cu mama sa pentru a primi un telefon cadou. Pentru fiecare notă de 10 primită la școală mama sa îi face cadou o sumă de bani.

Pentru prima notă de 10 primește 1 leu, pentru a doua 2 lei, pentru a treia 3 lei, ș.a.m.d. Ce sumă de bani va avea Georgel după ce a primit 10 note de 10?

Răspuns: Va avea 55 de lei, 1+2+3+…+10 =55.

Teorie și explicații

Sintaxa instrucțiunii în C++ este:

for (expresie1 ; expresie2 ; expresie3)

{bloc de instructiuni;}

Modul de executie

Pas 1: Se evaluează expresie1.

Pas 2: Se evaluează expresie2, evaluare care produce o valoare;

Pas 3:

Dacă valoarea expresiei2 este fals(=0), se termină instrucțiunea for;

Dacă valoarea expresiei2 este adevarat(≠0),

se execută blocul de instrucțiuni,

se evaluează expresie3,

se revine la Pas 2.

Exemple: 1. for (contor=limita_iniţială; contor<=limită_finală; contor++)

{instrucţiuni de repetat la fiecare pas}

for (i=1; i<=n; i++) { instrucţiuni de repetat la fiecare pas } Efect:

- pentru fiecare valoare a contorului i, între limita_iniţială şi limita_finală se execută instrucțiunile dintre acolade;

Page 18: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Violeta Kalmar { C++ } 21 aprilie 2016

2

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

2. for (contor=limita_iniţială; contor>=limită_finală; contor--) {instrucţiuni de repetat la fiecare pas} for (i=n; i>=1; i--) { instrucţiuni de repetat la fiecare pas }

Efect: - pentru fiecare valoare a contorului i intre limita_iniţială şi limita_finală se execută

instructiunile dintre acolade;

Observaţii: 1. Acoladele pot lipsi dacă există o singură instrucţiune care se repetă. 2. Expresia de incrementare poate fi înlocuită de una de decrementare.

Exerciţii

a. Ce va afişa următoarea secvenţă de program? int i; for (i=1;i<=5;i++) cout<<i<<” ”;

Care este efectul secvenței de mai sus?

Modificați secvența astfel încat să se afișeze descrescător toate numerele de la 10 la 1. b. Ce va afişa următoarea secvenţă de program?

int a,b,aux,i,s=0; cin>>a; cin>>b; if (a>b) {aux=a; a=b; b=aux;} for (i=a;i<=b;i++) if (i%2==0) s=s+i; cout<<s;

c. Ce va afişa următoarea secvenţă de program, dacă se citesc în ordine următoarele numere naturale 123, 25, 118?

int x, i,j,s; for (i=1;i<=3;i++) { cin>>x;

s=0; for(j=1;j<=i;j++) s=s+x%10; cout<<s<<” ”;

}

d. Ce va afişa următoarea secvenţă de program şi ce determină? int i,s=0,n; cin>>n; for (i=2;i<=n/2;i++) if(n%i==0) s=s+i; if(s==0)

Page 19: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Violeta Kalmar { C++ } 21 aprilie 2016

3

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

cout<<”prim”; else cout<<”neprim”;

Probleme rezolvate

P1: Se citeşte de la tastatură un număr natural, nenul n. Se cere să se afișeze suma primelor n numere naturale. (generalizarea problemei Cadoul, pentru suma primelor n numere naturale) Implementare C++ #include <iostream>

using namespace std;

int main()

{ int i,n,s=0;

cin>>n;

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

s=s+i;

cout<<s; return 0;

}

Date de intrare: 10

Date de ieșire: 55

P2: Se citeşte de la tastatură un număr natural n. Se cere să se calculeze suma divizorilor săi.

#include <iostream>

using namespace std;

int main()

{ int n, d, s=0;

cout<<”n=”; cin>>n;

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

{

if (n%d == 0)

s=s+d;

}

cout<<"suma divizorilor este:"<<s;

return 0;

}

Date de intrare: 6

Date de ieșire: 12 (1+2+3+6)

Observație

Dacă inițializăm suma s cu 1+n, am căuta doar divizorii proprii în intervalul [2, n/2]

Page 20: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Violeta Kalmar { C++ } 21 aprilie 2016

4

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Probleme propuse

1. Să se afișeze valoarea ur ătoarelor expresii pe tru u ăr atural nenul itit de la tastatură. a) E1=1

2+2

2+3

2+...+n

2

b) E2= 2-4+6-8...+2*n (numar natural impar)

c) E3=1+1×2+1×2×3+1×2×3×4+...+1×2×3×...n (n<=10)

d) E4=1×2+2×3+3×4+...+(n-1)xn

2. Se itește u u ăr atural nenul n, de el ult ifre. Să se s rie progra ul C++ are deter i ă produsul

numerelor impare mai mici sau egale cu n, și suma numerelor pare mai mici sau egale cu n. De exemplu, pentru n=7,

se va tipări produsul u erelor i pare * * * , și su a u erelor pare 12 (2+4+6).

3. Se itește u u ăr atural de el ult ifre şi un șir de n numere naturale. Să se s rie programul C++ care

deter i ă și afișează âte di tre u erele itite au ifra u ităților i pară. De exe plu, pe tru =5 şi numerele 12,

35, 101, 4, 223, se va tipări .

4. S rieţi u progra C++ are iteşte două u ere aturale a și de el ult ifre şi deter i ă şi afişează toate

u erele di i tervalul [a, ] are au su a ifrelor pară. De exe plu, pe tru a= și = se va tipări 11, 13, 15.

. S rieţi u progra C++ are pe tru u ăr atural e ul dat, afișează pe e ra u triu ghi de steluțe. De exe plu pe tru = se va afișa triu ghiul de forma

*

**

***

****

*****

6. S rieţi u progra C++ are pe tru u ăr atural e ul dat afișează pe e ra u triu ghi de u ere. De exemplu pentru n=4 se va afișa triu ghiul de for a

1 2 3 4

1 2 3

1 2

1

Probleme propuse pentru acasă

1. Să se afișeze valoarea ur ătoarelor expresii pe tru u ăr atural e ul itit de la tastatură.

.S rieţi progra ul are să al uleze su a:

, u de este u u ăr atural i par.

Page 21: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Violeta Kalmar { C++ } 21 aprilie 2016

5

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

3. S rieţi u progra C++ are pe tru u ăr atural e ul dat afișează pe e ra u triu ghi de steluțe. De exe plu pe tru = se va afișa triu ghiul de for a :

*****

****

***

**

*

4. S rieţi u progra C++ are pe tru u ăr atural e ul dat afișează pe e ra u triu ghi de u ere. De exe plu pe tru = se va afișa triu ghiul de for a :

1

1 2

1 2 3

1 2 3 4

Se vor rezolva și pro le ele propuse î setul a terior, are u au fost rezolvate.

Page 22: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Violeta Kalmar { C++ } 21 aprilie 2016

6

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Rezolvările problemelor propuse

1.a) #include <iostream> using namespace std; int main() { int i,n, E=0; cout<<"n="; cin>>n; for(i=1; i<=n; i++) E=E+i*i; cout<<"valoarea expresiei este:"<<E; return 0; }

1.b) #include <iostream> using namespace std; int main() { int i,n, E=0; cout<<"n="; cin>>n; for(i=1; i<=n; i++) if(i%2==0) E=E-2*i; else E=E+2*i; cout<<"valoarea expresiei este:"<<E; return 0;}

1.c) #include <iostream> using namespace std; int main() { int i,n, E=0,P=1; cout<<"n="; cin>>n; for(i=1; i<=n; i++) { P=P*i; E=E+P; }

cout<<"valoarea expresiei este:"<<E; return 0; }

1.d) #include <iostream> using namespace std; int main() { int i,n, E=0,P=1; cout<<"n="; cin>>n; for(i=1; i<=n-1; i++) { E=E+i*(i+1); } cout<<"valoarea expresiei este:"<<E; return 0; }

2. #include <iostream> using namespace std; int main() { int i,n, S=0,P=1; cout<<"n="; cin>>n; for(i=1; i<=n; i++) if (i%2==1) P=P*i; else S=S+i; cout<<"Produsul imparelor:"<<P<<endl; cout<<"Suma parelor:"<<S<<endl; return 0; }

3. #include <iostream> using namespace std; int main() { int i,n, K=0,x; cout<<"n="; cin>>n; for(i=1; i<=n; i++) { cout<<"x="; cin>>x; if (x%2==1) K++; } cout<<"Numarul de numere din sir cu cifra unitatilor para:"<<K; return 0;}

Paritatea cifrei unităților este dată de paritatea numărului

Page 23: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Violeta Kalmar { C++ } 21 aprilie 2016

7

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

4. #include <iostream> using namespace std; int main() { int n,a,b,s,x,copie; cout<<"a="; cin>>a; cout<<"b="; cin>>b; if (a>b) { x=a; a=b; b=x; } x=0; for(n=a; n<=b; n++) { s=0; copie=n; while (copie!=0) { s=s+copie%10; copie=copie/10; } if(s%2==0) { cout<<n<<" "; x++; } } if(x==0)

cout<<"Nu exista numere in intervalul ["<<a<<","<<b<<"] cu suma cifrelor para";

return 0; }

5. #include <iostream> using namespace std; int main() { int n,i,j; cout<<"n="; cin>>n; for(i=1; i<=n; i++) { for(j=1; j<=i; j++) cout<<"*"; cout<<endl; } return 0; } 6. #include <iostream> using namespace std; int main() { int n,i,j; cout<<"n="; cin>>n; for(i=1; i<=n; i++) { for(j=1; j<=n-i+1; j++) cout<<j<<" "; cout<<endl; } return 0;}

Page 24: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Violeta Kalmar { C++ } 21 aprilie 2016

8

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Rezolvarea problemelor propuse pentru acasă

1. #include <iostream> using namespace std; int main() { int n,i,P=1; float S=0; cout<<"n="; cin>>n; for(i=1; i<=n; i++) { P=P*i; S=S+1.0/P; } cout<<"Suma="<<S; return 0; }

Suma calculată este un număr real (cu virgulă); Împărțind

două numere întregi se obține cătul împărțirii; În consecință am scris numărătorul ca și număr real (1.0), și în acest caz rezultatul împărțirii va fi real.

2.

#include <iostream> using namespace std; int main() { int n,i,k,S=0; cout<<"n="; cin>>n; k=1; for(i=1; i<=n; i++) { S=S+k*k*k; k=k+2; } cout<<"Suma="<<S; return 0; }

3. #include <iostream> using namespace std; int main() { int n,i,j; cout<<"n="; cin>>n; for(i=1; i<=n; i++) { for(j=1; j<=n-i+1; j++) cout<<"*"; cout<<endl; } return 0; }

4. #include <iostream> using namespace std; int main() { int n,i,j; cout<<"n="; cin>>n; for(i=1; i<=n; i++) { for(j=1; j<=i; j++) cout<<j<<" "; cout<<endl; } return 0; }

Page 25: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

Prof. Diana CONTRAȘ { C++ } 22 aprilie 2016

Să aplicăm ce am învățat

EXERCIŢII propuse

1. Gigel are m (m[1,108]) mere i dore te să le împartă cu cei n (n[1,10

4]) prieteni ai săi în

mod egal. Merele care nu se pot împăr i îi voi reveni tot lui Gigel. Afi a i cîte mere îi revin unui prieten i cîte mere îi revin lui Gigel. Exemplu: dacă m=20, n=3, se afi ează

Un prieten are 5 mere i Gigel are 5 mere. dacă m=20, n=5, se afi ează

Un prieten are 3 mere i Gigel are 5 mere.

2. Pentru doi sportivi se citesc numerele de intrare în concurs din intervalul [1,108]. Să se verifice,

afi ându-se un mesaj corespunzător dacă primul sportiv intră în concurs imediat înainte sau după cel de-al doilea sportiv.

Exemplu: dacă numărul primului sportiv este 12, iar a celui de-al doilea sportiv este 15 se afi ează

NU

dacă numărul primului sportiv este 12, iar a celui de-al doilea sportiv este 11 se afi ează DA

dacă numărul primului sportiv este 12, iar a celui de-al doilea sportiv este 13 se afi ează

DA

3. De ziua lui, Gigel prime te de la mama x lei, de la tata y lei, iar de la bunici z lei (x, y, z[1,108]). El

decide să pună în pu culi ă to i banii dacă totalul nu depă e te 100 lei, respectiv să cheltuie cea mai mică sumă dintre cele 3 primite, în caz contrar. Afi a i mesajul depunere în pușculiță, dacă totalul banilor primi i nu depă e te 100 lei sau suma cheltuită, în caz contrar. Exemplu: dacă x=30, y=25, z=10 se afi ează Depunere în pu culi ă

dacă x=50, y=25, z=30 se afi ează

25

4. Piticii sapă în mină n (n[1,108]) zile. În fiecare zi ei scot un anumit număr de diamante, valoare

apar inând intervalului [1,104]. Determina i care este cel mai mare număr de diamante pe care îl găsesc

piticii i în câte zile au găsit acela i număr maxim de diamante. Cele două valori se vor afi a pe acela i rând separate prin câte un spa iu. Exemplu: dacă n=10 i numărul diamantelor găsite în fiecare zi 25, 30, 20, 45, 20, 45, 15, 24, 45, 12 se afi ează

45 3

5. Seiful în care este ascunsă comoara pira ilor are ca cifru un număr cu cel mult 8 cifre format doar din cifre pare. Pentru a nu fi u or de depistat, Barbă Neagră scrie un număr cu cel mult 8 cifre care con ine atât cifre pare cât i cifre impare. Determina i cifrul care deschide seiful, tiind că acesta se ob ine prin îndepărtarea cifrelor impare din numărul scris de Barbă Neagră.

Page 26: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Diana CONTRAȘ

Colegiul Național “Gheorghe Șincai” Baia Mare

2

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Exemplu: dacă numărul scris de Barbă Neagră este 12445683, atunci se afi ează

24468

6. Elevii din două grupe participă la un concurs. tiind că în prima grupă sunt n (n[1,108]) elevi, în a

doua grupă sunt m (m[1,108]) elevi i punctajele realizate de to i elevii (punctajele sunt din intervalul

[1,104]), afi a i câ i dintre elevii din a doua grupă au punctajul strict mai mare decât to i elevii din

prima grupă. Exemplu: dacă n=5 i au punctajele 10, 15, 20, 30, 14, iar m=6 i au punctajele 60, 10, 45, 15, 40, 30 se afi ează

3

7. Să se afişeze toate numerele de forma � �̅̅ ̅̅ ̅̅ ̅ care se împart exact la 3.

8. Pentru lansarea unei navete de pe planeta Tatooine trebuie introduse două coduri reprezentate de două numere naturale pare. Pilotul prime te un singur număr din intervalul [1,10

4]. Ajuta i-l să

gasească toate combina iile posibile de numere pare pornind de la numărul dat, scriindu-l ca sumă de două numere pare. În cazul în care acest lucru nu este posibil, să se afi eze mesajul NU EXISTA. Exemplu: dacă numărul dat este 24 se afi ează

24=1+23 24=3+21 24=5+19 24=7+17 24=9+15 24=11+13

dacă numărul date este 33 se afi ează

NU EXISTA

9.Pentru o valoare n (n[1,104]) citită de la tastatură, să se afişeze primii n termeni ai şirului lui

Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21…. Exemplu: dacă n=6 se afi ează

1, 1, 2, 3, 5, 8

10. În ara de Nicăieri casele sunt numerotate de la 1 la n (n[3, 102]). Numărul de pe o casă a picat.

Vrajitoarea cea rea a încurcat restul numerelor astfel încât locuitorii să nu î i poată da seama care este numărul pierdut. Dacă se cite te n, apoi într-o ordine oarecare n-1 valori distincte din intervalul [1, n],

ajuta i locuitorii ării de Nicăieri să realizeze care este numărul lipsă. Exemplu: dacă n=4 i numerele introduse sunt 2, 3, 1, atunci se afi ează

4

11.Scrieţi un program care citeşte un număr natural n (n[3, 102]) şi afişează:

1

1 2

1 2 3

1 2 3 4

.…………….

1 2 3 4……n

Exemplu: dacă n=6 se afi ează

1

1 2

1 2 3

1 2 3 4

1 2 3 4 5

1 2 3 4 5 6

Page 27: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Diana CONTRAȘ

Colegiul Național “Gheorghe Șincai” Baia Mare

3

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Rezolvări

1. Gigel are m (m[1,108]) mere i dore te să le împartă cu cei n (n[1,10

4]) prieteni ai săi în

mod egal. Merele care nu se pot împăr i îi voi reveni tot lui Gigel. Afi a i cîte mere îi revin unui prieten i cîte mere îi revin lui Gigel.

Exemplu: dacă m=20, n=3, se afi ează

Un prieten are 5 mere i Gigel are 5 mere.

dacă m=20, n=5, se afi ează

Un prieten are 3 mere i Gigel are 5 mere. #include <iostream>

int main ()

{ int m, n, cat, rest;

cout<<”m=”; cin>>m;

cout<<”n=”; cin>>n;

rest=m%(n+1);

cat=m/(n+1);

cout<<”Un prieten are “<< cat<<” mere si Gigel are “<< cat+rest<<” mere”;

return 0;

}

2. Pentru doi sportivi se citesc numerele de intrare în concurs din intervalul [1,108]. Să se

verifice, afi ându-se un mesaj corespunzător dacă primul sportiv intră în concurs imediat

înainte sau după cel de-al doilea sportiv.

Exemplu: dacă numărul primului sportiv este 12, iar a celui de-al doilea sportiv este 15 se afi ează

NU

dacă numărul primului sportiv este 12, iar a celui de-al doilea sportiv este 11 se afi ează DA

dacă numărul primului sportiv este 12, iar a celui de-al doilea sportiv este 13 se afi ează

DA

#include <iostream>

int main ()

{ int numar1, numar2;

cout<<”numar1=”; cin>>numar1;

cout<<”numar2=”; cin>>numar2;

if (numar1==numar2-1 || numar1==numar2+1)

cout<<”DA”;

else

cout<<”NU”;

return 0;

}

#include <iostream>

#include <cmath>

int main ()

{ int numar1, numar2;

cout<<”numar1=”; cin>>numar1;

cout<<”numar2=”; cin>>numar2;

if (abs(numar1-numar2)==1)

cout<<”DA”;

else

cout<<”NU”;

return 0;

}

3. De ziua lui, Gigel prime te de la mama x lei, de la tata y lei, iar de la bunici z lei (x, y,

z[1,108]). El decide să pună în pu culi ă to i banii dacă totalul nu depă e te 100 lei,

respectiv să cheltuie cea mai mică sumă dintre cele 3 primite, în caz contrar. Afi a i mesajul depunere în pușculiță, dacă totalul banilor primi i nu depă e te 100 lei sau suma cheltuită, în caz contrar.

Exemplu: dacă x=30, y=25, z=10 se afi ează

Page 28: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Diana CONTRAȘ

Colegiul Național “Gheorghe Șincai” Baia Mare

4

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

Depunere în pu culi ă

dacă x=50, y=25, z=30 se afi ează 25

#include <iostream>

int main ()

{ int x, y, z, minim;

cout<<”x=”; cin>>x;

cout<<”y=”; cin>>y;

cout<<”z=”; cin>>z;

if(x+y+z<=100)

cout<<”Depunere in pusculita”;

else {

minim=x;

if(y<minim)

minim=y;

if(z<minim)

minim=z;

cout<<minim;

}

return 0;

}

4. Piticii sapă în mină n (n[1,108]) zile. În fiecare zi ei scot un anumit număr de diamante,

valoare apar inând intervalului [1,104]. Determina i care este cel mai mare număr de diamante pe

care îl găsesc piticii i în câte zile au găsit acela i număr maxim de diamante. Cele două valori se vor afi a pe acela i rând separate prin câte un spa iu. Exemplu: dacă n=10 i numărul diamantelor găsite în fiecare zi 25, 30, 20, 45, 20, 45, 15, 24, 45, 12 se afi ează

45 3

#include <iostream>

int main ()

{ int n, x, maxim=0, nr,i;

cout<<”n=”; cin>>n;

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

{

cout<<”x=”; cin>>x;

if (x>maxim)

{ maxim=x;

nr=1; }

else

if (x==maxim)

nr++;

}

cout<<maxim<<’ ‘<<nr; return 0;

}

Page 29: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Diana CONTRAȘ

Colegiul Național “Gheorghe Șincai” Baia Mare

5

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

5. Seiful în care este ascunsă comoara pira ilor are ca cifru un număr cu cel mult 8 cifre format doar din cifre pare. Pentru a nu fi u or de depistat, Barbă Neagră scrie un număr cu cel mult 8 cifre care con ine atât cifre pare cât i cifre impare. Determina i cifrul care

deschide seiful, tiind că acesta se ob ine prin îndepărtarea cifrelor impare din numărul scris de Barbă Neagră. Exemplu: dacă numărul scris de Barbă Neagră este 12445683, atunci se afi ează 24468

#include <iostream>

int main ()

{ int n, nr=0,p=1;

cout<<”n=”; cin>>n;

while(n!=0)

{

if(n%2==0)

{ nr=nr+(n%10)*p;

p=p*10;}

n=n/10;

}

cout<<nr;

return 0;

}

6. Elevii din două grupe participă la un concurs. tiind că în prima grupă sunt n (n[1,108])

elevi, în a doua grupă sunt m (m[1,108]) elevi i punctajele realizate de to i elevii

(punctajele sunt din intervalul [1,104]), afi a i câ i dintre elevii din a doua grupă au punctajul

strict mai mare decât to i elevii din prima grupă. Exemplu: dacă n=5 i au punctajele 10, 15, 20, 30, 14, iar m=6 i au punctajele 60, 10, 45, 15, 40, 30 se afi ează 3

#include <iostream>

int main ()

{ int n, m, x, nr=0, maxim=0, i;

cout<<”n=”; cin>>n;

cout<<”Punctajele elevilor din grupa 1:”<<endl;

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

{ cout<<”Punctaj elev ”<<i<<”: “; cin>>x;

if(x>maxim)

maxim=x;

}

cout<<”m=”; cin>>m;

cout<<”Punctajele elevilor din grupa 2:”<<endl;

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

{ cout<<”Punctaj elev ”<<i<<”: “; cin>>x;

if(x>maxim)

nr++;

}

cout<<nr;

return 0;

}

Page 30: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Diana CONTRAȘ

Colegiul Național “Gheorghe Șincai” Baia Mare

6

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

7. Să se afişeze toate numerele de forma � �̅̅ ̅̅ ̅̅ ̅ care se împart exact la 3.

#include <iostream>

int main ()

{ int a;

for(a=1;a<=9;a++)

if ((a+2+3+a)%3==0)

cout<<a<<2<<3<<a<<endl;

return 0;

}

8. Pentru lansarea unei navete de pe planeta Tatooine trebuie introduse două coduri reprezentate de două numere naturale pare. Pilotul prime te un singur număr din intervalul

[1,104]. Ajuta i-l să gasească toate combina iile posibile de numere pare pornind de la

numărul dat, scriindu-l ca sumă de două numere pare. În cazul în care acest lucru nu este posibil, să se afi eze mesajul NU EXISTA. Exemplu: dacă numărul dat este 24 se afi ează

24=1+23 24=3+21 24=5+19 24=7+17 24=9+15 24=11+13

dacă numărul date este 33 se afi ează

NU EXISTA

#include <iostream>

int main ()

{ int n,i;

cout<<”n=”; cin>>n;

if(n%2==1)

cout<<”NU EXISTA”;

else

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

cout<<n<<’=’<<i<<’+’<<n-i<<endl;

return 0;

}

9.Pentru o valoare n (n[1,104]) citită de la tastatură, să se afişeze primii n termeni ai şirului

lui Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21…. Exemplu: dacă n=6 se afi ează 1, 1, 2, 3, 5, 8

#include <iostream>

int main ()

{ int n,fib1,fib2,fib,i;

cout<<”n=”; cin>>n;

fib1=fib2=1;

cout<<fib1<<’ ‘<<fib2<<’ ‘; for(i=3;i<=n;i++)

{ fib=fib1+fib2;

cout<<fib<<’ ‘; fib1=fib2;

fib2=fib;

}

return 0;

}

Page 31: Autori Alina Maria Violeta KALMAR , Diana · PDF fileAutori : Alina PINTESCU , Iuliana 05,( Maria BELBE , Carmen ANTON , Violeta KALMAR , Diana &amp;2175$ Material auxiliar didact ic ISBN

prof. Diana CONTRAȘ

Colegiul Național “Gheorghe Șincai” Baia Mare

7

Coleg

iul N

aţio

nal “

Gheor

ghe Ş

inca

i” B

aia

Mare

10. În ara de Nicăieri casele sunt numerotate de la 1 la n (n[3, 102]). Numărul de pe o

casă a picat. Vrajitoarea cea rea a încurcat restul numerelor astfel încât locuitorii să nu î i poată da seama care este numărul pierdut. Dacă se cite te n, apoi într-o ordine oarecare n-1

valori distincte din intervalul [1, n], ajuta i locuitorii ării de Nicăieri să realizeze care este numărul lipsă. Exemplu: dacă n=4 i numerele introduse sunt 2, 3, 1, atunci se afi ează 4

#include <iostream>

int main ()

{ int n,x,i,suma=0;

cout<<”n=”; cin>>n;

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

{ cout<<”x=”; cin>>x;

suma=suma+x;

}

cout<<n*(n+1)/2-suma;

return 0;

}

11.Scrieţi un program care citeşte un număr natural n (n[3, 102]) şi afişează:

1

1 2

1 2 3

1 2 3 4

.…………….

1 2 3 4……n

Exemplu: dacă n=6 se afi ează

1

1 2

1 2 3

1 2 3 4

1 2 3 4 5

1 2 3 4 5 6 #include <iostream>

int main ()

{ int n,i,j;

cout<<”n=”; cin>>n;

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

{

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

cout<<” “; //sunt doua spatii intre ghilimele

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

cout<<i<<’ ‘; cout<<endl;

}

return 0;

}