Sunteți pe pagina 1din 25

Recapitulare

Algoritmul este o succesiune de pasi ce trebuie parcursi pentru a rezolva un anumit tip de
problema.
Algoritmii lucreaza asupra unor date de intrare pe care le prelucreaza si astfel se obtin datele de
iesire. In cazul algoritmilor complecsi se utilizeaza si anumite date intermediare numire date de
manevra.

Datele de intrare se citesc:


- Fie de la tastatura, cu cin>> (ex: cin>>a; )
- Fie din fișier, cu numelefisierului, în general vom numi fișierul de intrare fin, deci cu fin>>
(ex: fin>>a;)
Obs: Dacă avem de citit mai multe date de intrare, putem scrie câte un cin/fin pentru fiecare
( ex: cin>>a; cin>>b; ) sau putem scrie un singur cin/fin pentru toate (ex: cin>>a>>b;)

Datele de ieșire se afișează:


- Fie pe ecran, cu cout<< (ex: cout<<s; )
- Fie în fișier, cu numelefisierului, în general vom numi fișierul de ieșire fout, deci cu fout<<
(ex: fout<<s;)
Obs: Dacă avem de scris mai multe date de ieșire, putem scrie câte un cout/fout pentru
fiecare ( ex: cout<<a; cout<<b; ) sau putem scrie un singur cout/fout pentru toate
(ex: cout<<a<<” “<<b;).

Atunci când lucrăm cu fișiere, trebuie să adăugăm biblioteca fstream:


#include <fstream>

Și precizăm
- fișierul cu datele de intrare: ifstream fin(“date.in”);
- fișierul cu datele de ieșire: ofstream fout(“date.out”);

Atenție: ifstream fin(“date.in”); și ofstream fout(“date.out”); se scriu dupa include namespace std;

După finalizarea prelucrării cele două fișiere se închid. Ex: fin.close(); fout.close();

În functie de informația reținută, datele pot fi:


o int: numar întreg din intervalul [−2,147,483,647, +2,147,483,647]
o long long: [−9,223,372,036,854,775,807, +9,223,372,036,854,775,807]
o float, double: numere reale
o char: caractere

Un algoritm poate contine expresii. Expresiile sunt combinatii de date si operatii. Datele se mai
numesc operanzi. Intre operanzi se afla simboluri numite operatori.
Operatori aritmetice : +, -, *, /, %
Operatori logici: &&, ||, !
Operatori relationali: <, <=, >, >=, ==, !=

Observatie: Atunci cand folosim operatorul / intre doua numere intregi obtinem catul impartirii. Atunci
cand folosim operatorul % intre doua numere intregi obtinem restul impartirii.
Cifrele unui număr

Atunci când avem un număr natural și trebuie să aflăm cifrele sale, o vom face prin împărțiri la 10.

- Ultima cifră a unui număr natural n o aflăm dacă împărțim numărul la 10 și luăm restul: n%10
Ex: 245%10 => 5 (restul împărțirii lui 245 la 10 este 5, deci este chiar ultima cifră a lui n)

- Penultima cifră a unui număr natural n o aflăm dacă împărțim numărul la 10 și luăm restul
împărțirii rezultatului la 10, adică: n/10%10
Ex: 245/10%10 => 24%10 => 4 ( 245/10 este 24 deoarece se ia câtul împărțirii, iar 24%10 este 4,
adică penultima cifră)

- Antepenultima cifră a unui număr natural n o aflăm dacă împărțim numărul la 100 și luăm restul
împărțirii rezultatului la 10, adică: n/100%10
Ex: 245/100%10 => 2%10 => 2 ( 245/100 este 2 deoarece se ia câtul împărțirii, iar 2%10 este 2,
adică antepenultima cifră)
Obs: dacă numărul are doar 3 cifre, antepenultima cifra este si prima cifră, care o putem afla
direct prin împărțire la 100: 245/100 => 2

Exercițiu: Se dă un număr natural n de 3 cifre. Să se afle suma cifrelor sale.


