Sunteți pe pagina 1din 34

COLEGIUL NAŢIONAL GEORGE COŞBUC

LUCRARE PENTRU ATESTAREA COMPETENŢELOR PROFESIONALE

TEMA INTRUCTIUNI IN C++

PROFESOR COORDONATOR:GEORGESCU EMILIA MIHAELA

ABSOLVENT:PASĂRE DARIUS

CLASA A XII-B

MOTRU-2023
COLEGIUL NAŢIONAL GEORGE COŞBUC

LUCRARE PENTRU ATESTAREA COMPETENŢELOR PROFESIONALE

PROFESOR COORDONATOR:GEORGESCU EMILIA MIHAELA

ABSOLVENT:PASĂRE DARIUS

CLASA A XII-B

MOTRU-2023
CUPRINS:
 INTRODUCERE.................................................pag
 INSTRUCTIUNI C++.........................................pag.
 PRONLEME SI PRGRAME ..............................pag
 BIBLIOGRAFIE..................................................pag
INTRODUCERE

Introducere în informatică și programare

Informatica este știința care se ocupă cu procesarea sistematică a informației, de obicei prin
intermediul unui calculator. Informatica s-a dezvoltat cutremurător în ultimul secol, și a ajuns
să fie folosită în mai toate domeniile de activitate. Iată o scurtă listă cu cele mai importante
evenimente din dezvoltarea informaticii, până la apariția primelor calculatoare:

 1623: Wilhelm Schickard a proiectat o mașină de calcul, însă proiectul a fost


abandonat din cauza unui incendiu ce a distrus clădirea în care se afla prototipul.
 1640: Blaise Pascal, un renumit matematician, fizician și filozof francez a construit
pascalina, un dispozitiv mecanic de calcul.
 1672: Gottfried Wilhelm Leibniz a inventat Socotitorul în trepte, pe care l-a finalizat
în 1694.
 1703: Gottfried Leibniz a dezvoltat algebra booleană, care stă la baza sistemelor de
calcul din ziua de astăzi, deoarece această algebră folosește doar valorile 0 și 1, care
sunt cel mai ușor de reprezentat din punct de vedere fizic. De exemplu, 0 poate fi un
bec stins, iar 1 unul aprins.
 1801: Joseph Marie Jacquard a creat un război ce funcționa pe baza cartelelor
perforate, demonstrând că mașinile pot fi construite în jurul sistemului binar.
 1835: Charles Babbage a inventat mașina analitică, pe care însă nu a reușit să o
construiască. Aceasta era alimentată de un motor cu aburi și funcționa pe baza
cartelelor perforate.
 1936: Alan Turing a descris în 1936 principiile de funcționare ale Mașinii Turing, o
mașină de calcul programabilă. Aceasta a fost implementată pentru prima oară, mai
târziu, de John von Neumann, care a definit o arhitectură ce folosea aceeași memorie
atât pentru stocarea programelor cât și a datelor.
 1945: A fost finalizată construirea ENIAC-ului (Electronic Numerical Integrator And
Computer), primul calculator electronic care putea efectua 5.000 de operații de
adunare și scădere pe secundă, fiind de o mie de ori mai rapid decât celelalte mașini.
ENIAC cântărea 30 de tone și folosea peste 18.000 de tuburi!
 1954: IBM lansează un calculator mai mic, IBM 650, care cântărea peste 900 kg.
 1957: Este lansat Fortran, primul limbaj de programare de nivel înalt.

Acesta a fost doar începutul, căci lucrurile au evoluat foarte repede de atunci: Au apărut
primele computere personale cu interfață grafică, C++ – primul limbaj ce suportă
programare orientată pe obiect (OOP), primele telefoane inteligente și așa mai departe.

Ce este un algoritm?

Un algoritm este un set de pași ce trebuie urmați pentru a rezolva o problemă. Această
noțiune stă la baza informaticii și a fost definită de matematicianul persan Al-Khwarizmi.
Algoritmii sunt implementați de obicei prin scrierea unui program, folosind un limbaj de
programare. Un exemplu de algoritm este cel de preparare a unei rețete culinare, folosind
diverse ingrediente și unelte:

1. Încălzește cuptorul la 160 °C.


