2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri...

9

Click here to load reader

Transcript of 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri...

Page 1: 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ

REPREZENTAREA ALGORITMILOR PRIN PSEUDOCOD

13

2. SCHEME LOGICE ŞI PSEUDOCOD

2.1 Reprezentarea algoritmilor prin scheme logice

Primitivele utilizate în schemele logice sunt simboluri grafice, cu funcţiuni (reprezentând procese de calcul) bine precizate. Aceste simboluri sunt unite prin săgeţi (arce) orientate care indică ordinea de execuţie a proceselor de calcul.

Simboluri de început şi sfârşit. Simbolul START desemnează începutul unui

program sau al unui subprogram. Simbolul STOP desemnează sfârşitul unui program sau al unui subprogram. Prezenţa lor este obligatorie.

Simbolul paralelogram: semnifică procese (operaţii) de intrare/ieşire (citirea sau scrierea-afişarea).

Simbolul dreptunghi: semnifică o atribuire (modificarea valorii unei date). Simbolul romb este utilizat pentru decizii. Se testează dacă condiţia din blocul

de decizie este adevărată (A) sau falsă (F). Cu ajutorul acestor simboluri grafice se poate reprezenta orice algoritm. Repetarea unei secvenţe se realizează prin combinarea simbolurilor de decizie

şi de atribuire.

2.2 Reprezentarea algoritmilor prin pseudocod

Pseudocodul este inspirat din limbajele de programare şi reprezintă o punte de legătură între limbajul natural şi limbajele de programare. Nu există un standard pentru regulile lexicale. Pseudocodul utilizează cuvinte cheie (scrise cu majuscule subliniate) cu următoarele semnificaţii:

CITEŞTE a,b AFIŞEAZĂ a,b

a6 Condiţie A

START STOP

F

Page 2: 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ

SCHEME LOGICE ŞI PSEUDOCOD

14

Sfârşit algoritm: SFÂRŞIT Început algoritm: ÎNCEPUT Citire (introducere) date: CITEŞTE lista Scriere (afişare) date: SCRIE lista Atribuire: Structura de decizie (alternativă): DACĂ condiţie ATUNCI acţiune1 ALTFEL acţiune2 Structuri repetitive cu test iniţial: CÂT TIMP condiţie REPETĂ acţiune sau: PENTRU contor=val_iniţ LA val_fin [PAS] REPETĂ acţiune Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ CÂND condiţie

Pe lângă cuvintele cheie, în reprezentarea algoritmilor în pseudocod pot apare

şi propoziţii nestandard a căror detaliere va fi realizată ulterior. În cazul în care se realizează un algoritm modularizat, pot apare cuvintele

cheie: SUBALGORITM nume (lista_intrări) CHEAMĂ nume (lista_valori_efective_de_intrare)

2.3 Exemple

2.3.1 Maximul a trei numere

2.3.1.1 Pseudocodul 1. CITEŞTE a, b, c 2. DACĂ a>b ATUNCI max=a ALTFEL max=b 3. DACĂ c>max ATUNCI max=c 4. AFIŞEAZĂ max

2.3.2 Suma primelor n numere naturale

2.3.2.1 Pseudocodul 1. CITEŞTE n 2. suma=0

Page 3: 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ

EXEMPLE

15

3.CÂT TIMP i<n 3.1 i++ 3.2 suma=suma+i 4. AFIŞEAZĂ suma

2.3.3 Ecuaţia de gradul 2

2.3.3.1 Schema logică

Start

Dacă a=0

Dacă >0

Dacă <0

Scrie “Ec are răd dublă”

x1 = x2

Scrie “Ec are răd compl”

x1,2 = reiim

Dacă b=0

Dacă c=0

Scrie “Ec are două răd

dif” i

re = -b2a

im = -

2a

Scrie “Ec e de gradul unu"

x1 = -c/b

x1,2 = -b

2a x1,2 = -b2a

