44
Programarea calculatoarelor Universitatea Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Lect.dr. Adrian Runceanu

Programarea - UCB Sustine Antreprenoriatulrunceanu.utgjiu.ro/wiki/lib/exe/fetch.php?media=docs:... · 2013-03-03 · 2. ALGORITMI 2.1. Algoritmi elementari (numai cu operatia de atribuire)

  • Upload
    others

  • View
    24

  • Download
    0

Embed Size (px)

Citation preview

Programarea calculatoarelor

Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie

Departamentul de Automatică, Energie şi Mediu

Lect.dr. Adrian Runceanu

Curs 2

Algoritmi (continuare)

24.10.2012 Curs - Programarea calculatoarelor 2

2. ALGORITMI

2.1. Algoritmi elementari (numai cu operatia de atribuire)

2.2. Algoritmi cu structura de decizie

2.3. Algoritmi cu structura repetitivă cu test iniţial

2.4. Algoritmi cu structura repetitivă cu test final

24.10.2012 Curs - Programarea calculatoarelor 3

2.1. Algoritmi elementari

PROBLEMA 1 Să se calculeze perimetrul şi aria unui dreptunghi,

ştiind laturile sale. Pas 1: Stabilim care sunt datele de intrare, adică cele care

vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem: Date de intrare: l şi L numere reale ce reprezintă laturile

dreptunghiului. Date de ieşire: p şi A numere reale ce reprezintă

perimetrul, respectiv aria dreptunghiului.

24.10.2012 Curs - Programarea calculatoarelor 4

2.1. Algoritmi elementari

Pas 2: Analiza problemei Stabilim condiţiile pe care trebuie să le

îndeplinească datele de intrare pentru a fi prelucrate în cadrul algoritmului.

În cadrul problemei pe care o avem de rezolvat, cunoaştem formulele pentru calculul perimetrului, respectiv ariei unui dreptunghi dacă se stiu laturile sale:

Perimetru = 2*( latime + Lungime ) Aria = latime * Lungime

24.10.2012 Curs - Programarea calculatoarelor 5

2.1. Algoritmi elementari

Pas 3:

Scrierea algoritmului în pseudocod:

24.10.2012 Curs - Programarea calculatoarelor 6

real l, L, p, A

citeşte l, L

p <- 2 * ( l + L )

scrie ‘Perimetrul dreptunghiului este ‘, p

A <- l * L

scrie ‘Aria dreptunghiului este’, A

stop

2.1. Algoritmi elementari

PROBLEMA 2 Sa se calculeze si sa se afiseze valoarea distantei

intre doua puncte, dandu-se coordonatele acestora: A(x1, y1) si B(x2, y2).

Pas 1: Stabilim care sunt datele de intrare, adică cele care

vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem: Date de intrare: x1, x2, y1 şi y2 numere reale ce reprezintă

coordonatele celor doua puncte. Date de ieşire: d = distanta intre cele doua puncte. 24.10.2012 Curs - Programarea calculatoarelor 7

2.1. Algoritmi elementari

Pas 2: Analiza problemei Stabilim condiţiile pe care trebuie să le

îndeplinească datele de intrare pentru a fi prelucrate în cadrul algoritmului.

În cadrul problemei pe care o avem de rezolvat, cunoaştem formula de calcul pentru aflarea distantei dintre doua puncte in plan:

24.10.2012 Curs - Programarea calculatoarelor 8

)()()()( 21212121 yyyyxxxxd

2.1. Algoritmi elementari

Pas 3:

Scrierea algoritmului în pseudocod:

24.10.2012 Curs - Programarea calculatoarelor 9

real x1, x2, y1, y3, d

citeşte x1, y1, x2, y2

scrie ‘Distanta dintre cele doua este ’, d

stop

)21

()21

()21

()21