2. Pregătește ingredientele: făină, unt, zahăr, lapte și ouă.
3. Amestecă ingredientele într-un bol.
4. Toarnă amestecul într-o tavă.
5. Lasă preparatul la copt 50 de minute.
Proprietățile pe care orice algoritm trebuie să le aibă într-o măsură mai mică sau mai mare
sunt:
 Corectitudinea: Algoritmul trebuie să furnizeze o soluție corectă pentru problema
dată.
 Determinismul: Pentru un set de date de intrare anume, algoritmul trebuie să
returneze întotdeauna același rezultat.
 Generalitatea: Algoritmul trebuie să rezolve o clasă de probleme, nu doar o
problemă particulară. De exemplu, dacă vrem să elaborăm un algoritm care rezolvă o
ecuație de gradul al II-lea, e de preferat ca acesta să poată rezolva orice ecuație de
forma ax2+bx+c=0, indiferent de valorile variabilelor a, b și c.
 Claritatea: Algoritmul nu trebuie să conțină ambiguități.
 Finitudinea: Algoritmul trebuie să se oprească într-un număr finit de pași – mai
exact, să nu intre într-o buclă infinită.
 Eficiența: Algoritmul trebuie să fie cât mai eficient, adică să se oprească după un
număr cât mai mic de pași. Dacă se poate demonstra că numărul de pași pe care îi face
algoritmul pentru a rezolva problema este cel mai mic posibil, atunci algoritmul este
optim.

Ce este un limbaj de programare?

Un limbaj de programare este un set bine definit de expresii și reguli pentru


formularea instrucțiunilor ce urmează a fi executate de către un calculator. Cu alte cuvinte, cu
ajutorul lor putem implementa algoritmi pentru a crea diverse aplicații. Limbajele de
programare pot fi de nivel scăzut, mediu sau înalt, în funcție de cât de ușor comunică cu
procesorul și de cât de mult pot abstractiza datele (cât de mult se apropie de un limbaj
natural).

Limbaje Low-Level

Limbajele Low-Level sunt cele mai performante, și sunt folosite de obicei la


dezvoltarea sistemelor de operare. Limbajul de cel mai scăzut nivel este codul mașină, care
rulează direct pe procesor. În acest limbaj se folosesc doar cifrele binare, așa că practic este
imposibil să programezi direct în el. Codul mașină este urmat de limbajele de asamblare, care
sunt și ele greoaie, dar mult mai OK.

Continuăm cu C, urmat de C++ (datorită OOP-ului), care sunt undeva între Low-
Level și Mid-Level. Acestea permit destul de multă abstractizare de date, însă în multe
situații programatorul trebuie să facă manual lucruri pe care, în alte limbaje, le-ar face chiar
limbajul în sine, cum ar fi eliberarea de memorie când ștergem o variabilă alocată dinamic.
Totuși, multe dintre jocurile 3D de succes sunt făcute (în mare parte) în C++, datorită vitezei
sale.
Limbaje Mid-Level

Limbajele Mid-Level sunt folosite de obicei pentru a programa aplicații obișnuite,


deoarece sunt foarte ușor de înțeles. Aici includem Java și C#

Limbaje High-Level

Majoritatea limbajelor High-Level sunt interpretate și au performanță mai slabă, însă


sunt foarte ușor de utilizat. Aici intră JavaScript și Python. JavaScript a fost conceput inițial
pentru a adăuga funcționalitate paginilor web, însă odată cu apariția lui Node.JS în 2009, un
program care permite rularea de cod JS și în afara browser-ului, JavaScript a devenit un
limbaj cu care poți să faci aproape orice. În plus, are una dintre cele mai elegante sintaxe pe
care le-am văzut vreodată
INSTRUCTIUNI C++

Instrucţiunile limbajului C++

Instrucţiunile sunt elementele individuale ale programului, care determină executarea


de diferite acţiuni. În C++ ele se termină, întotdeauna, cu punct şi virgulă şi sunt executate în
ordinea în care sunt scrise.

Execuţia programelor nu este, însă, întotdeauna liniară, existând instrucţiuni pentru


executarea condiţionată e unor secvenţe de cod sau pentru repetarea lor. În acest fel,
instrucţiunile sunt considerate una singură şi executate în grup.

Instrucţiunea vidă

Instructiunea vidă este, aparent, absurdă, pentru că nu are niciun efect. Poate avea, însă,
utilitate în cazul în care este necesară prezenţa unei instructiuni, dar nu se doreşte a se
execute ceva (de exemplu în instructiunile repetitive). Un exemplu generic, deşi depăşeşte un
pic acest capitol, ar fi:

for(i = 1, s = 0; i <=10; s = s + i, ++i);

în care se realizează suma primelor 10 numere naturale.

Instrucţiunea compusă

Atunci când se doreşte executarea în bloc a mai multor instrucţiuni, în cazul instrucţiunilor
alternative sau repetitive, se impune utilizarea instrucţiunii compuse. Acest lucru se
realizează cu ajutorul acoladelor, într-o scriere de forma:
{ instrucţiune1;instrucţiune2; ... instrucţiune n;}

Instrucţiunea expresie

O instrucţiune expresie provoacă evaluarea expresiei componente, fără să producă ramificaţii


în fluxul de execuţie al programului (eventualele apeluri de funcţii din cadrul expresiei
introduc o ramificare temporară, dar ele returnează controlul execuţiei în punctul în care s-a
întrerupt evaluarea expresiei). Cele mai des utilizate instrucţiuni expresie sunt instrucţiunile
expresie de atribuire şi instrucţiunile expresie apel de funcţie.

Expresia de atribuire are forma generală: variabila=expresie;

Locul expresiei poate fi luat fie de o simplă constantă, fie de o construcţie complexă, care să
cuprindă diferiţi operatori.

Iată câteva exemple:

i+j; //instrucţiune expresie care nu va produce niciun efect

i++; //instrucţiune expresie de incrementare

cout<<j<<endl; //instrucţiune de apel al funcţiei cout, pentru afişarea valorii variabilei j

x=5; //variabilei x i se atribuie o valoare simpla

n=2*m+1; //variabilei n i se atribuie valoarea obţinută prin evaluarea expresiei din partea
dreaptă

z=x>y ? x:y; // variabilei z i se atribuie valoarea x sau y, după cum rezultă din evaluare

Instrucţiunile de selecţie (decizie)

În C++ există două instrucţiuni pentru a condiţiona executarea unor instrucţiuni de


îndeplinirea unei condiţii. Anume, instrucţiunile if şi switch.

Instrucţiunea if
Sintaxa generală a acestei instrucţiuni este:

if(<condiţie>) <instrucţiune A>;

[else <instrucţiune B>;]

Condiţia este o expresie care se evaluează. Dacă rezultatul evaluării este true, atunci se
execută <instrucţiune A>. În caz contrar este executată <instrucţiune B>. Să precizăm că
ramura else este opţională. În exemplul următor vom determina afişarea unui mesaj
corespunzător, dacă valoarea unei variabile este pozitivă.

if(n>=0) cout<<”Numar pozitiv”;

După cum se observă, ramura else lipseşte aici, acest lucru însemnând că în cazul în care
valoarea lui n este negativă nu se va executa nicio intrucţiune. Dacă am dori executarea mai
multor instrucţiuni, condiţionate de valoarea expresiei, atunci ar trebui să le grupăm cu
ajutorul acoladelor, ca în exemplu:

if(n>=0)

cout<<”Ati introdus numarul “<<n;

cout<<”Este numar pozitiv”;

Exemplul anterior poate fi dezvoltat, prin includerea ramurii else, astfel:

if(n>=0) cout<<”Numar pozitiv”;

else cout<<”Numar negativ”;

Desigur, în cazul în care variabila n are o valoare negativă, mesajul afişat va fi “Număr
negativ”.

Instrucţiunea switch
Problema se poate complica, dacă am dori să includem în exemplul precedent şi posibilitatea
de a afişa “Numar nul” în situaţia corespunzătoare. Lucrul poate fi, totuşi, uşor de făcut,
astfel:

if(n>=0)

if(n>0)

cout<<”Este numar pozitiv”;

else cout<<”Este numar nul”;

else cout<<”Este numar negativ”;

Desigur, putem avea situaţii mult mai complexe, în care să fie necesară abordarea mai multor
cazuri pentru a decide continuarea programului. Pentru astfel de situaţii există instrucţiunea
switch. Forma ei generală este:

swith(expresie 0)

case expresie 1: instructiune 1; break;

case expresie 2: instructiune 2; break;

............................................

case expresie n: instructiune n; break;

[default: instructiune n+1;]

Expresie 1, 2, …,n pot fi constante, variabile sau expresii de acelaşi tip de date.

Execuţia acestei instrucţiuni se desfaşoară după următoarea schemă: se evaluează expresia 0,


