+ All Categories
Home > Documents > Lectia 1 Informatica - noţiuni...

Lectia 1 Informatica - noţiuni...

Date post: 30-Jan-2018
Category:
Upload: nguyentuyen
View: 260 times
Download: 6 times
Share this document with a friend
80
Lectia 1 Informatica - noţiuni introductive Definiţie 1: Informatica este ştiinţa care se ocupă cu prelucrarea informaţiilor cu ajutorul calculatorului. Informaţiile prelucrate pot avea diferite tipuri (valori numerice intregi sau reale, şiruri de caractere, imagini, sunete, filme, etc.). În prezent, calculatorul este implicat din ce în ce mai mult în viaţa noastră, fiind utilizat în diferite aspecte după cum urmează: pentru gestionarea informaţiilor: accesul rapid şi exact la anumite informaţii care ne interesează la un anumit moment(de exemplu: bazele de date); pentru rezolvarea unor probleme din domenii diferite cum ar fi matematica, fizica, chimia, etc; pentru comunicare: in prezent comunicarea rapida face parte din viata de zi cu zi, utilizând frecvent reteaua internet prin programele specifice (e-mail, chat, etc.); pentru păstrarea amintirilor: realizarea de albume foto virtuale şi arhive cu filme; pentru relaxare: jocuri, filme, muzică. În această carte vom învăţa să rezolvăm probleme cu ajutorul calculatorului utilizând limbajul de programare C++. Orice program are la bază un algoritm de rezolvare. Definiţie 2: Algoritmul 1 este alcătuit dintr -o succesiune de etape, numite paşi, care trebuie parcurse într- o anumită ordine astfel încât plecând de la datele iniţiale ale problemei, într -un timp finit sa ajungem la rezultatul dorit. Algoritmul este noţiunea fundamentală a informaticii. Totul este construit în jurul algoritmilor (şi al structurilor de date, cum ar fi listele sau grafurile). Definiţie 3: Descrierea unui algoritm de rezolvare a unei probleme sau a unei situaţii date într -un limbaj de programare se numeste program sau cod sursă. Cele mai importante proprietăţi ale unui algoritm sunt următoarele: Corectitudinea - este proprietatea algoritmului de a furniza o soluţie corectă a problemei date. În acest sens este de dorit ca algoritmii să se bazeze pe fapte şi relaţii matematice demonstrabile. Caracterul univoc sau deterministic - plecând de la un set de date iniţial anume, rezultatul este unic, sau altfel spus, repetarea execuţiei algoritmului duce întotdeauna la aceleaşi rezultate. Generalitatea - este proprietatea unui algoritm de a rezolva o clasă sau categorie de probleme, şi nu doar o singură problemă particulară. Spre exemplu, un algoritm care rezolvă doar ecuaţia x 2 + 5x − 6 = 0 este mai puţin general decât unul care rezolvă ecuaţia de gradul II care are următoare formă generală ax 2 + bx + c = 0, oricare ar fi valorile lui a,b,c. 1 Cuvântul are la origine numele matematicianului persan Al-Khwarizmi Date de intrare (Ce se dă) Date de iesire (Ce se cere) Program C++ (scris pe baza unui algoritm de rezolvare)
Transcript
Page 1: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Lectia 1 Informatica - noţiuni introductive

Definiţie 1: Informatica este ştiinţa care se ocupă cu prelucrarea informaţiilor cu ajutorul

calculatorului. Informaţiile prelucrate pot avea diferite tipuri (valori numerice intregi sau reale,

şiruri de caractere, imagini, sunete, filme, etc.).

În prezent, calculatorul este implicat din ce în ce mai mult în viaţa noastră, fiind utilizat în

diferite aspecte după cum urmează:

pentru gestionarea informaţiilor: accesul rapid şi exact la anumite informaţii care ne

interesează la un anumit moment(de exemplu: bazele de date);

pentru rezolvarea unor probleme din domenii diferite cum ar fi matematica, fizica,

chimia, etc;

pentru comunicare: in prezent comunicarea rapida face parte din viata de zi cu zi,

utilizând frecvent reteaua internet prin programele specifice (e-mail, chat, etc.);

pentru păstrarea amintirilor: realizarea de albume foto virtuale şi arhive cu filme;

pentru relaxare: jocuri, filme, muzică.

În această carte vom învăţa să rezolvăm probleme cu ajutorul calculatorului utilizând

limbajul de programare C++. Orice program are la bază un algoritm de rezolvare.

Definiţie 2: Algoritmul1 este alcătuit dintr-o succesiune de etape, numite paşi, care trebuie

parcurse într-o anumită ordine astfel încât plecând de la datele iniţiale ale problemei, într-un timp

finit sa ajungem la rezultatul dorit.

Algoritmul este noţiunea fundamentală a informaticii. Totul este construit în jurul

algoritmilor (şi al structurilor de date, cum ar fi listele sau grafurile).

Definiţie 3: Descrierea unui algoritm de rezolvare a unei probleme sau a unei situaţii date într-un

limbaj de programare se numeste program sau cod sursă.

Cele mai importante proprietăţi ale unui algoritm sunt următoarele:

Corectitudinea - este proprietatea algoritmului de a furniza o soluţie corectă a problemei

date. În acest sens este de dorit ca algoritmii să se bazeze pe fapte şi relaţii matematice

demonstrabile.

Caracterul univoc sau deterministic - plecând de la un set de date iniţial anume,

rezultatul este unic, sau altfel spus, repetarea execuţiei algoritmului duce întotdeauna la

aceleaşi rezultate.

Generalitatea - este proprietatea unui algoritm de a rezolva o clasă sau categorie de

probleme, şi nu doar o singură problemă particulară. Spre exemplu, un algoritm care

rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât unul care rezolvă ecuaţia

de gradul II care are următoare formă generală ax2 + bx + c = 0, oricare ar fi valorile lui

a,b,c.

1 Cuvântul are la origine numele matematicianului persan Al-Khwarizmi

Date de intrare (Ce se dă)

Date de iesire (Ce se cere)

Program C++ (scris pe baza unui algoritm de rezolvare)

Page 2: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Claritatea - proprietatea algoritmului de a descrie cu exactitate şi fără ambiguităţi paşii

care trebuiesc parcurşi în rezolvarea problemei.

Verificabilitatea - acea proprietate a algoritmilor care permite ca fiecare pas să poată fi

verificat într-un timp rezonabil de către om, folosind mijloace de validare de încredere.

Optimalitatea - proprietatea unui algoritm de a se termina după un număr minim de paşi.

Spre exemplu, dacă se cere să se calculeze suma primelor n numere naturale, putem

aplica formula de calcul, şi astfel algoritmul se termină într-un singur pas, pe când dacă

am aduna toate numerele de la 1 la n, el s-ar termina abia în n paşi, şi deci nu ar fi optim.

Finitudinea - este proprietatea algoritmului de a se termina într-un număr finit de paşi.

Există şi algoritmi care nu se termină într-un număr mărginit de paşi, dar aceştia se

numesc "metode algoritmice".

Eficienţa - este proprietatea unui algoritm de a se termina nu numai într-un număr finit, ci

şi "rezonabil" de paşi, chiar dacă acesta nu este cel mai mic posibil (nu este optim).

Algorimul este ineficient şi dacă rezultatul se obţine într-un timp mai lung decât cel dorit

sau permis.

Existenţa unei intrări (datele de prelucrat). Întrucât operatorii se aplică unui operand (sau

şi mai multor operanzi deodată), este de neconceput un algoritm fără niciun operand.

Intrările permise formează împreună un set (mulţime) specific de obiecte sau valori, care

se numeşte "domeniul" algoritmului.

Existenţa unei ieşiri (rezultatele). Este de neconceput un algoritm care nu are nicio ieşire,

deoarece în acest caz intră în discuţie însăşi utilitatea sa.

Operaţiile care apar în cadrul unui algoritm sunt:

Operaţii de intrare ieşire: datele de intrare se vor citi de la tastatră sau din fişiere text şi

ele reprezintă valorile iniţiale cu care se incepe rezovarea unei probleme. Datele de ieşire

reprezintă rezultatul problemei după parcurgerea algoritmului şi aceste fie vor fi afişate

pe ecran, fie vor fi scrise în fişiere text.

Operaţia de atribuire: reprezintă operaţia în urma căreia valoarea unei expresii

(matematice, logice sau relaţionale) este memorată într-o variabilă

Operaţia de decizie: determină valoarea de adevăr a unei expresii logice şi în funcţie de

rezultatul obţinut se continuă execuţia programului pe una din cele doua ramificatii

posibile(adevărat sau fals).

Etapele rezolvării unei probleme cu ajutorul calculatorului

1. Analiza problemei: presupune:

citirea şi analiza cu atenţie a enunţului problemei date pentru identificare datelor de

intrare (datele iniţiale ale problemei). (Ce se cunoaste ? )

Înţelegerea şi identificarea rezultatului aşteptat (stabilirea datelor de iesire). (Ce se

cere?)

Alegerea strategiei de rezolvare a problemei (identifiarea algoritmului optim de

rezolvare a problemei) (Cum rezolv?) Pentru rezolvarea unei probleme date pot exista

mai multe metode. În acest moment trebuie identificat care este cel mai optim mod de

rezolvare a problemi astfel încât în cel mai scurt timp şi cu cele mai puţine resurse să

Page 3: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

obţinem rezultatul dorit. Analiza timpului de lucru a unui program se numeste

complexitate1, dar pentru acest subiect vom discuta mai pe larg intr-un capitol

separat.

2. Descrierea în limbaj natural a modului de rezolvare propus, stabilirea tipurilor de

informaţii care trebuie prelucrate precum şi a tipurilor de rezultate aşteptate. Limbajul

natural descrie în termeni largi etapele propuse pentru rezolvarea problemei date.

3. Descrierea algoritmului în limbaj pseudocod: Limbajul pseudocod este un limbaj

intermediar între limbajul natural şi limbajul de programare. În aceasta etapă se stabilesc

paşii de algoritm, tipurile datelor de intrare, de manevră şi de ieşire, se identifică

condiţiile care impun şi se scriu în expresii matematice care sunt uşor de interpretat de

calculator (calculatorul nu face presupuneri si nici nu ghiceşte ce doritţi dumneavoastră ci

doar execută rapid comenzile pe care le-a primit). Un algoritm scris în limbaj pseudocod

nu este un program care poate fi rulat direct pe calculator, dar poate si transcris uşor într-

un limbaj de programare ţinând cont de vocabularul, semantica si sintaxa limbajului de

programare. În această carte vom folosi un limbaj pseudocod scris în limba română

(pentru a fi mai uşor de inteles logica algoritmicii). Limbajul pseudocod se va baza

implementarea ideii de rezolvare într-un format apropiat de limbajul C++, dar care nu

pune accent pe sintaxa riguroasă care trebuie respectată atunci când scrii într-un limbaj de

programare.

4. Scrierea codului sursă: Aceasta este etapa în care algoritmul scris în limbaj pseudocod

este transcris în limbaj de programare, ţinând cont de regulile impuse de acesta şi

repectând semnificaţia construcţiilor sintactice corecte impuse de limbajul de

programare.

5. Corectarea erorilor sintactice: Corectarea unui cod sursă din punct de vedere sintactic se

numeste compilare2. În aceasta etapă programul este verificat, iar eventualele greşeli sau

omisiuni ale respectării regulilor sintactice sau semantice sunt semnalate de compilator

print-o listă de erori. Cel care a scris programul are obligaţia să corecteze aceste erori

folosindu-se de masajele de eroare afişate precum şi de cunoştinţele sale. Mesajul de

eroare afişat, care semnalează o eroare de compilare, nu indică întotdeauna corect

modalitatea de corectare (el este mai mult informativ). Erorile de eroare vor fi căutate

începând de la poziţia semnalat de compilator sau de la poziţia semnalată spre începutul

programului. O serie de greşeli frecvent întâlnite la începători sunt generate de definirea

eronată a tipurilor de date care vor contine rezultatele. Dacă rezultatul aşteptat depăşeşte

ca valoare domeniul de definiţie stabilit atunci aceasta greşeala nu va fi identificată de

către compilator, deci nu va fi corectată in acestă etapă. La execuţia programului vom

avea însă surpriza unor rezultate neaşteptate, chiar daca soluţia de rezolvare găsită este

corectă si programul scris nu are greseli de compilare.

6. Testarea programului: În această etapă se verifică corectitudinea rezolvării problemei

prin analiza rezultatului obţinut pentru diferite valori ale datelor de intrare. Tot aici se

identifică si eventualele erori de gândire, care apar prin alegerea unui algoritm de

rezolvare greşit. În această etapă trebuie indentificate seturi de date de intrare numite şi

cazuri limită pentru care programul s-ar putea bloca sau ar genera rezultate greşite

datorită unei neglijenţe în etapa de analiză şi implementare a programului. 1 Complexitatea unui algoritm este determinată ţinând cont de spaţiul de memorie utilizat (complexitate spaţiu) si de timpul de obţinere a rezultatului (complexitate timp). Prin complexitate

spaţiu înţelegem dimensiunea spaţiului de memorie utilizat de program. Un program necesită un spaţiu de memorie constant, independent de datele de intrare, pentru memorarea codului său, a constantelor, a variabilelor simple şi a structurilor de date de dimensiune constantă alocate static şi un spaţiu de memorie variabil, a cărui dimensiune depinde adesea de datele de intrare de cerinţele problemei de rezolvat şi din spaţiul de memorie necesar apelurilor de proceduri şi funcţii. Prin complexitate timp înţelegem timpul necesar execuţiei programului. Înainte de a evalua timpul necesar execuţiei programului ar trebui să avem informaţii detaliate despre sistemul de calcul folosit.

2 Un compilator este un program (sau set de programe) care traduce textul scris într-un limbaj de programare (limbajul sursă – low level) într-un alt limbaj de calculator (numit limbaj ţintă-

hight level). Sursa originală se numeşte de obicei cod sursă iar rezultatul cod obiect. În general codul sursă este compilat pentru a crea un program executabil .

Page 4: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Limbajul pseudocod şi schema logică

Asa cum am precizat anterior pseudocodul este o forma de reprezentare a algoritmilor şi

ca orice limbaj foloseşte un grup de cuvinte cheie (citeşte, scrie, dacă, atunci, cât timp, pentru,

etc.), organizate în construcţii sintactice care traduc structurile fundamentale1, dar neavând o

sintaxă rigidă ca un limbaj de programare. Limbajul pseudocod lasă la libera alegere a

utilizatorului introducerea unor notaţii care să permită o mai buna exprimare.

Schema logică este un mijloc de descriere a algoritmilor prin reprezentare grafică.

Fiecărui tip de operaţie îi este consacrată o figură geometrică (un bloc tip) în interiorul căreia se

va înscrie operaţia din pasul respectiv, iar succesiunea operaţiilor este indicată prin săgeţi.

Blocuri utilizate în realizarea schemelor logice:

Pentru întocmirea unei scheme logice corecte sunt necesare respectarea unor anumite

reguli după cum urmează:

Orice schemă logică se întocmeşte de sus în jos;

Legătura intre blocurile schemei se face numai prin săgeţi, pentru a stabili sensul de

parcurgere;

În cazul întâlnirii unui bloc de decizie se precizează deasupra liniilor de legătură când

expresia

1 Structurile fundamentale din programarea structurată sunt structura liniara, structura alternativa şi structurile repetitive.

START STOP Marchează începutul / sfărşitul unui algoritm reprezentat în schemă logică

Se utilizează pentru implementarea operaţiilor de intrare / ieşire

Se utilizează pentru scrierea condiţiilor în cazul structurilor alternativă sau repetitivă

Se utilizează pentru scrierea operatiilor de atribuire (atunci când o variabilă primeste o valoare)

Se utilizează pentru conectarea liniilor care leagă diferitele figuri geometrice şi marchează un punct de intersecţie.

Legăturile dintre blocurile schemei logice se realizează numai prin intermediul săgetilor, pentru a stabili sensul de parcurgere al algoritmului.

Page 5: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Aplicaţii practice

1. Un algoritm este un limbaj de programare?

a. Adevărat

b. Fals

2. Cu ajutorul unui calculator se pot prelucra următoarele tipuri de informaţii:

a. Imagini

b. Documente

c. Numere

d. Cărţi

3. Descrierea unui algoritm se poate face prin:

a. Limbaj natural

b. Limbaj de programare

c. Limbaj pseudocod

d. Nici un răspuns nu e corect

4. Limbajul pseudocod este un limbaj de programare?

a. Fals

b. Adevărat

5. Datele de intrare sunt si date de ieşire?

a. Adevărat

b. Fals

6. Complexitatea unui cod sursa a unui program este masurată prin numărul de linii de cod

scrise?

a. Adevărat

b. Fals

7. Corectarea erorilor de compilare implică automat si corectarea erorilor de gândire?

a. Adevărat

b. Fals

8. Datele de ieşire reprezintă acele valori obţinute la terminarea unui algoritm?

a. Adevărat

b. Fals

9. Limbajul pseudocod este:

a. Un cod fals

b. Un limbaj intermediar de scriere a algoritmilor şi care face trecerea de la limbajul

natural la cel de programare

c. Un limbaj nefolositor

d. Nici un răspuns nu e corect

10. Pentru a verifica corectitudinea funcţionării unui program acesta trebuie testat cu:

a. Valorile pentru care a fost gândit în etapa de analiză

b. Cu orice fel de valori

c. Cu valori speciale identificate pentru cazurile limită

d. Nici un răspuns nu e corect.

11. Enumeraţi proprietăţile unui algoritm:

1............................. 2................................ 3................................... 4.............................. ..

5............................. 6................................ 7...................................

12. Precizaţi care este diferenţa între scrierea algoritmului în limbaj pseudocod faţă de

limbajul de programare. (Precizaţi avantajele şi dezavantajele)

13. Care sunt deosebirile dintre erorile de compilare si erorile de gândire?

14. Definiti următorii termeni:

a. Complexitatea unui algoritm

b. Operaţia de compilare

c. Limbaj de programare

d. Limbaj natural

Page 6: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Lectia 2. Elemente de bază în reprezentarea algoritmilor Una dintre principalele noţiuni care intervin în programare este noţiunea de dată.

Definiţie 1: Data este o informaţie care se prelucrează cu ajutorul calculatorului. Datele se pot

clasifica:

a. După locul în care sunt prelucrate:

date de intrare - reprezintă un set de informaţii iniţiale care sunt cunoscute şi

care reprezintă punctul de plecare în rezolvarea problemei.

date de manevră – se utilizează în interiorul algoritmului pentru a memora la

un anumit moment valori intermediare necesare procesului de rezolvare al

problemei date

date de ieşire - sunt rezultatele aşteptate şi care sunt obţinute prin prelucrarea

datelor de intrare cu ajutorul algoritmului dat.

b. După tipul informaţiilor memorate:

date numerice – conţin ca valori numere întregi sau reale

date logice – pot sa conţină ca valoare doar: True sau False

date de tip caracter – conţin ca valoare un singur caracter din cele 256 din

codul Ascii1

date structurate – sunt acele date care se compun pe baza unor reguli precise

din datele simple(numere, caractere, logice)

c. După felul în care îşi schimbă valoarea pe parcursul unui algoritm

1. variabile - valorile se modifică pe masură ce algoritmul se execută

2. constante- valorile lor rămân constante pe toata durata de execuţie a

programului

O variabilă se caracterizează prin:

numele variabilei - este format din unul sau mai multe caractere (litere mari sau

mici ale alfabetului englez, numere si caracterul underline) cu condiţia ca primul

caracter nu fie cifră.

tipul variabilei – stabileste mulţimea de valori posibilă pentru variabila respectivă

precum si setul de operaţii permise; un tip de dată poate fi elementar (reprezinta

date de tip numeric-întreg sau real şi nenumeric-caracter, logic), structurat ( sunt

obţinute prin gruparea tipurilor elementare de date după reguli bine precizate ) sau

referinţă (permit referirea la date alocate dinamic în timpul execuţiei

programului)

valoarea variabilei – reprezintă valoarea efectivă pe care o are o variabilă la un

moment dat în interiorul codului sursă. într-un moment dat o variabilă are

întotdeauna o singură valoare, valoarea ei modificându-se doar în urma unei

operaţii de atribuire sau a unei operaţii de citire de la tastatură sau din fişier text.

adresa variabilei – reprezintă locaţia fizică din memoria calculatorului în care se

păstrează valoarea unei variabile. în majoritatea situaţiilor adresele variabilelor

sunt invizăbile pentru utilizator.

Pentru memorarea informaţiilor în memoria internă a calculatorului se foloseste sistemul

binar, care are doar două valori 0 si 1.

1 ASCII este acronimul pentru American Standard Code for Information Interchange, ceea ce înseamnă "Codul Standard

American pentru Schimbul de Informaţii". ASCII reprezintă un sistem de codificare a caracterelor bazat pe alfabetul englez. Codurile ASCII reprezintă caractere text pentru calculatoare, echipamente de comunicaţie şi echipamente care lucrează cu text.

Setul de caractere ASCII conţine 128 de caractere: litere mari şi mici, numere, elemente de punctuaţie şi coduri de control.

Page 7: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Definiţie 2: Unitatea elementară de memorare a informaţiilor în memoria internă a calculatorului

este bit-ul, care poate avea doar valoarea 0 sau valoarea 1( modelarea fizică a sistemului binar

este comutatorul.0 – nu trece „curent electric”, 1- trece „curent electric”).

K1↔1 K1↔0

A B A B

a. comutatorul K1 închis, b. comutatorul K1 deschis

echivalentul valorii 1 echivalentul valorii 0

trece „curent electric” nu trece „curent electric”

de la punctul A la B de la punctul A la B

Definiţie 3: Un octet(byte) este alcătuit dintr-un grup de 8 biţi şi orice informaţie poate fi

memorată utilizând întotdeauna un număr întreg de octeţi, măsurându-se în multipli de

octeţi(1024 octeţi= 1Kb, 1024 Kb=1Mb, etc).

Reprezentarea datelor numerice în memoria calculatorului

În funcţie de valoarea pe care o au datele numerice ele pot reprezenta numere naturale,

numere întregi sau numere reale, iar pentru fiecare astfel de număr se vor aloca în memorie un

număr diferit de octeţi.

Reprezentarea numerelor naturale

Formatul de reprezentare întreg fără semn nu presupune nimic în plus decât trecerea de la

baza 10 la baza 2. În aceasta reprezentare putem scrie spre exemplu:

numărul (188)10 = (10110110)2

(1·102+8·10

1+8·10

0)10 = (0·2

0+1·2

1+1·2

2+0·2

3+1·2

4+1·2

5+0·2

6+1·2

7)2

O reprezentare a unui număr întro bază de numeraţie notata B foloseste doar cifre din