( yyyyxxxxd

2.1. Algoritmi elementari

PROBLEMA 3 Se dau două numere reale x şi y. Să se calculeze

următoarele expresii: A = 2 + x - y B = x * A + y C = A – 2 * B + x Pas 1: Stabilim care sunt datele de intrare, şi ce tip de

date reprezintă, împreună cu datele de ieşire. În cazul problemei date, avem: Date de intrare: x şi y numere reale. Date de ieşire: A, B şi C numere reale.

24.10.2012 Curs - Programarea calculatoarelor 10

2.1. Algoritmi elementari

Pas 2: Analiza problemei Stabilim condiţiile pe care trebuie să le

îndeplinească datele de intrare pentru a fi prelucrate în cadrul algoritmului.

În cadrul problemei pe care o avem de rezolvat, cunoaştem formulele pentru fiecărei expresii:

A = 2 + x - y B = x * A + y C = A – 2 * B + x

24.10.2012 Curs - Programarea calculatoarelor 11

2.1. Algoritmi elementari

Pas 3:

Scrierea algoritmului în pseudocod:

24.10.2012 Curs - Programarea calculatoarelor 12

real x, y, A, B, C

citeşte x, y

A <- 2 + x - y

scrie ‘Valoarea expresiei A este ‘, A

B <- x * A + y

scrie ‘Valoarea expresiei B este ‘, B

C <- A – 2 * B + x

scrie ‘Valoarea expresiei C este ‘, C

stop

2. ALGORITMI

2.1. Algoritmi elementari numai cu operatia de atribuire)

2.2. Algoritmi cu structura de decizie

2.3. Algoritmi cu structura repetitivă cu test iniţial

2.4. Algoritmi cu structura repetitivă cu test final

24.10.2012 Curs - Programarea calculatoarelor 13

2.2. Algoritmi cu structura de decizie

PROBLEMA 4 Se dau trei numere întregi a, b si c. Să se scrie un

algoritm care să se determine maximul și minimul acestor valori.

Pas 1: Stabilim care sunt datele de intrare, adică cele care

vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem: Date de intrare: a, b și c numere întregi Date de ieșire: min, resp. max. 24.10.2012 Curs - Programarea calculatoarelor 14

2.2. Algoritmi cu structura de decizie

Pas 2: Analiza problemei Stabilim condiţiile pe care trebuie să le

îndeplinească datele de intrare pentru a fi prelucrate în cadrul algoritmului.

i) Comparăm primele două numere (a și b). În funcție de

care este mai mic sau mai mare am determinat minimul și maximul celor două valori.

ii) Comparăm valorile de minim, respectiv de maxim cu cel de-al treilea număr si astfel vom determina cea mai mică, respectiv cea mai mare valoare dintre cele trei date.

24.10.2012 Curs - Programarea calculatoarelor 15

2.2. Algoritmi cu structura de decizie

Pas 3:

Scrierea algoritmului în pseudocod:

24.10.2012 Curs - Programarea calculatoarelor 16

intreg a, b, c, min, max

citeşte a, b, c

dacă a < b atunci

min <- a

max <- b

altfel

min <- b

max <- a

sfârşit dacă

dacă c < min atunci

min <- c

sfarşit dacă

dacă c > max atunci

max <- c

sfarşit dacă

scrie min, max

stop

2.2. Algoritmi cu structura de decizie

PROBLEMA 5 Să se calculeze valoarea funcţiei f(x), ştiind că x este un

număr real introdus de la tastatură: Pas 1: Stabilim care sunt datele de intrare, adică cele care vor fi

prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire. În cazul problemei date, avem: Date de intrare: x număr real Date de iesire: f număr real, reprezentând valoarea funcţiei date.

24.10.2012 Curs - Programarea calculatoarelor 17

0,2

]0,7(,30

]7,(,206

)(

xdacax

xdacax

xdacax

xf

2.2. Algoritmi cu structura de decizie

Pas 2: Analiza problemei Stabilim condiţiile pe care trebuie să le

îndeplinească datele de intrare pentru a fi prelucrate în cadrul algoritmului. Căutăm cazurile particulare.

În cadrul problemei pe care o avem de rezolvat, verificăm condiţiile date în expresia funcţiei:

1) Dacă x <= -7, atunci funcţia are valoarea: -6x + 20 2) Daca x > -7 si x <= 0, atunci funcţia are valoarea:

x+30 3) Daca x > 0, atunci funcţia are valoarea: sqrt(x) + 2 24.10.2012 Curs - Programarea calculatoarelor 18

2.2. Algoritmi cu structura de decizie

Pas 3:

Scrierea algoritmului în pseudocod:

24.10.2012 Curs - Programarea calculatoarelor 19

real x, f

citeşte x

dacă x <= -7 atunci

f <- -6 * x + 20

altfel

dacă x > -7 şi x <= 0 atunci

f <- x + 30

altfel

f <- sqrt(x) + 2