apoi se evaluează rând pe rând expresiile 1, 2 … n, până când este determinată una a cărei
valoare este egală cu a sa. În acest caz se trece la executarea instrucţiuniii respective, care,
poate fi simplă sau compusă. În cazul în care expresia nu este egala cu niciuna dintre cele n
expresii atunci se efectueaza instructiunile care urmeaza după default, dacă este prezentă, iar
dacă nu, se termina de efectuat instructiunea switch si se trece la instrucţiunea următoare din
program.

Să analizăm următorul exemplu:

...

switch(c)

case '+': cout<<a+b; break;

case '-': cout<<a-b; break;

case '*': cout<<a*b; break;

case '/': cout<<a/b; break;

default: cout<<"Operator gresit";

Presupunând că variabilele a, b, c au fost citite corect, secvenţa de program decide ce


operator aritmetic a fost citit în variabila c şi execută operaţia corespunzătoare, pentru
variabilele a şi b. Secvenţa conţine şi clauza default, astfel că dacă se citeşte orice alt
caracter, în afară de +,-,*,/ va determina afişarea mesajului “operator gresit”.

Instrucţiuni repetitive

Instrucţiunile de acest tip asigură repetarea unei instrucţiuni (simple sau compuse) de un
anumit număr de ori sau cât timp este îndeplinită o condiţie. În C++ sunt în număr de trei:
while, do-while, for.

Instrucţiunea while

Are sintaxa generală:


while(<expresie_condiţională>) <instrucţiune>;

Intrucţiunea determină repetarea instrucţiunii cât timp evaluarea expresiei se face cu valoarea
true. Dacă, la un moment dat în execuţie, evaluarea se face cu false, instrucţiunea este închisă
şi se trece la linia următoare din program.

În exemplul următor variabila n este iniţializată cu 10 şi, pe rând, după ce este afişată, i se
coboară valoarea până la 1. Să reţinem, deci, că ultima execuţie se va face pentru valoarea 1.

int n = 10;

while (n>0) {

cout << n << ", ";

n--; }

Efectule execuţiei ar fi, evident, afişarea valorilor 10, 9, 8 … 1. Întreg procesul de execuţie al
secvenţei se poate descrie astfel:

pas 1: lui n i se atribuie valoarea iniţială 10

pas 2: este verificată valoarea lui n prin expresia n > 0. În acest moment există două
posibilităţi,

valoarea expresiei este true, adică n>0, caz în care se trece la executarea pasului 3

valoarea este evaluată ca false, adică n<=0, caz în care se trece la executarea instrucţiunii
aflate în program după secvenţă.

pas 3: se execută instrucţiunea compusă {cout << n << ", "; n--;}, după care se revine la pasul
2.

Trebuie făcută, în general, următoarea observaţiei. Instrucţiunea trebuie să se oprească la un


moment dat. Acest lucru înseamnă că valoarea variabilelor verificate trebuie, cumva,
modificată, astfel încât valoarea expresiei să devină false. În cazul nostru, acest lucru se
realizează prin instrucţiunea n--, ce determină scăderea unei unităţi la fiecare execuţie a
secvenţei.

Este important să reţinem şi că, la ieşirea din instrucţiune, varibila/variabilele vor avea
primele valori care nu verifică

Instrucţiunea do-while
Are sintaxa generală

do

<instrucţiune;>

while (<expresie_condiţională>);

Instrucţiunea do-while are un comportament asemănător instrucţiunii while, dar se deosebeşte


prin aceea că asigură execuţia instrucţiunii cel puţin o dată, indiferent de îndeplinirea
condiţiei.

În exemplul următor am rescris codul de la instrucţiunea while:

int n = 10;

do

cout << n << ", ";

n--;

while (n>0) ;

După cum se obsevă, efectul execuţiei este identic, în urma sa afişându-se, în ordine,
numerele de la 10 la 1.

Instrucţiunea for

Numită şi intrucţiune repetitivă cu număr cunoscut de paşi, instrucţiunea for este concepută
pentru a se executa de un număr determinat de ori.

Sintaxa sa generală este:


for(<instrucţiune_iniţializare>; <expresie_condiţională>; <expresie_creştere)

<lista_instrucţiuni>;

Precum în cazul while şi instrucţiunea din interiorul for se execută cât timp expresia
condiţională este evaluată cu true.