inteervalul [0, B-1]. Trecerea unui numar de la o bază la alta presupune aflarea unei secvente

unice de resturi conform algoritmului următor:

numărul se imparte la baza si se retine restul obtinut. Acesta constituie ultima

cifra din reprezentare in acea baza.

câtul obtinut in urma acestei prime impartiri este din nou imparti la baza si se

retine iarasi restul. Acest rest constituie a doua cifra, in ordinea de la dreapta la

stanga, a reprezentarii in baza aleasa.

algoritmul continuă până când câul obţinut este mai mic decât baza. Acest cât va

reprezenta cea mai semnificativă cifră a numărului în baza data.

Tabelul următor prezinta paşii acestui algoritm pentru trecerea numarului 25 în baza 2:

Nr. baz

a

25:2 25 2 (25)10=(11001)2

rest 1 12 2

0 6 2

0 3 2

1 1 2

1 0

Page 8: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Reprezentarea în baza 2 a numărului 25 se obţine luând în ordine inversă resturile

împarţirii la 2.

Pentru a putea memora un număr natural în memoria internî a claculatorului se pot aloca

1,2 sau 4 octeţi. Pe un octet se pot memora numere naturale cuprinse în intervalul [0..255]

bit: 7 6 5 4 3 2 1 0

cea mai mică valoare naturală reprezentată pe un octet este 0: 0 0 0 0 0 0 0 0

adică numărul natural 0=0·20+0·2

1+0·2

2+0·2

3+0·2

4+0·2

5+0·2

6+0·2

7.

bit: 7 6 5 4 3 2 1 0

cea mai mare valoare naturală reprezentată pe un octet este 0: 1 1 1 1 1 1 1 1

adică numărul natural 255=1·20+1·2

1+1·2

2+1·2

3+1·2

4+1·2

5+1·2

6+1·2

7= 1+2+4+8+16+32+64+128

Propun ca exerciţiu de calcul reprezentarea intervalului de numere naturale care pot fi

memorate pe 2 octeţi.

De exemplu, numerele întregi reprezentate pe 32 bits(4 octeţi) pot lua valori cuprinse în

intervalul [-2147483648, 2147483647]. Adunarea, scăderea şi înmulţirea acestor numere

returnează rezultate exacte atâta vreme cât nu se depăşesc limitele precizate. În cazul în care

apare o depasire (overflow) rezultatul este imprevizibil. Rezultatul împaţirii numerelor întregi

reprezentate este tot un număr întreg obţinut prin rotunjirea rezultatului corect la întregul imediat

mai mic.

Reprezentarea numerelor întregi

Numerele întregi se reprezintă în memorie în complement faţă de 2. Reprezentarea în

complement fata de 2 este folosită de majoritatea procesoarelor actuale. Ideea acestei

reprezentări se întelege pe baza observaţiei simple că numărul x adunat cu numărul -x trebuie să

dea întotdeauna valoarea 0. Întrebarea ce se pune este cum se scrie -x, deoarece pentru numerele

întregi pozitive se păstreză regula de la paragraful precedent. Cel mai simplu este să folosim un

bit pentru reprezentarea semnului (de ex., 0 înseamnă plus şi 1 înseamnă minus) si ceilal ţi (n-1)

biţi pentru reprezentarea valorii absolute.

Numerele negative se reprezintă astfel:

plecăm de la reprezentarea în baza 2 a opusului (care este pozitiv),

inversăm toate cifrele până la ultimul 1 (exclusiv)

Exemple:

(22)10 = (00010110)2, număr pozitiv ( -22)10 = (11101010)2, număr negativ

Primul bit (cel scris cu culoare roşie) se mai numeste bit de semn deoarece el indică

semnul numarului (este 0 dacă şi numai dacă numărul este pozitiv). Avantajul acestei

reprezentări este urmatorul: algoritmii de adunare şi de scadere a două numere reprezentate în

cod complementar sunt identici cu algoritmii de adunare si de scadere pentru numere pozitive

reprezentate in baza 2.

Pe un octet se pot memora numere naturale cuprinse în intervalul [-128..+127]

Reprezentarea numerelor reale

Modul în care numerele reale sunt reprezentate în memorie este reglementat de IEEE1

Floating Point Standard2, un set de reguli care ne ajută în prezicerea gradului de inexactitate a

rezultatelor calculelor aritmetice. Una dintre sursele de erori în calculul ştiinţific este eroarea de

1 Institute of Electric and Electronic Egineering 2 IEEE Floating Point Standard — standardul IEEE de reprezentare a numerelor în virgulă mobilă este un set de convenţii de reprezentare şi de operare a numerelor reale în memoria calculatorului şi care are câteva obiective:

Creşterea preciziei operaţiilor cu numere reale.

Standardizarea operaţiilor cu numere reale pe toate platformele de calcul.

Stabilirea felului în care sunt tratate erorile.

Page 9: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

rotunjire datorată calculelor aritmetice inexacte efectuate de calculator. Eroarea de rotunjire face

parte din categoria erorilor inevitabile dar consecinţele sale diferă de la o problema la alta, de la

o strategie de rezolvare la alta. O singura operaţie aritmetică efectuată de calculator cu numere

reale va da de cele mai multe ori un răspuns cu un grad relativ mare de precizie.

Pentru reprezentarea numerelor în calculator se folosesc două formate de reprezentare:

formatul cu virgulă fixă:

± partea întreagă. partea zecimală de exemplu:12.351 sau -54.789

formatul cu virgulă mobilă: s-a impus datorită necesităţii de a reprezenta în sistemele de

calcul numere foarte mari sau foarte mici cu un grad de precizie ridicat. La baza acestui

mod de reprezentare se situează reprezentarea numerelor reale cu ajutorul mantisei(indică

ordinul de mărime al numărului printr-o putere a bazei) şi exponentului exponentul

(mărimea numărului în cadrul ordinului respective):

± mantisă·E±exponent

.

Mantisa în reprezentarea normalizată este un număr subunitar, E reprezintă valoarea

bazei 10, iar exponentul este un număr întreg care stabileşte valoarea numărului real. De

exemplu: numărul real -102.224 scris în virgulă fixă va fi egal cu 0.102224·E3 în virgulă

mobilă.

Reprezentarea caracterelor (valorilor alfanumerice)

În cazul reprezentării caracterelor, există un standard internaţional care defineşte

numerele, reprezentabile pe un octet, corespunzătoare fiecărui caracter în parte, numit standardul

ASCII1. În acest mod sunt grupate un număr de 256 de caractere, fiecărui caracter fiindu-i asociat

câte un număr natural din intervalul [0,255], număr care poartă denumirea de cod ASCII.

Astfel:

Caracter Codul ASCII

literele mari A...Z au coduri între 65...90

literele mici a...z au coduli între 97...122

cifrele 0...9 au coduri între 48...57

Aplicaţii practice

1. Datele de intrare reprezintă:

a. Rezultatele aşteptate şi obţinute prin prelucrarea unor valori cu ajutorul unui

algoritm de calcul

b. Valori constante pe toată durata de execuţie a algoritmului

c. Un set de valori iniţiale , cunoscute şi care reprezintă punctul de plecare în

rezolvarea unei probleme

d. Nici un răspuns nu este corect

2. O variabilă se caracterizează prin:

a. .....................................

b. .....................................

c. .....................................

d. .....................................

3. Valoarea unei variabile este:

a. Formată din unul sau mai multe caractere cu condiţia ca primul caracter să nu fie

cifră

b. O mulţimea de valori posibile

c. O locaţie din memoria calculatorului

d. Valoarea efectivă pe care o are la un moment daîn interiorul codului sursă.

4. Un bit este alcătuit din 8 octeţi?

a. Adevarat;

1 ASCII este acronimul pentru American Standard Code for Information Interchange, ceea ce înseamnă "Codul Standard

American pentru Schimbul de Informaţii". ASCII reprezintă un sistem de codificare a caracterelor bazat pe alfabetul englez.

Page 10: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

b. Fals

5. Determinatţi următoarele valori echivalente:

a. 1024 byte reprezintă ......................Mb;

b. 1024 Mb reprezintă...............Gb;

c. 1Gb este egal cu ...................octeţi;

d. 1 octet este format din..............biti.

6. Reprezentaţi pe un octet următoarele numere naturale:

a. 85

b. 200

c. 15

d. 255

7. Care sunt valorile naturale reprezentate în următorii octeţi:

a. 10011100

b. 11000011

c. 10010000

d. 11110000

8. Reprezentaţi următoarele numere întregi pe un octet:

a. -15

b. 24

c. -12

d. 30

9. Pentru reprezentarea numerelor întregi în memoria calculatorului se utilizează primul bit

din reprezentare(cel mai din stânga) ca bit de semn. Astfel, daca acesta are valoarea 1

atunci numărul respectiv va fi negativ?

a. Adevarat;

b. Fals.

10. Transformaţi următoarele numere reale din formatul în virgulă fixă, în formatul în virgulă

mobilă:

a. 12.21

b. -56.98

c. 0.34

d. 3456.089

11. Transformaţi următoarele numere reale scrise în virgulă mobilă în formatul virgulă fixă:

a. 0.76·E-2

b. 0.543265644·E5

c. 0.8700077·E2

d. -0.347611·E-6

12. Care este codul ASCII pentru următoarele caractere:

a. A are codul ................., D are codul..................,V are codul......................;

b. 0 are codul..................., 7 are codul..................,9 are codul ....................... ;

c. b are codul.................., f are codul..................., x are codul........................

13. Numărul de caractere din codul ASCII extins este de 256?

a. Adevarat

b. Fals

14. Un caracter ocupă în memorie

a. 2 octeţi;

b. 1 octet;

c. 4 octeti;

d. 256 de octeţi.

15. Pentru orice informaţie se alocă în memoria calculatorului un număr întreg de octeţi?

a. Adevarat;

b. Fals.

Page 11: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Lecţia 3 Elemente de bază ale limbajului C++ Pentru a putea utiliza cu uşurinţă un limbaj de programare trebuie să cunoaştem

următoarele doua aspecte:

1. sintaxa limbajului: reprezintă totalitatea regulilor de scriere în limbajul respectiv

2. semantica limbajului: reprezintă cunoaşterea construcţiilor sintactice corecte şi

semnificaţia acestora

Aceste aspecte se studiază spre exemplu şi atunci cînd înveţi o limbă străină. Dacă înveţi

doar cuvintele şi nu înveţi şi regulile gramaticale nu vei reuşi să te exprimi într-un mod coerent.

Spre deosebire însă de un limbaj natural, în cazul nostru studiul unei limbi străine, dacă într-o

exprimare folosim în mod gresit o expresie într-un context avem şanse destul de mari ca

interlocutorul să ne înţeleagă, atunci când comunicăm cu un calculator, trebuie să repectăm cu

exctitate regulile de comunicare. Calculatorul nu face presupuneri, nu ghiceşte ceea ce aţi fi dorit

să-i spuneţi. Dacă nu vă exprimaţi corect într-un limbaj de programre nu veti obţine decât un şir

considerabil de mesaje de eroare.

Setul de caractere

În limbajul C++ setul de caractere utilizat pentru scrierea programelor este setul de

caractere al codului ASCII:

litere mari şi mici ale alfabetului englez

cifrele sistemului zecimal

semnele matematice şi de punctuaţie şi separatori: +,-,*,/,%,<,>,=,#,!,&,|,?,^,(,),[,],{,},;

Separatori şi comentarii

Separatorii au rolul de a delimita unităţile lexicale dintr-un program. Iată lista separatorilor

admişi în limbajul C++:

(,) parantezele rotunde încadrează lista de parametrii a unei funcţii, sau precizează

ordinea de efectuare a operaţiilor pentru evaluarea unei expresii.

{ } acoladele încadrează instrucţiunile compuse, care se mai numesc şi blocuri.

[ ] parantezele drepte încadrează dimensiunile tablourilor

" " ghilimelele încadrează şirurile de caractere

' ' apostrofii încadrează un singur caracter

; fiecare instrucţiune se încheie cu caracterul ;

/* */ comentariile sunt încadrate de caracterele /* şi */ sau dacă dorim ca un singur rând

din codul sursă sa fie comentat, sau în dreptul unei instrucţiuni să apara un comentariu

folosim caracterele //.Comentariile sunt texte care vor fi ignorate în momentul execuţiei

programelor, dar au rolul de a clarifica si a face un cod sursă mai clar pentru cel care

citeşte acel cod.

Identificatori

Definiţie1: Identificatorii sunt acele constructii care au rolul de a denumi elemente ale

programului si reprezintă nume de: constante, variabile, funcţii, etc.

Din punct de vedere sintactic un identificator este constituit dintr-o succesiune de litere

mari sau mici ale alfabetului englez, cifrele sistemului zecimal si caracterul “_”, cu condiţia ca

primul caracter să nu fie o cifră.

Spre exemplu:

Identificatori corect scrişi Identificatori greşit scrişi

max_1 nume prenume

citire_vector 1max

_unu a+b

Page 12: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Observaţii:

1. un identificator poate avea orice lungime, dar sunt luate în considerare doar primele 31 de

caractere

2. În limbajul C++ se face diferenta dintre literele mari şi literele mici, din acest punct de

vedere spunem că limbajul este case-sensitive (identificatorii max_1 şi Max_1 sunt

diferiţi).

3. este recomandat ca identificatorii folosiţi să fie sugestivi, pentru a nu apela la comentarii

pentru a întelege scopul în care este folosit un identificator. Este util să construim

identificatori prin compunerea mai multor cuvinte, şi recomandat este ca iniţiala fiecărui

cuvânt să fie majusculă (Citire_Vector, Afisare_Matrice)

Cuvinte cheie (keywords)

Cuvintele cheie sunt identificatori speciali, rezervaţi limbajului C++, cu înţeles predefinit

şi care pot fi utilizaţi numai în construcţiile sintactice în care sunt definiţi. În limbajul C++ toate

cuvintele cheie se scriu doar cu litere mici, iar în programele din această carte cuvintele rezervate

vor fi scrise îngroşat. Tabelul care cuprinde toate cele 32 de cuvinte cheie ale limbajului C++

este :

auto double int struct

break else long switch

case enum register typedef

char extern return union

const float short unsigned

continue for signed void

default goto sizeof volatile

do if static while

Structura generală a unui program C++

Un program C++ este alcătuit din funcţii şi variabile. Orice program C++ trebuie să

conţină în mod obligatoriu o funcţie specială numită main. Această este specială prin faptul că

execuţia programului debutează întotdeauna la începutul acestei funcţii.

Structura unui program C++ are următoarea structură:

// declaraţii directive preprocesor –fisiere antet (header) #include<nume_directiva_preprocesor.h>

//definiţii de tipuri de date şi variabile globale

//definiţii de funcţii utilizator

void main()

{ //declaratii locale în functia main

// instructiuni c++

}

Unde:

Directivele preprocesor sunt fişiere librării memorate separat si care au extensia .h.

Astfel:

iostream.h este un fisier antet (header) care este utilizat pentru gestionarea intrările şi

ieşirile implicite de date (datele de intrare se vor prelua împlicit de la tastatura, si

datele de ieşire vor fi afişate în mod implicit pe monitorul) . Librăria iostream.h face

parte din biblioteca implicită a limbajului C++.

În funcţie de alte obţiuni ale utilizatorului se vor insera în codul sursă si alte fişiere antet cum ar

fi:

Page 13: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

conio.h - este un vechi fişier antet, folosit de vechile compilatoare C pentru a realiza

interfata utilizatorului(cele mai folosite funcţii definite în biblioteca conio.h sunt

clrscr()-sterge ecranul cu toate datele afişate în urma execuţiei unui program,

getch() citeste de la tastaură un caracter, dar caracterul citit nu este afisat pe ecran,

se utilizează în situaţia în care dorim sa oprim în anumite puncte un program în

execuţie pentru a putea vedea şi analiza informaţiile afisate; după apasarea oricărei

taste programul îşi continuă execuţia cu următoarea instrucţiune)

math.h – este un fişier care face din biblioteca standard a limbajului C, unde sunt