= b2 – 4ac

Citeşte a, b, c

Stop

Scrie “Ec are o infinitate de soluţii”

Scrie “Ec nu are nici o soluţtie”

u

A

A

A

F

F

F

F A

F A

Page 4: 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ

SCHEME LOGICE ŞI PSEUDOCOD

16

2.3.4 Maximul a 3 numere, calculul unei sume, cmmmc şi cmmdc, factorial - scheme logice

Start

Dacă in

Citeşte n

Stop

fact*=i i++

A F

Scrie “n! =”, fact

i=1 fact=1

Start

Dacă a≠0, b≠0

Citeşte a,b

Stop

cmmmc=a*b r=a%b

a=b b=r

A

Scrie cmmdc, cmmmc

F

r=a%b a=b b=r

Dacă r≠0

cmmmc=a cmmdc= cmmmc/ cmmdc

A

F

cmmmc=0 cmmdc=0

Start

Dacă a>b

Dacă c>max

Citeşte a, b, c

Stop

max=a

max=c

A F

Scrie “Max =” , max

A F

max=b

Start

Dacă im, jn

Citeşte a,b,m,n

Stop

s=s+sin(a+3*i)*cos(b+5*j)

max=c

A F

Scrie “S =” , s

i=1, j=1, s=0

Page 5: 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ

STRUCTURA UNUI PROGRAM ÎN C++

17

3. NOŢIUNI DE BAZĂ

3.1 Structura unui program în C++

Un program C obişnuit are următoarea structură (textul dintre /* şi */ reprezintă comentarii) [1]: /*directive de preprocesare*/ #include <fisier> /*includeri de fişiere sau biblioteci*/ /*atribuirea de nume simbolice şi definiţii de macrocomenzi*/ #define <def.constante> /*directive de compilare condiţionată*/ /*definiţii de tipuri de date*/ typedef int intreg; /*declaraţii de variabile globale*/ /*definiţii de funcţii sau/şi descrierea unor functii*/ int main(void) /*antetul funcţiei principale main*/ { /*începutul corpului funcţiei main*/ /*declaraţii de variabile locale*/ /*instrucţiunile funcţiei principale*/ return 0; /*valoarea returnată de funcţia main*/ } /*sfârşitul corpului funcţiei main*/ /*descrierea funcţiilor care au definiţiile mai sus*/

Precizare: compilatoarele pentru C şi C++ fac distincţie între litere mari şi mici. Un program C++ constă în una sau mai multe funcţii din care numai una

singură este funcţia principală. Fiecare funcţie are un nume; cel al funcţiei principale este main. Celelalte funcţii au nume definite de utilizator.

Un nume (identificator) este o succesiune de litere şi eventual cifre, primul caracter fiind o literă. Literele pot fi a-z, A-Z sau caracterul de subliniere (_). Numai primele 32 caractere sunt luate în seamă.

Pentru ca un fişier text să poată fi considerat un program sursă în limbajul C,

acesta trebuie să conţină minim antetul şi corpul funcţiei principale main, adică: void main() { }

Aceste lucruri se găsesc în orice program C, indiferent de scopul acestuia.

Page 6: 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ

NOŢIUNI DE BAZĂ

18

3.2 Principalele mesaje de avertizare şi eroare ale compilatorului

Tabelul 3.1 Mesaje de avertizare şi eroare Text mesaj (alfabetic) Explicaţii

'…' is assigned a value that is never used

Avertisment: Valoarea calculată nu este folosită nicăieri în continuare.

Bad file name format in include directive

Denumire greşită în directiva de preprocesare.

Compound statement missing }

