Programarea Calculatoarelor

Σχετικά έγγραφα
Metode iterative pentru probleme neliniare - contractii

Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.

(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a.

5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE.

Metode de interpolare bazate pe diferenţe divizate

Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi"

Curs 4 Serii de numere reale

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1

Subiecte Clasa a VIII-a

MARCAREA REZISTOARELOR

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor

SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0

Seminar 5 Analiza stabilității sistemelor liniare

Asupra unei inegalităţi date la barajul OBMJ 2006

V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile

riptografie şi Securitate

Esalonul Redus pe Linii (ERL). Subspatii.

Sisteme diferenţiale liniare de ordinul 1

Laborator 1: INTRODUCERE ÎN ALGORITMI. Întocmit de: Claudia Pârloagă. Îndrumător: Asist. Drd. Gabriel Danciu

III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă.

SERII NUMERICE. Definiţia 3.1. Fie (a n ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0

Curs 1 Şiruri de numere reale

R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale.

Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare

a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea

Integrala nedefinită (primitive)

Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro

III. Reprezentarea informaţiei în sistemele de calcul

Aplicaţii ale principiului I al termodinamicii la gazul ideal

Examen AG. Student:... Grupa:... ianuarie 2011


Subiecte Clasa a VII-a

Criptosisteme cu cheie publică III

5.4. MULTIPLEXOARE A 0 A 1 A 2

EDITURA PARALELA 45 MATEMATICĂ DE EXCELENŢĂ. Clasa a X-a Ediţia a II-a, revizuită. pentru concursuri, olimpiade şi centre de excelenţă

Lucrare. Varianta aprilie I 1 Definiţi noţiunile de număr prim şi număr ireductibil. Soluţie. Vezi Curs 6 Definiţiile 1 şi 2. sau p b.

Laborator 6. Integrarea ecuaţiilor diferenţiale

Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor

Instructiunea while. Forma generala: while (expresie) instructiune;

COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005.

Limbaje de Programare Curs 3 Iteraţia. Reprezentare internă. Operatori pe biţi

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice

Problema a II - a (10 puncte) Diferite circuite electrice


FLUXURI MAXIME ÎN REŢELE DE TRANSPORT. x 4

z a + c 0 + c 1 (z a)

1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB

Conice. Lect. dr. Constantin-Cosmin Todea. U.T. Cluj-Napoca

Curs 2 Şiruri de numere reale

a. 11 % b. 12 % c. 13 % d. 14 %

Definiţia generală Cazul 1. Elipsa şi hiperbola Cercul Cazul 2. Parabola Reprezentari parametrice ale conicelor Tangente la conice

Subiecte Clasa a V-a

Capitolul 4. Integrale improprii Integrale cu limite de integrare infinite

Concurs MATE-INFO UBB, 1 aprilie 2017 Proba scrisă la MATEMATICĂ

Lectia VI Structura de spatiu an E 3. Dreapta si planul ca subspatii ane

SEMINARUL 3. Cap. II Serii de numere reale. asociat seriei. (3n 5)(3n 2) + 1. (3n 2)(3n+1) (3n 2) (3n + 1) = a

BARAJ DE JUNIORI,,Euclid Cipru, 28 mai 2012 (barajul 3)

Laborator 11. Mulţimi Julia. Temă

Proiectarea Algoritmilor 2. Scheme de algoritmi Divide & Impera

Principiul incluziunii si excluziunii. Generarea şi ordonarea permutărilor. Principiul porumbeilor. Pri

Ecuatii exponentiale. Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. a x = b, (1)

V O. = v I v stabilizator

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

Toate subiectele sunt obligatorii. Timpul de lucru efectiv este de 3 ore. Se acordă din oficiu 10 puncte. SUBIECTUL I.

Subiecte Clasa a VIII-a

Metode Runge-Kutta. 18 ianuarie Probleme scalare, pas constant. Dorim să aproximăm soluţia problemei Cauchy

Examen AG. Student:... Grupa: ianuarie 2016

Noţiuni introductive

Valori limită privind SO2, NOx şi emisiile de praf rezultate din operarea LPC în funcţie de diferite tipuri de combustibili

Al cincilea baraj de selecţie pentru OBMJ Bucureşti, 28 mai 2015

Principiul Inductiei Matematice.

RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:,

Metode de sortare. Se dau n numere întregi, elemente ale unui vector a. Se cere să se aranjeze elementele vectorului a în ordine crescătoare.

a) (3p) Sa se calculeze XY A. b) (4p) Sa se calculeze determinantul si rangul matricei A. c) (3p) Sa se calculeze A.

