Documente Academic
Documente Profesional
Documente Cultură
Gndirea algoritmic
Problema cutrii
Exist i cazul care, pentru o aceeai problem putem
prezenta dou soluii, n care una este mai rapid ca alta. De
pild, fie un ir de numere natural oarecare, de exemplu
4,2,10,1,8,15,7. Vream s testm dac un numr dat (s zivem
numrul 8) se afl n aceast secven sau nu.
O astfel de cutare, prin parcurgerea de a stnga la dreapta
a ntregii secvene de numere, pn se gsete numrul dorit sau
se epuieaz toate elementele din secven, se numete cutarea
secvenial. Dac avem un ir S de n elemente (notat S[1..n]),
atunci cutarea secvenial a lui x n S se descrie prin:
Cutare_secvential(x,S[1..n]) nseamn
nceput
Fie elemental_curent = primul_element;
Att timp ct (elemental_curent <> x) si (pozitia elementului
current <= pozitia ultimului element (n)) execut
nceput
Dac elemental_curent = x atunci mesaj(gsit)
Altfel treci la urmtorul element
Sfrit
Sfrit.
n continuare s presupunem c numerele erau dj
ordonate cresctor 1, 2, 4, 7, 8, 10, 15. n acest caz particular,
cutarea secvenial a unui numr cum este 8 nu este prea
eficient, deoarece 8 se afl n a doua jumtate a secvenei, deci
ar fi de preferat s nu-l cutm n prima jumtate. Acest
procedeu este mai rapid:
Dac numrul din mijloc este mai mic dect numrul cutat,
atunci cutm a doua jumtate;
Intrare_la_medic nseamn
nceput
Bate la_u;
Dac rspunsul = poftim! atunci
ntr_n_cabinet;
Altfel
nceput
Att timp ct cabinetul_este_ocupat_de_alt_pacient
execut
Citeste_un_ziar;
Sfrit
Sfrit.
O intruciune compus este format dintr-o secven de
intruciuni, ncadrate de cuvinte nceput i sfrit, care pot
conine, la rndul lor, blocuri de alternativ i repetiie.
Programarea este tehnica realizrii de algoritmi descrii
prin proceduri i programe. Ea devine o art, atunci cnd se
folosesc cele trei elemente de structurate i se numete
programare structurat. Pentru a vedea ce ar nsemna
programare nestructurat, s reconsiderm procedura de intrare
n cabinetul medical:
Intare_la_medic nseamn
nceput
Bate_la_u;
Dac rspunsul = poftim! atunci intr_n_cabinet;
Altfel nceput
Att timp ct cabinetul_este_ocupat_de_alt_pacient execut
Citeste_un_ziar;
ntr_n_cabinet
Sfrit
Sfrit.
Proceduri
Media aritmetic
Realizai un program care calculeaz i afieaz media
aritmetic a dou numere reale x i y.
Program Media_aritmetica;
Var
media,x,y:Real;
Begin
Write(Dati numerele:);
ReadLn(x,y);
Media:=(x+y)/2;
WriteLn(Media=Media:8:2);
End.
Cu Procedure...
Program Media_aritmetica;
Var
media,x,y:Real;
Procedure media_calcul;
Begin
Media:=(x+y)/2;
WriteLn(Media=,Media:8:2);
End;
Begin
Write(Dati numerele:);
ReadLn(x,y);
media_calcul;
ReadLn;
End.
15
Sau
Procedura Media_calcul conine toate aciunile algoritmului: citirea numerelor, calcul i afiarea mediei aritmetice.
Program Media_aritmetica;
Var
media,x,y:Real;
Procedure media_calcul;
Begin
Write(Dati numerele:);
ReadLn(x,y);
Media:=(x+y)/2;
WriteLn(Media=,Media:8:2);
End;
Begin
media_calcul;
ReadLn;
End.
16
Funcii
La fel ca i procedurile, funciile efectueaz anumite
operaii, dar n plus a foncie ntoarce o anumit valoare.
Tipul valorii returnate se precizeaz la sfritul antetului finiei,
fiind precedat de caracterul dou puncte. Valoarea pe care o
returneaz o funcie poate fi folosit apoi n modul apelant i n
celelalte module componente.
Sintaxa:
Function <id_fct> (<L1>:<tip1>; <L2>:<tip2>; ...;
<Ln>:<tipn>): <tipr>;
...
{declaraii de variabile locale}
Begin
...
{corpul funciei}
End;
<id_fact> - identificatorul
<L1>,<L2>,...,<Ln> - sunt liste de paramateri
<tip1>,<tip2>,...,<tipn> - tipurile parametrilor
<tip_r> - tipul valorii returnate
Exemplu:
Program Media;
Var
x,y:Real;
Function calcul(a,b:Real):real;
Begin
Calcul:=(a+b)/2;
End;
Begin
Write(x,y=);
22
ReadLn(x,y)
ReadLn(Media=,calcul(x,y));
ReadLn;
End.
23