View
31
Download
0
Category
Preview:
Citation preview
Programarea calculatoarelor
#2
Adrian Runceanuwww.runceanu.ro/adrian
2016
C++Algoritmi (Partea a II-a)
copyright@www.adrian.runceanu.ro
Curs 2
Algoritmi(continuare)
02.11.2016 Curs - Programarea calculatoarelor 2
copyright@www.adrian.runceanu.ro
2. ALGORITMI
2.1. Algoritmi elementari (numai cu operatia de atribuire)
2.2. Algoritmi cu structura de decizie2.3. Algoritmi cu structura repetitivă cu test iniţial2.4. Algoritmi cu structura repetitivă cu test final2.5. Algoritmi cu structura repetitivă cu număr
cunoscut de pași
02.11.2016 Curs - Programarea calculatoarelor 3
copyright@www.adrian.runceanu.ro
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 carevor fi prelucrate cu ajutorul algoritmului, împreună cudatele 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.02.11.2016 Curs - Programarea calculatoarelor 4
copyright@www.adrian.runceanu.ro
2.1. Algoritmi elementari
Pas 2: Analiza problemeiStabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fi prelucrate încadrul algoritmului.
În cadrul problemei pe care o avem de rezolvat,cunoaştem formulele pentru calculul perimetrului,respectiv ariei unui dreptunghi dacă se stiu laturilesale:
Perimetru = 2*( latime + Lungime )Aria = latime * Lungime
02.11.2016 Curs - Programarea calculatoarelor 5
2.1. Algoritmi elementari
Pas 3:Scriereaalgoritmului în pseudocod:
02.11.2016 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
copyright@www.adrian.runceanu.ro
2.1. Algoritmi elementariPROBLEMA 2
Sa se calculeze si sa se afiseze valoarea distanteiintre 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 puncte02.11.2016 Curs - Programarea calculatoarelor 7
copyright@www.adrian.runceanu.ro
2.1. Algoritmi elementari
Pas 2: Analiza problemeiStabilim 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 aflareadistantei dintre doua puncte in plan:
02.11.2016 Curs - Programarea calculatoarelor 8
)()()()( 21212121 yyyyxxxxd
2.1. Algoritmi elementari
Pas 3:Scriereaalgoritmului în pseudocod:
02.11.2016 Curs - Programarea calculatoarelor 9
real x1, x2, y1, y2, d
citeşte x1, y1, x2, y2
scrie ‘Distanta dintre cele doua puncteeste ’, d
stop
)21
()21
()21
()21
( yyyyxxxxd
copyright@www.adrian.runceanu.ro
2.1. Algoritmi elementari
PROBLEMA 3 Se dau două numere reale x şi y. Să se calculeze
următoarele expresii:A = 2 + x - yB = x * A + yC = A - 2 * B + x
Pas 1: Stabilim care sunt datele de intrare, şi ce tip de datereprezintă, împreună cu datele de ieşire.
În cazul problemei date, avem:Date de intrare: x şi y numere realeDate de ieşire: A, B şi C numere reale
02.11.2016 Curs - Programarea calculatoarelor 10
copyright@www.adrian.runceanu.ro
2.1. Algoritmi elementari
Pas 2: Analiza problemeiStabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fiprelucrate în cadrul algoritmului.
În cadrul problemei pe care o avem de rezolvat,cunoaştem formulele pentru fiecare expresie:
A = 2 + x - y B = x * A + yC = A - 2 * B + x
02.11.2016 Curs - Programarea calculatoarelor 11
2.1. Algoritmi elementari
Pas 3:Scriereaalgoritmului în pseudocod:
02.11.2016 Curs - Programarea calculatoarelor 12
real x, y, A, B, C
citeşte x, y
A <- 2 + x - y
B <- x * A + y
C <- A - 2 * B + x
scrie ‘Valoarea expresiei A este ‘, A
scrie ‘Valoarea expresiei B este ‘, B
scrie ‘Valoarea expresiei C este ‘, C
stop
copyright@www.adrian.runceanu.ro
2. ALGORITMI
2.1. Algoritmi elementari numai cu operatia de atribuire)
2.2. Algoritmi cu structura de decizie2.3. Algoritmi cu structura repetitivă cu test iniţial2.4. Algoritmi cu structura repetitivă cu test final2.5. Algoritmi cu structura repetitivă cu număr
cunoscut de pași
02.11.2016 Curs - Programarea calculatoarelor 13
copyright@www.adrian.runceanu.ro
2.2. Algoritmi cu structura de decizie
PROBLEMA 4 Se dau trei numere întregi a, b si c. Să se scrie unalgoritm care să se determine maximul și minimulacestor valori.
Pas 1: Stabilim care sunt datele de intrare, adică cele carevor fi prelucrate cu ajutorul algoritmului, împreună cudatele de ieşire.
În cazul problemei date, avem:Date de intrare: a, b și c numere întregiDate de ieșire: min, respectiv max02.11.2016 Curs - Programarea calculatoarelor 14
copyright@www.adrian.runceanu.ro
2.2. Algoritmi cu structura de decizie
Pas 2: Analiza problemeiStabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fi prelucrate încadrul algoritmului.
i) Comparăm primele două numere (a și b). În funcție decare este mai mic sau mai mare am determinat minimulși maximul celor două valori.
ii) Comparăm valorile de minim, respectiv de maxim cu celde-al treilea număr si astfel vom determina cea maimică, respectiv cea mai mare valoare dintre cele treidate.
02.11.2016 Curs - Programarea calculatoarelor 15
copyright@www.adrian.runceanu.ro
2.2. Algoritmi cu structura de decizie
Pas 3:Scriereaalgoritmuluiîn pseudocod:
02.11.2016 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 5Să 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 prelucratecu ajutorul algoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:Date de intrare: x număr realDate de iesire: f număr real, reprezentând valoarea funcţiei date
02.11.2016 Curs - Programarea calculatoarelor 17
0,2
]0,7(,30
]7,(,206
)(
xdacax
xdacax
xdacax
xf
copyright@www.adrian.runceanu.ro
2.2. Algoritmi cu structura de decizie
Pas 2: Analiza problemeiStabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fiprelucrate în cadrul algoritmului. Căutăm cazurileparticulare.
Î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 + 202) Daca x > -7 si x <= 0, atunci funcţia are valoarea:
x+303) Daca x > 0, atunci funcţia are valoarea: sqrt(x) + 2
02.11.2016 Curs - Programarea calculatoarelor 18
2.2. Algoritmi cu structura de decizie
Pas 3:Scriereaalgoritmului în pseudocod:
02.11.2016 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
copyright@www.adrian.runceanu.ro
2.2. Algoritmi cu structura de decizie
PROBLEMA 6Să 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:
02.11.2016 Curs - Programarea calculatoarelor 20
222
222
222
bac
cab
cba
copyright@www.adrian.runceanu.ro
2.2. Algoritmi cu structura de decizie
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
02.11.2016 Curs - Programarea calculatoarelor 21
copyright@www.adrian.runceanu.ro
2.2. Algoritmi cu structura de decizie
Pas 2: Analiza problemeiStabilim condiţiile pe care trebuie să le îndeplinească
datele de intrare pentru a fi prelucrate în cadrulalgoritmului.
În cadrul problemei pe care o avem de rezolvat,verificăm condiţiile care trebuie îndeplinite de cele treivalori:
1) Dacă 𝒂𝟐 = 𝒃𝟐 + 𝒄𝟐, atunci sunt numere pitagorice.Sau2) Daca 𝒃𝟐 = 𝒂𝟐 + 𝒄𝟐, atunci sunt numere pitagorice.Sau3) Daca 𝒄𝟐 = 𝒂𝟐 + 𝒃𝟐, atunci sunt numere pitagorice.02.11.2016 Curs - Programarea calculatoarelor 22
copyright@www.adrian.runceanu.ro
2.2. Algoritmi cu structura de decizie
Pas 3:Scriereaalgoritmuluiîn pseudocod:
02.11.2016 Curs - Programarea calculatoarelor 23
natural a,b,cciteşte a,b,cdacă 𝑎2 = 𝑏2 + 𝑐2 atunci
scrie ‘Numere pitagorice’altfel
dacă 𝑏2 = 𝑎2 + 𝑐2 atunciscrie ‘Numere pitagorice’
altfeldacă 𝑐2 = 𝑎2 + 𝑏2 atunci
scrie ‘Numere pitagorice’altfel
scrie ‘NU SUNT nr. pitagorice’sfârşit dacă
sfarşit dacăsfarşit dacăstop
copyright@www.adrian.runceanu.ro
2.2. Algoritmi cu structura de decizie
Varianta II-aPas 3:
Scriereaalgoritmuluiîn pseudocod:
02.11.2016 Curs - Programarea calculatoarelor 24
natural a,b,cciteşte a,b,cdacă 𝑎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
copyright@www.adrian.runceanu.ro
2. ALGORITMI
2.1. Algoritmi elementari (numai cu operatia de atribuire)
2.2. Algoritmi cu structura de decizie2.3. Algoritmi cu structura repetitivă cu test iniţial2.4. Algoritmi cu structura repetitivă cu test final2.5. Algoritmi cu structura repetitivă cu număr
cunoscut de pași
02.11.2016 Curs - Programarea calculatoarelor 25
copyright@www.adrian.runceanu.ro
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:
02.11.2016 Curs - Programarea calculatoarelor 26
Pentru n = 12, mulţimea divizorilor este formată din valorile 1, 2, 3, 4, 6, 12.
copyright@www.adrian.runceanu.ro
2.3. Algoritmi cu structura repetitivă cu test iniţial
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
02.11.2016 Curs - Programarea calculatoarelor 27
copyright@www.adrian.runceanu.ro
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ă repetitivă.
02.11.2016 Curs - Programarea calculatoarelor 28
2.3. Algoritmi cu structura repetitivă cu test iniţial
02.11.2016 Curs - Programarea calculatoarelor 29
Pas 3:
Scriereaalgoritmului în pseudocod:
natural n, iciteşte ni <- 1cât timp i <= n execută
dacă n % i = 0 atunciscrie i
sfârşit dacăi <- i + 1
sfârşit cât timpstop
copyright@www.adrian.runceanu.ro
2.3. Algoritmi cu structura repetitivă cu test iniţial
PROBLEMA 8Să se citească un număr natural n. Să se scrie unalgoritm care verifică dacă numărul dat este sau nunumăr prim.Un număr n este prim dacă are ca divizori doarvalorile 1 şi n.
Exemplu:
02.11.2016 Curs - Programarea calculatoarelor 30
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’.
copyright@www.adrian.runceanu.ro
2.3. Algoritmi cu structura repetitivă cu test iniţial
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
02.11.2016 Curs - Programarea calculatoarelor 31
copyright@www.adrian.runceanu.ro
2.3. Algoritmi cu structura repetitivă cu test iniţial
Pas 2: Analiza problemei:1) Vom presupune, la începutul problemei, că numărul n dateste prim, şi vom specifica acest lucru cu ajutorul uneivariabile de tip logic, căreia îi vom da valoarea ‘adevărat’.2) Apoi vom evalua, pe rând, toate valorile începând cuvaloarea 2 şi până la n-1, ca să determinăm dacă sunt divizoriai numărului n dat.3) Dacă găsim un singur divizor printre aceste numere, atuncivom acorda valoarea ‘fals’ variabilei de tip logic de laînceputul algoritmului.4) La sfârşit vom verifica care este valoarea variabilei de tiplogic şi vom afişa un mesaj corespunzător.
02.11.2016 Curs - Programarea calculatoarelor 32
2.3. Algoritmi cu structura repetitivă cu test iniţial
02.11.2016 Curs - Programarea calculatoarelor 33
Pas 3:
Scriereaalgoritmului în pseudocod:
natural n, ilogic pciteşte np <- adevărati <- 2cât timp i <= n-1 execută
dacă n % i = 0 atuncip <- fals
sfârşit dacăi <- i + 1
sfârşit cât timpdacă p = adevărat atunci
scrie ‘Numarul este prim’altfel
scrie ‘Numarul NU este prim’sfârşit dacăstop
copyright@www.adrian.runceanu.ro
2.3. Algoritmi cu structura repetitivă cu test iniţial
PROBLEMA 9Să se calculeze suma şi produsul primelor nnumere naturale, n fiind introdus de latastatură.
Exemplu:
02.11.2016 Curs - Programarea calculatoarelor 34
Pentru n = 5, se vor afişa valoriles = 1 + 2 + 3 + 4 + 5 = 15p = 1 * 2 * 3 * 4 * 5 = 120
copyright@www.adrian.runceanu.ro
2.3. Algoritmi cu structura repetitivă cu test iniţial
Pas 1: Stabilim care sunt datele de intrare, adicăcele care vor fi prelucrate cu ajutorulalgoritmului, împreună cu datele de ieşire. Încazul problemei date, avem:
Date de intrare: n număr natural
Date de ieşire: s şi p
02.11.2016 Curs - Programarea calculatoarelor 35
copyright@www.adrian.runceanu.ro
2.3. Algoritmi cu structura repetitivă cu test iniţial
Pas 2: Analiza problemeiLa începutul problemei, vom iniţializa două
valori, s pentru sumă cu 0 şi p pentru produs cu1.
Apoi vom verifica, pe rând, toate valorilenaturale de la 1 la n şi le vom însuma, respectivînmulţi.
Soluţiile obţinute le vom afişa.
02.11.2016 Curs - Programarea calculatoarelor 36
2.3. Algoritmi cu structura repetitivă cu test iniţial
02.11.2016 Curs - Programarea calculatoarelor 37
Pas 3:
Scriereaalgoritmului în pseudocod:
natural n, i, s, pciteşte ns <- 0p <- 1i <- 1cât timp i <= n execută
s <- s + ip <- p * ii <- i + 1
sfârşit cât timpscrie ‘Suma numerelor este’, sscrie ‘Produsul numerelor este’, pstop
copyright@www.adrian.runceanu.ro
2. ALGORITMI
2.1. Algoritmi elementari (numai cu operatia de atribuire)
2.2. Algoritmi cu structura de decizie2.3. Algoritmi cu structura repetitivă cu test iniţial2.4. Algoritmi cu structura repetitivă cu test final2.5. Algoritmi cu structura repetitivă cu număr
cunoscut de pași
02.11.2016 Curs - Programarea calculatoarelor 38
copyright@www.adrian.runceanu.ro
2.4. Algoritmi cu structura repetitivă cu test final
PROBLEMA 10
Să se scrie un program care verifică dacă unnumăr n este perfect sau nu.Un număr perfect este egal cu suma divizorilor lui,inclusiv 1 (exemplu: 6 = 1 + 2 + 3), mai putin el însuși.
Exemplu:
02.11.2016 Curs - Programarea calculatoarelor 39
Pentru n = 28, se va afişa mesajulNumar perfect (divizorii lui 28 sunt
1,2,4,7,14)
copyright@www.adrian.runceanu.ro
2.4. Algoritmi cu structura repetitivă cu test final
Pas 1: Stabilim care sunt datele de intrare, adicăcele care vor fi prelucrate cu ajutorulalgoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr naturalDate de ieşire: mesaj corespunzător
02.11.2016 Curs - Programarea calculatoarelor 40
copyright@www.adrian.runceanu.ro
2.4. Algoritmi cu structura repetitivă cu test final
Pas 2: Analiza problemei1) 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. Dacaeste divizor atunci il insumam la valoarea s.
3) Verificam daca suma obtinuta este egala cunumarul n. Daca da atunci scriem mesajul‘Numarul este perfect’.
02.11.2016 Curs - Programarea calculatoarelor 41
2.4. Algoritmi cu structura repetitivă cu test final
02.11.2016 Curs - Programarea calculatoarelor 42
Pas 3:
Scriereaalgoritmuluiîn pseudocod:
natural n, i, sciteşte ni <- 1s<- 0repetă
dacă n % i = 0 atuncis <- s + i
sfârşit dacăi <- i + 1
până când i > n-1dacă s = n atunci
scrie ‘Numarul este perfect’altfel
scrie ‘Numarul NU este perfect’sfârşit dacăstop
copyright@www.adrian.runceanu.ro
2.4. Algoritmi cu structura repetitivă cu test final
PROBLEMA 11Fie ş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:
02.11.2016 Curs - Programarea calculatoarelor 43
Pentru n = 7, se vor afişa valorile 1, 1, 2, 3, 5, 8, 13.
copyright@www.adrian.runceanu.ro
2.4. Algoritmi cu structura repetitivă cu test final
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
02.11.2016 Curs - Programarea calculatoarelor 44
copyright@www.adrian.runceanu.ro
2.4. Algoritmi cu structura repetitivă cu test final
Pas 2: Analiza problemeiLa î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 cuajutorul unei a treia valori (variabila c) suma lorşi vom da următoarele valori variabilelor a şi b.
02.11.2016 Curs - Programarea calculatoarelor 45
2.4. Algoritmi cu structura repetitivă cu test final
02.11.2016 Curs - Programarea calculatoarelor 46
Pas 3:
Scriereaalgoritmului în pseudocod:
natural n, i, a, b, cciteşte ni <- 1a <- 1b <- 1repetă
c <- a + bscrie ca <- bb <- ci <- i + 1
până când i > n-2stop
copyright@www.adrian.runceanu.ro
2.4. Algoritmi cu structura repetitivă cu test final
PROBLEMA 12Fie un număr natural n de cinci cifre. Să se
scrie un algoritm care să calculeze suma cifrelornumărului dat.
Exemplu:
02.11.2016 Curs - Programarea calculatoarelor 47
Pentru n = 2178, se va afişa valoareas = 2+1+7+8=18.
copyright@www.adrian.runceanu.ro
2.4. Algoritmi cu structura repetitivă cu test final
Pas 1: Stabilim care sunt datele de intrare, adicăcele care vor fi prelucrate cu ajutorulalgoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr naturalDate de ieşire: s = suma cifrelor
02.11.2016 Curs - Programarea calculatoarelor 48
copyright@www.adrian.runceanu.ro
2.4. Algoritmi cu structura repetitivă cu test final
Pas 2: Analiza problemeiLa î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 unuinumăr scris în baza 10 este dată de n%10, iarcâtul este dat de n/10.
02.11.2016 Curs - Programarea calculatoarelor 49
2.4. Algoritmi cu structura repetitivă cu test final
02.11.2016 Curs - Programarea calculatoarelor 50
Pas 3:
Scriereaalgoritmului în pseudocod:
natural n, sciteşte ns <- 0repetă
s <- s + n%10n <- n/10
până când n = 0scrie sstop
Numarulfara ultima
cifra
Ultimacifra a lui n
copyright@www.adrian.runceanu.ro
2. ALGORITMI
2.1. Algoritmi elementari (numai cu operatia de atribuire)
2.2. Algoritmi cu structura de decizie2.3. Algoritmi cu structura repetitivă cu test iniţial2.4. Algoritmi cu structura repetitivă cu test final2.5. Algoritmi cu structura repetitivă cu număr
cunoscut de pași
02.11.2016 Curs - Programarea calculatoarelor 51
copyright@www.adrian.runceanu.ro
2.5. Algoritmi cu structura repetitivă cu număr cunoscut de pași
PROBLEMA 13Se citesc două numere întregi a şi b. Să se realizeze
in pseudocod un algoritm care să verifice dacă cele douanumere sunt prietene.
Spunem ca două numere sunt prietene dacă sumadivizorilor proprii ai unui număr este egală cu celalalt şiinvers.
Exemplu:
02.11.2016 Curs - Programarea calculatoarelor 52
Pentru n = 220, si m = 284 se vor afişa valorileDivizorii lui 220, sunt 1, 2, 4, 5, 10, 11, 20, 22,44, 55 și 110Divizorii lui 284, sunt 1, 2, 4, 71 și 142
copyright@www.adrian.runceanu.ro
2.5. Algoritmi cu structura repetitivă cu număr cunoscut de pași
Pas 1: Stabilim care sunt datele de intrare, adicăcele care vor fi prelucrate cu ajutorulalgoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n si m numere naturaleDate de ieşire: numerele sunt sau nu prietene
02.11.2016 Curs - Programarea calculatoarelor 53
copyright@www.adrian.runceanu.ro
2.5. Algoritmi cu structura repetitivă cu număr cunoscut de pași
Pas 2: Analiza problemeiLa începutul problemei, vom iniţializa valoarea unei
variabile pentru suma divizorilor lui n cu 0, iar apoivaloarea unei variabile pentru suma divizorilor lui m cu 0.
Apoi, într-un ciclu repetitiv avand n/2 pasi vom calculasuma divizorilor lui n.
Apoi, într-un ciclu repetitiv avand m/2 pasi vom calculasuma divizorilor lui m.
La sfarsit vom verifica daca cele suma divizorilorprimului numar este egala cu cel de-al doilea numar, iarsuma divizorilor celui de-al doilea numar este egala cuprimul numar.
02.11.2016 Curs - Programarea calculatoarelor 54
2.5. Algoritmi cu structura repetitivă cu număr cunoscut de pași
02.11.2016 Curs - Programarea calculatoarelor 55
Pas 3:
Scriereaalgoritmuluiîn pseudocod:
natural n, m, i, j, suma_n, suma_mciteşte nsuma_n <- 0pentru i=1,n/2 execută
daca n%i=0 atuncisuma_n <- suma_n + i
sfârșit dacasfârșit pentru
2.5. Algoritmi cu structura repetitivă cu număr cunoscut de pași
02.11.2016 Curs - Programarea calculatoarelor 56
Pas 3:
Scriereaalgoritmuluiîn pseudocod:
suma_m <- 0pentru j=1,m/2 execută
dacă m%j=0 atuncisuma_m <- suma_m + j
sfârșit dacăsfârșit pentrudacă suma_n = m AND suma_m=natunci
scrie “Numere prietene”altfel
scrie “Numere neprietene”sfârșit dacăstop
copyright@www.adrian.runceanu.ro
2.5. Algoritmi cu structura repetitivă cu număr cunoscut de pași
PROBLEMA 14Se citesc pe rând, n numere naturale. Să se
realizeze, în pseudocod, un algoritm care sădetermine cel mai mare număr dintre cele ndate.
Exemplu:
02.11.2016 Curs - Programarea calculatoarelor 57
Pentru n = 10, si valorile următoare:-2, 12, 56, -123, 34, 7, -45, 90, 23, 6 Valoarea maximă este 90
copyright@www.adrian.runceanu.ro
2.5. Algoritmi cu structura repetitivă cu număr cunoscut de pași
Pas 1: Stabilim care sunt datele de intrare, adicăcele care vor fi prelucrate cu ajutorulalgoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr natural, n numerenaturale
Date de ieşire: valoarea maximă
02.11.2016 Curs - Programarea calculatoarelor 58
copyright@www.adrian.runceanu.ro
2.5. Algoritmi cu structura repetitivă cu număr cunoscut de pași
Pas 2: Analiza problemeiLa începutul problemei, vom iniţializa o variabilă, în
care vom reține valoarea maximă, cu o valoare foartemica, arbitrar aleasă.
Apoi, într-un ciclu repetitiv având n pași vomcompara, pe rând cele n valori citite de la tastatură și vomreține de fiecare valoare mai mare decât cea din variabilamax.
La sfârșit vom avea valoarea cea mai mare în variabilamax.
02.11.2016 Curs - Programarea calculatoarelor 59
2.5. Algoritmi cu structura repetitivă cu număr cunoscut de pași
02.11.2016 Curs - Programarea calculatoarelor 60
Pas 3:
Scriereaalgoritmuluiîn pseudocod:
natural n, i, max, xciteşte nmax <- -10000pentru i=1,n execută
citește xdaca x>max atunci
max <- xsfârșit daca
sfârșit pentruscrie maxstop
copyright@www.adrian.runceanu.ro
Alte probleme propuse spre rezolvare
EnuntCe citesc trei numere naturale nenule. Sa se
verifice daca ele coincid chiar cu valorile 1, 2, si 3.Exemplu:
02.11.2016 Curs - Programarea calculatoarelor 61
Pentru n = 10, si valorile următoare:-2, 12, 56, -123, 34, 7, -45, 90, 23, 6 Valoarea maximă este 90
copyright@www.adrian.runceanu.ro
Alte probleme propuse spre rezolvare
Pas 1: Stabilim care sunt datele de intrare, adicăcele care vor fi prelucrate cu ajutorulalgoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: a,b,c numere natural nenuleDate de ieşire: mesaj corespunzator
02.11.2016 Curs - Programarea calculatoarelor 62
copyright@www.adrian.runceanu.ro
Alte probleme propuse spre rezolvare
Pas 2: Analiza problemei
Pentru a identifica daca cele trei numere citite sunt
chiar egale cu valorile 1, 2 si 3, putem verifica acest
lucru intr-un mod simplu.
Calculam suma si produsul lor si daca obtinem
pentru fiecare din cele doua valori astfel calculate,
valoarea 6, atunci am gasit rezultatul dorit.
02.11.2016 Curs - Programarea calculatoarelor 63
Alte probleme propuse spre rezolvare
02.11.2016 Curs - Programarea calculatoarelor 64
Pas 3:
Scriereaalgoritmuluiîn pseudocod:
natural a, b, c, s, pciteste a, b, cs <- a + b + cp <- a * b * cdaca s = 6 si p = 6 atunci
scrie ‘Numerele citite sunt chiar 1, 2 si3’altfel
scrie ‘Numerele citite un sunt egale cu 1,2 si 3’sfarsit dacastop
copyright@www.adrian.runceanu.ro
Alte probleme propuse spre rezolvare
Problema 2:Se citesc trei numere a,b,c. Sa se verifice daca aceste numere (puse in orice odine) sunt in progresie aritmetica si sa se afiseze ratia progresiei in caz afirmativ.
Problema 3:Se dau trei numere a,b,c. Sa se verifice daca pot reprezenta laturile unui triunghi. In caz afirmativ sa se precizeze ce tip de triunghi este: echilateral, isoscel, dreptunghic sau oarecare.02.11.2016 Curs - Programarea calculatoarelor 65
copyright@www.adrian.runceanu.ro
Referinte bibliograficeBibliografia necesară cursului:
1. Adrian Runceanu, Mihaela Runceanu, Noțiuni de programare înlimbajul C++, Academica Brâncuşi, Târgu-Jiu, 2012, ISBN 978-973-144-550-2, 483 pagini
2. Adrian Runceanu, Programarea şi utilizarea calculatoarelor,Editura Academică Brâncuși Targu-Jiu, 2003
3. Octavian Dogaru, C++ - Teorie şi practică, volumul I, EdituraMirton, Timişoara, 2004
4. O.Catrina, I.Cojocaru, Turbo C+, Editura Teora, Bucureşti, 19935. D.Costea, Iniţiere în limbajul C, Editura Teora, Bucureşti, 19966. K.Jamsa, C++, Editura Teora,19997. K.Jamsa & L.Klander, Totul despre C si C++, Teora, 2004
02.11.2016 Programarea Calculatoarelor - curs 66
Recommended