T R A I A N ( ) Trigonometrie. \ kπ; k. este periodică (perioada principală T * =π ), impară, nemărginită.

2. Circuite logice 2.4. Decodoare. Multiplexoare. Copyright Paul GASNER

2. Circuite logice 2.2. Diagrame Karnaugh. Copyright Paul GASNER 1

Componente şi Circuite Electronice Pasive. Laborator 3. Divizorul de tensiune. Divizorul de curent

prin egalizarea histogramei

Capitolul 4 PROPRIETĂŢI TOPOLOGICE ŞI DE NUMĂRARE ALE LUI R. 4.1 Proprietăţi topologice ale lui R Puncte de acumulare

Aparate de măsurat. Măsurări electronice Rezumatul cursului 2. MEE - prof. dr. ing. Ioan D. Oltean 1

TEMA 9: FUNCȚII DE MAI MULTE VARIABILE. Obiective:

Să se arate că n este număr par. Dan Nedeianu

3. Momentul forţei în raport cu un punct...1 Cuprins...1 Introducere Aspecte teoretice Aplicaţii rezolvate...4

Cursul Măsuri reale. D.Rusu, Teoria măsurii şi integrala Lebesgue 15

2. Circuite logice 2.5. Sumatoare şi multiplicatoare. Copyright Paul GASNER

CONCURS DE ADMITERE, 17 iulie 2017 Proba scrisă la MATEMATICĂ

Stabilizator cu diodă Zener

Progresii aritmetice si geometrice. Progresia aritmetica.

VII.2. PROBLEME REZOLVATE

Cum folosim cazuri particulare în rezolvarea unor probleme

Functii Breviar teoretic 8 ianuarie ianuarie 2011

Analiza bivariata a datelor

2.1 Sfera. (EGS) ecuaţie care poartă denumirea de ecuaţia generală asferei. (EGS) reprezintă osferă cu centrul în punctul. 2 + p 2

1.3 Baza a unui spaţiu vectorial. Dimensiune

I. Noţiuni introductive

8 Intervale de încredere

Ecuatii trigonometrice

Dreapta in plan. = y y 0

Transcript:

Programarea Calculatoarelor Modul 1: Rezolvarea algoritmică a problemelor Introducere în programare Algoritm Obiectele unui algoritm Date Constante Variabile Expresii Operaţii specifice unui algoritm şi fluxul de execuţie al acestora Scheme logice Simboluri grafice corespunzătoare operaţiilor Exemple de algoritmi rezolvaţi în schemă logică Pseudocod Codificări corespunzătoare operaţiilor Exemple de algoritmi descrişi în pseudocod Probleme propuse şi rezolvate Introducere în programare Să considerăm următorul exemplu. Se defineşte funcţia F(x), unde x este număr real, astfel: x 2-2, x<0 F(x)= 3, x=0 x+2, x>0 Se cere să se scrie un program care să calculeze valoarea acestei funcţii pentru următoarele 100 de valori ale lui x: x = {-3, 0,1,7, 2.23, etc} 100 valori. Pentru a putea rezolva această cerinţă trebuie să vedem mai întâi care sunt etapele rezolvării unei probleme utilizând un program informatic. Etapele rezolvării unei probleme utilizând un program informatic: 1. Formularea clară a problemei: date disponibile prelucrări necesare rezultate dorite 2. Elaborarea algoritmului ce implică analiza detaliată a problemei:

date: sursa (consola/ suport magnetic/ ), semnificaţie, tip (numeric/ alfanumeric), restricţii asupra valorilor rezultate: destinaţie (ecran/imprimantă/suport magnetic / ), mod de prezentare principalele etape de rezolvare (schemă logică sau pseudocod) eventuale restrictii impuse de limbajul de programare în care vom transpune algoritmul 3. Transpunerea algoritmului în limbajul de programare utilizat 4. Rulare şi... din nou etapa 2 dacă nu am obţinut ceea ce trebuia. În cadrul acestui capitol ne vom ocupa de primele două etape, şi anume cea de formulare a problemei şi cea de elaborare a algoritmului, pentru ca pe parcursul următoarelor capitole să detaliem modalităţile de implementare a programelor utilizând limbajul de programare C. Să revenim acum la problema noastră şi să parcurgem prima etapă, cea de formulare clară a problemei: datele disponibile sunt cele 100 de valori de intrare x prelucrări necesare sunt calculul lui F(x) pentru cele 100 de valori ale lui x rezultatele dorite sunt cele 100 de valori ale lui F(x) calculate prin prelucrări. În acest moment putem spune că ştim foarte bine ce avem de făcut. Urmează să vedem mai departe cum anume facem aceasta. Pentru a trece la etapa a doua a rezolvării problemei nostre vom detalia în cele ce urmează noţiunea de algoritm precum şi obiectele acestuia. Algoritm Algoritm - succesiune de etape ce se poate aplica mecanic pentru rezolvarea unei clase de probleme. Cerinţele pe care trebuie să le îndeplinească un algoritm sunt următoarele: Claritate să nu existe ambiguităţi pe parcursul derulării acestuia Generalitate să poată fi aplicat pentru o întreagă clasă de probleme Finitudine să furnizeze rezultatul în timp finit Redactarea unui algoritm se poate face utilizând: Scheme logice Pseudocod În momentul în care vom căpăta suficientă experienţă în programare iar problema de rezolvat nu este foarte complexă putem să ne reprezentăm mental algoritmul ei de rezolvare. Totuşi, în fazele de început sau pentru un algoritm mai complex este foarte indicat să ne schiţăm algoritmul de rezolvare înainte de a ne apuca de implementarea propriu-zisă într-un limbaj de programare. Se practică descrierea algoritmului fie sub formă

grafică (organigrame sau scheme logice), fie folosind un pseudocod, ca un text intermediar între limbajul natural şi un limbaj de programare. O problemă poate avea mai mulţi algoritmi de rezolvare. Cum îl alegem pe cel mai bun şi ce înseamnă cel mai bun algoritm? Pentru a răspunde la această întrebare se va lua în calcul principalul criteriu de optimizare a algoritmului (mimimizarea timpului de execuţie, a memoriei utilizate, etc) şi se va alege, din algoritmii propuşi cel care îndeplineşte cel ami bine acest criteriu. Această etapă este o etapă ce implică o analiză complexă a algoritmilor pe care deocamdată, pe parcursul acestui prim curs de programare, nu o vom lua decât arareori în considerare. Obiecte cu care lucrează algoritmii Date Principalele obiecte ale unui algoritm sunt datele. Ele pot fi: Date de intrare - care sunt cunoscute Date de ieşire - rezultate furnizate După tipul lor, datele pot fi: Întregi: 2, -4 Reale: 3.25 Logice: true şi false adevărat şi fals Caracter: y Şir de caractere: ab23_c Constante În cadrul unui algoritm pot apare constantele, ce sunt date conţinute în program fără a fi citite sau calculate. Un astfel de exemplu este constanta π din matematică. Variabile Programele, şi implicit algoritmii, manipulează (procesează) date. O variabilă este utilizată pentru a stoca (a păstra) o dată. Se numeşte variabilă pentru că valoarea stocată se poate schimba. Putem spune că are un nume unic şi poate avea conţinut diferit. Mai precis, o variabilă este o locaţie de memorie care are un nume şi care păstrează o valoare de un anumit tip. O variabilă este caracterizată prin: Nume Tip Valoarea la un moment dat Locul în memorie (adresa)

Nume variabilă număr Valoare 123 Tipul variabilei int suma -456 int pi 3.1415 double medie -12.734 double Orice variabilă are un nume, conţine o valoare declarată de un anumit tip, valoare memorată mereu la o aceeaşi adresă de memorie De exemplu, în problema propusă anterior, putem păstra valorile datelor de intrare (x1, x2, x3...) într-o variabilă numită x, care va lua pe rând fiecare din aceste valori de intrare. Variabila x este de tip real, se află în memorie de exemplu la adresa 0xFF32 (adresă care rămâne fixă) şi poate avea valoarea 3 la un moment dat. În mod analog, rezultatele ( F(x1), F(x2), F(x3),...) le vom stoca într-o variabilă F tot de tip real. Expresii Expresiile sunt construite utilizând constante, variabile şi operatori. Ele pot fi de mai multe tipuri, la fel ca şi datele: 3*x+7, x<y, etc Operatorii utilizaţi sunt cei matematici (+, -, *, /, mod restul împărţirii întregi), relaţionali (<, >, <=, >=,!= - diferit, == - comparaţie la egalitate), logici (şi ambele adevărate, sau cel puţin una adevărată, not negarea unei expresii). Operaţiile specifice unui algoritm şi fluxul de execuţie al acestora Un algoritm poate efectua operaţii de: Intrare: preluarea unei date de la un dispozitiv de intrare (consola, suport magnetic, etc) Ieşire: trecerea unei date din memorie către un dispozitiv de ieşire (ecran, imprimanta, suport magnetic, etc) Atribuire: x=3; y=x; y=x+y o Operaţia de atribuire se realizează astfel: Se evaluează expresia din dreapta atribuirii Valoarea obţinută este atribuită variabilei din stânga, care îşi pierde vechea valoare Decizie: o întrebare ridicată de programator la un moment dat în program