Procesul de execuţie al instrucţiunii for poate fi rezumat astfel:

pas 1: se execută instrucţiunea de iniţializare. De obicei, în acest moment se declară o


variabilă contor şi este iniţializată cu o valoare. Această instrucţiune este executată o singură
dată, la început.

pas 2: este evaluată expresia. Dacă rezultatul evaluării este true, instrucţiunea continuă. Altfel
este terminată şi programul continuă cu pasul 5.

pas 3: este executată instrucţiunea. Aceasta poate fi o instrucţiune simplă sau compusă.

pas 4: se execută expresia de creştere. Se revine la pas 2

pas 5: Instrucţiunea for este terminată şi se trece la isntrucţiunea următoare.

Urmărind exemplele anterioare, iată cum, folosind instrucţiunea for putem afişa numerele de
la 1 la 10, în ordine descrescătoare:

int i;

for(i=10;i>0;i--)

cout<<i<<’,’;
Cele trei câmpuri ale instrucţiunii sunt opţionale. Ele pot lipsi din scrierea instrucţiunii, dar ar
trebui înlocuit efectul executării lor prin alte instrucţiuni. În exemplul următor vom rescrie
secvenţa anterioară, făcând iniţializarea înainte.

int i=10;

for(;i>0;i--)

cout<<i<<’,’;

Chiar dacă un câmp lipseşte, separatorul ; este obligatoriu. Trebuie avut în vedere că o
instrucţiune for fără expresie condiţională este echivalentă cu o instrucţiune for infinită.

Remarcabil este că fiecare câmp poate conţine mai multe instrucţiuni. Totuşi, fiind
considerate expresii, acestea nu pot conţine instrucţiuni compuse. Pot fi scrise, însă, mai
multe instrucţiuni, despărţite prin virgulă, care este un separator de expresii. Este, astfel,
posibil să avem, spre exemplu, în cadrul unui for, două variabile de ciclare, iniţializându-le şi
modificându-le valorile amândurora.

for(i=10, j=0;i>0,j<=10;i--, j++)

cout<<i<<'+'<<j<<'='<<i+j<<endl;

Exemplul de mai sus foloseşte această facilitate pentru a determina scrierea lui 10 ca sumă de
două numere naturale.

Instrucţiunea for, afară de utilizarea tocmai prezentată, utilizată, altminteri, cel mai frecvent,
admite şi iterarea unor domenii. În acest caz sintaxa este:

for(declarare: domeniu)

<lista_instrucţiuni>;

Instrucțiunile de salt

Permit modificarea cursului obisnuit al unui program, prin realizarea saltului la executia
anumitor secvente din program.

Instructiunea break

Are rolul de a opri executia unei instructiuni repetitive, chiar dacă condiția impusă acesteia
este îndeplinită. poate fi utilizată pentru a opri o buclă, ori pentru a opri execuția naturală. În
exemplul următor, o instrucțiune for ce ar avea, în mod natural, zece pași este oprită după
executarea a trei pași .

for (int i=1; i<=10; i++)

cout << i << ", ";

if (i==3)

cout << "execuţie întreruptă !";

break;

Instrucţiunea continue

Permite, în cadrul unei instrucţiuni repetitive, saltul peste executarea anumitor iteraţii.
Reluând exemplul anterior, vom afişa numerele de la 1 la 10, exceptând afişarea lui 3,

for (int i=1; i<=10; i++)

if (i==3) continue;

cout << i << ", ";

Instrucțiunea goto

Determină saltul la un alt punct din program, ignorând liniile aflate între punctul acesta și
respectivul punct. Destinația este identificată printr-o etichetă, folosită apoi ca argument al
instrucțiunii goto. Construcția unei etichete presupune un identificator valid, urmat de semnul
(:). Această instrucțiune provine din programarea low-level, fiind evitată în paradigmele
moderne de programare la nivel înalt. În exemplul următor vom determina afișarea numerelor
de la 1 la 10 prin utilizarea intrucțiunii goto.

int i=1;

eticheta1: cout<<i<<’ ’;

i++;

if (i<=10) goto eticheta1;

PROBLEME SI PROGRAME
1. Determină și afișează cel mai mare dintre două numere citite de la tastatură. citește a, b;
citeste a,b
daca a>b atunci scrie a
altfel b >a
#include <iostream>
using namespace std;
int main()
{ int a,b;
cin>>a>>b;
if(a>b)
cout<<a;
Else
cout<<b;
return 0; }