definite funcţiile matematice (cum ar fi radical din x –sqrt(x), ridicare la putere

pow(a,b), modulul unui număr abs(a),funcţiile trigonometrice, etc.

fstream.h-este un fişier în care sunt definite funcţiile de bază pentru lucru cu fişiere

text. Stream-urile implicite tastaura şi monitorul se vor schimba în fişiere text de

intrare sau de iesire.

După includerea în program a fişierelor header urmează o secţiune rezervată definirii de

tipuri de date şi variabile globale.

Definiţie 2: Definirile globale de variabile se fac la începutul programului si acestea vor fi

cunoscute în toate funcţiile din program.

Definiţie 3: Definirile locale de variabile se fac în cadrul unei fucţii şi ele sunt cunoscute doar în

funcţia în care au fost definite.

În cazul programelor simple, care conţin doar funcţia main() nu este necesar definirea

globala a variabilelor.

Funcţiile utilizator :

definirea oricărei funcţii este constuită din antetul funcţiei si corpul funcţiei

antetul funcţiei conţine numele funcţiei, tipul rezultatului pe care funcţia îl calculează şi o

listă de parametri prin care funcţia comunică cu exteriorul ei, încadrată între paranteze

rotunde:

tip_rezultat nume_functie(lista de parametri)

nu fac obiectul materiei de clasa a IX-a, ele vor fi învăţate pe larg în clasa a X-a

Funcţia main() este o fucţie specială, mai este numită şi funcţia principală sau programul

principal, prezenţa ei este obligatorie în orice program C++ deoarece execuţia oricărui program

începe cu aceasta. Pentru început vom scrie doar programe constituite doar din funcţia main().

Cel mai simplu program C++, care desigur nu are nici un efect este: void main()

{ }

Prezentarea ecranului mediului de programare C++ 3.1

Lansarea în execuţie a mediului de programare C++ se face lansând în execuţie fişierul

executabil bc.exe aflat în directorul BIN din pachetul Borland C++, obţinut după instalarea

acestuia. După acestă acţiune ecranul afişat va avea următoarea formă:

2

1

1

4

3

5 6

Page 14: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Unde:

1. bara de titlu în care este trecut mediul de programare Borland C++ for DOS

2. butoane pentru minimzare/ maximizare şi inchidere aplicaţie

3. bara de meniu a mediului de programare care conţine opţiunile: File, Edit, Search,

Compile, Debug, Project, Options, Windows, Help

4. zona de lucru în care veti scrie programele C++

5. meniul Help care conţine semnificaţia principalelor taste funcţionale pentru operaţiile de

bază:

F1- lansează help-ul limbajului C++ pentru a ne ajuta în cazul semnificaţiei, modului

de execuţie al unei comenzi, sintaxă, definire

F2- tastă utilizată pentru a memora pe hard fişierul curent deschis şi care conţine

codul sursă al programului scris in C++

F3-deschide o nouă fereastră in care se va scrie un cod sursă. După apasarea tastei F3

trebuie precizat numele noului fisier in forma nume.cpp

ALT+F9 realizează operaţia de compilare a programului, adică o verificare din punct

de vedere sintactică a programului scris, si care va afişa toate erorile din program.

F10 –permite cursorul sa ajungă în partea de meniu principal al limbajului C++

6. 1:1 – precizează poziţia curentă a cursorului în zona de lucru, în cazul nostru linia 1,

coloana 1.

Pentru a afişa această fereastă pe intreg ecranul monitorului apasaţi ALT+ENTER.

Meniul File conţine următoarele obţiuni:

New - Deschide un nou fisier sursă cu numele implicit

Noname00.cpp, sau ....001.cpp

Open... - deschide un fisier cpp existent pe disk

Save – salvează fisierul curent

Save as - realizează un lat fişier cu continut identic cu cel

curent, dar cu nume schimbat

Save all - salveaya continutul tuturor fisierelor deschise

Change dir...-permite schimbarea directorului curent in care

va fi memorat fisierul curent

Print – tipareste la imprimanta continutul sursei programului

curent

Quit - inchide aplicaţia Borland C++.

Etape în scrierea si execuţia unui program C++:

1. se deschide aplicaţia Borland C++

2. se stabileste directorul curent în care vom salva sursa programului folosind File →

Change dir... →selecţie director dorit si la final se apasa butonul OK

3. Se deschide un fisier nou : File →New sau direct apasând tasta F3, caz în care trebuie sa

stabilim un nume pentru noul fişier

4. se scrie în zona de lucru codul sursă al programului

5. se salvează pe parcursul editării programului si la terminarea acestei operaţii continutul

programului utilizând File → Save sau tasta F2

6. Se verifica respectarea regulilor sintactice compilând programul folosind combinaţiile de

taste ALT+F9 sau din meniul superior alegând Compile → Compile

7. după ce au fost corectate toate erorile de compilare, se mai salvează o dată programul

scris după care se lansează în execuţie prin combinaţia CTRL+F9 sau din meniul

superior Run→Run

8. În această etapă se verifică corectitudinea funcţionării programului scris verificând şi

analizând rezultatele afişate.

Page 15: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Tipuri de date standard

Noţiunea de dată a fost prezentată pe larg în lecţia trecută. Orice limbaj de programare dispune

de un set de date predefinite numite şi tipuri de date standard. Tipurile de date standard sunt

prezentate în următorul tabel:

Grupa

de

dată

Tipul Nr. octeţi

ocupaţi Domeniu de valori

Mod de reprezentare în

memorie

întreg

char 1 octet cu semn -128...127 codul ASCII al

caracterului. unsigned char 1 octet fara semn 0...255

int 2 octeti cu semn -32768...23767 complement faţă de 2

unsigned int 2 octeti fară semn 0...65535 în baza 2

long 4 octeţi cu semn -231..231-1 complement faţă de 2

unsigned long 4 octeţi fara semn 0.. 232-1 în baza 2

real

float 4 octeţi cu semn [3.4·10-38...3.4·1038 ] u [-3.4·10-38...-3.4·1038]

virgulă mobilă simplă precizie

double 8 octeţi cu semn [1.7·10-308...1.7·10308] u [-1.7·10-308...-1.7·10308]

virgulă mobilă dublă precizie

long double 10 octeţi cu semn

[3.4·10-4932...3.4·104932 ] u

[-3.4·10-4932...-

3.4·104932]

virgulă mobilă dubla precizie

void Tip de dată special pentru care mulţimea valorilor este vidă

Observaţii:

În cazul tipului de dată char, deşi a fost introdus pentru stocarea datelor de tip

alfanumeric, el poate fi folosit în calcule numerice şi logice în intervalul de valori pe care

le poate stoca.

În cazul datelor de tip char, int se pot folosi modificatorii de tip:

o unsigned pentru a obţine doar numere naturale,

o long pentru a modifica dimensiunea reprezentării

În limbajul C++ nu există un tip de date special pentru valorile logice. Valoarea 0 este

asociată valorii de adevăr fals, orice valoare diferită de 0 fiind asociată valorii de

adevăr adevărat.

Pentru a declara o variabilă în limbajul de programare C++ se foloseşte următoarea costrucţie

sintactică:

denumire_tip_standard variabilă;

Dacă dorim să declarăm mai multe variabile de acelaşi tip este suficient să le separăm cu

aracterul virgula. Exemplu:

Declarare variabile Efect int a,b,c; am definit trei variabile numite a,b, c de tip intreg float x; x variabilă reala simplă precizie char ch; ch variabilă de tip caracter

unsigned n; variabila n este de tip int fără semn unsigned long m; variabila m este de tip long fără semn unsigned char p; variabila p este de tip char fara semn

double d; variabila d este un numar real dublă precizie

Operatori. Expresii. Evaluarea expresiilor

Operatori aritmetici

Operatorii aritmetici se împart în două categorii:

Page 16: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

operatori unari: se aplică asupra unui singur operand.Singurul operator aritmetic unar

definit în C++ este caracterul - scris în fata unui număr întreg sau real si care determină

semnul valorii respective.

operatori binari: se aplică asupra a doi operanzi. Operatorii binari definiţi în limbajul

C++ sunt:

Operator Semnificaţie

+ adunare

- scadere

* înmulţire

/ a/b

daca a şi b sunt două valori întregi

determină câtul împartirii

dacă a şi b sunt doua valori reale

determina rezultatul împărţirii

% determină restul împarţirii a două numere

nu se aplica valorilor float sau double

Prioritatea operatorilor este prezentată în următorul tabel:

Operator

Operatorul unar - Cel mai prioritar

Operatorii multiplicativi: *,/ ,% Prioritate medie

Operatorii aditivi:+,- Cel mai putin prioritar

Operatorii aritmetici se grupeaza de la stânga la dreapta Ordinea de evaluare este cea de

la matematică. Prioritatea operatoriloe se poate schimba daca in relaţiile matematice intervin

caractere ( , ) folosite pentru gruparea termenilor expresiilor matematice.

Exemple:

Expresie matematică Valoare obţinută

Dacă avem două variabile a=20 şi b=3 definite de tip int atunci:

a+b 20+3=23

a-b 20-3=17

b-a 3-20= -17

a/b 20/3=6

a%b 20%3=2

b/a 3/20=0

b%20 3%20=3

(a+b)/(a-b) (20+3) / (20-3)=23/17=1

(a+b)%(a-b) (20+3) % (20-3)=23%17=6

(a+b)/2 (20+3)/2=23/2=11

Expresie matematică Valoare obţinută

Dacă avem două variabile a=2.0 şi b=3.5 definite de tip float atunci: a+b 2.0+3.5=5.5

a-b 2.0-3.5=-1.5

b-a 3.5-2.0= 1.5

a/b 2.0/3.5=0.5714

a%b Operaţie nepermisă

b/a 3.5/2.0=1.75

(a+b)/(a-b) (2.0+3.5)/(2.0-3.5)=5.5/-1.5=-3.66666

(a+b)/2 (2.0+3.5)/2=5.5/2=2.75

Operatori relaţionali şi de egalitate

Page 17: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Operatorii relaţionali sunt operatori binari şi desemnează relaţia de ordine în care se

găsesc cei doi operanzi. Rezultatul aplicării unui operator relaţional este 1 (adevărat) dacă cei

doi operanzi sunt în relaţia indicată de operator, şi 0(fals), altfel. Tabelul cu operatorii

relaţionali din limbajul C++ este:

Operator Semnificaţie = = este egal

< mai mic

<= mai mic sau egal

> mai mare

>= mai mare sau egal

!= diferit

Exemple:

Expresie

relaţională

Valoare obţinută

Dacă avem două variabile a=20 şi b=3 definite de tip int atunci: a==b 20 este egal cu 3? rezultat 0 (fals)

a!=b 20 este diferit 3? rezultat 1 (adevarat)

a<b 20 mai mic decat 3? rezultat 0(fals)

a<=b 20 mai mic sau egal cu 3? rezultat 0 (fals)

a>b 20 mai mare decat 3? rezultat 1 (adevarat)

a>=b 20 mai mare sau egal cu 3? rezultat 1 (adevarat)

Operatori logici

Operatori logici globali:

Există trei tipuri de operatori logici globali:

Operator Denumire Tip Prioritate

! Negaţie logică Operator unar

&& Conjucţie logică(şi logic) Operator binar

|| Disjuncţie logică(sau logic) Operato binar

Aşa cum ştiţi deja în limbajul C++, valoarea logică fals are asociata valoarea 0, iar orice

valoare diferită de 0 are semnificaţia de adevărat. Prin urmare efectul operatorilor logici este

acelaşi ca în matematică şi este prezentat în tabele următoare: a !a a b a && b a b a || b

0 1 0 0 0 0 0 0

1 0 0 1 0 0 1 1

1 0 0 1 0 1

1 1 1 1 1 1

Exemple:

Expresie logică Valoare obţinută

x%3 1,daca x se divide la 3

0, daca x nu se divide la 3

!(x%2) 1,daca x se divide par

0, daca x impar

(x>=a)&&(x<=b) 1, daca x apartine intervalului [a,b]

0, daca x nu apartine intervalului [a,b]

(x<a)||(x>b) 1, daca x nu apartine intervalului [a,b]

0,daca x apartine intervalului [a,b]

!((x>=a)&&(x<=b))

Se va transforma in relaţia

(x<a)||(x>b)şi deci rezultatul va fi:

1, daca x nu apartine intervalului [a,b]

0,daca x apartine intervalului [a,b]

Page 18: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

(a==b+1)||(b==a+1) 1, daca a şi b sunt numere consecutive

0, altfel

Operatori logici la nivel de bit:

Aceşti operatori se aplică doar datelor de tip întreg şi au ca efect aplicarea operaţiilor

logice cunoscute(negaţie, conjuncţie, disjuncţie şi disjuncţie exclusivă) bit cu bit. Aceştia

sunt prezentaţi în următorul tabel:

Operator Semnificaţie Tip Prioritate Obs. ~ complementaritate (negaţie bit cu bit) unar

<< deplasare spre stanga cu b pozţiţii (a<<b) binar a*2b

>> deplasare spre dreapta cu b pozitii (a>>b) binar a/2b

& conjuncţie logică(şi logic) bit cu bit binar

^ dijuncţie logica exclusivă (sau exclusiv) bit cu bit binar | disjunţie logică(sau logic) bit cu bit binar

Operatorii de delasare au ca efect deplasarea reprezentării binare a primului operand spre

stânga (<<) sau spre dreapta (>>) iar numărul de poziţii care se deplasează este precizat de al

doilea operand. La deplasarea la stânga, poziţiile rămase libere în dreapta se completează cu 0.

La deplasarea spre dreapta, poziţiile rămase libere în stânga se completează cu 0 (daca operandul

stâng este un întreg pozitiv) sau cu 1 (dacă operandul este negativ).

Efectul operaţiilor la nivel de bit este prezentat mai jos: a ~a a b a&b a b a^b a b a|b

0 1 0 0 0 0 0 0 0 0 0

1 0 0 1 0 0 1 1 0 1 1

1 0 0 1 0 1 1 0 1

1 1 1 1 1 0 1 1 1

Exemplu: Fie două numere întregi a şi b reprezentate pe 1 octet:

bit: 7 6 5 4 3 2 1 0 Valoare

a=25 0 0 0 1 1 0 0 1 25

b=2 0 0 0 0 0 0 1 0 2

Atunci rezultatul urmatoarelor operatii va fi:

~a 1 1 1 0 0 1 1 0 -26 a&b 0 0 0 0 0 0 0 0 0 a|b 0 0 0 1 1 0 1 1 27 a^b 0 0 0 1 1 0 1 1 27 A<<b 0 1 1 0 0 1 0 0 25*2

2=100

a>>b 0 0 0 0 0 1 1 0 25/22=6

Operatori de atribuire

Operatorii de atribuire sunt operatori binari care permit modificarea valorii unei variabile.

Limbajul C++ are un singur operator de atribuire simplu (=) şi 10 operatori de atribuire compuşi

cu ajutorul operatorului de atribuire simplu.

Operaţia de atribuire simplă are următoarea sintaxă:

variabilă = expresie;

Efect:

se calculează valoarea expresiei şi se obţine un rezultat;

rezultatul se memorează la adresa variabilei.

Page 19: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Efectul acestei operaţii este întotdeauna de la dreapta la stânga Atenţie!

A nu se confunda operaţia de atribuire cu operaţia matematică desemnată prin acelaşi

simbol ”=”. De exemplu daca avem declaraţia int a=10, operaţia a=a+1; în informatică

este perfect corectă si are ca semnificaţie schimbarea valorii variabilei a la valoarea 11. Din

punct de vedere matematic relaţia a=a+1 este o relaţie gresită.

Operaţia de atribuire compusă are următoarea sintaxă:

variabilă operator = expresie;

unde operatorul aparţine mulţimii {*, /, %, +, -, <<, >>, &, |, ^}.

Expresia din partea dreaptă a semnului ”=” poate fi la rândul ei tot o operaţie de atribuire,

cu alte cuvinte se pot scrie operaţii de atribuire înlănţuite respectând următoarea sintaxă:

variabilă_1=variabila_2=...=variabila_n=expresie;

Exemplu:

Fie două variabile a=30 şi b=2 de tip întreg int atunci:

Operatie de atribuire compusă Operaţie echivalentă Efect a + = b; a=a+b; a are valoarea 32

a - = b; a=a-b; a are valoarea 28

a* = b; a=a*b; a are valoarea 60

a / = b; a=a/b; a are valoarea 15 a=b*=2 a=b*2; a are valoarea 4

a=b=a*b; a=b=60; a şi b au valoarea 60

Operatorul de incrementare şi de decrementare

Operatorii de incrementare/ decrementare sunt operatori unari care au drept scop

cresterea/micşorarea valorii unei variabile cu 1.

Operator Denumire

++ incrementare -- decrementare

Forma generala de uitlizare a acestor operatori este:

Forma generala Efect variabila++; este forma postfixata a operatorului de incrementare, se utilizeaza mai intâi

valoarea variabilei si apoi se creste valoarea ei cu 1

variabila--; este forma postfixata a operatorului de decrementare, se utilizeaza mai intâi

valoarea variabilei si apoi se scade valoarea ei cu 1

++variabila; este forma prefixata a operatorului de incrementare, se efectuează mai întâi

cresterea cu 1 a valorii variabilei şi cu noua valoare se utilizează variabila

--variabila; este forma prefixata a operatorului de decrementare, se efectuează mai întâi

scăderea cu 1 valorii variabilei şi cu noua valoare se utilizează variabila

Operatori condiţionali

Operatorii condiţională sunt ”?” şi ”:” şi se utilizează numai împreună. Sintaxa generală a

unei expresii condiţionale este:

expresie_1 ? expresie_2 : expresie_3

Efect:

se evaluează expresie_1.

Dacă expresie_1 are o valoare diferită de 0 atunci valoarea expresiei condiţionale este

egală cu valoarea expresiei_2.

Dacă expresie_1 are o valoare egală cu 0 atunci valoarea expresiei condiţionale este

egală cu valoarea expresiei_3.

Page 20: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Exemplu: expresia x<y ? x : y determină valoarea minimă dintre x şi y.

Operatorul de adresă(referinţă)

Este un operator unar care permite determinarea adresei zonei de memorie în care este

stocată o variabilă. Acest operator este & si se utilizează după următoarea sintaxă generală:

&variabilă

Operatorul de conversie explicită

Operatorul de conversie implicită este un operator unar care permite conversia fortată

a tipului unei expresii la un tip specificat. Forma generală este:

(tip nou)expresie

Exemplu:

1. Dacă considerăm două variabile de tip întreg int a=20 si b=15 si dorim să calculăm

media aritmetică dintre cele două variabile scriem:

(float) (a+b)/2 rezultatul expresiei fiind 17.5

În lipsa conversiei rezultatului operatorul / va calcula câtul împartirii sumei (a+b) la doi

iar rezultatul obtinut va avea valoarea 14.

2. Daca considerăm variabila de tip int a=70 si dorim să calculăm valoarea expresiei

a*1000 rezultatul obţinut va depăşi limita superioară admisă tipului int, adica 32767 si

rezultatul afişat va eronat şi va avea valoarea 4464. Pentru a obţine rezultatul corect

atunci rezultatul expresiei date trebuie fortate la tipul long si astfel expresia dată îşi va

modifica forma astfel : (long)a*1000

Operatorul de determinare a dimensiunii unei variabile sau expresii

Operatorul de determinare a dimensiunii în octeţi a unei variabile sau a unei expresii

necesare memorării acesteia este sizeof. Forma generală este:

sizeof(tip) sau sizeof(expresie)

Exemplu: Daca avem o variabilă de tip int a=70, o variabilă b de tip float şi o variabila c

de tip char atunci:

Operator Rezultat

sizeof(a) 2 octeţi sizeof(double) 8 octeţi

sizeof(b) 4 octeţi

sizeof(c) 1 octet

Evaluarea expresiilor

Evaluarea unei expresii presupune determinarea valorii acelei expresii, prin înlocuirea în

expresie a fiecărei variabile cu valoarea ei şi a fiecărei funcţii cu valoarea returnată de funcţia

respectivă şi efectuarea operaţiilor precizate de operatori. În evaluarea unei expresii se ţine cont

de :

Existenţa parantezelor

Asociativitate

Prioritatea operatorilor

Etape în evaluarea unei expresii:

Se vor calcula în primul rând expresiile din interiorul parantezelor, începând cu cele mai

interioare

În situaţia în care avem o expresie fără paranteze atunci ordinea de evaluare este dată de

prioritatea operatorilor folosiţi

Page 21: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

În cazul în care avem mai multi operatori de aceiaşi prioritate , se va ţine cont de

asociativitatea operatorilor.

În limbajul C++ operatorii se vor asocia de la stânga la dreapta, excepţie făcând operatorul de

atribuire, operatorii unari şi condiţionali care se asociază de la dreapta la stânga. În situaţia în

care operanţii nu au acelaşi tip, atunci pe parcursul evaluării expresiei se vor realiza în mod

automat o serie de conversii implicite de tip după urmatoarea regulă: „operandul care are un

domeniu de valori mai mic va trece în urma conversiei implicite la tipul operandului care are cel

mai mare domeniu de valori”.

Tabelul cu prioritatea tuturor operatorilor

Operatori Asociativitate Prioritate ! ~ + - ++ -- (tip) sizeof & Dreapta →stanga Prioritate maxima

* / %

stanga →dreapta

+ -

<< >>

< > <= >=

= = !=

&

^

|

&&

||

? : Dreapta →stanga = *= /= %= += - = &=

^= |= <<= >>= Dreapta →stanga Prioritate minima

Aplicaţii practice

1. Completaţi spaţiul punctat pentru x =129:

a. Numărul x are .......... cifre. Notăm numărul de cifre cu nr.

b. Numerele formate din nr cifre aparţin intervalului închis ........................................

c. Suma cifrelor numărului x este .................................................................................

d. Media aritmetică a cifrelor numărului x este ............................................................

e. Câtul împărţirii numărului x la 4 este .......................................................................

f. Restul împărţirii numărului x la 4 este ......................................................................

g. Câtul împărţirii numărului x la 130 este....................................................................

h. Restul împărţirii numărului x la 130 este..................................................................

2. Completaţi spaţiul punctat cu expresiile matematice corespunzătoare.

a. Numărul real x aparţine intervalului închis [10, 20] dacă şi numai dacă

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

b. Numărul real x aparţine intervalului închis [a,b] U [c,d] dacă şi numai dacă

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

c. Numerele naturale x şi y sunt numere consecutive dacă şi numai dacă

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

d. Un număr natural x este impar dacă şi numai dacă restul împărţirii numărului la 2

este.............................................................................................................................

e. Două numere naturale x şi y sunt ambele nenule dacă şi numai dacă

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

f. Un număr x este strict pozitiv dacă şi numai dacă

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

g. Trei numere a, b, c sunt în ordine strict crescătoare dacă şi numai dacă

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

h. Trei numere naturale a, b, c sunt pitagorice dacă

Page 22: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

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

i. Trei numere reale a, b, c pot fi laturile unui triunghi dacă

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

3. Calculaţi rezultatul următoarelor expresii: a. 15340:20+32·15-139

b. (((7x+34)%17+18)/5-12)*8

c. 5075-(125-(75-(7+18)))

d. (((5·12/5·18)-25%2)·3)·2

4. Care este rezultatul următoarelor expresii? a. (77+5)/3*2 b. (49+63)/7/4

c. 7+(7+(7+7%2))/3 d. 72/9+9%4

5. Fie urmaătoare declaraţie: int a;Care va fi rezultatul functiei sizeof(a)? a. 1 b. 2 c. 4 d. 0

6. Fie următoarea declaratie de variabile: int a=2,b=3; Care va fi rezultatul expresiei

(a+b)/2?

a. 2.5 b. 3 c. 2 d. 5

7. Fie următoarea declaratie de variabile: int a=10,b=100; Care va fi rezultatul

expresiei (a+b+abs(a-b))/2?(observaţie: abs(x) este o functie care calculează

valoarea absolută a parametrului dat x ) a. 10 b. 100 c. 1000 d. 50

8. Care este rezultatul următoarei expresii condiţionale x%2==0 ? y=1: y=0 ?

a. 0

b. 1

c. Expresie

scrisă gresit

9. Daca avem următoarea declaraţie de variabile int a=7, b=5, c=3; Care este

rezultatul următoarei expresii (float)(a+b+c)/2?

a. 7.5 b. 7 c. 9 d. Eroare

10. Fie următoarea declaraţie de variabile long a=40, b=10; Calculaţi valorile expresiilor: a. a+=b; b. a-=b;

c. a*=b; d. a=b*2;

11. Expresia a<<b este echivalentă cu: a. a/2b; b. a*2b;

c. a+2b; d. a-2b ;

12. Fie două variabile a şi b de tip int. Scrieţi in limbajul C++ expresii logice care sunt

adevărate dacă şi numai dacă:

a. a este număr par şi b este număr

impar

b. a este egal cu b

c. a şi b sunt numere consecutive

d.a este numar par si divizibil cu 3

13. Variabila x este de tip real. Care dintre următoarele C++ are valoarea 1 dacă şi numai

dacă numărul real memorat în variabila x aparţine intervalului (5,8]? a. (x<8) && (x>=5) b. (x<=8) || (x>5)

c. (x>8) || (x<=5)

d. (x<=8) && (x>5)

(Examen de Bacalaureat, Matematică Informatică, 2009)

14. Care dintre următoarele expresii C++ are valoarea 1 dacă şi numai dacă numărul natural

nenul memorat în variabila x, de tip int, este divizibil cu 100?

a. x%10+x/10%10==0

b. x/100==0

c. x%10+x/10==0

d. x%10+x%10/10==0 (Examen de Bacalaureat, Matematică Informatică, 2009)

15. Care dintre următoarele expresii C++ are valoarea 1 dacă şi numai dacă numărul natural

memorat de variabila x de tip int are exact două cifre?

a. x/100==0 b. x/100==0 && x%10==0

c. x/10!=0 d. x/100==0 && x/10!=0

(Examen de Bacalaureat, Matematică Informatică, 2009)

16. Se consideră variabila a care memorează un număr cu exact 6 cifre. Care dintre expresiile

C++ de mai jos are ca valoare numărul format din cele două cifre din mijloc ale valorii

memorate în a?

Page 23: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

a. (a%100)/100 b. a/100%100

c. a/1000+a%1000 d. a/100%10+a/1000%10

(Examen de Bacalaureat, Matematică Informatică, 2009)

17. Care dintre următoarele expresii C++ are ca valoare cel mai mare dintre numerele

naturale nenule, cu cel mult 4 cifre fiecare, memorate în variabilele întregi a şi b? a. (a+b+abs(a-b))/2 b. a+b+abs(a-b)/2

c. (a+b-abs(a-b))/2 d. (a+b-abs(a+b))/2

(Examen de Bacalaureat, Matematică Informatică intensiv, 2009)

18. Variabilele a, b şi c, de tip int, pot fi iniţializate cu oricare numere naturale impare

distincte. Ştiind că c este divizor al lui a, iar b nu este multiplu al lui c, care dintre următoarele expresii scrise în C++ are valoare 1?

a. !((a%c!=0)||!(b%c!=0)) b. (a%c!=0)&&!(b % c!=0)

c. (a%c!=0)||!(b%c!=0) d. !(c%a!=0)&&(c%b!=0)

(Examen de Bacalaureat, Matematică Informatică intensiv, 2009)

19. Care este instrucţiunea prin care variabilei x i se atribuie valoarea sumei cifrelor

numărului natural format din exact trei cifre, memorat de variabila întreagă y?

a. x=y/100+y/10%10+y%10;

b. x=y+y/10+y/100;

c. x=y%10+y%10/10+y/100;

d. x=y%10+y%100+y%1000; (Examen de Bacalaureat, Matematică Informatică intensiv, 2009)

20. Variabila întreagă n memorează un număr natural impar. Care dintre următoarele expresii

C++ are valoarea 1? a. !(n%2) b. n%2==0

c. n%2!=0 d. !((n+1)%2==0)

(Examen de Bacalaureat, Matematică Informatică intensiv, 2009)

Page 24: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Lectia 3. Structura liniară Structura liniară este cea mai simplă structură de control din algoritmică. Structura liniară

sau secvenţială execută instrucţiunile în ordinea in care apar, de la prima la ultima, fără salturi

peste instrucţiuni şi fiecare înstructiune se execută doar o singura data. De exemplu daca avem n

instrucţiuni : instructiunea 1;

instructiunea 2;

instructiunea 3; Aceasta este ordinea de executie!

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

instrucţiunea n;

Din cadrul structurii liniare fac parte următoarele instrucţiuni:

a. instrucţiunea de citire;

b. instructiunea de afisare;

c. operatia de atribuire;

d. apelul de functie cu rezultat void;

e. orice combinaţie liniară de cele 4.

Operaţia de citire

Definiţie 1: Citirea datelor reprezintă operaţia prin care una sau mai multe variabile

primesc valori prin introducerea lor de la tastatură sau prin extragerea lor de pe un suport

extern(adică dintr-un fişier text, acest lucru însă va fi studiat mai târziu în lecţia despre fişiere).

În fişierul antet iostream.h este definit acest stream de intrare a datelor de la

tastatură, denumit cin (console input). Atunci când dorim să citim datelele de la tastatură

le vom extrage din fluxul de intrare, folosind operatorul de extragere ”>>”. Din acest punct de

vedere forma generală a operaţiei de citire este:

cin>>nume_variabilă;

Dacă dorim să citim succesiv mai multe variabile, atunci putem utiliza operatorul de

extragere înlănţuit, adică:

cin>>nume_variabilă_1>>nume_variabilă_2>>…>>nume_variabilă_n;

De exemplu: Scrieţi un program care citeste de la tastatură doua numere

intregi.

Program C++ Explicaţii: #include<iostream.h>

void main()

{ int a,b;

cin>>a;

cin>>b;

}

Daca presupunem ca tastam secvenţa de caractere 10 100 <ENTER>

atunci în variabila a vom avea valoarea 10 si in variabila

b vom avea valoarea 100.

Acelaşi lucru se va obtine daca tastăm secventa 10 <ENTER>

100 <ENTER>

Citirea variabilelor se face liniar. #include<iostream.h>

void main()

{ int a,b;

cin>>a>>b;

}

Este un program echivalent cu cel de sus, citirea

variabilelor se face succesiv.

Stream (flux) de intrare “datele de intrare curg din exterior(tastatura) în

interior (memoria calculatorului)” Memoria

calculatorului

Page 25: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Observaţii:

datele de intrare din orice program se vor citi fie de la tastatură fie din fisier text

la citire valorile numerice care se citesc trebuie introduse de la tastatura, separate

de caractere albe(spaţiu, Tab, Enter).

Operaţia de afişare

Definiţie 2: Prin afişarea sau scrierea datelor vom întelege operaţia prin care

rezultatele obţinute prin prelucrarea datelor de intrare vor fi afişate pe ecranul monitorului, fie

vor fi memorate într-un fişier text pe un suport extern de memorare.

În fişierul antet iostream.h este definit acest stream de ieşire a datelor de la tastatură,

denumit cout (console output). Atunci când dorim să afişăm datelele le vom extrage din

fluxul de ieşire, folosind operatorul de ieşire ”<<”. Din acest punct de vedere forma generală a

operaţiei de afişare este:

cout<<expresie;

Ca efect, se evalueză expresia, iar valoarea ei este convertită într-o succesiune de

caractere care vor fi afişate fie pe ecran fie in fisier. Şi operatorul de ieşire poate fi utilizat

înlănţuit atunci cand dorim sa afişăm mai multe date pe ecran:

cout<<expresie_1<<expresie_2<<expresie_3<<…<<expresie_n;

Pentru ca afişarea unor date să se realizeze de la inceputul randului următor se va folosi

manipulatorul numit endl(end line).

De exemplu: 1.Se citesc de la tastatură două numere întregi a şi b.

Scrieţi un program care calculează şi afişează pe ecran suma

lor.

Algoritm Program C++ Rezultat afişat

citeste a,b

(numere întregi)

scrie a+b

#include<iostream.h>

void main()

{ int a,b;

cout<<"a=";

cin>>a;

cout<<"b=";

cin>>b;

cout<<"Suma ";

cout<<<<a<<"+"<<b<<"="<<a+b;

}

2. Se citeste de la tastatură un număr întreg. Sa se calculeze folosind functia abs, valoarea absoluta a numarului si sa

se afiseze pe ecran.

Algoritm Program C++

citeste a

scrie abs(a)

#include<iostream.h>

#include<conio.h>

#include<math.h>

void main()

{ clrscr();

int a;

cout<<"a="; cin>>a;

cout<<"Valoarea absoluta a numarului "<<a<<" este"<<abs(a);

}

Stream (flux) de ieşire “datele de ieşire curg din interior(memoria

calculatorului)” spre exterior(ecran) Memoria

calculatorului

Page 26: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Rezultat afişat

3. Scrieţi un program care să afiseze pe ecran:

Algoritm Program C++ Rezultat afişat

scrie *

scrie **

scrie ***

scrie ****

scrie *****

#include<iostream.h>

#include<conio.h>

void main()

{ clrscr();

cout<<"*"<<endl;

cout<<"**"<<endl;

cout<<"***"<<endl;

cout<<"****"<<endl;

cout<<"*****"<<endl;

getch();

}

4. Scrieţi un program care citeste de la tastatura un numar natural de trei cifre. Se cere sa se afişeze pe ecran cifra

unităţilor, cifra zecilor şi cifra sutelor.

Algoritm Program C++

citeste a

separa ultima cifra

separa cifra zecilor

separa cifra sutelor

scrie ultima cifra

scrie cifra zecilor

scrie cifra sutelor

#include<iostream.h>

#include<conio.h>

void main()

{ clrscr();

unsigneg a, unitati,zeci,sute;

cout<<"a=";cin>>a;

unitati=a%10;

zeci=a/10%10;

sute=a/100;

cout<<"cifra unitatilor este "<<unitati<<endl;

cout<<"cifra zecilor este "<<zeci<<endl;

cout<<"cifra sutelor este "<<sute;

getch();

}

Rezultat afişat

5. Se citesc două numere naturale care reprezintă laturile

unui dreptunghi. Sa se calculeze şi sa se afişeze

perimetrul şi aria dreptunghiului dat.

Algoritm Program C++

citeste L

citeste l

calculeaza perimetrul

calculeaza aria

scrie perimetrul

scrie aria

#include<iostream.h>

#include<conio.h>

void main()

{ clrscr();

unsigned l, L, p, a;

cout<<"lungimea:";cin>>L;

cout<<"latimea:";cin>>l;

p=2*(l+L);

a=l*L;

cout<<"perimetrul este "<<p<<endl;

cout<<"aria este "<<a<<endl;

getch();

}

*

**

***

****

*****

Page 27: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Rezultat afişat

Operaţia de interschimbare a valorilor a două variabile

Avem la dispoziţie două variabile a şi b. Se cere sa se interschimbe valorile variabilelor a

şi b, apoi sa se afiseze.

Exista mai multe metode de a realiza acest lucru si anume:

regula celor trei pahare(folosind o variabila auxiliara)

prin adunari şi scaderi

prin inmulţiri şi imparţiri

Interschimbarea valorilor variabilelor a şi b folosind „regula celor trei pahare”

Această metodă este denumită sugestiv „regula celor trei pahare”, desi practic varsarea

continutului unui pahar în alt pahar nu este identică cu operatia de atribuire, cand variabilele au

aceaiasi valoare.

Avem iniţial A,B,C trei pahare care au aceiaşi capacitate. În primul pahar A se gaseşte o

bautură de culoare roşie, în al doilea pahar B se gaseste o bautură de culoare verde iar al treilea

pahar C este gol. Se cere să se schimbe continutul paharului A cu conţinutul paharului B fără a

amesteca băuturile.

Iniţial:

a. continutul paharului A se toarnă in paharul C b. continutul paharului B se toarnă in paharul A

c=a; a=b;

c. continutul paharului C se toarnă in paharul B b. Starea finală

b=c;

A B C

A B C

A B C

A B C

Page 28: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Algoritm Program C++

citeste A

citeste B

scrie A,B (initial)

C=A

A=B

B=C

scrie A,B(final)

#include<iostream.h>

#include<conio.h>

void main()

{ clrscr();

int A,B,C;

cout<<"A=";cin>>A;

cout<<"B=";cin>>B;

cout<<"Initial: A="<<A<<" si B="<<B<<endl;

C=A;

A=B;

B=C;

cout<<"Final: A="<<A<<" si B="<<B<<endl;

getch();

}

Rezultat afişat

Interschimbarea valorilor variabilelor folosind adunări şi scăderi

Interschimbarea valorilor a doua variabile, notate A şi B se poate face si fara a utiliza o

variabilă auxiliară, cum am vazut la regula celor trei pahare. Folosind doar operaţii de adunare si

scadere putem realiza acelaşi lucru dacă executăm în ordine următoarele operatii de atribuire:

Valoarea lui A Valoarea lui B Operatie

10 35 Valori iniţiale

45 35 A=A+B

45 10 B=A-B

35 10 A=A-B

35 10 Valori finale

Algoritm Program C++

citeste A

citeste B

scrie A,B (initial)

A=A+B;

B=A-B;

A=A-B;

scrie A,B(final)

#include<iostream.h>

#include<conio.h>

void main()

{ clrscr();

int A,B;

cout<<"A=";cin>>A;

cout<<"B=";cin>>B;

cout<<"Initial: A="<<A<<" si B="<<B<<endl;

A=A+B;

B=A-B;

A=A-B;

cout<<"Final: A="<<A<<" si B="<<B<<endl;

getch();

}

Rezultat afişat

Interschimbarea valorilor variabilelor folosind înmulţiri şi împarţiri

Interschimbarea valorilor a doua variabile întregi, notate A şi B se poate face si fara a

utiliza o variabilă auxiliară, cum am vazut la regula celor trei pahare. Folosind doar operaţii de

Page 29: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

adunare si scadere putem realiza acelaşi lucru dacă executăm în ordine următoarele operatii de

atribuire:

Valoarea lui A Valoarea lui B Operatie

10 35 Valori iniţiale

350 35 A=A*B

350 10 B=A/B

35 10 A=A/B

35 10 Valori finale

Algoritm Program C++

citeste A

citeste B

scrie A,B (initial)

A=A+B;

B=A-B;

A=A-B;

scrie A,B(final)

#include<iostream.h>

#include<conio.h>

void main()

{ clrscr();

int A,B;

cout<<"A=";cin>>A;

cout<<"B=";cin>>B;

cout<<"Initial: A="<<A<<" si B="<<B<<endl;

A=A*B;

B=A/B;

A=A/B;

cout<<"Final: A="<<A<<" si B="<<B<<endl;

getch();

}

Rezultat afişat

Probleme rezolvate

1. Se citesc de la tastatură două numere întregi. Scrieţi un

program care să determine care este cel mai mare număr.

Relaţiile matematice care determină maximul şi minimul dintre cele două numere sunt:

2

)(),max(

bababa

2

)(),min(

bababa

Tinând cont de aceste informaţii putem scrie următorul program:

Algoritm Program C++

citeste a

citeste b

scrie max(a,b)

#include<iostream.h>

#include<conio.h>

#include<math.h>

void main()

{ clrscr();

int a,b;

cout<<"a=";cin>>a;

cout<<"=";cin>>b;

cout<<"Valoarea maxima este:"<<(a+b+abs(a-b))/2;

getch();

}

Rezultat afişat

sau

Page 30: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

2. Se citesc două numere întregi a şi b. Scrieţi un program

care afişează media aritmetică a numerelor date.

Relaţia matematică de calcul a mediei aritmetice dintre doua numere a şi b este:

2

bama ,

Asa cum ştim operatorul „/” aplicat intre doua numere intregi conduce la obţinerea unui

rezultat intreg care reprezintă câtul împărţirii dintre cele două numere. Cum nu întotdeauna

suma celor două numere este un număr par, atunci rezultatul asteptat este un număr real.

Programul care realizează acest lucru este:

Algoritm Program C++

citeste a

citeste b

scrie 2

bama

#include<iostream.h>

#include<conio.h>

void main()

{ clrscr();

int a,b;

cout<<"a=";cin>>a;

cout<<"b=";cin>>b;

cout<<"ma"<<(float)(a+b)/2<<endl;

getch();

}

Rezultat afişat

3. Se citeşte un număr real a, pozitiv. Să se afişeze a .

Calculul valorii a se va face cu ajutorul funcţiei sqrt(a), definită în fişierul header math.h

Algoritm Program C++

citeste a

scrie a

#include<iostream.h>

#include<conio.h>

#include<math.h>

void main()

{ clrscr();

int a,b;

cout<<"a=";cin>>a;

cout<<"radical din "<<a<<" este"<<sqrt(a);

getch();

}

Rezultat afişat

4. Se citeşte de la tastatură baza b şi înălţimii h a unui

triunghi. Se cere să se calculeze aria triunghiului.

De la matematică ştim ca aria unui triunghi atunci cand sunt cunoscute inaltimea si baza se

face cu ajutorul relaţiei:2

hbaria , iar rezultatul acestei expresii este de tip real. Atunci:

Algoritm Program C++

Citeste b

citeste h

scrie 2

hb

#include<iostream.h>

#include<conio.h>

void main()

{ clrscr();

int b,h;

cout<<"baza triunghiului :";cin>>b;

cout<<"inaltimea triunghiului :";cin>>h;

cout<<"Aria triunghiului este "<<(float)(b*h)/2;

getch();

}

Page 31: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Rezultat afişat

5. Fie A şi B două puncte în plan memorate prin coordonatele

lor carteziene (xa,ya) şi (xb,yb). Scrieţi un program care

sa calculeze şi să afişeze pe ecran lungimea segmentului

AB.

Lungimea segmentului AB se calculează cu ajutorul

următoarei relaţii matematice:

22

baba yyxxAB

Toate variabilele folosite în program vor fi de tip real.

Algoritm Program C++

citeste xa,xb

citeste ya,yb

scrie

22

baba yyxx

#include<iostream.h>

#include<conio.h>

#include<math.h>

void main()

{clrscr();

float xa,ya,xb,yb;

cout<<"dati coordonatele punctului A:"<<endl;

cout<<"xa=";cin>>xa;

cout<<"ya=";cin>>ya;

cout<<endl;

cout<<"Dati coordonatele punctului B:"<<endl;

cout<<"xb=";cin>>xb;

cout<<"yb=";cin>>yb;

cout<<endl;

cout<<"Lunginmea segmentului AB este "<<endl;

cout<<sqrt(pow(xa-xb,2)+pow(ya-yb,2));

getch();

}

Rezultat afişat

Aplicaţii practice

1. Se citesc de la tastatură două numere întregi. Scrieţi un program care să determine care

este cel mai mic numar număr citit.

Exemplu: dacă a=40 şi b=12 se va afişa 12

2. Sa se determine ultima cifra a sumei a+b, unde a şi b sunt două numere de trei cifre

fiecare, date de la tastatură.

Exemplu: dacă a=143 şi b=125 suma lor este 268 şi se va afişa 8

y

xa

xb

B(3.5, 2)

A (-1, -1.5)

x 0

yb

ya

Page 32: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

3. Se citeste de la tastaură un numar a format din trei cifre. Scrieţi un program care

calculează şi afişează pe ecran suma cifrelor numărului dat.

Exemplu: daca a=468 suma cifrelor este 8+6+4=18 şi se va afişa 18

4. Se citeste de la tastaură un numar a format din trei cifre. Scrieţi un program care

calculează şi afişează pe ecran cea mai mare cifră din numărului dat.

Exemplu: daca a=731 se va calcula cu formulele matematice de mai sus

max(a,b,c)=max(7,3,1)=7 şi se va afişa pe ecran 7

5. Se citeste de la tastaură un numar a format din trei cifre. Scrieţi un program care

calculează şi afişează pe ecran numărul obţinut prin inversarea cifrelor numarului dat.

Exemplu: daca a=592 se va afişa 295

6. Se citeste de la tastaură un numar a format din trei cifre. Scrieţi un program care

calculează şi afişează pe ecran numărul obţinut prin eliminarea cifrei din mijlocul

numarului dat.

Exemplu: daca a=371 se va afişa 37

7. Fie a un număr format din cinci cifre a1a2a3a4a5. Să se afişeze pe ecran un triunghi

format din cifrele numărului dat astfel: a3

a2a3a4

a1a2a3a4a5

Exemplu: daca a=37156 se va afişa un triunghi astfel: 3

715

37156

8. Fie a un număr format din cinci cifre a1a2a3a4a5. Să se afişeze pe ecran un triunghi

format din cifrele numărului dat astfel: a1a2a3a4a5 a2a3a4

a3

Exemplu: daca a=37156 se va afişa un triunghi astfel: 37156

715

3

9. Să se calculeze aria unui triunghi cunoscând laturile a,b,c ale triunghiului. Indicaţie:

pentru calculul ariei triunghiului se va utiliza formula lui Heron pentru calculul ariei:

aria=p(p-a)(p-b)(p+c), unde p este semiperimetrul triunghiului.

Exemplu: dacă a=3, b=4 si c=5 atunci se va afişa 6.

10. Perimetrul unui pătrat ete egal cu latura altui pătrat. Ştiind că suma perimetrelor este x să

se calculeze ariile celor două pătrate

Exemplu: Pentru x=20 se va afişa aria1=1 aria2 = 16

11. Se dau două numere maturale a şi b cu trei cifre fiecare. Să se afişeze numărul care are

suma cifrelor mai mare.

Exemplu: daca a=487 şi b=912, atunci suma cifrelor numarului a este 19, iar suma cifrelor

numarului b este 12, deci pe ecran se va afisa 487.

12. Se citesc de la tastatură cinci numere naturale a1, a2, a3, a4, a5.Scrieţi un program

care să folosească o singură variabilă auxiliară pentru a permuta circular valorile celor 5

variabile astfel:

Page 33: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

a1 a2 a3 a4 a5 a2 a3 a4 a5 a1 a3 a4 a5 a1 a2 a4 a5 a1 a2 a3 a5 a1 a2 a3 a4 a1 a2 a3 a4 a5

Exemplu: dacă a1=5, a2=6, a3=7, a4=8, a5=9 atunci pe ecran se va afişa:

5 6 7 8 9

6 7 8 9 5

7 8 9 5 6

8 9 5 6 7

8 5 6 7 8

5 6 7 8 9

13. Se dau de la tastatură două numere naturale a şi b, de câte patru cifre fiecare. Se cere să

se afişeze numărul care are suma cifrelor mai mică.

Exemplu:dacă a=5213 şi b=3748, atunci suma cifrelor numărului a este

2+1+5+3=11, iar suma cifrelor numărului b este 8+7+4+3=22, atunci se va afişa pe

ecran 5213.

14. Folosind caracterul „*” şi spaţierea desenează pe ecran următoarele figuri geometrice:

* * **************

*** * * *

***** ********* * *

******* ******* * C++ *

********** ***** * *

* *** * *

* * **************

15. Care este efectul următorului program? #include<iostream.h>

#include<conio.h>

void main()

{clrscr();

int a,b;

cout<<"a=";cin>>a;

b=(a>=0) ? 1:-1;

cout<<b;

getch();

}

16. Care va fi valoarea variabilei b la sfârşitul următorului program? Determinaţi ce operaţie

se execută. #include<iostream.h>

#include<conio.h>

void main()

{clrscr();

int a,b;

cout<<"a=";cin>>a;

b=1<<a;

cout<<b;

getch();

}

Page 34: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Lecţia 4. Structura alternativă Structura alternativă apare în practică în două variante şi anume:

Structura alternativă: în acest caz se va executa doar unul din două

blocuri de instrucţiuni în funcţie de valoarea de adevăr a unei expresii logice

Structura alternativă multiplă: în această situaţie se va executa un

bloc de instrucţiuni din mai multe variante posibile.

Structura alternativă

Structura alternativă este implementată în limbajul C++ de instrucţiunea IF. În continuare

vom prezenta modul de reprezentare a acestei structuri în limbaj pseudocod, în schemă logică şi

în limbajul de programare C++. Modul de execuţie este identic pentru oricare din cele trei

reprezentări.

Auzim în viata de zi cu zi afirmaţii de genul:

DACĂ am promovat la toate materiile, ATUNCI

ma voi duce in tabara,

ALTFEL stau sa invat.

Se remarcă aici trei cuvinte ce au un rol deosebit: DACA, ATUNCI, ALTFEL. Propozitia

are trei componente şi anume:

o conditie, transcrisă prin “am promovat la toate materiile”, conditie pe

care o vom nota cu C;

o acţiune transcrisă prin mesajul “mă voi duce în tabără”, notata cu B1,

acţiune asociata cu cuvântul ATUNCI, adică se execută dacă şi numai dacă “am

promovat la toate materiile”;

o acţiune transcrisă prin mesajul “stau să învăţ”, notată cu B2, acţiune asociată

cu cuvântul ALTFEL, adică se execută dacă şi numai dacă NU “am promovat

la toate materiile”

Sintetizănd cu notaţiile de mai sus structura alternativă se poate reprezenta astfel:

Schema logică Pseudocod Instructiune C++

if(expresie logica)

instructiune1;

else

instructiune2;

Pot exista şi cazuri particulare de utilizare a acestei structuri, atunci cand unul dintre cele

doua blocuri de instrucţiuni lipseste.

Cazul 1. Daca lipseste B2 atunci structura se reprezinta astfel:

Schema logică Pseudocod Instructiune C++

if(expresie logica)

instructiune1;

Nu Da

B1

C

dacă c atunci

B1

altfel

B2

Nu Da

B1 B2

C

dacă c atunci

B1

Page 35: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Cazul 2. Daca lipseste B1 atunci structura se reprezinta astfel:

Schema logică Pseudocod Instructiune C++

if(!expresie logica)

instructiune2;

De exemplu dacă valoarea variabilei x este 100 putem utiliza instructiunea if astfel: 1 if( x= =100)

2 cout<<” valoare a lui x este 100”;

Dacă dorim să executăm mai mult de o instrucţiune acestea trebuie grupate intre „{” , „}” astfel: 1 if( x= =100)

2 { cout<<” valoare a lui x”;

3 cout<<x;

4 };

Daca apar si intrucţiuni care trebuie executate atunci când conditia este falsă putem scrie asa: 1 if( x= =100)

2 { cout<<” valoare a lui x”;

3 cout<<x;

4 };

5 else

6 cout<<”valoarea lui x nu este 100 ”

Pot exista şi situaţii în care structurile alternative sunt incluse unele in altele. In acest caz spunem

ca instrucţiunilie if sunt imbricate. Exista o regula de asociere a cuvântului else de if:

„În situatia instructiunilor if imbricate, si atunci cand pentru

gruparea instrucţiunilor nu se folosesc acolade cuvantul else se

asociază primului cuvant if aflat la stanga lui.(asemanator cu

asocierea inchiderii corecte a grupurilor de paranteze din

matematica).”

În exemplul urmator este sugerat cum sunt imbricate 3 instructiuni if. Pentru a le putea identifica

usor ele sunt scrise cu aceiasi culoare (negru, albastru si portocaliu).

if(c1)

if(c2) se executa cand c2 adevarata

if(c3)

instructiunea1;

else

instructiunea2; se executa cand c1 adevarata

else

instructiunea 3

else

instructiunea 4;

Daca în aceasta schemă grupăm instrucţiunile cu acolade se poate schimba fundamental structura

programului:

if(c1)

if(c2) se executa cand c2 adevarata

{ if(c3)

instructiunea1; }

else

instructiunea2; se executa cand c1 adevarata

else

instructiunea 3

Nu Da dacă not c atunci

B2

B2

!C

Page 36: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Se observă ca primul cuvant else este asociat cu cel de-al doilea if, acest lucru fiind

determinat de gruparea intre acolade a instructiunii if (c3), reprezentate pe desen cu portocaliu.

Aplicaţii rezolvate

1. Se citesc două numere întregi a şi b. Să se determine valoarea

maximă dintre ele.

Se citesc valorile celor doua numere si valoare cea mai mare dintre ele va fi memorata în

variabila max. La sfarsit valoarea variabilei max va fi afisata pe ecran

Algoritm Program C++

intregi a,b

citeste a

citeste b

daca a>b atunci

| max=a

|altfel

| max=b

|_▄

scrie max

#include<iostream.h>

#include<conio.h>

void main()

{clrscr();

int a,b,max;

cout<<"a="; cin>>a;

cout<<"b="; cin>>b>>b;

if(a>b)

max=a;

else

max=b;

cout<<"Valoarea maxima este "<<max;

getch();

}

Rezultat afişat

2. Să se determine valoarea maxima dintre trei numere memorate în variabilele a, b şi c.

Tinând cont de exemplul anterior o modalitate simpla de rezolvare ar consta in compararea a

doua câte doua valorile variabilelor a, b, şi c. Se compară, spre exemplu, prima dată valoarea

variabilei a cu valoarea variabilei b şi presupunem că a>b. Dacă menţinem adevarată această

presupunere, atunci valoarea maximă obţinută până acum este a. Mai rămâne să comparam

valoarea variabilei c faţă de valoarea a. În această situaţie există două cazuri şi anume:

Cazul 1: reprezentat în următorul desen:

când valoarea variabilei c este mai mare decât valoarea variabilei a, deci rezultă că valoarea

maximă dintre cele trei numere este valoarea lui c;

Cazul 2: reprezentat în următorul desen:

când valoarea variabilei c este mai mică decât valoarea variabilei a (nu contează în acest

moment raportul dintre variabilele b şi c), deci rezultă că valoarea maximă dintre cele trei

numere este valoarea lui a.

Un raţionament asemănător se realizează plecând de la presupunerea că valoarea

variabilei a este mai mica decat valoarea variabilei b. Acest algoritm complet este sris mai jos:

Page 37: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Algoritm Program C++

intregi a,b

citeste a

citeste b

Citeste c

daca a>b atunci

| daca c>a atunci

| | max=c

| |altfel

| | max=a

| |_▄

|altfel

| daca c>b atunci

| | max=b

| |altfel

| | max=a

| |_▄

|_▄

scrie max

#include<iostream.h>

#include<conio.h>

void main()

{clrscr();

int a,b,c,max;

cout<<"a="; cin>>a;

cout<<"b="; cin>>b;

cout<<"c="; cin>>c;

if(a>b)

if(c>a)

max=c;

else

max=a;

else

if(c>b)

max=c;

else

max=b;

cout<<"Valoarea maxima este "<<max;

getch();

}

Rezultat afişat

Dar, acest mod de determinare a valorii maxime este greu de aplicat atunci când numărul

variabilelor creşte la mai mult de trei. Pentru a obţine un algoritm simplu de aplicat pentru

determinarea valorii maxime dintre oricate variabile se va proceda astfel:

Pas 1 : Compar prima dată valoarea variabilei a cu valoarea variabilei b, şi dacă

valoarea lui a este mai mare decât valoarea lui b interschimb valorile celor două

variabile, obţinând în acest fel valoarea maximă dintre primele două variabile în

variabila b.

Pas 2: Compar de aceasta data valoarea variabilei b cu valoarea variabilei c, şi dacă

valoarea variabilei b este mai mare decat valoare lui c interschimb valorile celor

două variabile, obţinând astfel valoarea maximă dintre cele trei variabile în variabila

c.

Pas 3: afişez valoarea variabilei c ca fiind valoarea maxima dintre a,b si c.

Algoritm Program C++

intregi a,b

citeste a

citeste b

citeste c

daca a>b atunci

| aux=a

| a=b

| b=aux

|_▄

daca b>c atunci

| aux=b

| b=c

| c=aux

|_▄

scrie max

#include<iostream.h>

#include<conio.h>

void main()

{clrscr();

int a,b,c,aux;

cout<<"a="; cin>>a;

cout<<"b="; cin>>b;

cout<<"c="; cin>>c;

if(a>b)

{ aux=a;

a=b;

b=aux;

};

if(b>c)

{aux=b;

b=c;

c=aux;}

cout<<"Valoarea maxima este "<<c;

getch();

}

Page 38: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Rezultat afişat

3. Să se scrie un program care să rezolve ecuaţia de gradul I:

ax+b=0, valorile lui a şi b se citesc de la tastatură şi sunt

valori reale. Se vor lua în discuţie toate cazurile.

Algoritm Program C++

reale a,b

citeste a

citeste b

daca a=0 atunci

| daca b=0 atunci

| | scrie ”Infinitate sol”

| |altfel

| | scrie ”Imposibil”

| |_▄

|altfel

| x=-b/a

| scrie x

|_▄

#include<iostream.h>

#include<conio.h>

void main()

{ float a,b,x;

cout<<"a="; cin>>a;

cout<<"b="; cin>>b;

if(a==0)

if(b==0)

cout<<"Exista o infinitate de solutii!";

else

cout<<"Ecuatie imposibila!";

else

{ x=-b/a;

cout<<"Solutia ecuatiei este "<<x;

}

getch();

}

Rezultat afişat

4. Să se scrie un program care să rezolve ecuaţia de gradul II: ax

2+bx+c=0, valorile lui a, b, c se citesc de la tastatură şi

sunt valori reale. Se vor lua în discuţie toate cazurile.

Algoritm Program C++

reale a,b

citeste a

citeste b

daca a=0 atunci

| daca b=0 atunci

| | daca c=0 atunci

| | scrie ”Infinitate sol”

| |altfel

| | scrie ”Imposibil”

| |_▄

| altfel

#include<iostream.h>

#include<conio.h>

#include<math.h>

void main()

{ float a,b,c,x, delta,x1,x2;

clrscr();

cout<<"a="; cin>>a;

cout<<"b="; cin>>b;

cout<<"c="; cin>>c;

if(a==0)

if(b==0)

if(c==0)

cout<<"Exista o infinitate de

solutii!";

Page 39: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

|

|_▄

else

cout<<"Ecuatie imposibila!";

else

{ cout<<"Ecuatie de gr I cu solutia ";

x=-c/b;

cout<<x;

}

else

{ delta=pow(b,2)-4*a*c;

if(delta<0)

cout<<"Ecuatia nu are solutii reale!";

else

if(delta==0)

{ cout<<"Ecuatia are solutii egale!”;

cout<<”x1=x2="<< -b/(2*a);}

else

{ x1=(-b+sqrt(delta))/2*a;

x2=(-b-sqrt(delta))/2*a;

cout<<"Ecuatia are solutii

reale!"<<endl;

cout<<"x1="<<x1<<endl;

cout<<"x2="<<x2 <<endl;

}

}

getch();

}

Rezultat afişat

Aplicaţii practice

1. Care este efectul urmatorului program: #include<iostream.h>

#include<conio.h>

void main()

{clrscr();

int a=3,b;

b=++a;

if(a==b)

cout<<"sunt egale !";

else

cout<<"sunt diferite!";

getch();

Page 40: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

}

2. Fie algoritmul:

a. Care este rezultatul urmatorului algoritm daca

x are valoarea 0 si 3?

real f,x

citeste x

daca x<0 atunci

| f←x/2

|altfel

| daca x=0 atunci

| | f← 10

| |altfel

| | f←x*x

| |_▄

|_▄

scrie f

b. Scrieti programul C++ corespunzator

algoritmului dat.

c. Pentru ce valori ale variabilei x se va executa

operatia de atribuire f←x/2?

3. Precizaţi ce greşeli sunt în algoritmii următori: real f,x

citeste x

daca x<0 atunci

| f← -x

|altfel

| daca x>=0 atunci

| | f← x*10

| |_▄

|_▄

scrie f

real f,x

citeste x

daca x<-1 atunci

| f← x*x

|altfel

| f← 1/x

|_▄

scrie f

4. Care dintre următoarele instrucţiuni C++ sunt corecte sintactic dacă x şi y sunt două

variabile de tip întreg? a. if (x < 2) && (x > - 5)

{x=x+1; y=y-1;}

b. if -5 < x < 2

{ x=x+1; y=y-1;}

c. if x < 2 && x >-5

{ x=x+1; y=y-1;}

d. if (x < 2 && x > -5)

{x=x+1; y=y-1;}

(Examen de Bacalaureat, Matematică Informatică intensiv, 2008)

5. Care dintre următoarele instrucţiuni C++ atribuie variabilei întregi t valoarea -1 dacă şi

numai dacă variabilele întregi a şi b sunt nenule şi au semne diferite? a. if ((a>0)||(b<0)) t=-1; b. if ((a>0)&&(b<0)) t=-1;

c. if (a*b<0) t=-1; d. if (a*b>0) t=-1;

(Examen de Bacalaureat, Matematică Informatică intensiv, 2008)

6.

În secvenţa alăturată de instrucţiuni, variabilele i,j,k şi y sunt

de tip întreg. Pentru care dintre următoarele seturi de valori ale

variabilelor i,j şi k variabila y va avea valoarea 1 în urma

executării secvenţei?

y=1;

if (k>0)

if (i!=j)

y=0;

else y=2;

a. k=0; i=5; j=5 b. k=10; i=5; j=6

c. k=10; i=5; j=5 d. y nu va avea valoarea 1 indiferent

de valorile variabilelor i,j şi k

(Examen de Bacalaureat, Matematică Informatică intensiv, 2008)

7. În secvenţa alăturată de instrucţiuni, variabilele i, j, k, x

şi y sunt de tip întreg. Pentru care dintre următoarele

seturi de valori ale variabilelor i, j şi k variabilele x şi y

vor primi valori diferite între ele în urma executării acestei secvenţe?

if (k>0)

if (i!=j) x=0;

else x=1;

else x=2;

if (i!=j)

if (k>0) y=0;

else y=2;

else y=1;

a. x şi y primesc aceeaşi valoare indifferent

de valorile variabilelor i,j şi k

b. k=0; i=5; j=6

c. k=10; i=5; j=5 d. k=0; i=5; j=5

Page 41: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

(Examen de Bacalaureat, Matematică Informatică intensiv, 2008)

8. Precizati pentru fiecare dintre următoarele secvenţe de algoritm care va fi valoarea

afişată: a.

intreg x,y

x=13 y=0

daca x%2=0 atunci

| y=y+1

|altfel

| y=y-1

|_▄

scrie y

b.

intreg x,y

x=122 y=0

daca x%10=x/10%10 atunci

| y=y+1

|altfel

| y=y-1

|_▄

scrie y

c.

intreg x,y

x=25 y=2

daca y%2=0 atunci

| x=x-y*y

|altfel

| x=x+y*y

|_▄

scrie x

d.

intreg x,y

x=10 y=100

daca x<y atunci

| x=x-y

| y=x+y

| x-y-x

|_▄

scrie x,y

Realizaţi apoi schema logică şi programul C++ pentru fiecare din cele patru secvenţe de

algoritm.

9. Ştiind că variabila întreacă nr memorează valoarea 5, stabiliţi ce va afişa următoarea

sevenţă de instrucţiuni: if(nr<6)

if(nr>3)

cout<<”Bine”;

else

cout<<”Foarte bine”;

else

cout<<”Rau”;

10. Se dă următorul set de instrucţiuni C++ int x=4,a=2,b=4,c=8;

if(x= = b)x=a;

else x=b;

if(x!=b) c=c+b;

else c=c+a;

cout<<”c=”<<c;

Care va fi valoarea afişata?

11. Fie următoarea secvenţă de algoritm: intreg v

daca v>35 atunci

| f=20

|altfel

| daca v>50 atunci

| | f=40

| |altfel

| | daca v>75 atunci

| | | f=70

| | |_▄

| |_▄

|_▄

scrie f

a. ce se afişa dacă valoarea iniţiala a variabilei

v este 75;

b. Stabiliţi o valoare pentru variabila v astfel

incât valoarea variabilei f sa fie 20;

c. În ce situaţii se va afişa 70?

d.Desenaţi schema logică echivalentă

algoritmului dat.

12. Scrieti un program care sa afiseze valoarea absoluta a unui numar intreg x citit de la

tastatura.

13. Se dau două numere maturale a şi b cu trei cifre fiecare. Să se afişeze numărul care are

suma cifrelor mai mare. Exemplu: daca a=487 şi b=912, atunci suma cifrelor

numarului a este 19, iar suma cifrelor numarului b este 12, deci pe ecran se va afisa 487.

14. Se dă un număr x, natural de trei cifre. Să se verifice dacă conţine cifra 0.

15. Se dau doua numere intregi a si b. Afisati doar numarul mai mare.

16. Se dau trei numere intregi a, b, si c. Afisati doar numarul mai mic.

Page 42: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

17. Se dau trei numere naturale a,b si c. Afisati in ordine crescatoare cele 3 numere.(ca tema

acasa reluati algoritmul pentru 4 numere)

18. Vom considera zilele saptamanii numerotate cu cifre de la 1 la 7.(Luni 1, Marti 2,...,

Duminica 7). Sa se scrie un algoritm care citeste de la tastatura un numar natural si

afisaza denumirea zilei din saptamana. In cazul in care numarul citit nu apartine

intervalului [1,7] se va afisa mesajul „Date de intrare gresite!”

19. Se da un numar a de trei cifre. Folosind criteriile de divizibilitate sa se precizeze daca

numarul este divizibil la 2, 3 sau 5.

20. Se citeste un numar natural de 3 cifre. Scrieti un program care afiseaza toate numerele

care pot obtine cu cifrele numarului dat.

21. Se citeste un numar natural de 3 cifre. Scrie un program care calculeaza suma si produsul

cifrelor sale.

22. Scrieţi un program care citeşte în variabila n nota unui elev obţinută la examenul de

bacalaureat şi afişează situaţia acestuia astfel:

a. PROMOVAT dacă n 10,6

b. RESPINS, dacă n 5,1

c. NEPREZENTAT, dacă n=0

d. DATE ERONATE, altfel

23. Date două numere, afişaţi-l pe cel mai mic. Exemplu : Date de intrare : 44 32 Date de

ieşire : 32.

24. Se introduc vâstele a doi copii. Afişaţi care copil este mai mare şi diferenţa de vâstă

dintre cei doi. Exemplu: Date de intrare : 6 13 date de ieşire : al doilea copil este mai

mare cu 7 ani.

25. Se introduc punctajele a doi sportivi. Afişaţi-le în ordine descrescătoare. Exemplu: Date

de intrare 100 134 Date de ieşire: 134 puncte 100 puncte.

26. Dintr-o cutie cu trei numere se extrag două numere. Cunoscâd suma celor două numere

extrase, să se afişeze numărul rămas în cutie. Exemplu : date de intrare : numere existente

in cutie 5 12 8 suma numerelor extrase 13 date de ieşire : 12.

27. Se dau două numere. Să se înmulţească cel mai mare cu doi şi cel mai mic cu trei şi să se

afişeze rezultatele. Exemplu : date de intrare : 3 7 date de ieşire : 9 14

28. Se introduc două numere întregi. Să se testeze dacă primul număr este predecesorul

(succesorul) celui de-al doilea şi să se afişeze un mesaj corespunzător. Exemple : date de

intrare : 2 4 date de ieşire : Nu ; date de intrare : 5 6 date de ieşire : Da.

Page 43: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Lecţia 5. Structuri repetitive

Atunci când se doreşte repetarea unei acţiuni de un anumit număr de ori este necesară

utilizarea unei structuri repetitive. În funcţie de numărul repetărilor acestea se clasifică în:

Structuri repetitive cu număr nedeterminat de paşi

o Cu test iniţial

o Cu test final

Structuri repetitive cu număr fix de paşi

Structura repetitivă cu test iniţial

Numele acestei structuri repetitive ţine de faptul că înaintea executării blocului de

instrucţiuni se verifică îndeplinirea unei condiţii. În limbajul C++ este cunoscută sub denumirea

de structura while. Reprezentarea acestei structuri este:

Schema logică Pseudocod Instructiune C++

cât timp C(adev)execută

BI

while (expresie logică)

instrucţiune;

sau:

while (expresie logică)

{ instrucţiune1;

instrucţiune2;

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

instrucţiunen;

};

Mod de execuţie:

Pas 1 :Se determină valoarea de adevăr a condiţiei notată C;

Pas 2: Dacă este adevărată atunci se execută blocul de instrucţiuni notat BI şi se revine la

pas1

Pas 3: Dacă este falsă atunci se părăseşte structura repetitivă.

Observaţii:

Dacă la prima evaluare a condiţiei C valaorea de adevar este Fals, atunci blocul de

instrucţiuni BI nu va fi executat nici macar o singură dată ci se va părăsi structura

repetitivă cu test iniţial;

Evaluarea condiţiei C se face la fiecare reluare a structurii si este recomandat ca forma ei

să fie cât mai simplă;

Utilizarea acestei structuri este recomandată atunci când nu se cunoaşte numărul de

repetări ale buclei şi atunci când condiţia poate avea valoarea fals încă de la intrarea ăn

structură;

Blocul de instrucţiuni notat BI poate conţine orice fel de structură de control, deci şi o

altă structură repetitivă cu test iniţial(while-uri imbricate);

Buclele infinite nu vor fi sesizate ca erori de compilare;

Utilizatorul este obligat să fie atent în evitarea formării de bucle infinite, şi să verifice ca

după un anumit număr de repetări să existe premizele transformării în Fals a valorii

condiţiei C.

Da

Nu C

BI

Page 44: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Structura repetitivă cu test final

În acest caz blocul de instrucţiuni este executat iniţial fără nici o verificare a unei

condiţii, aceasta finnd verificată la final. În limbajul C++ este cunoscută sub denumirea de

structura do-while. Reprezentarea acestei structuri este:

Schema logică Pseudocod Instructiune C++

execută

BI

cât timp C(adev)

do

instrucţiune;

while (expresie logică);

sau: do

{ instrucţiune1;

instrucţiune2;

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

instrucţiunen;

}

while (expresie logică);

Mod de execuţie:

Pas 1 :Se execută blocul de instrucţiuni notat BI;

Pas 2: Se calculează valoarea de adevăr a condiţiei notate C;

Pas 3: Daca este adevărată atunci se revine la pas1

Pas 3: Dacă este falsă atunci se părăseşte structura repetitivă.

Observaţii:

BI va fi executat cel puţin o singură dată, atunci cînd la prima evaluare a condiţiei C

rezultatul este Fals;

spre deosebire de structura repetitivă cu test iniţial, în acest caz blocul de instrucţiuni BI

se execută cel puţin o singură dată;

este recomandată utilizarea ei în situaţiile în care nu se cunoaşte numărul de repetări ale

buclei şi există certitudinea executării cel puţin o singură dată a blocului de instrucţiuni;

utilizatorul este obligat să fie atent în evitarea formării de bucle infinite şi să verifice ca

după un anumit număr de repetări să existe premizele transformării în fals a valorii

condiţiei C şi deci şă se părăsească structura repetitivă;

Structura repetitivă cu număr fix de paşi

Spre deosebire de structurile repetitive prezentate anterior, structura repetitivă cu număr

fix de paşi se foloseşte atunci când se cunoaşte în mod exact, de la început, de câte ori trebuie

repetată o acţiune. Se mai numeşte şi structură repetitivă cu contor, iar în funcţie de valoarea

pasului (mai mare decât 0/ mai mică decât 0) apare în două forme:

cu pas pozitiv

cu pas negativ

Da

BI

Nu C

Page 45: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Schema logică Pseudocod

pentru contor=expr1; expr2; pas

BI

Limbajul C++

for(iniţializare; condiţie oprire; pas)

instrucţiune;

sau:

for(iniţializare; condiţie oprire; pas)

{ instrucţiune1;

instrucţiune2;

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

instrucţiunen;

};

unde:

expr1- reprezintă valoarea iniţială a variabilei de tip contor

C - condiţia de oprire, sau valoarea finală la care trebuie să ajungă valoarea variabilei

contor

Pas - reprezintă o valoare constantă care are scopul de a modifica în progresie aritmetică

crescătoare/descrescătoare valoarea variabilei contor

Mod de execuţie

pas1 - se iniţializeză variabila contor cu valoarea expresiei expr1. Această operaţie se

execută o singură dată;

pas 2 - se verifică indeplinirea condiţiei de oprire;

pas 3 - dacă nu este îndeplinită condiţia de oprire atunci se execută blocul de instrucţiuni

notat BI;

pas 4 - se adaugă valoarea pasului la valoarea variabilei contor şi se revine la pasul 2;

pas 5 – dacă condiţia de oprire este îndeplinită atunci se încheie execuţia acestei structuri.

Observaţii

dacă pasul este pozitiv, în momentul în care valoarea variabilei contor devine mai

mare decât valoarea finală atunci se va încheia execuţia structurii repetitive cu număr

fix de paşi;

numărul de repetări ale blocului de instrucţiuni BI se calculează cu relaţia:

număr de repetări= 1pas

initialavaloarefinalavaloare;

dacă valoarea iniţială este egală cu valoarea finală atunci Bi se va executa o singură

dată, indiferent de valoarea şi semnul pasului;

dacă valoarea iniţială este mai mare decât valoarea finală şi pasul este pozitiv atunci

BI nu se va executa nici măcar o singură dată.

Linia contor=contor±pas nu apare nici în limbajul pseudocod şi nici în forma

instrucţiunii for, ea se subântelege şi execută automat la fiecare nouă repetare a

structurii.

Blocul de instrucţiuni poate fi alcătuit din orice fel de instrucţiune a limbajului C++,

iar în condiţia în care se doreşte executarea mai multor instrucţiuni în cadrul

instrucţiunii for, atunci acestea trebuie grupate între acolade.

Page 46: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Conversii între structurile repetitive

Între cele trei tipui de structure sunt premise următoarele operaţii de conversie :

Instrucţiunea for poate fi înlocuită întotdeauna de una dintre structurile repetitive while

sau do-while, dar nu întotdeauna o structură while sau do-while poate fi înlocuită cu o

instrucţiune for. Atunci când realizaţi o conversie din instrucţiunea while în do-while trebuie sa

aveţi grijă ca secvenţa de cod obţinută după conversie sa fie echivalentă cu secvenţa iniţială (să

se obţină acelaşi rezultat).

De exemplu:

Fie următoarea secvenţă de algoritm:

s=0;

┌pentru i=1, 10, +1 // i=1 iniţializare; i<=10 condiţia de oprire; i=i+1 pas

| s=s+i

|_■

scrie s

Dacă înlocuim structura repetitivă cu număr fix de paşi cu o structură repetitivă cu test iniţial

atunci obţinem următorul algoritm: s=0

i=1

┌cât timp i<=10 execută

| s=s+i

| i=i+1

|_■

scrie s

iar dacă facem înlocuirea cu o structură repetitivă cu test final obţinem: s=0

i=1

┌execută

| s=s+i

| i=i+1

|cât timp i<=10

|_■

scrie s

Structuri repetitive cu număr nedeterminat de paşi

DO-WHILE (structură repetitivă

cu test final)

FOR (structură repetitivă

cu număr fix de paşi)

WHILE (structură repetitivă

cu test iniţial)

Page 47: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Aplicaţii rezolvate:

1. Care este valoarea variabilei i la sfârşitul execuţiei următorului program: Sursă C++ Explicaţii

#include<iostream.h>

int i;

void main()

{ while (i<=5)

i++;

cout<<i;

}

variabila i definita global => i=0

valoarea lui va creste cu 1 până

când condiţia i<=5 va deveni falsă

va fi afisata valoarea 6

2. Ce afiseză următoarea secvenţă de program?

Sursă C++ Explicaţii

#include<iostream.h>

int i;

void main()

{ while (i<=5)

{ i++;

cout<<i<<” ”;

}

}

variabila i definită global => i=0

valoarea lui va creste cu 1 până

când condiţia i<=5 va deveni falsă

vor fi afişate următoarele valori:

1 2 3 4 5

3. Înlocuieşte structura cât timp cu o structură repetitivă cu test final în următorul algoritm

asfel încât să se obţină un algoritm echivalent.

Algoritm Transformarea

citeste n

cât timp n<=10 executa

| afiseaza n

| n=n+2

|

citeste n

┌daca n<=10 atunci

| ┌executa

| | afiseza n

| | n=n+2;

| |cat timp n<=10;

| |

|

Explicaţii:

Dacă valoarea citită de la tastatură în cazul algoritmului dat este mai mare

decât 10 atunci programul nu afisează nimic

Dacă valoarea citită de la tastatură este mai mica sau egală cu 10 atunci

programul afisează numerele de la n până la 10 din doi în doi.

Daca în transformarea structurii cât timp în execută cât timp nu ţineam cont

de modul de execuţie diferit al acestora şi nu foloseam structura dacă,

pentru valori mai mari decât 10 algoritmii nu erau echivalenţi

4. Să se realizeze schema logică pentru următorul

algoritm:

B1

┌dacă C1 atunci

| B2

|_■

┌cât timp C2 execută

| ┌dacă C3 atunci

| | B3

| |altfel

| | B4

| |_■

| B5

|_■

B6

Page 48: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Dacă ne uităm cu atenţie pe algoritmul dat vom identifica două structuri

alternative(marcate cu albastru) şi o structură repetitivă cu test iniţial (marcată cu roşu). Se

observă uşor că una din tructurile alternative este înaintea structurii repetitive, iar cea de-a doua

structură alternativă este inclusă în structura repetitivă.

5. Fie următorul algoritm care conţine o structură repetitivă cu număr fix de paşi(for). Se cere:

Să se înlocuiască cu o structură repetitivă cu test iniţial(while)

Să se înlocuiască cu o structură repetitivă cu test final(do-while).

for while do-while citeşte n

s=0

┌pentru i=1,n,+1

| s=s+i;

|_■

scrie s

citeşte n

s=0

i=1;

┌cât timp i<=n execută

| s=s+i;

| i=i+1;

|_■

scrie s

citeşte n

s=0

┌dacă n>=1 atunci

| i=1;

| ┌execută

| | s=s+i;

| | i=i+1;

| |cât timp i<=n;

| |_■

|_■

scrie s

6. Dacă valoarea citită pentru n este 8291, care va fi valoarea variabilei r, după execuţia

următoarei secvenţe de algoritm:

1. citeşte n

2. r=0

3. ┌execută

4. | r = (r*10+n%10)*10

5. | n=n/100

6. |cât timp n>=10

7. └■

8. scrie r

Pentru a determina valoarea variabilei r trebuie să executăm programul pas cu pas, iar cel

mai simplu mod este de a urmări valorile variabilelor într-un tabel cu următoarea structură:

Linia

executata n r condiţia n>=0

1 8291 - -

2 8291 0 -

4 8291 (0*10+1)*10=10 -

5 82 10 Adevarata

4 82 (10*10+2)*10=1020 -

5 0 1020 Falsa

8 Afişează valoarea 1020

9. Identificaţi structurile de control şi scrieti algoritmul în pseudocod echivalent cu următoarea

schemă logică:

Page 49: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

B1

┌execută

| B2

| ┌dacă C1 atunci

| | B2

| |altfel

| | B3

| └■

|cât timp C2

└■

B4

unde:

Rosu - structura repetitivă cu test

final

Albastru-structura alternativă

Negru –structuri liniare sau blocuri

de instrucţiuni

10. Fie următoarele secvente de program:

i=0

┌cât timp i<=3

| i=i+1

| scrie i

└■

scrie i

i=0

┌execută

| i=i+1

| scrie i

|cât timp i<=3

└■

scrie i

┌pentru i=0,3,+1

| scrie i

└■

scrie i

Se cere:

să se determine ce afişează următoarele secvenţe de algoritmi

să se precizeze de câte ori se execută blocul de instrucţiuni ataşat structurii repetitive

Scrieţi câte un program C++ pentru fiecare din cele trei secvenţe date.

Afişează: 1 2 3 4 4 Afişează:1 2 3 4 4 Afişează: 0 1 2 3 4

4 ori 4 ori 4 ori #include<iostream.h>

#include<conio.h>

int i;

void main()

{clrscr();

while(i<=3)

{i++;

cout<<i<<" ";

}

cout<<i;

getch();

}

#include<iostream.h>

#include<conio.h>

int i;

void main()

{clrscr();

do

{i++;

cout<<i<<" ";

}while(i<=3);

cout<<i;

getch();

}

#include<iostream.h>

#include<conio.h>

int i;

void main()

{clrscr();

for(i=0;i<=3;i++)

cout<<i<<" ";

cout<<i;

getch();

}

Page 50: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Aplicaţii practice

21. Scrieţi algoritmul în pseudocod pentru următoarele scheme logice şi identificaţi structurile de

control care le alcătuiesc:

Page 51: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

22. Fie următorii algoritmi scriş în limbaj pseudocod:

Se cere:

a. Realizaţi schema logică pentru fiecare algoritm;

b. Care sunt structurile repetitive întalnite în fiecare

algoritm?

c. Câte structuri alternative identificaţi în fiecare

algoritm dat?

a.

┌cât timp C1 execută

| ┌daca C2 atunci

| | ┌executa

| | | B1

| | |cat timp C3;

| | └■

| |altfel

| | ┌cat timp C4 executa

| | | B2

| | └■

| └■

| B3

| ┌pentru i=vi,vf,+1

| | B4

| └■

└■

┌dacă C1 atunci

| ┌dacă C2 atunci

| | B1

| |altfel

| | B2

| └■

| ┌cât timp C3 execută

| | B3

| | ┌dacă C4 atunci

| | | B4

| | └■

| └■

└■

┌execută

| B1

| ┌pentru i=v1,vf,+1

| | B2

| └■

| ┌dacă C1 atunci

| | ┌cât timp C2 execută

| | | B3

| | └■

| |altfel

| | B4

| └■

|cât timp C3

└■

3. Care este rezultatul afişat după execuţia următorului algoritm?

i=1

┌cât timp i<=5 execută

| j=1

| ┌cât timp j<=i execută

| | scrie „*‟

| | j=j+1

| └■

| i=i+1

| salt la rând nou

└■

4. Scrieţi programul C++ si precizaţi care este efectul următorului algoritm scris în limbaj

pseudocod, dacă valoarea citită pentru variabila n este 7:

citeşte n

s=0

i=1

┌cât timp i<=n execută

| s=s+i

| i=i+1

└■

scrie s

5. Care este efectul următorului program?

Page 52: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

#include<iostream.h>

#include<conio.h>

int i,n;

void main()

{clrscr();

n=10;

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

{ cout<<i<<" ";

n--;

}

getch();

}

a. 1 2 3 4 5 6 7 8 9 10 b. 1 2 3 4 5

c. 10 9 8 7 6 5 4 3 2 1 d. 5 4 3 2 1

6. Fie următoarea secvenţă de program:

#include<iostream.h>

#include<conio.h>

void main()

{clrscr();

for(char i='a';i<='f';i++)

cout<<i<<" ";

getch();

}

Pe ecran se va afişa:

a. A B C D E F b. i i i i i i

c. a f a f a f d. a b c d e f

7. Fie următoarea secvenţă de program:

#include<iostream.h>

#include<conio.h>

void main()

{clrscr();

for(int i=5;i<=5;i++)

cout<<i<<" ";

getch();

}

După execuţia programului pe ecran se va afişa:

a. 5;

b. 6;

c. Nimic, exista erori de compilare;

d. Nici un răspuns nu este corect.

8. Care vor fi valorile afişate ale variabilelor a şi b după executarea următorului program C++:

#include<iostream.h>

#include<conio.h>

void main()

{clrscr();

int a=1,b=2;

while(b<10)

b++;

a=a*b;

cout<<a<<" "<<b;

getch();

}

a. 10 10 b. 11 11

c. 9 10 d. 10 9

Page 53: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

9. Care va fi valoarea afişată a variabilei a după execuţia următorului program C++:

#include<iostream.h>

#include<conio.h>

void main()

{clrscr();

int a=1,b=8;

while(b>1)

{a=a+b;

b=b-3;

};

cout<<a<<" "<<b;

getch();

}

a. 32 b.34

c. 16 d. nici un răspuns nu este corect

10. De câte ori se execută instrucţiunile cuprinse între cuvintele execută-cât timp din

umătorul algoritm:

m=1

x=1

┌execută

| m=m*x

| x=x+8

|cât timp m>=x;

└■

a. de două ori b. niciodată

c. o singură dată d. de opt ori

11. Precizaţi care este valoarea variabilei a, după execuţia următoarei secvenţe de algoritm:

m=5

a=20

┌execută

| a=a-m

| m=m+1

|cât timp m<=a;

└■

a. 15 b. 2

c. 0 d. 9

12. Rescrieţi următoarele secvenţe de program C++, astfel încât buclele repetitive să fie înlocuite

cu instrucţiunea care implementeză structura repetitivă cu test iniţial:

S=0;n=9;

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

s=s+i;

cout<<”s=”<<s;

for(int i=10;i>= -2;i--)

cout<<”i=”<<i<<endl;

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

{ for(int j=1;j<=n;j++)

cout<<”*”;

cout<<endl;

}

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

cout<<i<<” ”;

cout<<end;

Page 54: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

13. Rescrieţi următoarele secvenţe de program C++, astfel încât buclele repetitive să fie înlocuite

cu instrucţiunea care implementeză structura repetitivă cu test final:

int i=2;

int ok=1;

while(i<n/2 && ok)

if(n%i==0)

ok=0;

else

i++;

for(int i=100;i>=1;i--)

if(i%2==0)

cout<<i<<” ”;

int s=0;

while(n!=0)

{ s=s+n%10;

n=n/10;

};

for(char i='a';i<='f';i++)

cout<<i<<" ";

14. Rescrieţi următoarele secvenţe de program C++, astfel încât buclele repetitive să fie înlocuite

cu instrucţiunea care implementeză structura repetitivă cu număr fix de paşi:

int p=1, i=1;

while(i<n)

{ p=p*i;

i++;

};

char ch=‟a‟;

while (ch<=‟z‟)

{cout<<ch<<” ”;

ch++;

};

int i=1;

do{

int j=1;

do{

cout<<”*”;

j++;

}while(j<=n);

cout<<endl;

i++;

}while(i<=n);

int i=1;

while(i<=n)

{ int j=1;

do{

cout<<”*”;

j++;

}while(j<=n);

cout<<endl;

i++;

}

15. Specificaţi de câte ori se vor repeta instrucţiunile din bucla repetitivă şi care va fi valoarea

variabilei i la sfârşitul următoarei secvenţe de algoritm. Scrieţi programul C++

corespunzător algoritmului dat.

i=1, s=0(numere întregi)

┌cât timp (i<=5) execută

| s=s+i

| i=i+1

└■

a. se obţine o buclă infinită b. de 5 ori şi i=6

c. de 6 ori si i=6 d. de 5 ori si i=5

16. Specificaţi de câte ori se vor repeta instrucţiunile din bucla repetitivă şi care va fi valoarea

variabilei i la sfârşitul următoarei secvenţe de algoritm. Scrieţi programul C++

corespunzător algoritmului dat.

i=0 (numar intreg)

┌cât timp i<1 execută

| i=i+1

└■

a. o singură dată şi i=1 b. de două ori şi i=1

c. nu se execută niciodată şi i=0 d. se obţine o buclă infinită

Page 55: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

17. Specificaţi de câte ori se vor repeta instrucţiunile din bucla repetitivă şi care vor fi valoarile

variabilelor s şi c la sfârşitul următoarei secvenţe de algoritm. Scrieţi programul C++

corespunzător algoritmului dat.

c=100, s=0 (numere întregi)

┌execută

| s=s+c

| c=s-10

|cât timp s<=c

└■

a. o singură dată şi s=90, c=100 b. o singură dată şi s=100, c=90

c. o singură dată şi s=90, c=90 d. se obţine o buclă infinită

18. Fie următoarea secvenţă scrisă în limbaj pseudocod:

citeşte n

i=1

┌cât timp i<=n execută

| scrie „# # ”

| i=i+1;

└■

Care trebuie să fie valoarea variabilei n astfel încât să se afişeze pe ecran „# # # # # #” ?

a. 2 b.4

c.3 d.1

19. Fie următoarea secvenţă de algoritm:

citeşte a,b

┌pentru i=a,b,+1

| ┌dacă i%2 == 0 atunci

| | scrie i, “ “

| └■

└■

a. Ce va afişa dacă pentru variabilele a şi b se vor citi valorile 10 respectiv 20?

b. Daţi un set de valori de intrare pentru care algoritmul nu afisează nimic

c. Scrieţi un program C++ corespunzator algoritmului dat.

20. Fie următoarea secvenţă de algoritm:

┌execută

│ citeşte a,b

│cât timp (a<b sau b=0)

└■

nr=0

┌cât timp c>b execută

│ a=a-b

│ nr=nr+1

└■

scrie nr,” “,a

a. Ce se va afişa decă valorile iniţile ale variabileor a şi b sunt 54 si 10.

b. Daţi un set de date de intrare pentru care se va afişa 3 şi 0.

c. Scrieţi programul C++ corespunzător algoritmului dat.

Page 56: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

21. Fie următoarea secvenţă de algoritm:

citeşte x (număr natural)

n=0

┌cât timp x≠0 execută

│ y=x; c=0

│ ┌cât timp y>0 execută

│ │ ┌dacă y%10>c atunci

│ │ │ c=y%10

│ │ └■

│ │ y=y/10

│ └■

│ n=n*10+c

│ citeşte x

└■

scrie n

Se cere:

a. Scrieţi valoarea ce se va afişa dacă se citesc, în această ordine, numerele 12, 7,

354, 9, 1630, 0.

b. Scrieţi programul C/C++ corespunzător algoritmului dat;

c. Desenaţi schema logică corespunzătoare algoritmului scris în pseudocod.

22. Fie următoarea secvenţă de algoritm:

citeşte a,b,c (numere naturale nenule)

┌dacă a>b atunci

│ t=a; a=b; b=t

└■

┌cât timp a≤b execută

│ ┌dacă c%a=0 atunci

│ │ scrie a

│ └■

│ a=a+1

└■

Se cere:

a. Scrieţi care sunt valorile ce se vor afişa pentru a=10, b=20 şi c=6;

b. Scrieţi programul C/C++ corespunzător algoritmului dat;

c. Desenaţi schema logică corespunzătoare algoritmului scris în pseudocod.

23. Fie următoarea secvenţă de algoritm:

citeste n,m (numere naturale)

┌cât timp n≤m execută

│ n=n+1

│ m=m-1

└■

┌cât timp m<n execută

│ m=m+1

│ n=n-1

└■

scrie n

Se cere:

a. Scrieţi valoarea care se afişează dacă se citesc numerele n=6 şi m=12;

b. Scrieţi programul C/C++ corespunzător algoritmului dat;

c. Desenaţi schema logică corespunzătoare algoritmului scris în pseudocod;

Page 57: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

d. Scrieţi două perechi distincte de numere ce pot fi introduce pentru n şi m astfel

încât să se afişeze valoarea 10, în urma executării algoritmului, pentru fiecare

dintre perechi.

24. Fie următoarea secvenţă de algoritm:

citeste n (număr natural)

m=0

p=1

┌cât timp n>0 execută

│ c=n%10

│ ┌dacă c>0 atunci

│ │c=c-1

│ └■

│ m=m+c*p

│ p=p*10

│ n=n/10

└■

scrie m

Se cere:

a. Scrieţi valoarea care se afişează dacă se citesc numerele n=5172;

b. Scrieţi programul C/C++ corespunzător algoritmului dat;

c. Desenaţi schema logică corespunzătoare algoritmului scris în pseudocod;

25. Fie următoarea secvenţă de algoritm:

citeşte x (număr natural)

s=0

f=2

┌cât timp x>1 execută

│ p=0

│┌cât timp x%f=0 execută

││ x=x/f

││ p=p+1

│└■

│┌dacă p≠0 atunci

││ s=s+p

│└■

│ f=f+1

└■

Se cere:

a. Scrieţi valoarea care se afişează dacă se citesc numerele x=140;

b. Scrieţi programul C/C++ corespunzător algoritmului dat;

c. Desenaţi schema logică corespunzătoare algoritmului scris în pseudocod;

26. Fie următoarea secvenţă de algoritm:

s=0

citeşte v (valoare naturală)

┌cât timp v ≠ 0 execută

│ a = v%10

│ b = [v/10]%10

│ s = s + a*10 + b

│ citeşte v

└■

scrie s

Page 58: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Se cere:

a. Scrieţi valoarea care se afişează dacă se citesc, în ordine, numerele 114, 123, 517,

3312, 14, 412, 22, 0;

b. Scrieţi programul C/C++ corespunzător algoritmului dat;

c. Desenaţi schema logică corespunzătoare algoritmului scris în pseudocod;

27. Fie următoarea secvenţă de algoritm:

citeşte n,k (numere naturale, k≤9)

i = k

┌cât timp i > 0 execută

│ n = n/10

│ i = i-1

└■

z = n%10

scrie z

Se cere:

a. Scrieţi valoarea care se afişează dacă se citesc numerele n=32506 şi k=3;

b. Scrieţi programul C/C++ corespunzător algoritmului dat;

c. Desenaţi schema logică corespunzătoare algoritmului scris în pseudocod;

28. Fie următoarea secvenţă de algoritm:

citeşte x (număr natural nenul)

┌cât timp x>0 execută

│ citeşte y (număr natural)

│┌dacă x>y atunci

││ scrie x%10

││altfel

││ scrie y%10

│└■

│ x = y

└■

Se cere:

a. Scrieţi valoarea care se afişează dacă se citesc, în ordine, numerele 17 22 13 101

2 7 5 0;

b. Scrieţi programul C/C++ corespunzător algoritmului dat;

c. Desenaţi schema logică corespunzătoare algoritmului scris în pseudocod;

29. Fie următoarea secvenţă de algoritm:

citeste n,k

(numere naturale nenule)

t=0

┌cât timp n≥1 execută

│┌dacă n>k atunci

││ t=t+1

│└■

│ n=n-t

└■

scrie t

Se cere:

a. Scrieţi valoarea care se afişează dacă se citesc n=7 si k=2

b. Scrieţi programul C/C++ corespunzător algoritmului dat;

c. Desenaţi schema logică corespunzătoare algoritmului scris în pseudocod;

Page 59: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Algoritmi care prelucrează cifrele unui număr natural

Există nenumărate aplicaţii în practică, când ni se solicită informaţii despre cifrele din

care este construi un număr, despre natura sau numărul lor. În acest caz cifrele numărului vor fi

separate, una câte una, de la ultima cifră(cifra unităţilor) spre prima cifră. După fiecare

prelucrare din numărul iniţial vom elimina ultima cifră, algoritmul conţinuând în acelaşi mod, în

funcţie de numărul de cifre din numărul dat.

Şablonul de rezolvare al problemelor care prelucrează cifrele unui număr natural are

următoarea formă:

citeşte numărul de prelucrat

iniţializarea variabilelor de manevră

┌cât timp numărul dat mai are cifre neprelucrate execută │ - extrage ultima cifră din număr

│ - prelucrază această cifră conform enunţului din problemă

│ - elimină din numărul de prelucrat ultima lui cifră

└■

afişează rezultatul

Aplicaţii rezolvate

1. Se dă un număr natural n. Se cere să se scrie un algoritm care calculează suma cifrelor numărului dat.

Rezolvarea acestei probleme va urmări şablonul de rezolvare prezentat mai sus, tinând

cont de faptul că atunci când avem de calculat o sumă de termeni, variabila care va conţine

rezultatul se va iniţializa cu valoarea zero.

Algoritmul este:

citeşte n număr natural şi reprezintă numărul de prelucrat

s=0 va conţine, la final, suma cifrelor numărului n, iniţial va avea

valoarea zero

┌cât timp n>0 execută

│ c = n%10 extrag ultima cifră din numarul n

│ s = s+c adun cifra separată la suma cifrelor numărului n

│ n = n/10 elimin din numărul n ultima lui cifră

└■

scrie “suma cifrelor este ”, s

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,s,c;

void main()

{clrscr();

cout<<"n="; cin>>n;

while(n>0)

{ c=n%10;

s=s+c;

n=n/10;

}

cout<<"suma cifrelor este "<<s;

getch();

}

2. Se dă un număr natural n. Să se precizeze din câte cifre este

alcătuit.

Page 60: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Algoritmul de rezolvare urmăreşte şablonul prezentat, doar că în acestă situaţie problema

se simplifică. Nu mai avem nevoie de cifra să o păstrăm în variabila c, doar vom număra de

câte ori putem împărţi numărul la 10, obţinând astfel numărul de cifre

Algoritmul este:

citeşte n număr natural şi reprezintă numărul de prelucrat

nr=0 va conţine numărul cifrelor numărului n, iniţial va avea

valoarea zero

┌cât timp n>0 execută

│ nr = nr+1 număr că am separat o cifră din numărului n

│ n = n/10 elimin din numarul n ultima lui cifra

└■

scrie “suma cifrelor este ”, s

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,nr;

void main()

{clrscr();

cout<<"n="; cin>>n;

while(n>0)

{ nr++;

n=n/10;

}

cout<<"numărul cifrelor este "<<nr;

getch();

}

3. Se dă un număr natural n. Se cere să se calculeze suma

cifrelor pare din numarul dat.

Algoritmul este: citeşte n număr natural şi reprezintă numărul de prelucrat

s=0 va conţine, la final, suma cifrelor pare din numărului n, iniţial

va avea valoarea zero

┌cât timp n>0 execută

│ c = n%10 // extrag ultima cifră din numărul n

│ ┌dacă c%2 == 0 atunci // dacă ultima cifră este pară

│ │ s = s+c // adun cifra separată la sumă

│ └■

│ n = n/10 //elimin din numarul n ultima lui cifră

└■

scrie “suma cifrelor este ”, s

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,s,c;

void main()

{clrscr(); cout<<"n="; cin>>n;

while(n>0)

{ c=n%10;

if (c%2==0)

s=s+c;

n=n/10;}

cout<<"suma cifrelor pare este "<<s;

getch();

}

Page 61: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

4. Se dă un număr natural n. Se cere să se determine cifra maximă

din numarul dat.

Atunci când avem de determinat valoarea maximă dintre un şir de numere, vom iniţializa

variabila care va conţine maximul cu cea mai mică valoare posibilă. În cazul nostru trebuie să

determinăm cifra maximă dintre cifrele unui număr dat, şi vom iniţializa cifra maximă cu

valoarea zero, apoi vom extrage câte o cifră din număr şi o vom compara cu valoarea cifrei

maxime. În situaţia în care am găsit o valoare mai mare vom actualiza informaţia din cifra

maximă, cu ultima cifră extrasă din număr. Algoritmul continuă în acelaşi mod până când au fost

prelucrate toate cifrele numărului dat.

Algoritmul este: citeşte n număr natural şi reprezintă numărul de prelucrat

cif_max=0 va conţine, la final, cifra maximă din numărului n, iniţial

va avea valoarea zero

┌cât timp n>0 execută

│ c = n%10 // extrag ultima cifră din numărul n

│ ┌dacă c >= cif_max atunci // dacă ultima cifră este mai mare decât

│ │ cif_max = c // cifra maximă, atunci păstrez valoarea ei

│ └■

│ n = n/10 //elimin din numarul n ultima lui cifră

└■

scrie “cifra maxima este ”, cif_max

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,c,cif_max;

void main()

{clrscr();

cout<<"n=";cin>>n;

while (n>0)

{c = n%10;

if( c>cif_max)

cif_max = c;

n = n/10;

}

cout<<"cifra maxima este ";

cout<<cif_max;

getch();

}

5. Se dă un număr natural n. Se cere să se determine numărul

obţinut din n, dar care are cifrele în ordinea inversă.

Algoritmul este:

citeşte n // număr natural şi reprezintă numărul de prelucrat

m=0 // va conţine, la final, cifrelor numărului n în ordine inversă,

iniţial va avea valoarea zero

┌cât timp n>0 execută

│ c = n%10 // extrag ultima cifră din numarul n

│ m = m*10+c // adun cifra separată la numărului m modificând şi

│ semnificaţia cifrelor(cifra unităţilor va deveni cifra

│ zecilor, cifra zecilor va deveni cifra sutelor, etc.)

│ n = n/10 // elimin din numărul n ultima lui cifră

└■

scrie “numărul cu cifrele inversate este ”, m

Page 62: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,c,m;

void main()

{clrscr();

cout<<"n=";cin>>n;

while (n>0)

{ c=n%10;

m=m*10+c;

n=n/10;

}

cout<<"numarul cu cifrele inversate

este "<<m;

getch();

}

6. Se dă un număr natural n. Se cere să se verifice dacă are

toate cifrele pare.

Atunci când avem de a verifica îndeplinrea unei condiţii de către toate elementele unui şir

vom proceda astfel:

vom presupune că toate elementele şirului îndeplinesc condiţia cerută;

vom verifica dacă există cel mult un număr din şir care nu verifică condiţia dată.

În situaţia nostră vom presupune iniţial că toate cifrele numărului dat sunt pare şi vom separa

apoi câte o cifră din număr şi îi vom verifica paritatea. Dacă în numărul iniţial există cel mult o

cifră pară, atunci vom ajunge la concluzia ca nu toate cifrele numărului dat sunt pare.

Algoritmul este:

citeşte n // număr natural şi reprezintă numărul de prelucrat

ok = 1 // presupun că toate cifrele numărului sunt pare, iniţial variabila

ok va avea valoarea unu

┌cât timp n>0 şi ok = 1 execută // numărul mai are cifre şi preupunerea

│ făcută rămâne valabilă

│ c = n%10 // extrag ultima cifră din numărul n

│ ┌dacă c%2 = 1 atunci // dacă ultima cifra extrasă este impară atunci

│ │ ok = 0 // presupunerea făcută nu este adevarată!

│ └■ // rezultă că nu toate cifrele lui n sunt pare

│ n = n/10 // elimin din numărul n ultima lui cifră

└■

┌daca ok = 1 atunci

│ scrie “Toate cifrele numarului dat sunt pare! ”

│altfel

│ scrie “NU toate cifrele numarului dat sunt pare! ”

└■

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,c,0ok;

void main()

{clrscr();

cout<<"n=";cin>>n;

ok=1;

while (n>0 && ok)

{ c=n%10;

if (c%2==1)

ok=0;

n=n/10;

}

sau:

Page 63: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

if (ok==1)

cout<<"Toate cifrele numarului dat

sunt pare ";

else

cout<<"NU toate cifrele numarului

dat sunt pare ";

getch();

}

7. Se dă un număr natural n. Se cere să se verifice dacă numărul

dat conţine cel putin o cifră pară.

Atunci când trebuie să verificam îndeplinrea unei condiţii de către cel puţin un element din

şir vom proceda astfel:

vom presupune că niciunul din elementele şirului nu îndeplinesc condiţia cerută;

vom verifica dacă există cel puţin un număr din şir care verifică condiţia dată.

În situaţia nostră vom presupune iniţial că nici una din cifrele numărului dat nu este pară şi

vom separa apoi câte o cifră din număr şi îi vom verifica paritatea. Dacă în numărul iniţial există

cel puţin o cifră pară, atunci vom ajunge la concluzia ca în cifrele numărului dat există cel puţin

o cifră pară.

Algoritmul este:

citeşte n // număr natural şi reprezintă numărul de prelucrat

ok = 0 // presupun că toate cifrele numărului sunt impare, iniţial

variabila ok va avea valoarea zero, nici o cifră nu îndeplineşte

condiţia cerută

┌cât timp n>0 şi ok = 0 execută // numărul mai are cifre şi preupunerea

│ făcută rămâne valabilă

│ c = n%10 // extrag ultima cifră din numărul n

│ ┌dacă c%2 = 0 atunci // dacă ultima cifra extrasă este pară atunci

│ │ ok = 1 // presupunerea făcută nu este adevarată!

│ └■ // rezultă că nu toate cifrele lui n sunt impare

│ n = n/10 // elimin din numărul n ultima lui cifră

└■

┌dacă ok = 1 atunci

│ scrie “Exista cel putin o cifra pară! ”

│altfel

│ scrie “NU există cifre pare, toate cifrele sunt impare! ”

└■

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,c,ok;

void main()

{clrscr();

cout<<"n=";cin>>n;

while (n>0 && !ok)

{ c=n%10;

if (c%2==0)

ok=1;

n=n/10;}

if (ok==1)

cout<<"Exista cel putin o cifra para!";

else

cout<<"NU exista cifre pare, toate

cifrele sunt impare ";

getch();

}

sau:

Page 64: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Aplicaţii practice

1. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se calculeze suma

cifrelor impare. Exemplu: dacă n=2345 atunci suma cifrelor impare este s=5+3=8

2. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se determine câte

cifre impare conţine numărul dat. Exemplu: numărul n=3445 are două cifre impare (3 şi 5)

3. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se calculeze

produsul cifrelor pare. Exemplu: dacă n=6542 atunci produsul cifrelor pare este 2*4*6=48

4. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se calculeze

produsul cifrelor impare. Exemplu: dacă n=6543 atunci produsul cifrelor impare este 3*5=15

5. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se determine cifra

minimă. Exemplu: dacă n=6143 atunci cifra minimă este 1

6. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se verifice dacă

numărul de cifre pare este egal cu numărul de cifre impare. Exemplu: dacă n=61432, atunci el are 3 cifre pare(2, 4, 6) şi 2 cifre impare

(3, 1), de unde rezultă că numărul de cifre pare nu este egal cu numărul de

cifre impare.

7. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se verifice dacă

numărul conţine cel puţin o cifră de zero. Exemplu: dacă n=61432, atunci el nu conţine nici o cifră egală cu zero, dar

dacă valoarea iniţială a numărului n este n=12003 atunci se va afişa numărul

conţine cifre de zero.

8. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se verifice dacă

cifrele numărului sunt în ordine crescătoare. Exemplu: dacă n= 344567 atunci el are cifrele în ordine crescătoare, iar dacă

n=12432 atunci el nu are cifrele în ordine crescătoare.

9. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se verifice dacă

cifrele numărului sunt în ordine descrescătoare. Exemplu: dacă n= 988754 atunci el are cifrele în ordine descrescătoare, iar

dacă n=55243 atunci el nu are cifrele în ordine descrescătoare.

10. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se verifice dacă

numărul este palindrom (numărul iniţial este egal cu numărul cu cifre inversate). Exemplu: dacă n=98789 este palindrom, iar numărul 123 nu este palindrom,

123≠321

11. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se determine dacă

toate cifrele sale sunt egale. Exemplu: dacă n=22222 are toate cifrele egale, iar numărul n=11121 nu are

toate cifrele egale.

12. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se determine dacă

numărul n are toate cifrele egale cu x, citit de la tastatură.

Page 65: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Exemplu: dacă n=22222 şi x=2 atunci n are toate cifrele egale cu x, iar

numărul n=22222 şi x=5 atunci nu are toate cifrele egale cu x.

13. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se afişeze pe

ecran histograma cifrelor. (pentru fiecare cifră care apare în număr se va afişa un număr de *

egal cu frecvenţa de apariţie a cifrei respective în numărul iniţial) Exemplu: dacă n=223158555 atunci se va afişa pe ecran următoarea histogramă :

0:

1:*

2:**

3:*

4:

5:****

6:

7:

8:*

9:

14. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se determine care

este cea mai mică bază în care poate fi scris numărul dat. Exemplu: dacă n=22315555, atunci cifra maximă este 5 şi rezultă că cea mai

mică bază în care este scris numărul este 6. De la matematică cunoaştem că un

număr scris în baza b poate să conţină cifre din intervalul [0,b-1].

15. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se să se determine

cel mai mare număr care se poate obţine prin eliminarea unei cifre din număr(nu se va

modifica poziţia cifrelor în număr). Exemplu: dacă n=67324, prin eleiminarea unei cifre din acest numa se vor

obţine numerele: 6732, 6734, 6724, 6324 şi 7324, iar pe ecran se va afişa

7324.

16. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se afişeze cifra de

rang k, dat de la tastatură(rangul unei cifre este numărul său de ordine, numerotând cifrele de

la dreapta la stânga începând cu zero. Exemplu: dacă n=67324 şi k=2 atunci pe ecran se va afişa cifra 3, ea este

cifra de rang doi din numărul n, dat iniţial.

17. Să se scrie un program care calculează „cifra de control” a unui număr întreg efectuând

repetat suma cifrelor sale, până se obţine un număr format dintr-o singură cifră. Exemplu: dacă n=67324 cifra lui de control este 4 (67324 are suma cifrelor

4+2+3+7+6=22, numarul 22 are suma cifrelor 2+2=4)

18. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se determine toate

numerele care se pot obţine adăugând prima cifră la sfârşitul numărului. Exemplu: dacă n=67324 se obţine următorul şir de numere: 73246, 32467, 24673,

46732, şi 67324.

19. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se afişeze o

piramidă formată din cifrele numărului dat. Exemplu 1: dacă n=67324 se va afişa

3

732

67324

Exemplu 2: dacă n=673124 se va afişa:

31

7312

673124

20. Se citeşte de la tastatură un număr natural n de cel mult 9 cifre. Se cere să se determine dacă

numărul are aspect de „deal” sau de „vale”, Exemplu 1: dacă n=12321 se va afişa DEAL!, cifrele urcă până la 3, după

care coboară

Exemplu 2: dacă n=32123 se va afişa: VALE!, cifrele numărului coboară până

la 1, după care urcă

Page 66: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Algoritmi care determină divizorii unui număr. Numere prime.

Descompunere în factori primi.

Determinarea cmmdc şi a cmmmc dintre două numere

De la matematică putem spune că un număr natural d este divizorul lui n, dacă şi numai

dacă, restul împărţirii lui n la d este egal cu zero:

┌dacă n % d = 0 atunci

│ scrie d „îl divide pe” n

│altfel

│ scrie d „nu îl divide pe ” n

└■

Dacă vom nota cu Dn mulţimea divizorilor numărului n atunci dacă n=12 putem scrie:

D12={1, 2, 3, 4, 6, 12}, unde 1 şi 12 se numesc divizori improprii ai lui 12, iar 2, 3, 4, 6 sunt

divizorii proprii ai lui 12.

Algoritmul pentru determinarea divizorilor unui număr n dat de la tastatură este:

citeşte n (număr natural)

scrie “Divizorii numărului ”, n, “sunt:”

┌pentru d=1, n, +1

│ ┌dacă n%d=0 atunci

│ │ scrie d, ” ”

│ └■

└■

Algoritmul pentru determinarea divizorilor proprii a unui număr n, dat de la tastatură

este:

citeşte n (număr natural)

scrie “Divizorii proprii a numărului ”, n, “sunt:”

┌pentru d=2, n/2, +1

│ ┌dacă n%d=0 atunci

│ │ scrie d, ” ”

│ └■

└■

Un număr natural care are exact doi divizori se numeşte număr prim, iar numerele

naturale care nu sunt numere prime se numesc numere compuse. Plecând de la această definiţie,

algoritmul care verifică dacă numărul natural n, dat de la tastatură este prim are următoarea

formă :

citeşte n (număr natural)

nr=0

┌pentru d=1,n,+1

│ ┌dacă n%d=0 atunci

│ │ nr=nr+1

│ └■

└■

┌dacă nr=2 atunci

│ scrie n, ”este număr prim”

│altfel

│ scrie n, ”nu este număr prim”

└■

Page 67: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Matematic s-a demonstrat că, dacă numărul n nu are nici un divizor propriu mai mic sau

egal cu n , atunci numărul este prim. Folosind această operaţie se micşorează numărul de paşi

în a verifica dacă n este prim sau nu. Algoritmul în acest caz se poate scrie şi aşa:

citeşte n (număr natural)

ok=1 // presupun numărul dat ca fiind un număr prim

d=2

┌cât timp d<= n şi ok = 1 execută

│ ┌dacă n%d=0 atunci // am găsit un divizor propriu în [2, n ]

│ │ ok=0 // atunci n nu este prim

│ │altfel

│ │ d=d+1

│ └■

└■

┌dacă ok = 1 atunci

│ scrie n, ”este număr prim”

│altfel

│ scrie n, ”nu este număr prim”

└■

Observaţie:

a. numărul 1 nu este număr prim, dar nu este nici număr compus;

b. numărul 2 este singurul număr prim şi par.

Orice număr natural nenul, care nu este număr prim poate fi scris ca un produs de numere

naturale prime. Scrierea unui număr natural ca un produs de numere naturale prime se numeşte

descompunere în factori primi a numărului natural respectiv. Exemple:

Algoritmul care determină descompunerea în factori primi a numărului natural n are

următoarea formă:

citeşte n (număr natural) // numărul care se va descompune în factori primi

scrie ”Numărul ”, n, ” descompus în factori primi este egal cu: ”

d = 2 // primul factor la care incercăm sa împărţim pe n

┌cât timp n>=1 execută

│ s=0 //număr de câte ori factorul d îl divide pe n

│ ┌cât timp n%d=0 execută

│ │ s=s+1

│ │ n=n/d

│ └■

│ ┌dacă s ≠ 0 atunci

│ │ scrie d,” la puterea ”, s

│ └■

│ d=d+1

└■

Din punct de vedere matematic, cel mai mare divizor comun a două numere naturale

a şi b este un număr natural d, care:

divide şi pe a şi pe b:

este divizibil cu orice divizor a lui a şi b.

24200│22*52

242│2

121│11

11│11

1│1

Deci 24200= 23*52*112

Page 68: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Pentru a afla cel mai mare divizor comun al două sau mai multor numere naturale mai

mari decât 1 se procedează astfel:

se descompun numerele în factori primi

se iau toţi factorii primi comuni, o singură dată, la puterea cea mai mică şi se

înmulţesc între ei.

Exemplu:

Dacă a = 420 atunci descompunerea în factori primi este 420=22*3*5*7 şi dacă b = 504

atunci descompunerea în factori primi este 504=23*3

2*7, de unde rezultă că cel mai mare

divizor comun dintre cele două numere, notat cmmdc(420, 504)= 22*3*7=84

Pentru a scrie un algoritm care determină valoarea celui mai mare divizor comun dintre

două numere după modelul matematic de determinare este destul de complicat. Există algoritmi

mai simpli pentru realizrea acestui lucru:

Algoritmul lui Euclid1:

Varianta 1: Folosind operaţia de împărţire

Se citesc cele două numere naturale a şi b, iar în situaţia în care a nu este mai mare decât

b se interschimbă valorile celor două variabile. Se împarte a la b pănă la obţinerea unui rest egal

cu zero. Dacă restul obţinut în urma împărţirii lui a la b nu este zero atunci valoarea lui b va fi

transferată în variabila a, valoarea restului va fi transferat în b si se va relua algoritmul prin

calcularea restului împărţirii lui a la b, dar cu noile valori ale variabilelor a şi b. Valoarea celui

mai mare divizor comun dintre a şi b, notată cmmdc(a,b), va fi egală cu ultimul rest diferit de

zero(care va fi păstrat în variabila b).

Algoritmul în pseudocod este:

citeşte a,b // două numere naturale pentru care calculez cmmdc

┌dacă a<b atunci //interschimb valoarea lui acu valoarea lui b

│ aux=a

│ a=b

│ b=aux

└■

r=a%b // determin restul impartirii lui a la b

┌cât timp r≠ 0 execută

│ a=b

│ b=r

│ r=a%b

└■

scrie ”cmmdc dinte ”, a,” si ”, b, ” este ”,b //ultimul rest diferit de zero

Varianta 2: Folosind operaţia de scădere

Se citesc cele două numere naturale a şi b pentru care se doreşte să se calculeze valoarea

celui mai mare divizor comun. Algoritmul în acest caz este mai simplu şi presupunerea scăderii

variabilei de valoare mai mică din variabila de valoare mai mare, păstrând rezultatul obţinut în

variabila din care am scăzut. Această operaţie de scădere repetată va continua în acealaşi mod cât

timp valorile variabilelor a şi b sunt diferite. Valoarea comună la care se ajunge este chiar

valoarea celui mai mare divizor comun dintre numerele date iniţial.

1 „Algoritmul lui Euclid este străbunicul tuturor algoritmilor, deoarece este cel mai vechi algoritm netrivial care a

supravieţuit până în ziua de azi.” Donald Knuth, The Art of Computer Programming, Vol. 2: Seminumerical

Algorithms, 2nd edition (1981), p. 318.

Page 69: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Algoritmul în pseudocod este:

citeşte a,b //două numere naturale pentru care calculez cmmdc

┌cât timp a ≠ b execută //dacă numerele sunt diferite atunci până când ajung

│ //egale din cel mai mare numar il scad pe cel mai mic

│ ┌dacă a > b atunci

│ │ a = a-b

│ │altfel

│ │ b = b-a

│ └■

└■

scrie ”cmmdc dinte ”,a,” si ”,b,” este ”,a //valoarea comuna dintre a si b

Două sau mai multe numere naturale care au cel mai mare divizor comun al lor egal cu 1

se numesc numere prime între ele.

Matematic, cel mai mic multiplu comun a două numere naturale a şi b este un număr

natural m, care:

este multiplu al lui a şi al lui b;

se divide cu orice multiplu al numerelor a şi b.

Cel mai mic multiplu comun dintre două numere naturale a şi b, notat cmmmc(a,b) se

calculează cu relaţia:

),(

*),(

bacmmdc

babacmmdc

deci algoritmul de determinare a cmmmc(a,b) este:

citeşte a,b // numere naturale

// determină cmmdc(a,b) cu una din variantele Algoritmului lui Euclid

scrie ”cmmdc dintre”, a, ” si ”, b, ” este:”

c=a*b

//deoarece valorile iniţiale ale variabilelor a şi b se alterează după

//rularea algoritmului lui Euclid voi calcula produsul lor inainte de a le

//strica valoarea

┌cât timp a ≠ b execută

│ ┌dacă a > b atunci

│ │ a = a-b

│ │altfel

│ │ b = b-a

│ └■

└■

scrie c/a //a=b după incheierea algoritmului de determinare a cmmdc si

//reprezinta chiar valoarea determinată

Page 70: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Aplicaţii rezolvate

1. Se citeşte de la tastatură un număr natural n. Se cere să se

calculeze suma divizorilor săi.

Exemplu: dacă n=8 divizorii săi sunt {1, 2, 4, 8} deci va trebui să afişăm valoarea 15= 1+2+4+8

Algoritmul în pseudocod este:

citeşte n //număr natural

s=0 // iniţializez suma divizorilor lui n cu zero

┌pentru d=1,n,+1 // caut posibilii divizori a lui n în intervalul [1,n]

│ ┌dacă n%d = 0 atunci //dacă d este divizor a lui n atunci

│ │ s=s+d //il adaug la suma

│ └■

└■

scrie ” suma divizorilor lui ”,n,” este ”,s

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,s;

void main()

{ clrscr();

cout<<"n="; cin>>n;

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

if(n%d==0)

s=s+d;

cout<<"Suma divizorilor lui"<<n;

cout<<" este "<<s;

getch();

}

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

Exemplu: dacă n=8 divizorii săi sunt {1, 2, 4, 8} deci va trebui să afişăm valoarea 4

Algoritmul în pseudocod este:

citeşte n //număr natural

nr=0 // iniţializez numărul divizorilor lui n cu zero

┌pentru d=1,n,+1 // caut posibilii divizori a lui n în intervalul [1,n]

│ ┌dacă n%d = 0 atunci //dacă d este divizor a lui n atunci

│ │ nr=nr+1 //număr ca am gasit un divizor

│ └■

└■

scrie ” numărul divizorilor lui ”,n,” este ”,nr

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,nr;

void main()

{ clrscr();

cout<<"n="; cin>>n;

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

if(n%d==0)

nr++ş

cout<<"Numarul divizorilor lui"<<n;

cout<<" este "<<nr;

getch();

}

Page 71: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

3. Se citeşte de la tastatură un număr natural n. Se cere să se afişeze pe ecran numerele prime mai mici sau egale cu n.

Exemplu: dacă n = 20 atunci trebuie afişate valorile 2 3 5 7 11 13 17 19

Algoritmul în pseudocod este:

citeşte n //număr natural

┌dacă n<=1 atunci

│ scrie ”Nu exista numere prime mai mici sau egale cu 1”

│altfel

│ scrie ”Numerele prime mai mici sau egale cu ”, n,” sunt:”

│ ┌pentru x=2,n,+1 // consider fiecare numar x din intervalul [2,n]

│ │ // verific daca numarul x este prim

│ │ ok=1, d=2

│ │ ┌cât timp d<=radical din x şi ok = 1 execută

│ │ │ ┌dacă x%d=0 atunci

│ │ │ │ ok=0 // atunci x nu este prim

│ │ │ │altfel

│ │ │ │ d=d+1

│ │ │ └■

│ │ └■

│ │ ┌dacă ok = 1 atunci // dacă x este prim atunci îl afişez

│ │ │ scrie x, ” ”

│ │ └■

│ └■

└■

Program C++ #include<iostream.h>

#include<conio.h>

#include<math.h>

int n,s;

void main()

{ clrscr(); cout<<"n="; cin>>n;

if (n<=1)cout<<"Nu exista numere prime mai mici sau egale cu 1!";

else

{cout<<"Numere prime mai mici sau egale cu "<<n<<" sunt :"<<endl;

for(int x=2;x<=n;x++)

{ int d=2,ok=1;

while (d<=sqrt(x) && ok)

if (x%d==0)

ok=0;

else

d++;

if(ok)cout<<x<<" ";

}

}

getch();

}

Rezultat afişat pe ecran

sau

4. Se dă un număr natural n. Se cere să se determine factorul la

puterea cea mai mare care apare în descompunerea în factroi

primi a numărului dat.

Page 72: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Exemplu: dacă n=24200, atunci descompunerea în factrori primi a lui este 24200=23*5

2*11

2, se

observă că factorul 2 apare la cea mai mare putere în descompunere, deci pe ecran trebuie afişată

valoarea 2.

Algoritmul în pseudocod este:

citeşte n // număr natural

f_max=0 // factorul maxim initial este 0

p_max=0 // puterea acestui factor este initial tot 0

d=2 // primul posibil factor din descompunere este 2

┌cât timp n>=1 execută

│ s=0 //număr de câte ori factorul d îl divide pe n

│ ┌cât timp n%d=0 execută

│ │ s=s+1

│ │ n=n/d

│ └■

│ ┌dacă s ≠ 0 atunci//daca d a fost factor vad daca are cea mai mare putere

│ │ ┌dacă s > p_max atunci

│ │ │ p_max=s; //actualizez puterea maxima

│ │ │ f_max=d; //pastrez factorul la putrea maxima

│ │ └■

│ └■

│ d=d+1

└■

scrie “Factorul care apare la puterea maxima in descompunerea in foactori

primi este ”, f_max

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,s,d,p_max,f_max;

void main()

{ clrscr();

cout<<"n="; cin>>n;

d=2;

while(n>1)

{ s=0;

while(n%d==0)

{s++;

n=n/d;

}

if(s>p_max)

{ p_max=s;

f_max=d;

}

d++;

}

cout<<"factorul la puterea maxima este ”;

cout<<f_max;

getch();

}

5. Se citesc de la tastatură n numere naturale. Se cere să se

determine cel mai mare divizor comun dintre cele n numere.

Exemplu: dacă n=4 şi numerele citite sunt 12, 48, 96 şi 192 atunci cel mai mare divizor comun

al lor este 12.

Pentru a determina acest lucru vom proceda astfel:

Citim iniţial n ca să stim câte numere vom prelucra

Citim primele două numere

Determinam cmmdc dintre primele doua numere citite

Pentru celelalte n-2 numelre procedăm astfel

o Citim un număr

o Determinăm cmmdc dintre numarul citit si cmmdc determinat anterior

Page 73: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Algoritmul în pseudocod este:

citeşte n // număr natural care precizează câte numere vom prelucra

//citeşte primele două numere şi determină cmmdc dintre ele

citeste a,b

┌cât timp a ≠ b execută //dacă numerele sunt diferite atunci până când ajung

│ //egale din cel mai mare numar il scad pe cel mai mic

│ ┌dacă a > b atunci

│ │ a = a-b

│ │altfel

│ │ b = b-a

│ └■

└■

┌pentru i=3,n,+1

│ citeste b //citeste următorul număr

│ ┌cât timp a ≠ b execută

│ │ ┌dacă a > b atunci

│ │ │ a = a-b

│ │ │altfel

│ │ │ b = b-a

│ │ └■

│ └■

└■

scrie ”cmmdc-ul numerelor citite este ”, a

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

int n,a,b;

void main()

{clrscr();

cout<<"n="; cin>>n;

cout<<"dati un numar:"; cin>>a;

cout<<"dati un numar:"; cin>>b;

while(a!=b)

if(a>b)

a=a-b;

else

b=b-a;

for(int i=3;i<=n;i++)

{

cout<<"dati un numar:"; cin>>b;

while(a!=b)

if(a>b)

a=a-b;

else

b=b-a;

}

cout<<"cmmdc dintre numerele date este ",a;

getch();

}

Aplicaţii practice

1. Se dau două numere naturale a şi b. Dacă cele două numere sunt prime între ele, atunci să se calculeze suma cifrelor celor

două numere, altfel să se descompună în factori primi numărul

mai mare.

Exemplu: Dacă a= 84 şi b=180, nu sunt numere prime între ele, cmmdc(84,180)=12 şi pe ecran

se va afişa descompunerea în factori primi al numărului mai mare 22*3

2*5.

Dacă a=85 şi b=87, sunt prime între ele şi pe ecran va fi afişat 28=8+5+8+7

Page 74: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

2. Afişaţi toate numere prime din intervalul [a, b], unde a şi b sunt două numere naturale mai mici de 10000, şi a<=b.

Exemplu: dacă a a=10 şi b=20 numerele prime din intervalul [10,20] sunt 11, 13, 17 şi 19.

3. Se citeşte un număr natural n,(n<=10000) care nu este număr prim. Se cere să se determine care este cel mai mare număr

prim, dar mai mic decât n şi care este cel mai mic număr prim

dar mai mare cu n.

Exemplu: dacă n este 100, cel mai mare numar prim mai mic decăt 100 este 97, iar cel mai mic

număr prim mai mare decât 100 estr 101.

4. Să se determine toate numerele perechile de numere prime

gemene mai mici decât un număr natural n, citită de la

tastatură (n<=10000). Două numere formează o pereche de numere

prime gemenene.

Exemple: dacă n=20 atunci se vor afişa perechile (3, 5), (5, 7), (11, 13), (17, 19).

5. Se citeşte de la tastaură un număr natural n(n<=10000). Se

cere să se afişeze primele n numere prime.

Exemplu: dacă n=10 atunci primele 10 numere prime sunt 2,3,5,7,11,13,17,19, 23,29.

6. Se citeşte de la tastaură un număr natural n, (n<=10000). Se cere să calculeze suma numerelor divizibile la 3 mai mici sau

egale cu n.

Exemplu: dacă n=16 atunci se va afişa 45, s= 3+6+9+12+15=45.

7. Determinaţi şi afişaţi pe ecran toate numere naturale care

împărţite la 24, 30,18 dau restul 7.

Exemplu: dacă n=2000 se vor afişa numerele 367, 727, 1087, 1447, 1807.

8. Se dau două numere naturale a şi b. Să se afişeze toţi

divizorii comuni celor două numere.

Exemplu: dacă a=180 şi b=84 atunci se vor afisa 1, 2, 3, 4, 6, 12.

9. Se citesc două numere naturale a şi b. Se cere să se determine

dacă sunt numere prime între ele.

Exemplu: Dacă a= 84 şi b=180, nu sunt numere prime între ele, cmmdc(84,180)=12 iar dacă

a=85 şi b=87, sunt prime între ele.

10. Se citeşte de la tastatură un număr natural n, Să se

determine cel mai mic număr natural are are are exact n

divizori.

Exemplu: dacă n=4 atunci se va afişa 6 care are 4 divizori 1, 2, 3, 6.

11. Un număr natural este perfect dacă el este egal cu suma

divizorilor săi mai mici decât el. Scrieţi un program care

verifică dacă un număr este perfect sau nu.

Exemplu: daca n este 6 atunci el este numar perfect 6=1+2+3, daca n este 8 atunci el nu este

număr perfect 1+2+4=7.

12. Se citeşte un număr natural n (n<=1000). Se cere să se

afişeze mulţimea numerelor naturale care sunt prime cu n.

Exemplu: dacă n=20 atunci mulţimea numerelor prime cu 20 este {3, 7, 9, 11, 13, 17, 19}

Page 75: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

13. Se citeşte un număr natural n (n<=1000). Se cere să se

afişeze mulţimea divizorilor săi şi numărul de divizori

proprii.

Exemplu: dacă n=12 atunci mulţimea divizorilor este {1, 2, 3, 4, 6, 12} şi el are 4 divizori

proprii.

14. Se citesc două numere naturale a şi b, care reprezintă

numărătorul şi numitorul unei fracţii b

a. Scrieţi un program

care are drept scop aducerea la forma ireductibilă a fracţiei

date.

Exemplu: dacă a=10 şi b=100. cmmdc(10,100)= 10 rezultă fracţia 10

1.

15. Se citesc n numere naturale de la tastatură. Să se

determine cu câte zerouri se sfârşeşte produsul acestora, fără

a efectua produsul lor.

Exemplu: dacă n=5 şi numerele citite sunt în ordine 23, 48, 15, 25, 34 atunci produsul lor se

termină în 3 zerouri.

16. Două numere întregi x şi y sunt prietene, dacă şi numai

dacă suma divizorilor numărului x este egală cu suma

divizorilor numărului y. Scrieţi un program care afişează

toate numerele prietene din intervalul [a,b].

Exemplu: dacă a=10 şi b=25 numerele prietene sunt (10, 17), (14, 15), (14,23), (15, 23), (16,25).

17. Orice număr par mai mare decât 4 se poate scrie ca sumă de

numere prime. Scrieţi un program care citeşte de la tastatură

un număr natural, par n şi îl descompune ca sumă de numere

prime.

Exemplu: dacă n=292 atunci el se formează din 283+7+2.

18. Se citesc de la tastatură două numere naturale notate n şi

k. Se cere să se afişeze toate numerele mai mic sau egale cu n

care au exact k divizori.

Exemplu: dacă n=10 şi k=2 se vor afisa 2, 3, 5, 7.

19. Se citesc de la tastatură n numere naturale. Se cere să se

determine câte dintre numere citite sunt numere prime şi să se

calculeze suma numerlor care nu sunt prime.

Exemplu: dacă n=7 şi se vor citi numerele 2, 4, 5, 6, 11, 15 atunci se va afişa pe ecran mesajul

„sunt 3 numere prime, iar suma numerelor care nu sunt prime este 25”.

20. Se consideră trei numere naturale n,a şi b (a≤ b≤ n). Să se

creeze un program care permite afişarea factorilor primi ce

aparţin intervalului [a, b] şi a puterilor la care aceştia

apar în descompunerea lui n.

Exemplu: dacă n=36 a=1 şi b=10 se vor afisa: 22 şi 3

2

Page 76: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Conversii între baze de numeraţie

Toate calculele pe care le efectuăm în ziua de azi sunt efectuate în sistemul de numeraţe

zecimal, sau altfel spus în baza 10 de numeraţie. În continuare vom prezenta un algoritm simplu,

didactic, care realizează conversii de numere în una din bazele de numeraţie b 10,2 . În general

un număr scris în baza b are următoarea formă generală:

xn-1xn-2 ...x1x0, x-1x-2...x-m= x*bn-1+x*bn-2

+ ...x*b1+x*b0

+x*b-1+x*b-2

+...x*b-m =

1n

mi

i

i bx ,

unde xi [0,b-1].

Exemplu: dacă b=10 atunci numărul 123,45=1*102+2*10

1+3*10

0+4*10

-1+5*10

-2 .

Conversia din baza 10 în baza b

Trecerea unui număr de la o bază la alta presupune aflarea unei secvenţe unice de resturi

conform algoritmului următor:

numărul se împarte la bază şi se reţine restul obţinut. Acesta constituie ultima

cifră din reprezentarea în acea bază;

câtul obţinut în urma acestei prime împărţiri este din nou împărţit la bază şi se

reţine iaraşi restul. Acest rest constituie a doua cifră, în ordinea de la dreapta la

stânga, a reprezentării în baza aleasă.

algoritmul continuă până când câtul obţinut este zero. Ultimul rest al împărţirii la

bază va reprezenta cea mai semnificativă cifră a numărului în baza în care s-a

facut conversia.

Tabelul următor prezinta paşii acestui algoritm pentru trecerea numarului 25 în baza 2:

Nr. bază

25:2= 25 2 (25)10=(11001)2

rest 1 12 2

0 6 2 Observaţie:

0 3 2 pe fond galben sunt notate

câturile obţinute la fiecare

împărţire la bază 1 1 2

1 0

Pentru ascrie un algoritm care să realizeze această conversie vom proceda astfel:

o citim numărul de transformat

o citim baza în care dorim să facem conversia

o începem să împărţim numărul dat la bază, iar cu resturile obţinute formăm un nou

număr(care de fapt va fi scris după regula sistemului zecimal)

Algoritm în pseudocod:

//conversia din baza 10 în baza b din [2,10]

citeşte n,b // numere naturale, n-numărul de transformat, b-baza

m=0 // va conţine rezultatul conversiei

p=1 // puterile lui 10 iniţial 100=1

┌cât timp n≠0 execută

│ r=n%b // calculez restul împărţirii numărului la bază

│ m=m+r*p // formez valoarea noului număr

│ p=p*10 // cresc puterea lui 10

│ n=n/b // calculez câtul împărţirii numărului la bază

└■

scrie m // valoarea numărului în baza b

Această variantă de algoritm este una didactică şi se utilizează pentru conversii de

numere naturale relativ mici, valoarea variabilei p creşte exponenţial şi nu poate depăşi 10 cifre.

Pentru numere mai mari se vor utiliza alţi algoritmi şi alte tipuri de date pe care îî veţi studia mai

târziu.

Page 77: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Conversia din baza 10 în baza b

De exemplu dacă baza de numeraţie este 2 şi valoarea numărului n=(110011)2 atunci

transformarea lui în baza 10 se face astfel:

(110011)2=1*20+1*2

1+0*2

2+0*2

3+1*2

4+1*2

5=1+2+16+32=(51)10

Operaţia de trecere a unui număr scris în baza b la baza 10 se realizează după următorul

algoritm în pseudocod:

//conversia unui număr n scris baza b, în baza 10

citeşte n,b // n – numărul de transformat, b baza în care este scris n

p=1 // b0=1

m=0 // va contine numarul în baza 10

┌cât timp n≠0 execută

│ c=n%10 // extrag cate o cifra din numarul dat

│ m=m+c*p // formez numarul adunând cifrele extrase din n cu puteri ale

│ // bazei

│ p=p*b // cresc puterea bazei

│ n=n/10 // elimin ultima cifra din n

└■

scrie m // valoarea numărului în baza 10

Pentru a realiza conversia unui număr din baza b1 în baza b2 vom proceda astfel:

o transformăm numărul din baza b1 în baza 10;

o transformam numărul obţinut anterior din baza 10 în baza b2.

Aplicaţii rezolvate

1. Se dă un număr natural n, scris în baza 10. Sa se verifice dacă numărul de cifre de zero este egal cu numărul de cifre de

1 în reprezentarea numărului în baza doi.

Exemplu: dacă n=(49)10 =(110001)2 are trei cifre de 1 şi trei cifre de zero, deci pe ecran trebuie

afişat „Da, numar egal de cifre de 0 şi 1”;

dacă n=(54)10 =(110110)2 are patru cifre de 1 şi două cifre de zero, deci pe ecran trebuie afişat

„Nu, numar diferit de cifre de 0 şi 1”.

Algoritmul în pseudocod este:

citeşte n //număr natural care trebuie transformat în baza 2

m=0 //conţine rezultatul conversiei numărului n în baza 2

nr0=0, nr1=0 //nr0-număr de cifre de 0 şi nr1-număr de cifre de 1 din m

p=1 //100=1

┌cât timp n≠0 execută

│ r = n%2 // determin restul împarţirii lui n la 2, poate fi 0 sau 1

│ ┌dacă r = 0 atunci

│ │ nr0=nr0+1 //număr ca am gasit o cifra de 0

│ │altfel

│ │ nr1=nr1+1 //număr ca am gasit o cifră de 1

│ └■

│ m=m+r*p // formez numărul în baza 2

│ p=p*10 // cresc puterea lui 10

│ n=n/2 // împart n la baza 2

└■

scrie m // afişez valoarea lui n în baza 2

// afişez rezultatul

┌dacă nr0 = nr1 atunci

│ scrie ”Da, are număr egal de cifre de 0 şi 1!”

│altfel

│ scrie ”Nu, numarul de cifre de 0 şi 1 este diferit”

└■

Page 78: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Program C++ Rezultat afişat pe ecran #include< iostream.h>

#include<conio.h>

long n,m,nr0,nr1,r,p;

void main()

{ clrscr();

cout<<"n="; cin>>n;

p=1;

while(n!=0)

{r=r%2;

if(r==0)

nr0++;

else

nr1++;

m=m+r*p;

p=p*10;

n=n/2;

}

cout<<"numarul in baza 2 este "<<m;

cout<<endl;

if(nr0==nr1)

cout<<"Da are un numar egal de

cifre de 0 si 1";

else

cout<<"Nu, are numar diferit

de cifre de 0 si 1";

getch();

}

sau:

2. Se citeşte un număr natural n scris în baza b1. Secieţi un

program care să transforme numărul în baza b2 (b1, b2 numere

naturale din [2,10]) .

Exemplu: dacă n=2301, b1= 4, iar b2= 9 atunci rezultatul va fi: (216)9 adică:

(2301)4=(177)10=(216)9

Algoritmul în pseudocod este:

citeşte n,b1,b2

// transformăm numărul n din baza b1 în baza 10

p=1

m=0 // contine rezultatul conversiei lui n din baza b1 în baza 10

┌cât timp n≠0 execută

│ r = n%10

│ m = m+r*p

│ p = p*b1

│ n = n/10

└■

// transformăm numărul m din baza 10 în baza b2

p=1

n=0 // contine rezultatul conversiei lui m din baza 10 în baza b2

┌cât timp m≠0 execută

│ r = n%b2

│ m = m+r*p

│ p = p*10

│ n = n/b2

└■

scrie n // afişez rezultatul

Page 79: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Program C++ Rezultat afişat pe ecran #include<iostream.h>

#include<conio.h>

long n,m,r,p,b1,b2;

void main()

{ clrscr();

cout<<"Numarul de transformat n=";

cin>>n;

cout<<"Baza in care este scris numarul b1=";

cin>>b1;

cout<<"Baza in care fac conversia b2=";

cin>>b2;

//conversia lui n din b1 in baza 10

p=1;

while(n!=0)

{r=n%10;

m=m+r*p;

p=p*b1;

n=n/10;

}

cout<<"numarul in baza 10 este "<<m<<endl;

//conversia lui m din baza 10 in b2

p=1;

while(n!=0)

{r=m%b2;

n=n+r*p;

p=p*10;

m=m/b2;

}

cout<<"numarul in baza "<<b2<<" este "<<n;

getch();

}

Aplicaţii propuse

1. Se dă un număr natural n. Să se determine dacă este palindrom în baza doi. În caz negativ să se precizeze câte cifre are

numărul iniţial în baza opt.

Exemplu: Un număr natural este palindrom dacă şi numai dacă el este egal cu numărul obţinut

prin inversarea cifrelor sale. Atunci dacă n=(51)10=(110011)2 atunci el este palindrom în baza 2,

iar dacă numărul iniţial este n=(54)10=(110110)2=(66)8 se observă că el nu este palindrom în baza

doi şi conţine două cifre în baza 8.

2. Se citeşte de la tastatură un număr natural scris în baza 2. Să se verifice dacă în baza 10 reprezintă un număr prim.

Exemplu: dacă numărul iniţial este n=(10011)2=(19)10 atunci în baza 10 el este un număr prim,

iar dacă iniţial citim numărul n=(1001110)2=(78)10 atunci observăm uşor că el nu este număr

prim în baza 10.

3. Se dă un număr natural n (n≤125) citit de la tastatură. Să se afişeze toate numerele mai mici decât n, care în baza doi

conţin patru cifre de unu. Să se precizeze la sfârşit câte

numere au îndeplinit condiţia cerută.

Exemplu: dacă n=35 se vor afişa numerele: 15, 23, 27, 29, 30 sunt 5 numere care îndeplinesc

condiţia cerută

4. Se citesc două numere naturale n1 scris în baza b1 şi n2 scris

în baza b2,unde b1,b2<10. Să se determine care număr este mai

mare.

Page 80: Lectia 1 Informatica - noţiuni introductivezecebe.wikispaces.com/file/view/introducere+in+informatica.pdf · rezolvă doar ecuaţia x2 + 5x − 6 = 0 este mai puţin general decât

Exemplu: (245)6<(131)9

5. Se citeşte un număr natural n şi o bază b. Să se verifice dacă numărul poate fi scris în baza b.

Exemplu: dacă n=216 şi b=9 atunci rezultatul este „Da”, iar dacă n=216 şi b=5 atunci rezultatul

este „Nu”

6. Se citeşte un număr natural scris în baza 2, deci format numai din cifre de 0 şi 1 (n≤11111). Să se afişeze valoarea lui în

toate bazele b [3,10].

Exemplu: (1111)2=(120)3=(33)4=(30)5=(23)6=(21)7=(17)8=(16)9=(15)10

7. Se citeşte de la tastaură un număr natural n şi o bază b. Să se verifice dacă numărul n poate fi scris în baza b, iar în

caz afirmativ realizaţi conversia numărului n din baza b în

baza 10.

Exemplu: dacă n=5411 şi b=8 atunci se observă că cea mai mare cifră din n este 5, îndeplineste

condiţia 5≤b, deci poate fi scris în baza b. prin calcul se obţine apoi valoarea (2825)10. Dacă

n=5411 şi b=3 atunci numărul n nu poate fi scris în baza b.

8. Se citeşte un număr natural n, scris în baza 10. Să se

precizeze în ce baze b (b≤10) numărul n nu conţine cifra 0.

Exemplu: dacă n=15 atunci bazele în care n nu conţine cifra 0 sunt [2,10]-{3}. Vezi exemplu de

la problema 6.

9. Se citesc două numere naturale n scris în baza b1 şi m scris în baza b2 (b1,b2 [2,9] ). Scrieţi un program care determină

dacă cele două numere au aceiaşi valoare în baza 10.

Exemplu: dacă n=30, b1=5, m=120, b2=3 în baza 10 ele reprezintă aceiaşi valoare şi anume 15.


Recommended