În programarea structurată apare teorema de structură a lui Bohm şi Jacopini: Orice algoritm poate fi compus din numai trei structuri de calcul: 1. structura secvenţială - secvenţa; 2. structura alternativă - decizia; 3. structura repetitivă - ciclul. Secvenţa este cea mai întâlnită, în cadrul ei instrucţiunile sunt executate în ordinea în care sunt scrise, de sus în jos, secvenţial. Decizia implică o întrebare ridicată de programator la un moment dat în program. In funcţie de răspunsul la întrebare - care poate fi ori Da, ori Nu - programul se continuă pe una din ramuri, executându-se blocul corespunzător de operaţii. Să presupunem că vrem să calculăm funcţia F(x) din exemplu pentru toate numerele întregi de la 1 la 1000. Pentru aceasta ar trebui să folosim o structură repetitivă (care mai poate fi numită şi ciclu, buclă sau iteraţie) pentru a realiza una sau mai multe operaţii ce se repetă (în acest caz calculul unei valori). La acestea sunt bune calculatoarele! Totuşi, ţine de priceperea noastră să scriem astfel de algoritmi, ce conţin structuri repetitive care să poată uşura foarte mult rezolvarea unei clase întregi de probleme) nu doar pentru o valoare fixă, ci pentru orice număr real şi pentru oricâte numere!! Putem deosebi mai multe structuri repetitive: 1. Structura repetitivă cu conditie iniţială este formată din: O condiţie, care se află la început Un bloc de instrucţiuni, care se execută dacă rezultatul evaluării condiţiei este adevărat Se mai numeşte şi structură repetitivă de tip while. 2. Structura repetitivă cu condiţie finală Bloc de instrucţiuni, apoi condiţie. Blocul de instrucţiuni se execută minim o dată, spre deosebire de structura repetitivă cu test iniţial, unde blocul de instrucţiuni era posibil să nu se execute deloc, dacă rezultatul evaluării condiţiei iniţiale era fals. Se mai numeşte şi structură repetitivă de tip do-while. 3. Structura repetitivă cu contor Caz particular al structurii de control cu test iniţial. Utilizează o variabilă pe care o foloseşte ca şi contor şi care: pleacă de la o valoare; ajunge până la o valoare; înaintează cu un pas. Se mai numeşte şi structură repetitivă de tip for.

Scheme logice Schemele logice sunt reprezentări grafice ale algoritmilor. Fiecărei operaţii îi corespunde un simbol grafic: Start/Stop: marchează începutul/ sfârşitul schemei logice START STOP Atribuirea: operaţia prin care unei variabile i se atribuie o valoare. var = expresia Atribuirea: Se evaluează expresia, apoi se atribuie valoarea expresiei variabilei din membrul stâng Operaţia de intrare: programatorul preia de la tastatură una sau mai multe valori (intrări) Citeste x Operaţia de intrare: Prin operaţia de citire (denumită şi operaţia de intrare) se preiau succesiv valori de la tastatură şi se asociază, în ordine, variabilelor specificate. Operaţia de ieşire: afişează pe ecran o valoare (ieşirea) Scrie x Operaţia de ieşire: Operaţia de scriere (denumită şi operaţia de ieşire) presupune evaluarea în ordine a expresiilor specificate şi afişarea pe ecran a valorilor lor pe aceeaşi linie.