Caracter ”}” sau ”{” omis la o instrucţiune compusă.

Declaration syntax error

Eroare de sintaxă a declaraţiei.

Declaration terminated incorrectly

Declaraţie terminată incorect.

Expression syntax Eroare de sintaxă. For statement missing ; Caracter omis „;” la scrierea instrucţiunii "for". Function '…' should have a prototype

Funcţia „…” ar trebui să aibă un prototip; pentru a putea fi folosită, ea trebuie fie definită de utilizator, fie folosită o directivă de preprocesare (#include <…>).

Function should return a value

Funcţia ar trebui să returneze o valoare: lipsă "void" la tipul valorii returnate din antet sau lipsă instrucţiune "return" în corpul funcţiei.

If statement missing ) Caracter „)” sau „(” omis la scrierea instrucţiunii „if”.

Illegal structure operation

Structură greşită a instrucţiunii (scriere/citire) - la >> sau <<.

Incorrect number format Variabilă iniţializată cu un format numeric incorect.

Misplaced else Ramura „else” din instrucţiunea „if” este poziţionată greşit.

Multiple declaration for …

Variabila … este declarată de mai multe ori.

No file name ending Caracter „>” omis la o directivă de preprocesare după numele bibliotecii.

Statement missing ; Caracter „;”omis (la instrucţiunea precedentă). Unable to open include file '…'

Numele bibliotecii a fost scris greşit.

Undefined symbol '…' Simbol '…' (variabilă sau funcţie) nedefinit. Unexpected '…' Simbol neaşteptat:paranteză sau acoladă în plus. Unterminated string or character constant

Şir de caractere sau constantă caracter neterminată - lipsă ' sau ".

While statement missing )

Caracter „)”sau ”(” omis la scrierea instrucţiunii. „while”.

Page 7: 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ

DATE ÎN LIMBAJULUI C

19

Pentru a obţine mai multe informaţii despre o anumită eroare, atunci când eroarea este selectată în fereastra cu mesaje (Message), se apasă tasta F1.

3.3 Date în limbajului C

3.3.1 Tipuri de date

Datele care intervin în programe sunt de mai multe tipuri. În acest capitol vom prezenta tipurile simple, iar tipurile compuse vor fi prezentate în alte capitole. În tabelul de mai jos se prezintă tipurile de bază [2]:

Tabelul 3.2 Tipurile de bază de date Cuvânt cheie

Lungime în biţi

Format de reprezentare internă

int 16 Întreg binar reprezentat prin complement faţă de 2 pe 2 octeţi, cuprins în intervalul [-32768, 32767].

char 8 Caracter reprezentat prin codul ASCII, cuprins în intervalul [-128, 127].

float 32 Număr real reprezentat în virgulă flotantă în simplă precizie, cuprins între [3.410-38, 3.41038].

double 64 Număr real reprezentat în virgulă flotantă în dublă precizie, cuprins între [1.710-308, 1.710308].

short 16 Idem int. long 32 Întreg binar reprezentat prin complement faţă de 2

pe 4 octeţi, cuprins în intervalul [-2.147.483.648 to 2.147.483.647].

unsigned char

8 Caracter reprezentat prin codul ASCII, cuprins în intervalul [0, 255].

unsigned int

16 Întreg binar fără semn reprezentat prin complement faţă de 2 pe 2 octeţi, cuprins în intervalul [0, 65535].

unsigned long

32 Întreg binar reprezentat prin complement faţă de 2 pe 4 octeţi, cuprins în intervalul [0, 4.294.967.295].

3.3.2 Constante

Sunt caracterizate prin tip şi valoare. Atât tipul cât şi valoarea se definesc prin caracterele care o compun.

Tabelul 3.3 Reprezentarea constantelor în C/C++ Tip dată Format de

reprezentare Mod de reprezentare Exemple

zecimal (în baza 10)

[- / +] <cifra de la 1 la 9> [<lista cifre de la 0 la 9>]

125 -11

întreg*) octal (în baza 8)

[- / +] 0 <cifra de la 1 la 7> [<lista cifre de la 0 la 7>]

0127 -022

Page 8: 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ

NOŢIUNI DE BAZĂ

20

Tip dată Format de reprezentare