Prima dată îl citim pe n, apoi aflăm fiecare dintre cele 3 cifre, apoi le adunăm și afișăm
rezultatul:

#include <iostream>
using namespace std;
int main()
{
int n,a,b,c,s;
cin>>n;
a=n/100;
b=n/10%10;
c=n%10;
s=a+b+c;
cout<<s;
return 0;
}
Pentru a afla un nou număr din anumite cifre, vom inmulți anumite cifre cu 10 (sau puteri ale
lui 10) și vom aduna alte cifre.
Exemplu: Se dă un număr natural de 3 cifre. Să se determine numărul obținut prin eliminarea
cifrei din mijloc.
De fapt vom afla prima și ultima cifră a numărului a și c și vom forma un nou număr doar din a și
c, astfel: a*10 + c.
Exemplu: 245
Aflăm a=2, b=4, c=5, după care formăm alt număr fără b: m=a*10+c => m=2*20 + 5 => m=25.
#include <iostream>
using namespace std;

int main()
{
int n,a,c,m;
cin>>n;
a=n/100;
c=n%10;
m=a*10+c;
cout<<m;
return 0;
}

Structura secventiala: un sir de instructiuni care se executa fiecare o singura data , de la prima
pana la ultima instructiune din sir.

Structura alternativă este folosită pentru a face alegerea între două operații/instrucţiuni (sau
secvențe de operații/instrucţiuni) după ce evaluezi o condiţie. Condiţia sau expresia evaluată poate fi
adevărată sau falsă.

Forma generală:

if ( condiție )
operații1;
else
operații2;

În cazul în care condiția este adevărată se execută operații1, altfel se execută operații2.
Dacă avem mai mult de o instrucțiune de scris în cazul în care condiția este adevărată sau falsă,
acestea se scriu între {}.
Exemplu:
if(a>b) {
maxim=a;
cout<<"maximul e primul numar";
} else
cout<<"maximul e al doilea numar";

Daca a este mai mare decât b atunci maxim ia valoarea lui b si afișăm un mesaj. Fiind 2
instrucțiuni, acestea se vor pune între { }.
Altfel (dacă a nu este mai mare decât b => a este mai mic sau egal cu b), afișăm un mesaj. Dacă
în acest caz avem de executat o singura instrucțiune, nu este necesar să o punem între { }.

Tema Structura Secventiala

1. Sum00: Se dau două numere întregi. Să se determine suma lor.


Date de intrare: a, b
Date de iesire: s
2. Scadere: Se dau două numere naturale. Să se calculeze diferența lor.
Date de intrare: a, b
Date de iesire: d

3. Asii: Se dau două numere naturale. Calculați suma, diferența, produsul și câtul lor, în această
ordine.
Date de intrare: a, b
Date de iesire: s,d,p,c

4. Picioare: Într-o curte sunt g găini și o oi. Să se determine numărul de capete și numărul de
picioare din curte.
Date de intrare: g, o Date de ieșire: c, p
5. Camioane: O firmă are două tipuri de camioane: camioane de tipul 1, care pot transporta câte
t1 tone de marfă pe zi, și camioane de tipul 2, care pot transporta câte t2 tone de marfă pe zi.
Știind că firma are n camioane de tipul 1 și m camioane de tipul 2, câte tone de marfă pot
transporta camioanele firmei în z zile.
Date de intrare: t1, t2, n, m, z Date de ieșire: t (incărcătura totală)

6. Animale: Într-o curte sunt câini, pisici și găini. Se știe că numărul de pisici este egal cu dublul
numărului de câini, iar numărul de găini este egal cu dublul numărului de pisici. Dacă în curte
sunt c câini, câte animale sunt în curte?
Date de intrare: c Date de ieșire: s Date de manevră: p, g

7. Globuri: Într-un brad sunt a globuri albe, de două ori mai multe globuri roșii, iar globuri verzi cu
3 mai puține ca numărul de globuri roșii. Câte globuri sunt în total?
Date de intrare: a Date de ieșire: s Date de manevră: r,v
8. Picioare1: Într-o curte sunt găini și oi. Se cunoaște numărul de capete și numărul de picioare din
curte. Să se determine numărul de găini și numărul de oi.
Date de intrare: c, p
Date de ieșire: g, o