Acţiuni nedetaliate: un bloc de operaţii nedetaliat Bloc Bloc operaţii: Se execută operaţia specifică blocului, fără ca această operaţie să fie detaliată. Este utilizat în general pentru operaţii mai complexe, pentru a nu încărca schema logică principală. Acest bloc va fi detaliat după realizarea schemei logice principale. Exemplu: dacă vrem să afişăm primele n numere prime, putem avea un bloc de operatii nedetaliat care testează dacă un număr este prim sau nu. Secvenţa se reprezintă prin simboluri grafice conectate prin săgeţi ce sugerează fluxul operaţiilor (secvenţial): Operaţie 1 Secvenţial Operaţie 2... Operaţie n Secvenţa Se execută în ordine Operaţie 1, apoi Operaţie 2, ş.a.m.d. până la Operaţie n. Decizia (Adevărat) Conditie (Fals)

Decizia Se evaluează Condiţie; Dacă valoarea Condiţiei este adevărat, atunci se merge pe ramura ; Dacă valoarea Condiţiei este fals, se se merge pe ramura. Decizia poate avea una din următoarele forme: Conditie Conditie Bloc Bloc Bloc Forma 1 Forma 2 Forma 1: Se evaluează Condiţie; Dacă valoarea Condiţiei este adevărat, atunci se execută instrucţiunea sau instrucţiunile din Blocul ; Dacă valoarea Condiţiei este fals, nu se petrece nimic. Forma 2: Se evaluează Condiţie; Dacă valoarea Condiţiei este adevărat se execută instrucţiunea sau instrucţiunile din Blocul ; Dacă valoarea Condiţiei este fals se execută instrucţiunea sau instrucţiunile din Blocul. Structura repetitivă cu condiţie iniţială (structură repetitivă de tip while) Structura repetitivă cu condiţie iniţială (structură repetitivă de tip while) Pas 1 : se evaluează Conditie ; Pas 2: dacă valoarea Conditiei este fals (), se iese din instrucţiunea

repetitivă; dacă valoarea expresiei este adevărat (), se execută instrucţiunea sau instrucţiunile din Blocul, apoi se reia de la Pas 1 Bucla Conditie Bloc Structura repetitivă cu condiţie finală (structură repetitivă de tip do-while) Bloc Bucla Conditie Structura repetitivă cu condiţie finală (structură repetitivă de tip do-while) Pas 1 : se execută instrucţiunea sau instrucţiunile din Bloc; Pas 2: se evaluează Conditie; Pas 3: dacă valoarea Conditiei este fals (), se iese din instrucţiunea repetitivă; dacă valoarea expresiei este adevărat () se reia de la Pas 1

Structura repetitivă cu contor (structură repetitivă de tip for) Iniţializare Bucla Conditie Bloc repetitiv Trecere pas urmator Structura repetitivă cu contor (structură repetitivă de tip for) Pas 1: se execută instrucţiunea sau instrucţiunile de iniţializare din blocul Iniţializare. În general, aceasta înseamnă atribuirea unei valori iniţiale unei variabile contor, folosită pentru numărarea (contorizarea) paşilor efectuaţi. Fie această valoare iniţială expresie_1; Pas 2: se evaluează Conditie; În general, aceasta condiţie verifică dacă valoarea variabilei contor este mai mică decât o valoare care poate fi dată sub forma unei expresii. Fie această această expresie expresie_2; Pas 3: o dacă Condiţie nu este adevărată (valoarea variabilei contor este mai mare decât valoarea expresiei expresie_2), atunci se iese din instrucţiunea repetitivă. o dacă este adevărată, (valoarea variabilei contor este mai mică sau egală cu valoarea expresie expresie_2), atunci : se execută instrucţiunea sau instrucţiunile din Blocul repetitiv apoi se execută instrucţiunea sau instrucţiunile din blocul Trecere la pas următor (care de obicei constă în modificarea valorii variabilei contor cu un anumit pas) după care se reia de la Pas 2. Exemple de algoritmi rezolvaţi în schemă logică

Problema 1: Problema cu funcţia F(x) Se defineşte funcţia F(x), unde x este număr real, astfel: x 2-2, x<0 F(x)= 3, x=0 x+2, x>0 Să se scrie un program care să calculeze valoarea acestei funcţii pentru 100 de valori ale lui x. Rezolvare: A două etapă a rezolvării acestei probleme este elaborarea algoritmului ce implică analiza detaliată a problemei: Date: x - valoare reală preluată de la consolă Rezultate: y - valoare reală care va fi afişată pe ecran (însoţită de un text explicativ) Principalele etape de rezolvare citirea datelor (se presupun corecte) calculul valorii lui y în funcţie de intervalul în care se încadrează valoarea x citită repetăm aceste etape pentru cele 100 de valori ale lui x. Pentru a şti câte valori am citit vom folosi o variabilă aşa numită contor (deoarece contorizează, numără). Este o variabilă întreagă şi o vom numi i. Ea porneşte cu valoarea iniţială 0 (atenţie! Să nu uităm acest pas, este important!) şi la fiecare valoare citită îi vom mări valoarea cu 1. Vom continua citirile atâta timp cât i va fi mai mic decât 100. Urmează schema logică ce descrie în detaliu algoritmul propus:

START i = 0 i = i + 1 i < 100 Citeste x 2 x < 0 Scrie y=x*x-2 STOP x == 0 Scrie y=3 Scrie y=x+2 Problema 2: Actualizarea unei valori intregi cu un procent dat: Să se actualizeze o valoare naturală cu un procent dat. Etapele elaborării algoritmului sunt : 1. Formularea problemei: date: o valoare curenta (v) o procent actualizare (p) prelucrare: o calculul valorii actualizate rezultat: o valoarea calculată (r) 2. Analiza detaliată Date: 2 valori preluate de la consolă: v - valoare întreagă, strict pozitivă p - valoare reala, pozitivă (majorare) sau negativă (diminuare) Rezultat: r - valoare reală, strict pozitivă, afişată pe ecran (însoţită de un text explicativ) Principalele etape de rezolvare

citirea datelor (se presupun corecte) calculul valorii actualizate cu formula v + v * p / 100 sau v * (1 + p / 100) afişarea rezultatului Urmează schema logică ce descrie în detaliu algoritmul propus: START Citeste v, p r = v + v * p Scrie Valoarea actualizătă este, r STOP Pentru problemele care urmează vom oferi doar schema logică ce descrie algoritmul. Problema 3: Una dintre cele mai simple probleme este citirea şi scrierea unei valori reale. Date de intrare: x variabilă reala Date de ieşire: acelaşi x. În acest caz rezultatul este chiar data de intrare. START Citeste x Scrie x STOP

Problema 4: Rezolvarea ecuaţiei de grad 1: ax+b=0. Atenţie la cazurile speciale: a egal zero şi/sau b egal zero! Date de intrare: a şi b, variabile reale Date de ieşire: x, variabilă reală START Citeste a,b a = 0 b = 0 Scrie Infinitate de solutii x = -b / a Scrie Nu exista solutii Scrie x STOP

Problema 5: Să se afişeze suma primelor n numere naturale, n citit de la tastatură. Date de intrare: n, variabilă întreagă Date de ieşire: s, variabilă întreagă pozitivă ce stochează suma primelor n numere naturale Variabile auxiliare: i, variabilă naturală de tip contor START Citeste n s = 0 i = 0 i = i + 1 i < n s = s + i Scrie s STOP

Problema 6: Algoritmul lui Euclid care determină cel mai mare divizor comun a doi întregi, prin împărţiri repetate. Date de intrare: a şi b, variabile întregi, pozitive. Se consideră că a este mai mare ca b. Date de ieşire: cmmdc care este calculat în b. Variabile auxiliare: r, variabilă naturală ce păstrează restul împărţirii lui a la b. Atenţie! Dacă la final vrem să afişăm ceva de genul Cel mai mare divizor comun al numerelor: şi vrem să urmeze valorile iniţiale pentru a şi respectiv b, nu vom putea face acest lucru deoarece valorile de intrare ale lui a şi b se pierd, ele modificându-se pe parcursul execuţiei algoritmului. Pentru a rezolva această problemă, vom păstra aceste valori iniţiale în două variabile auxiliare: copie_a şi copie_b, iar la final vom afişa valorile din aceste două variabile. START Citeste a,b r = a % b r > 0 a = b b = r r = a % b Scrie cmmmdc este, b STOP