2. Determină și afișează cel mai mare dintre trei numere citite de la tastatură.
citește a, b, c
dacă a>b atunci daca a>c atunci scrie a
altfel scrie c
altfel daca b>c atunci scrie b
altfel scrie c
Soluție:
#include <iostream>
using namespace std;
int main()
{ int a,d,c; cin>>a>>b>>c;
if(a>b)
if(a>c) cout<<a;
else cout<<c;
else if(b>c)cout<<b;
else cout<<c; return 0; }

3. Determină și afișează suma cifrelor unui număr întreg citit de la tastatură.


citește n
s=0;
cat timp n<>0 executa
s=s+n MOD 10
n=n/10
sfarsit cat timp
scrie s
Soluție:
#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<<s;
return 0; }

4. Verifică dacă un număr citit de la tastatură este prim.


citește n
prim=1
pentru i=2, n DIV 2, 1 execută
dacă n MOD i=0 atunci prim=0
sfarsit pentru
daca prim=1 atunci scrie ‘numarul este prim’
altfel scrie ’numarul nu este prim’
Soluție:
#include <iostream>
using namespace std;
int main()

{ int n,i,sw;
cin>>n;
sw=1;
for(i=2;i<=n/2;i++)
if(n%i==0) sw=0;
if(sw==1)cout<<”numarul citit este prim”;
else cout<<”numarul nu este prim”;
return 0; }
5. Determinarea și afișarea cmmdc pentru două numere citite de la tastură, folosind
algoritmul lui Euclid.
citeste a, b
cat timp a MOD b <> 0 executa
r=a MOD b
a=b
b=r
sfarsit cat timp
scrie b
Soluție:
#include <iostream>
using namespace std;
int main()
{ int a,d; cin>>a>>d;
while(a%d!=0)
{ r=a%d; a=d; d=r; }
cout<<d;
return 0; }

Rescrieți următoarele secvențe de program C++, înlocuind structurile repetitive


prezente prin alte structuri repetitive cunoscute.

1. Determină și afișează toate numerele impare dintre două valori citite.

cin>>a>>b;
if(a>b)
{aux=a; a=b;
b=aux;}
for(int i=a;i<=b;i++)
if(x % 2!=0) cout<<i<<’ ‘;
Soluție:
cin>>a>>b;
if(a>b)
{aux=a;
a=b;
b=aux;}
int i=a;
while(i<=b)
{ if(x % 2!=0)
cout<<i<<’ ‘; i++; }

2. Verifică dacă cifrele unui număr dat sunt în ordine crescătoare.


cin>>n;
s=-1;
while(n!=0)
{ if(n%10>s)
s=n%10;
else s=11; }

if(s==11)
cout<<”cifrele nu sunt in ordine crescatoare” ;
else cout<<”cifrele sunt in ordine crescatoare” ;
Soluție:
cin>>n;
s=-1;
do
{ if(n%10>s)
s=n%10;
else s=11; }
while(n!=0);
if(s==11)
cout<<”cifrele nu sunt in ordine crescatoare” ;
else cout<<”cifrele sunt in ordine crescatoare” ;

3. Calculează și afișează suma S=1-4+9-16+....+(-1)^n*n^2

cin>>n;
if(n<0)
n=-n;
sum=0;
for(i=1;i<=n;i++)
if(i%2==0)
sum-=i*i;
else sum+=i*i;
cout<<sum;
Soluție:
cin>>n;
if(n<0)
n=-n;
sum=0;

i=1;
while(i<=n)
{ if(i%2==0)
sum-=i*i;
else sum+=i*i; i++; }
cout<<sum;
4. Determină și afișează cel mai mare divizor propriu al unui număr n, citit de la tastatură.
cin>>n; if(n<0) n=-1*n; d=1; for(i=2;i<=n/2;i++) if(n%i==0)d=i; if(i==n/2+1)
cout<<”numarul nu are divizori proprii”; else cout<<d;
Soluție:
cin>>n;
if(n<0)
n=-1*n;
d=n/2;
while(n % d !=0)
d--;
if(d==1)
cout<<”numarul dat nu are divizori proprii”;
else cout<<d;
5. Determină și afișează cea mai mare cifră care apare intr-un număr întreg, citit de la
tastatură.
cin>>n;
max=0;
do
{ if(max < n%10)
max=n%10;
n=n/10; }
while(n!=0);
cout<<max;

