Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme



Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Pascal


Index » educatie » » informatica » Pascal
» STRUCTURI DE CONTROL


STRUCTURI DE CONTROL




STRUCTURI DE CONTROL

Structura liniara

Instructiunea de atribuire

Fiind poate cea mai importanta instructiune a oricarui limbaj de determinare cel mai mic element dintr-un sir de numere reale.

Pentru a determina minimul a n numere procedam astfel: consideram primul numar minim si pana la proba contrarie, el ramane minimul. Daca, insa gasim un alt numar mai mic, atunci acesta e considerat minimul. Facem asa pana la ultimul numar. Deci, avand n numere h1, h2, . , hn, algoritmul se poate scrie in pseudocod astfel:




detrminare_minim (n, h [ 1 . n] ) inseamna

inceput

i : 1;

minim := h [ i ] ;

atat timp cat i < n executa

inceput

daca h [ i ] < minim atunci

minim := h [ i ]

astfel i := i +1

sfarsit

sfarsit

Pentru a vedea cum functioneaza atribuirea pe un caz concret, sa consideram o ecuatie de gradul I, scrisa sub forma ax+b=c. Solutia ei este x= (c-b)/a, cu conditia ca sa fie nenul:

program RezolvareEcuatie;

var a, b, c, x: Real;

begin

Write (‘Dati a, b, c : ’) ReadLn (a, b, c);

x : = (c – b) / a

WriteLn (‘Solutia este : x=’, x:7:3);

ReadLn

end.

Iata ca formula x=(c-b) / a devine (in program) instructiune de atribuire x:=(c – b) / a (apare : = in loc de =).

Instructiunea compusa

O secventa de mai multe instructiuni oarecare ale unui program, despartite de punct si virgula ti incadrate intre cuvintele begin si end formeaza o instructiune compusa. Ea corespunde structurii secventiale din programarea structurata.

Exemplu:

Begin

ReadLn (z);

x : =2; y : =3;

WriteLn (‘Suma este : ’, x+y+z)

end

Instructiunile compuse se folosesc mai ales in cadrul unor instructiuni de control structurate precum IF, WHILE etc.

Dupa cum am aratat in capitolul precedent, chiar si partea operativa a unui program in Pascal este o instructiune compusa, daca se termina cu . (punct).

Instructiunea vida

O instructiune aparte este instructiunea vida. Ea nu contine . nimic! Astfel, daca vedeti doua simboluri ; unul dupa altul, sa stiti ca intre ele este o instructiune vida. Exista si alte moduri de a folosi instructiunea vida, asa cum vom vedea de exemplu, la instructiunea IF.

Structura alternativa

Instructiunea de decizie IF

Necesitate

Sa consideram problema determinarii perimetrului unui triunghi cu lungimile laturilor a, b si c. Calculul perimetrului este simplu, dar se pune intrebarea: intotdeauna trei numere reale pot fi lungimile laturilor unui triunghi? Desigur ca nu; in primul rand ele trebuie sa fie strict pozitive, in al doilea rand trebuie ca fiecare din ele sa fie strict mai mic decat suma celorlalte doua. Acest lucru nu poate fi evidentiat cu simpla instructiune de atribuire. De aceea e necesara instructiunea if. Ea este reprezentarea fireasca a structurii decizionale, in limbajul Pascal.

Sintaxa

Instructiunea if are doua forme. In prima forma, instructiunea are doua ramuri:

if cond then

instr1

else

instr2

 


Cea de a doua forma este fara ramura: else instr2:

if cond then

instr1

 


In cele de mai sus, cond este o conditie (expresie booleana), adica:

fie o variabila booleana, care poate avea una din valorile True sau False;

fie o expresie booleana, de exemplu (e1 and (not e2)) or e3, unde e1, e2, e3 sunt variabile sau constante booleene;

fie o expresie booleana relationala, de genul x<y, x>=y, unde x si y sunt variabile de acelasi tip;

fie o expresie booleana mixta, de exemplu (x<y) and (e1 or (z=t) and True).