Pseudocod Un pseudocod este un text intermediar între limbajul natural şi un limbaj de programare. Are mai puţine reguli decât un program şi descrie numai operaţiile de prelucrare (nu şi variabilele folosite). Nu există un pseudocod standardizat sau unanim acceptat. De asemenea, descrierea unor prelucrări în pseudocod se poate face la diferite niveluri de detaliere. Vom descrie în continuare operaţiile unui algoritm într-un posibil pseudocod pe care îl vom folosi în continuare (tabel): Operaţia Start Terminare Atribuire Citire Scriere Decizie Structura repetitivă cu conditie iniţială - while Structura repetitivă cu condiţie finală - do Pseudocod start stop. variabila=valoare; citeste var; scrie var; daca conditie adevarata instructiuni_1; altfel instructiuni_2; atata timp cat conditie adevarata instructiuni; executa instructiuni; atata timp cat conditie adevarata Structura repetitivă cu contor - for pentru contor de la val_initiala la val_finala cu pasul pas instructiuni; Vom face următoarea convenţie: liniile ce conţin instrucţiuni care se execută în interiorul unei bucle sau a unei decizii vor fi indentate (scrise deplasat în interior cu cateva spaţii) faţă de linia pe care începe bucla sau decizia de care aparţin, pentru a pune în evidenţă execuţia acestora în cadrul buclei (deciziei). O altă posibilitate de a marca şi mai puternic este aceea de a grupa aceste linii într-un bloc unitar utilizând acolade: { instrucţiune 1 instrucţiune 2

. instrucţiune 3 } Această ultimă convenţie este foarte asemănătoare cu ceea ce vom întâlni în limbajul C. O altă observaţie este legată de simbolul punct şi virgulă ;, ce apare la sfârşitul instrucţiunilor. În limbajul C prezenţa acestuia este obligatorie, de aceea, pentru a uşura trecerea de la pseudocod la C l-am introdus şi în pseudocod, fără însă ca aici prezenţa lui să fie neapărat obligatorie. Totuşi, în cele ce urmează vom urmări utilizarea acestuia. Exemple de algoritmi descrişi în pseudocod Problema 1: Problema cu functia F(x) start pentru i de la 0 la 100 cu pasul 1 citeste x; daca x < 0 scrie x * x 2; altfel daca x = 0 scrie 3; altfel scrie x + 2; stop. Problema 2: Actualizarea unei valori naturale cu un procent dat start citeste v, p; r = v + v * p; scrie r; stop. Problema 3: Citirea şi scrierea unei valori. start citeste x; scrie x; stop. Problema 4: Rezolvarea ecuaţiei de grad 1: ax+b=0 start citeste a,b; daca a = 0 daca b = 0

altfel stop. scrie Ecuatia are o infinitate de solutii ; altfel scrie Ecuatia nu are nici o solutie ; x = -b / a; scrie x; Problema 5: Să se afişeze suma primelor n numere naturale, n citit de la tastatură. start citeste n; s = 0; pentru i de la 0 la n cu pasul 1 s = s + i; scrie s; stop. Problema 6: Algoritmul lui Euclid care determină cel mai mare divizor comun a doi întregi, prin împărţiri repetate: start citeste a,b; r = a mod b; atata timp cat r > 0 a = b; b = r; r = a mod b; scrie b; stop. Probleme propuse: Problema 1. Interschimbul valorilor a două variabile a şi b. Indicaţie: Atenţie! Trebuie să folosim o variabilă auxiliară. Nu funcţionează a=b şi apoi b=a deoarece deja am pierdut valoarea iniţială a lui a! Problema 2. Rezolvarea ecuaţiei de grad 2: ax 2 +bx+c=0. Indicaţie: Atenţie la cazurile speciale! Dacă a este 0 ecuaţia devine ecuaţie de gradul 1! Problema 3. Să se afişeze în ordine crescătoare valorile a 3 variabile a, b şi c.