Mod de reprezentare Exemple

hexazecimal (în baza 16)

[- / +] 0 {x / X} <cifra 1-9 sau litera a-f sau A-F> [<lista cifre 0-7 sau litere a-f sau A-F>]

0xa12f -0Xad105

real

în virgulă fixă

[- / +] <partea întreagă> . <partea zecimală> Aceasta este scrierea unui număr raţional în baza zece, unde virgula zecimală este înlocuită de punctul zecimal. Partea zecimală poate fi vidă.

123 123.7 .25

(flotant) în virgulă mobilă

[- / +] <partea întreagă> . <partea zecimală> {e sau E} [- / +] <nr. întreg zecimal> Aceasta reprezintă mantisa (ceea ce este înainte de E) înmulţită cu 10 la puterea dată de exponent (ceea ce este după E).

78E4 .1e-3 1234.567e-4

între apostrofuri

‘<caracter>’ ‘a’ ‘A’

‘\<codul ASCII>‘ ‘\65’ ‘\7’ ‘\42’ ‘\140’

caracter cu secvenţe escape

‘\<caracter special>‘ \t Tab \n Rând nou \a Alarm (sunet) \b Backspace \r Retur de car (poziţ cursorul în rândul curent col 1) \v Tabulator vertical \\ Backslash \’ Apostrof

şir de caractere

între ghilimele

“<şir>” “Acesta este un sir de caractere”

cu secvenţe escape

“şir caractere şi secv.escape” “Alte \tsecvente \tescape \nintr-un sir”

Obs.: *) Informaţiile anterioare erau valabile pentru constantele întregi de până la 16 biţi. Constantele de 32 biţi sunt de tip long şi pentru a le nota le postfixăm una din: l sau L.

Pentru a specifica o constantă ca fiind de tip unsigned (fără semn) o postfixăm cu una din: u sau U. Dacă o constantă este long şi unsigned în acelaşi timp, o postfixăm cu una din: ul, lu, UL, LU

Ex: 123, 0123, 40000, 04000, 0123456, 123L, 0123l, 0x123, 0xa1b2c3, 0XABCFL

Page 9: 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri repetitive cu test final: REPETĂ acţiune CÂT TIMP condiţie sau: REPETĂ acţiune PÂNĂ

EXEMPLE

21

3.3.3 Variabile

3.3.3.1 Declararea variabilelor Modul general de declarare a variabilelor este:

tip_variabile listă_nume_variabile;

Se specifică tipul variabilei(lor) şi o listă formată din unul sau mai mulţi identificatori ai variabilelor de tipul respectiv.

Ex.: int i, j; /*declararea var. simple i, j, de tip int. Se rezervă pentru i şi j câte 16 biţi (2 octeţi)*/ char c; /*declararea variabilei simple c, de tip char. Se rezervă un octet.*/ float lungime; /* declararea variabilei simple lungime de tip float; se rezervă 4 octeţi */

3.3.3.2 Iniţializarea variabilelor în declaraţii În momentul declarării unei variabile, acesteia i se poate atribui o anumită valoare. În acest caz, în memorie se rezervă numărul de locaţii corespunzător tipului variabilei respective, iar valoarea ei va fi memorată în acele locaţii. Forma unei declaraţii de variabile cu atribuire este:

tip_variabilă nume_variabilă=expresie;

Se evaluează expresia, iar rezultatul acesteia este atribuit variabilei specificate.

3.4 Exemple

char backslash=’\\’; /*declararea şi iniţializarea variabilei simple de tip caracter backslash */ int a=7*9+2; /* declararea variabilei simple a, de tip int şi iniţializarea ei cu rezultatul unei expresii - valoarea 65*/ float pi=3.14; /*declararea şi iniţializarea variabilei pi*/ short int z=3; //declararea şi iniţializarea variabilei simple z char d=’\011’; char LinieNoua=’\n’; double x=9.8, y=0;