Explicație: Avem următoarele ecuații: g+o=c și 2*g+4*o=p


Din g+o=c => g=c-o;
In 2*g+4*o=p înlocuim pe g cu c-o și obținem: 2*(c-o) + 4*o = p
Desfacem paranteza: 2*c – 2*o + 4*o = p
 2*c + 2*o = p
 2*o = p- 2*c
 o = (p – 2*c) / 2 Aceasta este formula cu care aflăm numărul de oi din c și p
Înlocuind pe o (pe care tocmai l-am aflat) în prima ecuație, il aflăm și pe p:
g = c-o;

9. Uciv: Se dau două numere naturale x și y. Calculați ultima cifră a sumei lor.
Date de intrare: a,b
Date de ieșire: u
Date de manevră: s
10. Sumcif: Se dă un număr natural cu exact 3 cifre. Să se determine suma cifrelor sale.
Date de intrare: n Date de ieșire: s Date de manevră: a,b,c

11. Numar: Se dă un număr natural cu exact 3 cifre. Calculați produsul dintre cifra unităților și cifra
sutelor. Date de intrare: n Date de ieșire: p Date de manevră: a,c

12. Cifre: Se dă un număr natural cu cel puțin 2 cifre. Să se afle suma dintre cifra zecilor și cifra
unităților numărului.
Date de intrare: n Date de ieșire: s Date de manevră: a, b
13. Schimbarecifre: Se dă un număr natural de 2 cifre. Să se afișeze pătratul valorii obținute prin
schimbarea între ele a celor 2 cifre.
Date de intrare: n Date de ieșire: p Date de manevră: a, b, m

14. Elimcif: Se dă un număr natural cu exact 3 cifre. Să se determine numărul obținut prin
eliminarea cifrei din mijloc.
Date de intrare: n Date de ieșire: m Date de manevră: a,c
Explicație: De fapt vom afla prima cifră a numărului (a) și ultima cifră (c) și vom forma un nou
număr doar din a și c, astfel: a*10 + c.
Structura secventiala – probleme

1. Sum: Se citesc două numere întregi din fișierul sum.in. Să se afișeze suma lor în fișierul sum.out.
Date de intrare: a, b Date de ieșire: s

2. Triplul: Se dau două numere naturale x și y. Determinați valoarea care trebuie adunată la x
pentru a obține triplul lui y.
Date de intrare: x,y Date de ieșire: v Date de manevră: t

3. Tren Japonez: În Japonia toate trenurile pot suporta un număr de vagoane și marfă. Toate
vagoanele au încărcături egale. Se dau număru de vagoane n și marfa totală m. Să se afișeze
încărcătura i a vagoanelor.
Date de intrare: n,m Date de ieșire: i
4. Lăzi: Câte cutii cubice de latură l pot fi suprapuse într-o încăpere de înălțime h?
Date de intrare: l, h Date de ieșire: c

5. Curte: Curtea bunicului are formă dreptunghiulară şi pentru ea se cunosc lungimea a şi lăţimea
b. Să se determine aria acestei curţi, precum şi lungimea gardului care înconjoară curtea.
Date de intrare: a, b Date de ieșire: aria, perimetru

6. Sumapatratecifre: Se dă un număr natural de 3 cifre. Să se afișeze suma pătratelor cifrelor sale.


Date de intrare: n Date de ieșire: s Date de manevră: a,b,c
Obs: Putem să mai adăugăm pa, pb, pc – patratele cifrelor ca date de manevră și să calculăm
suma dintre pa, pb și pc. Sau putem să calculăm suma direct din a*a+b*b+c*c, după cum se
poate observa mai jos.
7. Timp: Se dau 2 numere naturale h m, reprezentând un ora curentă exprimată în ore şi minute.
Să se determine care va fi ora peste x minute.
Date de intrare: h,m,x Date de ieșire: hn, mn (ora noua, minutul nou)
Probleme IF