sfârşit dacă

sfarşit dacă

scrie f

stop

2.2. Algoritmi cu structura de decizie PROBLEMA 6 Să se citească trei valori naturale a, b și c. Să se scrie un

algoritm care să verifice dacă cele trei numere sunt sau nu numere pitagorice.

Precizare: Numim numere pitagorice, trei valori care îndeplinesc Teorema lui Pitagora, adică verifică una din condițiile:

Pas 1: Stabilim care sunt datele de intrare, adică cele care vor fi

prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire. În cazul problemei date, avem: Date de intrare: a, b și c numere naturale Date de ieşire: mesaj corespunzător

24.10.2012 Curs - Programarea calculatoarelor 20

222

222

222

bac

cab

cba

2.2. Algoritmi cu structura de decizie

Pas 2: Analiza problemei Stabilim condiţiile pe care trebuie să le

îndeplinească datele de intrare pentru a fi prelucrate în cadrul algoritmului.

În cadrul problemei pe care o avem de rezolvat, verificăm condiţiile care trebuie îndeplinite de cele trei valori:

1) Dacă 𝒂𝟐 = 𝒃𝟐 + 𝒄𝟐, atunci sunt numere pitagorice. Sau 2) Daca 𝒃𝟐 = 𝒂𝟐 + 𝒄𝟐, atunci sunt numere pitagorice. Sau 3) Daca 𝒄𝟐 = 𝒂𝟐 + 𝒃𝟐, atunci sunt numere pitagorice.

24.10.2012 Curs - Programarea calculatoarelor 21

2.2. Algoritmi cu structura de decizie

Pas 3:

Scrierea algoritmului în pseudocod:

24.10.2012 Curs - Programarea calculatoarelor 22

natural a,b,c citeşte a,b,c dacă 𝑎2 = 𝑏2 + 𝑐2 atunci scrie ‘Numere pitagorice’ altfel dacă 𝑏2 = 𝑎2 + 𝑐2 atunci scrie ‘Numere pitagorice’ altfel dacă 𝑐2 = 𝑎2 + 𝑏2 atunci

scrie ‘Numere pitagorice’ altfel scrie ‘NU SUNT nr. pitagorice’ sfârşit dacă sfarşit dacă sfarşit dacă stop

2.2. Algoritmi cu structura de decizie

Varianta II-a

Pas 3:

Scrierea algoritmului în pseudocod:

24.10.2012 Curs - Programarea calculatoarelor 23

natural a,b,c citeşte a,b,c dacă 𝑎2 = 𝑏2 + 𝑐2 sau 𝑏2 = 𝑎2 + 𝑐2 sau 𝑐2 = 𝑎2 + 𝑏2 atunci

scrie ‘Numere pitagorice’ altfel scrie ‘NU SUNT nr. pitagorice’ sfarşit dacă stop

2. ALGORITMI

2.1. Algoritmi elementari (numai cu operatia de atribuire)

2.2. Algoritmi cu structura de decizie

2.3. Algoritmi cu structura repetitivă cu test iniţial

2.4. Algoritmi cu structura repetitivă cu test final

24.10.2012 Curs - Programarea calculatoarelor 24

2.3. Algoritmi cu structura repetitivă cu test iniţial

PROBLEMA 7 Să se citească un număr natural n. Să se scrie un

algoritm care afişează toţi divizorii numărului dat. Exemplu: Pentru n = 12, mulţimea divizorilor este formată

din valorile 1, 2, 3, 4, 6, 12. Pas 1: Stabilim care sunt datele de intrare, adică cele care

vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem: Date de intrare: n număr natural Date de ieşire: divizorii numărului n

24.10.2012 Curs - Programarea calculatoarelor 25

2.3. Algoritmi cu structura repetitivă cu test iniţial

Pas 2: Analiza problemei În cadrul problemei pe care o avem de

rezolvat, verificăm condiţia ca un număr să fie divizor al altui număr şi anume:

i este divizor al numărului n dacă se împarte exact la el, adică dacă este adevărată expresia n % i = 0.

Pentru a găsi toţi divizorii numărului n dat, vom da valori lui i, pornind de la valoarea 1 până la valoarea n.

Deci vom utiliza o structură repetitiva. 24.10.2012 Curs - Programarea calculatoarelor 26

2.3. Algoritmi cu structura repetitivă cu test iniţial

