Documente Academic
Documente Profesional
Documente Cultură
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.
Ș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();
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
#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 { }.
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
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
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.
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
Deoarece prima parte este și ea formată din două părți, o vom pune între ():
(an%4==0 && an%100!=0)
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.