Indicaţie: Putem rezolva această problemă comparând două câte două cele 3 variabile. În cazul în care nu sunt în ordine crescătoare interschimbăm valorile lor. O altă variantă este cea în care valorile variabilelor nu se modifică ci doar se afişează aceste valori în ordine crescătoare: Problema 4. Să se calculeze şi să se afişeze suma: S=1+1*2+1*2*3+..+n! Indicaţie: Vom folosi o variabilă auxiliară p în care vom calcula produsul parţial. O altă modalitate este cea în care produsul parţial este actualizat la fiecare pas, fără a mai fi calculat de fiecare dată de la 1: Problema 5. Să se calculeze şi să se afişeze suma cifrelor unui număr natural n. Indicaţie: Vom folosi o variabilă auxiliară c în care vom calcula rând pe rând cifrele. Pentru aceasta vom lua ultima cifră a lui ca rest al împărţirii lui n la 10, după care micşorăm n împărţindu-l la 10 pentru a ne pregăti pentru a calcula următoarea cifră, şamd. Problema 6. Să se calculeze şi să se afişeze inversul unui număr natural n. Indicaţie: Vom folosi o variabilă auxiliară c în care vom calcula rând pe rând cifrele ca în problema anterioară, şi vom construi inversul pe măsură ce calculăm aceste cifre. Problema 7. Să se afişeze dacă un număr natural dat n este prim. Indicaţie: Pentru aceasta vom împărţi numărul pe rând la numerele de la 2 la radical din n (este suficient pentru a testa condiţia de prim, după această valoare numerele se vor repeta). Dacă găsim un număr care să-l împartă exact vom seta o variabilă auxiliară b (numită variabila flag, sau indicator) pe 0. Ea are rolul de a indica că s-a găsit un număr care divide exact pe n. Iniţial presupunem că nu există un astfel de număr, şi deci, b va avea valoarea 1 iniţial. Problema 8. Să se afişeze primele n numere naturale prime. Indicaţie: Folosm algoritmul de la problema anterioară la care adăugăm o variabilă de contorizare numărare, k. Problema 9. Să se descompună în factori primi un număr dat n. Indicaţie: Pentru aceasta vom împărţi numărul pe rând la numerele începând cu 2. Dacă găsim un număr care să-l împartă exact vom împărţi pe n de câte ori se poate la numărul găsit, calculând astfel puterea. În modul acesta nu va mai fi necesar să testăm că numerele la care împărţim sunt prime!

Problema 10. Să se afişeze toate numerele naturale mai mici decât 10000 care se pot descompune în două moduri diferite ca sumă de două cuburi. Indicaţie: Această problemă prezintă foarte bine avantajul utilizării unui calculator în rezolvarea anumitor probleme. Calculăm, pe rând, suma de cuburi a perechilor de numere de la 1 la 21 (cel mai apropiat întreg de radical de ordin 3 din 10000). Căutăm apoi, pentru fiecare sumă, o a doua pereche a cărei sumă de cuburi este aceeaşi. Dacă este o pereche diferită de prima, afişăm numerele. Problema 11. Să se calculeze valoarea minimă, respectiv maximă, dintr-o secvenţă de n numere reale. Indicaţie: Vom utiliza două variabile, max şi min pe care le iniţializăm cu o valoare foarte mică şi respectiv cu o valoare foarte mare. Vom compara pe rând valorile citite cu max şi respectiv cu min, iar dacă găsim o valoare mai mare, respectiv mai mică decât acestea modificăm max (sau min, după cum e cazul) la noua valoare maximă, respectiv minimă. Problema 12. Se dă o secvenţă de n numere întregi pozitive. Să se afişeze cele mai mari numere de 2 cifre care nu se află în secvenţa respectivă. Indicaţie: În cadrul acestei probleme şi a următoarei vom folosi o structură numită vector. Aceasta este utilă atunci când trebuie să memorăm ca date mai multe valori. Numărul acestor valori poate fi variabil iar ele vor fi păstrate sub un acelaşi nume, la adrese consecutive de memorie. Accesarea unei anumite valori se face folosind un index. De exemplu, dacă avem mai multe valori întregi, vom folosi un vector de numere întregi, v. Pentru a accesa prima valoare citită vom folosi notaţia v[0], pentru a doua v[1], şamd. În acest caz vom folosi un vector ca variabilă auxiliară în care vom ţine minte dacă un număr de două cifre a fost citit de la tastatură (v[nr] este 0 dacă nr nu a fost citit şi v[nr] devine 1 dacă nr a fost citit de la tastatură). Iniţial, toate valorile din vector sunt 0. Pentru a afla cele mai mari numere de două cifre care nu sunt în secvenţa citită vom parcurge vectorul v de la coadă (99) la cap până întâlnim două valori zero. Atenţie! În cazul în care nu există una sau două valori de două cifre care să nu aparţină secvenţei citite nu se va afişa nimic! Problema 13. Se dă o secvenţă de n numere întregi, ale căror valori sunt cuprinse în intervalul 0-100. Să se afişeze valorile care apar cel mai des. Indicaţie: Vom utiliza de asemenea un vector în care vom ţine minte de câte ori a apărut fiecare valoare de la 0 la 100 v[nr] reprezintă de câte ori a fost citit nr. Iniţial toate valorile din vector sunt 0. Vom determina apoi valoarea maximă din acest vector, după care, pentru a afişa toate numerele care apar de cele mai multe ori mai parcurgem încă o dată vectorul şi afişăm indicii pentru care găsim valoarea maximă.