24.10.2012 Curs - Programarea calculatoarelor 27

Pas 3:

Scrierea algoritmului în pseudocod:

natural n, i citeşte n i <- 1 cât timp i <= n execută dacă n % i = 0 atunci scrie i sfârşit dacă i <- i + 1 sfârşit cât timp stop

2.3. Algoritmi cu structura repetitivă cu test iniţial

PROBLEMA 8 Să se citească un număr natural n. Să se scrie un algoritm

care verifică dacă numărul dat este sau nu număr prim. Un număr n este prim dacă are ca divizori doar valorile 1

şi n. Exemplu: Pentru n = 7, se va afişa mesajul ‘numărul este prim’, iar pentru n = 22, se va afişa mesajul ‘numărul NU este

prim’. Pas 1: Stabilim care sunt datele de intrare, adică cele care

vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem: Date de intrare: n număr natural Date de ieşire: număr prim sau nu.

24.10.2012 Curs - Programarea calculatoarelor 28

2.3. Algoritmi cu structura repetitivă cu test iniţial

Pas 2: Analiza problemei: 1) Vom presupune, la începutul problemei, că numărul n

dat este prim, şi vom specifica acest lucru cu ajutorul unei variabile de tip logic, căreia îi vom da valoarea ‘adevărat’.

2) Apoi vom evalua, pe rând, toate valorile începând cu valoarea 2 şi până la n-1, ca să determinăm dacă sunt divizori ai numărului n dat.

3) Dacă găsim un singur divizor printre aceste numere, atunci vom acorda valoarea ‘fals’ variabilei de tip logic de la începutul algoritmului.

4) La sfârşit vom verifica care este valoarea variabilei de tip logic şi vom afişa un mesaj corespunzător. 24.10.2012 Curs - Programarea calculatoarelor 29

2.3. Algoritmi cu structura repetitivă cu test iniţial

24.10.2012 Curs - Programarea calculatoarelor 30

Pas 3:

Scrierea algoritmului în pseudocod:

natural n, i logic p citeşte n p <- adevărat i <- 2 cât timp i <= n-1 execută dacă n % i = 0 atunci p <- fals sfârşit dacă i <- i + 1 sfârşit cât timp dacă p = adevărat atunci scrie ‘Numarul este prim’ altfel scrie ‘Numarul NU este prim’ sfârşit dacă stop

2.3. Algoritmi cu structura repetitivă cu test iniţial

PROBLEMA 9 Să se calculeze suma şi produsul primelor n numere

naturale, n fiind introdus de la tastatură. Exemplu: Pentru n = 5, se vor afişa valorile s = 1 + 2 + 3 + 4 + 5 = 15 p = 1 * 2 * 3 * 4 * 5 = 120 Pas 1: Stabilim care sunt datele de intrare, adică cele care vor fi

prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem: Date de intrare: n număr natural Date de ieşire: s şi p.

24.10.2012 Curs - Programarea calculatoarelor 31

2.3. Algoritmi cu structura repetitivă cu test iniţial

Pas 2: Analiza problemei

La începutul problemei, vom iniţializa două valori, s pentru sumă cu 0 şi p pentru produs cu 1.

Apoi vom verifica, pe rând, toate valorile naturale de la 1 la n şi le vom însuma, respectiv înmulţi.

Soluţiile obţinute le vom afişa.

24.10.2012 Curs - Programarea calculatoarelor 32

2.3. Algoritmi cu structura repetitivă cu test iniţial

24.10.2012 Curs - Programarea calculatoarelor 33

Pas 3:

Scrierea algoritmului în pseudocod:

natural n, i, s, p citeşte n s <- 0 p <- 1 i <- 1 cât timp i <= n execută s <- s + i p <- p * i i <- i + 1 sfârşit cât timp scrie ‘Suma numerelor este’, s scrie ‘Produsul numerelor este’, p stop

2. ALGORITMI

2.1. Algoritmi elementari (numai cu operatia de atribuire)

2.2. Algoritmi cu structura de decizie

2.3. Algoritmi cu structura repetitivă cu test iniţial

2.4. Algoritmi cu structura repetitivă cu test final

24.10.2012 Curs - Programarea calculatoarelor 34

2.4. Algoritmi cu structura repetitivă cu test final

PROBLEMA 10 Să se scrie un program care verifică dacă un număr n