1. Max2: Se dau două numere întregi. Să se afișeze maximul dintre cele două numere.
Date de intrare: a, b
Date de ieșire: maxim

2. Maxim2: Se citesc două numere întregi din fișierul de intrare maxim.in. Să se afișeze maximul lor
în fișierul de ieșire maxim.out.
Date de intrare: a, b
Date de ieșire: maxim
3. Maxim3: Din fișierul maxim3.in se citesc 3 numere întregi. Să se afle maximul dintre ele și să se
afișeze în fișierul maxim3.out.
Date de intrare: a,b,c,
Date de ieșire: maxim

Observație: Se calculează prima dată minimul dintre a și b. Apoi se verifică minimul față de c.
Dacă c este mai mic decât minimul calculat, minimul devine c.

4. Minim3: Se dau 3 numere întregi. Să se afișeze minimul dintre ele.


Date de intrare: a,b,c,
Date de iesire: minim
5. Paritate: Se citește un număr natural. Să se verifice dacă este par sau impar.
Date de intrare: n Date de ieșire: un mesaj

6. Nota: Fiind dată nota unui elev să se afișeze dacă acesta este corigent sau promovat.
Date de intrare: n Date de ieșire: un mesaj

7. Varste copii: Fiind date vârstele a doi copii (a și b) afișați care dintre ei este cel mai mare și cu cât.
Date de intrare: a,b Date de ieșire: mesaj
8. Sticle: Scrieți un program care determină câte sticle de x litri cu apă trebuie deschise pentru a
umple un vas de y litri.
Date de intrare: x, y Date de ieșire: s Date de manevră: r
Explicații: Numărul de sticle ce trebuie deschise pentru a umple vasul este s=y/x.
Dacă y nu se împarte exact la x (restul împărțirii este mai mare decât 0) înseamnă că vazul nu e
plin din s sticle. Pentru a-l umple, mai avem nevoie să desfacem o sticlă. Din această sticlă nu
vom turna toată apa, doar o parte, dar ea trebuie desfacută.
De aceea, după ce calculăm numărul de sticle, verificăm dacă mai e necesar să mai desfacem o
sticlă pentru a umple vasul. Dacă mai e necesar, numărul de sticle s va deveni s+1.

9. Rapunzel: Rapunzel se află într-un turn de n metri. Flynn dorește să urce la ea și parcurge m1
metri de la răsărit până la asfințit, apoi, de la asfințit până la miezul nopții încă m2 metri. După câte
zile ajunge Flynn la Rapunzel? Datele de intrare se citesc din fișierul rapunzel.in, iar datele de ieșire
se afișează în fișierul rapunzel.out.
Date de intrare: n, m1, m2 Date de ieșire: z Date de manevră: m (metri pe zi)
Explicații: Aflăm câți metri parcurge Flynn într-o zi: m=m1+m2;
Aflăm apoi câte zile are nevoie pentru a ajunge la Rapunzel. Știind că turnul are n metri și el face m
într-o zi, com afla numărul de zile prin împărțirea lui n la m: z=n/m.
În cazul în care împărțirea nu e exactă (restul împărțirii e >0), Flynn mai are nevoie de o zi în plus
pentru a parcurge nr de metri rămași. Adică z=z+1. Această expresie z=z+1 se mai poate scrie și z++.
10.Sum3cons: Se citește un număr natural n. Să se stabilească dacă n poate fi scris ca sumă de trei
numere naturale consecutive.
Date de intrare: n Date de ieșire: a, b, c sau mesajul NU EXISTA
Observație: Un număr poate fi scris ca sumă de 3 numere consecutive doar dacă acesta se
împarte exact la 3. În cazul acesta aflăm numărul din mijloc prin împărțire la 3: b=n/3;
Apoi aflăm pe a și b știind că acestea sunt consecutive: a=b-1, c=b+1;
Dacă numărul nu e divizibil cu 3, afișăm mesajul NU EXISTA
Atenție: Dacă numărul e divizibil cu 3, sunt 4 instrucțiuni pe care trebuie să le scriem: aflarea lui b,
aflarea lui a, aflarea lui c și afișarea lor. În cazul acesta trebuie să le scriem obligatoriu între {}.
Pe ramura de else avem o singură instrucțiune, deci nu avem nevoie de {}.