Soluție:
cin>>n;
max=0;
while(n!=0)
{ if(max < n%10)
max=n%10;
n=n/10; }
cout<<max;
Scrieți programele C++ corespunzătoare algoritmilor de rezolvare a
următoarelor probleme !

1Fie funcția f:R→R, definită prin f(x)={(x^2,x≤0; x+1,0<x≤10; -x^2+2,x>10. Determinați


valoarea funcției într-un punct x, dat de la tastatură. Soluție:
#include <iostream>
using namespace std;
int main()
{ float x, f;
cin>>x;
if(x<=0)
f=x*x;
else
if(x<=10)
f=x+1;
Else
f=-x*x+2;
cout<<”f(”<<x<<”)=”<<f;
return 0; }

2. Se introduc de la tastatură patru numere reale, a, b, c, d. Se cere să se verifice dacă


numerele a și b, respectiv c și d formează intervale și, dacă da, să se verifice dacă acestea sunt
disjuncte.
Soluție:
#include <iostream>
using namespace std;
int main()
{ float a,b,c,d;
if((a<b)&&(c<d))
{ if((a>d)||(c>b))
cout<<”Formeaza intervale disjuncte”;
else cout<<”Intervalele nu sunt disjuncte”; }
else cout<<”Nu pot forma intervale”;
return 0; }

3. Să se verifice dacă un număr natural, introdus de la tastatură, este pefect (egal cu suma
divizorilor mai mici ca el, spre exemplu 6=1+2+3).
Soluție:
#include <iostream>
using namespace std;
int main()
{ unsigned int n, s=1, d;
cin>>n;
for(d=2;d<=n/2;d++)
if(n%d==0)s=s+d; }
if(s==n)
cout<<”numarul este perfect !”;
else cout<<” numarul nu este perfect !”;
return 0; }

4. Să se calculeze și să se afișeze suma S=1+1*2+1*2*3+…+1*2*3*…*n, unde n este un


număr natural, citit de la tastatură.
Soluție:
#include <iostream>
using namespace std;
int main()
{ unsigned int n, termen=1;
unsigned long sum=0;
cin>>n;
for(i=1;i<=n;i++)
{ termen=termen*i;
sum=sum+termen; }
cout<<sum; return 0; }

5. Să se determine și să se afișeze toate numerele mai mici decât un numar întreg n, citit de la
tastatură, care au proprietatea de a fi egale cu suma pătratelor cifrelor lor.
Soluție:
#include <iostream>
using namespace std;
int main()
{ int n, i, ic, s;
cin>>n;
for(i=1;i<n;i++)
{ s=0;
ic=i;
while(ic)
{ s=s+(ic%10)*(ic%10);
ic=ic/10; }
if(s==i)
cout<<”Numarul”<<i<<” este egal cu suma patratelor cifrelor sale \n”;}
return 0; }

Programe:

1. Scrieti un program C++ care calculeaza valoarea expresiei: S=1+1/2+1/3+..+1/n, n∈N.

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{int n,i;
float S=0;
cin>>n;
for(i=1;i<=n;i++)
S=S+(float)1/i;
cout<<S;
return 0;
}
2. Se citeste n nr natural. Si apoi se citesc n nr cu cel putin 9 cifre fiecare. Scrieti un program
C++ care afiseaza nr care are cea mai mare suma a cifrelor.

#include <iostream>
using namespace std;
int main()
{int n,i,S,max=0;
long x;
cin>>n;
for(i=1;i<n;i++)
{
cin>>x;
aux=x;
S=0;
while(x!=0)
{
S=S+x%10;
x=x/10;
}
if(S>max)

{ m=aux;
max=S;
}
}
cout<<n;
return 0;
}

3. Se citeste n nr natural. Si apoi se citesc n nr intregi. Scrieti un program care afiseaza nr


cifrelor egale cu 1 care apar in scrierea fiecarui nr in baza 2.

#include <iostream>
using namespace std;
int main()
{int n,x,nr,i;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
nr=0;
while(x!=0)
{
if(x%2==1)
nr++;
x=x/2;
}
cout<<nr<<" ";
}
return 0;
}

BIBLIOGRAFIE:
1. BLOGSPOT.COM
2. PBINFO
3. WIKIPEDIA
4. SCRIBD.COM

S-ar putea să vă placă și