este perfect sau nu. Un număr perfect este egal cu suma divizorilor lui,

inclusiv 1 (exemplu: 6 = 1 + 2 + 3). Exemplu: Pentru n = 28, se va afişa mesajul Numar perfect

(divizorii lui 28 sunt 1,2,4,7,14) Pas 1: Stabilim care sunt datele de intrare, adică cele care

vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem: Date de intrare: n număr natural Date de ieşire: mesaj corepunzător

24.10.2012 Curs - Programarea calculatoarelor 35

2.4. Algoritmi cu structura repetitivă cu test final

Pas 2: Analiza problemei

1) La începutul problemei, vom verifica initializa o variabila de tip suma cu valoarea 0.

2) Pentru fiecare valoare i de la 1 la n-1 o vom verifica dacă i este divizor al numarului n. Daca este divizor atunci il insumam la valoarea s.

3) Verificam daca suma obtinuta este egala cu numarul n. Daca da atunci scriem mesajul ‘Numarul este perfect’.

24.10.2012 Curs - Programarea calculatoarelor 36

2.4. Algoritmi cu structura repetitivă cu test final

24.10.2012 Curs - Programarea calculatoarelor 37

Pas 3:

Scrierea algoritmului în pseudocod:

natural n, i, s citeşte n i <- 1 s<- 0 repetă dacă n % i = 0 atunci s <- s + i sfârşit dacă i <- i + 1 până când i > n-1 dacă s = n atunci scrie ‘Numarul este perfect’ altfel scrie ‘Numarul NU este perfect’ sfârşit dacă stop

2.4. Algoritmi cu structura repetitivă cu test final

PROBLEMA 11 Fie şirul lui Fibonacci, definit astfel: f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) în cazul în care n>1. Să se scrie un algoritm care implementează valorile

şirului lui Fibonacci. Exemplu: Pentru n = 7, se vor afişa valorile 1, 1, 2, 3, 5, 8, 13. Pas 1: Stabilim care sunt datele de intrare, adică cele care

vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem: Date de intrare: n număr natural Date de ieşire: numerele din şirul lui Fibonacci

24.10.2012 Curs - Programarea calculatoarelor 38

2.4. Algoritmi cu structura repetitivă cu test final

Pas 2: Analiza problemei

La începutul problemei, vom iniţializa două valori (a şi b) cu primele două elemente ale şirului lui Fibonacci, adică cu valori de 1.

Apoi, într-un ciclu repetitiv vom calcula cu ajutorul unei a treia valori (variabila c) suma lor şi vom da următoarele valori variabilelor a şi b.

24.10.2012 Curs - Programarea calculatoarelor 39

2.4. Algoritmi cu structura repetitivă cu test final

24.10.2012 Curs - Programarea calculatoarelor 40

Pas 3:

Scrierea algoritmului în pseudocod:

natural n, i, a, b, c citeşte n i <- 1 a <- 1 b <- 1 repetă c <- a + b scrie c a <- b b <- c i <- i + 1 până când i > n stop

2.4. Algoritmi cu structura repetitivă cu test final

PROBLEMA 12 Fie un număr natural n de cinci cifre. Să se scrie un

algoritm care să calculeze suma cifrelor numărului dat. Exemplu: Pentru n = 2178, se va afişa valoarea s = 2+1+7+8=18. Pas 1: Stabilim care sunt datele de intrare, adică cele care

vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem: Date de intrare: n număr natural Date de ieşire: s = suma cifrelor

24.10.2012 Curs - Programarea calculatoarelor 41

2.4. Algoritmi cu structura repetitivă cu test final

Pas 2: Analiza problemei

La începutul problemei, vom iniţializa valoarea sumei cifrelor numărului n dat cu 0.

Apoi, într-un ciclu repetitiv vom calcula suma cifrelor numărului, ştiind că o cifră a unui număr scris în baza 10 este dată de n%10, iar câtul este dat de n/10.

24.10.2012 Curs - Programarea calculatoarelor 42

2.4. Algoritmi cu structura repetitivă cu test final

24.10.2012 Curs - Programarea calculatoarelor 43

Pas 3:

Scrierea algoritmului în pseudocod:

natural n, s citeşte n s <- 0 repetă s <- s + n%10 n <- n/10 până când n = 0 scrie n stop

Sfârşit capitol!

24.10.2012 Curs - Programarea calculatoarelor 44