2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri...
Click here to load reader
Transcript of 2. SCHEME LOGICE ŞI PSEUDOCOD - tmt.ugal.ro+/Lab/2014-PLCP-Laborator2-GUP-L… · Structuri...
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
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
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
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
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.
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”.
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
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
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;