Documente Academic
Documente Profesional
Documente Cultură
ABSOLVENT:PASĂRE DARIUS
CLASA A XII-B
MOTRU-2023
COLEGIUL NAŢIONAL GEORGE COŞBUC
ABSOLVENT:PASĂRE DARIUS
CLASA A XII-B
MOTRU-2023
CUPRINS:
INTRODUCERE.................................................pag
INSTRUCTIUNI C++.........................................pag.
PRONLEME SI PRGRAME ..............................pag
BIBLIOGRAFIE..................................................pag
INTRODUCERE
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:
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:
Limbaje Low-Level
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
Limbaje High-Level
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:
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
Locul expresiei poate fi luat fie de o simplă constantă, fie de o construcţie complexă, care să
cuprindă diferiţi operatori.
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ţiunea if
Sintaxa generală a acestei instrucţiuni este:
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ă.
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)
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)
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)
............................................
Expresie 1, 2, …,n pot fi constante, variabile sau expresii de acelaşi tip de date.
...
switch(c)
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
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) {
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 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.
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ă>);
int n = 10;
do
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.
<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.
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ă.
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.
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 .
if (i==3)
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,
if (i==3) continue;
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++;
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; }
{ 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; }
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++; }
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” ;
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 !
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; }
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:
#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;
}
#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