11.2pare: Se dă un număr natural n. Să se determine cele mai mici două numere pare, mai mari
decât n.
Date de intrare: n Date de ieșire: a,b
Observație: Dacă n este par, cele mai mici două numere pare, mai mari decât n sunt n+2 și n+4.
Dacă n este impar, cele mai mici două numere pare, mai mari decât n sunt n+1 și n+3.
12. 2Impare: Se dă un număr natural n. Să se determine cele mai mari două numere impare, mai mici
decât n.
Date de intrare: n Date de ieșire: a, b

13.CifEgale: Se citește de la tastatură un număr natural de 3 cifre. Să se stabilească dacă are toate
cifrele egale.
Date de intare: n Date de ieșire: un mesaj Date de manevră: a,b,c
Atenție: Condiția este compusă din 2 expresii: a==b și a==c. Nu scrieți a==b==c!!!!
14.CifreComune: Se citesc două numere naturale n m cu exact două cifre fiecare. Să se decidă dacă
cele două numere au cifre comune.
Date de intrare: n,m Date de ieșire: mesaj Date de manevră: a,b,c,d
Explicații: aflăm prima și ultima cifră din fiecare număr: folosim a,b pentru n și c,d pentru m.
Numerele au cifre în comun dacă prima a==c sau a==d sau b==c sau b==d.

15.Bisect: Să se scrie un program care verifică dacă un an calendaristic precizat este bisect. Un an
este bisect dacă se divide cu 4 și nu se divide cu 100 sau se divide cu 400.
Date de intrare: an Date de ieșire: un mesaj

Atenție: Condiția este compusă din două părți.


- Prima parte: se divide cu 4 și nu se divide cu 100
- A doua parte: se divide cu 400
Condiția este adevărată dacă prima parte este adevărată SAU a doua parte este adevărată.
Operatorul SAU se scrie ||.

Prima parte este și ea compusă din două părți:


- Prima parte a primei părți: se divide cu 4
- A doua parte a primei părți: nu se divide cu 100
Este adevărată dacă prima parte este adevărată ȘI a doua parte este adevărată.
Operatorul ȘI se scrie &&.

Deoarece prima parte este și ea formată din două părți, o vom pune între ():
(an%4==0 && an%100!=0)

Întreaga condiție este pusă și ea între paranteze, deci va fi:


((an%4==0 && an%100!=0) || an%400==0)
16.Semn: Se citește un număr întreg. Să se determine semnul lui.
Date de intrare: n Date de ieșire: un mesaj
Observație: Dacă numărul e <0, afișăm negativ. Pe ramura de else ajungem dacă numărul nu e
mai mic decât 0, acesta înseamnă că e mai mare sau egal cu 0. Deci aici mai avem două variante.
Așa că întrebăm din nou, este n>0? Dacă da, atunci afișăm pozitiv. Pe al doilea else ajungem dacă
numărul nu e mai mic decât 0 și nu e mai mare decât 0. Acesta înseamnă că este exact 0, deci nu
mai e nevoie să întrebăm dacă este egal cu 0. Putem afișa direct că e nul.

17. Cifimp: Se citește de la tastatură un număr natural de 3 cifre. Să se determine câte cifre impare
conține.
Date de intrare: n Date de iesire: k (nr de cif imp) Date de manevra: a,b,c
Explicații: Avem nevoie de un contor k în care vom număra cifrele impare. Acesta va fi inițial 0
deoarece considerăm inițial că nu avem cifre impare.
Aflăm cifrele a,b,c. Apoi verificăm fiecare cifră în parte. Dacă este impară, vom crește contorul,
adică mai avem o cifră impară față de cele pe care le-am avut până acum.
La final afișăm contorul k.
Observație: Un număr este impar dacă restul impărțirii lui la 2 este 1.
18.CifDiv: Se dau două numere naturale n și m cu exact 3 cifre fiecare. Să se afle câte din cifrele lui n
divid pe m.
Date de intrare: n Date de ieșire: k Date de manevră: a,b,c
Observație: Ca și în cazul problemei cifImp, folosim un contor k.
Atenție! Pentru fiecare cifră, înainte să vedem dacă cifra divide pe m trebuie să verificăm să nu
fie 0, deoarece nu putem împărți la 0 să luăm restul!
TEMA IF