Diagrama de sintaxa este:

Oval:     IF

expresie booleana

 
Oval: THEN


instructiunea

IF


Semantica

Semantica instructiunii IF este urmatoarea: se determin ce valoare de adevar are expresia booleana con. Daca ea este True, atunci se executa instructiunea instr1, dupa care se trece la instructiunea ce ar urma dupa intreaga structura if-then-else. Cand cond este, insa, False, atunci se executa, in cazul in care exista, instructiunea instr2, apoi se trece dupa structura if-then-else. Asadar, se executa fie instr1, fie, daca exista, instr2, in nici un caz ambele . Deci instr2 nu exista, iar cond=true, atunci nu se executa nimic, iar programul continua cu instructiunea de dupa ansamblu if-then-else.

Erori frecvente

Printre cele mai intalnite erori legate de instructiunea if sunt:

Se pune : = in loc de =, ca in if a : =0 then WriteLn (‘Ec nu e de gr 2’). Niciodata nu vom avea : = intr-o conditie dintr-un if, deoarece acest grup de simboluri reprezinta instructiunea de atribuire!

Se pune ; inainte de else, ca mai jos:

if x = y then WriteLn (’Egalitate !’) ;

else WriteLn (’Diferenta !’)

Este mare greseala, deoarece simbolul ; separa doua instructiuni, dar cuvantul else o parte componenta a instructiunii if-then-else.

Se pune, gresit, punct si virgula dupa then, ceea ce este interpretat ca fiind o instructiune vida, pentru if, urmata de o alta instructiune: if cond then ; instr.

Se pune o conditie suplimentara, inutila, ca mai jos:

if x then

instr1

else x = y

instr2

Evident, daca x nu mai mic decat y, va fi mai mare sau egal, deci nu trebuie precizat si, de fapt, nici nu este corect sintactic!

Se foloseste cuvantul do in loc de then, ca in: if cond do instr1

Instructiunea de selectie multipla CASE

Necesitate

O familie de tineri casatoriti doreste sa-i cumpere noului nascut ceva de imbracat, pentru atunci cnd copilul va fi ceva mai maricel. El zice:”daca e fata ii luam o fustita, iar daca e baiat o pereche de pantalonasi.”Aceasta problema se poate solutiona cu ajutorul instructiunii de decizie if-then-else. Dar ea intreaba:”daca sunt doua fetite gemene sau doi baieti gemeni sau chiar o fetita si un baietel gemeni?”. Ei bine, problema se complica, asa incat trebuie prevazute mai mult de doua cazuri. Sotii s-ar putea folosi de o descriere de genul:

In caz ca noul nascut este

o fata: cumparam o fustita;





un baiat: cumparam o pereche de pantalonasi;

doua fete: cumparam doua fustite;

doi baieti: cumparam doua perechi de pantalonasi;

o fata si un baiat: cumparam o fustita si o pereche  de pantalonasi;

gata;

Dar e posibil sa apara pe lume trei gemeni sau patru, doua fete si doi baieti, asa incat cei doi vor cumpara scutece, in orice alt caz:

In caz ca noul nascut este

o fata: cumparam o fustita;

un baiat: cumparam o pereche de pantalonasi;

doua fete: cumparam doua fustite;

doi baieti: cumparam doua perechi de pantalonasi;

o fata si un baiat: cumparam o fustita si o pereche de pantalonasi;

altfel cumparam scutece

gata;

Aceasta problema si altele asemanatoare sunt solutionate de instructiunea de selectie multipla: CASE.

Schema logica:

Oval: ;Oval: CASE

instr

 

caz

 
Oval: of

Expresie ordinala

 
instructiunea

CASE

Oval: ;



Semantica

Se determina valoarea expresiei selector si se executa instructiunea sau setul de instructiuni corespunzatoare valorii; in cazul in care nu-i corespunde nici o instructiune, atunci se executa, daca exista, instructiunea de pe ramura else.

Instructiunea repetitiva WHILE