1. Interval2: Se dau trei numere naturale a b x. Să se verifice dacă numărul x aparține intervalului
[a,b].
Date de intrare: a,b,x Date de ieșire: mesaj
Observație: x aparține intervalului [a,b] dacă a<=x și x<=b.

2. Maxmin: Se dau 3 numere naturale. Calculaţi diferența dintre cel mai mare și cel mai mic dintre
cele 3 numere date.
Date de intrare: a, b, c, Date de iesire: d Date de manevra: maxim, minim
Aflăm maximul dintre cele 3 numere, apoi aflăm minimul. Calculam diferenta dintre ele și o
afișăm.
3. Minciună: Andrei este foarte dezorganizat şi uneori mai strecoară câte o minciună. Pentru a-l
responsabiliza, mama i-a dat în grijă biletele la teatru. Când aceasta îl întreabă unde a pus
biletele, Andrei spune că între paginile numerotate cu x şi y ale manualului de informatică.
Să se verifice dacă răspunsul lui Andrei poate fi corect – dacă poate plasa biletele între paginile
numerotate cu x și y ale manualului de informatică.
Date de intrare: x, y Date de ieșire: mesaj

Explicații: Biletele se pot afla intre două pagini dacă acestea sunt consecutive, adică x+1 == y.
Această condiție nu este suficientă, deoarece un bilet nu se poate afla, de ex, intre paginile 1 și 2
întrucît acestea sunt paginile aceleiași file. Deci, pentru a pune biletele între două file diferite,
trebuie ca primul număr să fie par și al doilea impar, adică x%2==0 și y%2==1. Dacă este
îndeplinită prima condiție, x+1==y, și a doua, x%2==0, atunci sigur y va fi impar, deci nu mai
trebuie să îl verificăm. Prin urmare condiția de adevăr este: (x+1==y && x%2==0).

Dar, mai exista posibilitatea ca Andrei să spună că a pus biletele între paginile 3 și 2, de exemplu.
Acesta este adevăr. Pentru a acoperi și acest caz putem verifica: (y+1==x && y%2==0).
Andrei spune adevărul dacă una dintre aceste condiții este adevărată, deci vom scrie ambele
condiții cu SAU între ele. Condiția finală devine: ((x+1==y && x%2==0) || (x-1==y && x%2!=0)).

4. Cifmax3: Se citește de la tastatură un număr natural de 3 cifre. Să se afișeze pe ecran cea mai
mare cifră a sa.
Date de intrare: n Date de ieșire: maxim Date de manevră: a,b,c
5. Cifmid: Se citește de la tastatură un număr natural de 3 cifre, distincte. Să se afișeze pe ecran
cifra din mijloc, ca valoare.
Date de intrare: n Date de iesire: mid Date de manevra: maxim, minim
Explicatii: Prima dată aflăm cifrele numărului: a,b,c. Aflăm maximul dintre ele, aflăm minimul
dintre ele. Ca să aflăm valoarea din mijloc, scădem din suma cifrelor maximul si minimul.
6. Aproapek: Se dau două numere naturale nenule n și k. Să se determine multiplul lui k cel mai
apropiat de n.
Date de intrare: n, k Date de ieșire: p Date de manevra: a, b,r
Aflam multiplul lui k cel mai apropiat de n, mai mic decât n (a) și multiplul lui k cel mai apropiat
de n, mai mare decât n (b). Apoi verificăm care dintre aceștia este mai aproape de n, și îl
reținem in p.

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