Necesitate

Repetitia unei secvente este de multe ori necesara in programare. Acest lucru s-ar putea realiza cu o instructiune de salt.Instructiunea de salt este marele dusman al programarii structurate, motiv pentru care avem nevoie de instructiuni repetitive. O astfel de instructiune este instructiunea WHILE.

Sintaxa

Aceasta instructiune are forma urmatoare:

While conditie do

instr

 


Instructiunea repetitiva cu contor FOR

Necesitate

Cand vrem sa calculam o suma, de pilda:  s=1+3+5+7+..+2n-1, scriem astfel:

s:=0; i:=1;

while i do begin s:=s+2*i-1; i:=i+1 end.

Sintaxa

Instructiunea FOR are doua forme:

Cu contorul in crestere:

For v:=e1 to e2 do

instr

 


Cu contorul in descrestere:

For v:=e1 downto e2 do

instr

 


Diagrama de sintaxa este:

identificator

 


expresie

 
Oval: :=Oval: FORinstructiunea

Oval: DOWNTO

expresie

 
Oval: DOOval: TOFOR




Schema logica asociata instructiunii FOR:


Diamond: V<=e2

DA NU


Instructiunea repetitiva cu test final REPEAT

Necesitate

De multe ori este necesar ce intr-un ciclu sa se testeze conditia de iesire dupa executarea instructiunilor ce compun ciclul. De pilda, daca vrem sa deplasam pe ecram o bila (utilizand patru taste), pana la actionarea tastei ’s’, vom scrie ceva de genul:

Repeta

Misca bila cu tastele corespunzatoare celor patru sensuri

Pana cand tasta apasata este ’s’.

Sintaxa

Instructiunea repetitiva are urmatoarea forma:

repeat

instr1;

instr2;

.

instrn

until cond.

Semantica

Sensul acestei instructiuni este: repeta instructiunile instr1,, instrn, pana cand este indeplinita conditia cond. Instructiunile se executa cel putin o data.

Procedurile Break si Continue

Aceste proceduri pot aparea in cadrul unor cicluri, uneori fiind necesare pentru a scrie mai simplu anumite secvente. Ele au aparut in versiunea 7.0 a implementarii Turbo Pascal.

1.Break

Termina o instructiune for while ori repeat. Determina iesirea imediata din cel mai apropiat ciclu in care se afla. Este similara unui salt catre prima instructiune de dupa ciclu.

Exemplu

var x:integer;

begin

while true do

begin

readln(x);

if x=0 then break;

writeln(x);

end

end.

2.Continue

Aceasta procedura continua o instructiune for while ori repeat. Cauzeaza trecerea imediata la o noua iteratie in cadrul celei mai apropiate instructiuni for while sau repeat

Exemplu

var c:char;

begin

for c:=’a’ to ’z’ do

if (c=’a’) or (c=’e’) or (c=’i’) or (c=’o’) or (c=’u’) or (c=’y’)

then continue

else write(c);

end.

Instructiunea de salt neconditionat GoTo

Sintaxa acestei instructiuni este: GoTo eticheta.

Efectul instructiunii GoTo este continuarea imediata si neconditionata a programului cu instructiunea etichetata. Sintaxa unei instructiuni etichetate este: eticheta: instructiune.

Declararea etichetelor este descrisa de diagrama urmatoare:

Oval: LABEL

Eticheta

 
Oval:  ;


declaratie

eticheta


Exemplu

label 10;

for i:=1 to 10 do

begin

if i=5 then goto 10;

else write(i);

end;

10: write(’-’, i*i).

Aceasta secventa afiseaza: 1234-25.




loading...




Politica de confidentialitate


Copyright © 2020 - Toate drepturile rezervate

Pascal


Access
Adobe photoshop
Autocad
Baze de date
C
Calculatoare
Corel draw
Excel
Foxpro
Html
Internet
Java
Linux
Mathcad
Matlab
Outlook
Pascal
Php
Powerpoint
Retele calculatoare
Sql
Windows
Word