23
1 1 /23 /23 Fundamentele Fundamentele program program ă ă rii rii C C 4 / 26.10.2012 4 / 26.10.2012 4. Tipuri de date structurate în Pascal: tablou Array mul mul ţ ţ ime ime Set Set ş ş ir_caractere ir_caractere String String î î nregistrare nregistrare Record Record

Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

  • Upload
    others

  • View
    17

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

11/23/23

FundamenteleFundamentele programprogramăăriirii

CC4 / 26.10.20124 / 26.10.2012

4. Tipuri de date structurate în Pascal:

tablou Array

mulmulţţimeime SetSet

şşir_caractereir_caractere StringString

îînregistrarenregistrare Record Record

Page 2: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

22/23/23

TipulTipul mulmulţţimeime (Set )(Set ) : :

• Utilizare: aplicaţii care folosesc noţiunea de mulţime din matematică.

• Decl.: Set Of <tipul_elementelor>

• Elem.: numere naturale < 256, caractere, sau elem. de tip enumerare, iar cardinalul mulţimilor poate fi maxim 256 .

• Ex.:

Type Multime_Nr = Set Of 0..255; { sau Multime_nr = Byte }Multime_Car = Set Of Char;Multime_LitM = Set Of ‘A’..’Z’;Zile = (Luni,Marti,Miercuri,Joi,Vineri,Sambata,Duminica);

Var Multime_cif : Set Of ‘0’..’9’;M_Zile : Set Of Zile;M_Zile_Lucratoare : Set Of Luni..Vineri;Vocale, Consoane : Multime_LitM;Numere : Multime_Nr;

Page 3: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

33/23/23

Operatorii pentru date tip multime :

a) pentru operaţii cu mulţimi : • reuniunea ( ) se notează cu + (A B vom scrie A + B ) ,• intersectia ( ∩ ) se notează cu (A ∩ B vom scrie A B ) ,• diferenta ( \ ) se notează cu ( A \ B vom scrie A B ) ;

b) relaţionali :• = pentru egalitatea a doua multimi ( = ), If A=B Then ...• <> pentru neegalitate ( ), While A<>B Do ...• >= pentru incluziunea nestricta “include” ( ) , Repeat ... Until A>=B ;• <= pentru incluziunea nestricta “inclus in” ( ) , Inclus := A<=B ;• In pentru apartenenţă (). Case e In A Of ... End;

Observaţie : e A se va scrie : Not (e In A).

Page 4: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

44/23/23

ConstructoriiConstructorii de mulţimi se definesc astfel:<constructor>::=[<lista_elemente>] ,

unde lista_elemente poate fi:

- o succesiune de elemente, sau- subdomenii de forma elem1 .. .. elem2.

Ex.: mulţimea {1,10,100,101,...,199,200} se scrie [1,10,100..200], iarmulţimea vidă se scrie [ ] .

Ex.: Vocale := [‘A’,’E’,’I’,’O’,’U’];Consoane := [‘A’..’Z’] Vocale;Readln (N); Numere := [1..N]; { N este o variabilă de tip Integer }.

Obs. O var. de tip mulţime nu se poate citi, iar o expr.de tip mulţime nu se poatetipări (doar element cu element). De ex., Write(Consoane) nu este permisă.

• Citirea: M:=[ ]; Repeat Read(e); M:=M+[e] Until Term_Cit.;

• Tipărirea : For e:=Min To Max Do If e In M Then Write(e);

Page 5: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

55/23/23

Exemplul următor îşi propune rezolvarea următoarei probleme :“ Să se determine numerele prime mai mici sau egale decât un număr n dat ”.

Pentru că vom utiliza tipul mulţime (Set), n va fi cel mult 255. !!

Vom rezolva această problemă în felul următor :Date n;Ciur={2,...,n}; Prime=;Repetă

elementul minim din Ciur va fi mutat în mulţimea Prime, iardin Ciur se elimină toţi multiplii acestuia

Până_când Ciur-ul devine vid; { Ciur= }Rezultate Prime.

Page 6: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

66/23/23

Program Ciurul_lui_Eratostene; (* Numerele prime < n *)Var Ciur, Prime, Mp : Set Of 2..255;

p, n : Byte; m : Integer;Begin

Write (' Dati n : '); Readln (n);Ciur:=[2..n]; Prime:=[ ]; p:=2;Repeat

If p în Ciur Then BeginPrime:=Prime+[p]; (* Prime:=Prime U {p} *)Mp:=[]; m:=p;Repeat

Mp:=Mp+[m]; m:=m+pUntil m>n;Ciur :=Ciur Mp (* Ciur := Ciur \ Mp *)

End; {If}p:=p+1

Until Ciur = [ ];Write(' Prime = {'); (* Tipar. mult. Prime *)For p:=1 To 255 Do

If p In Prime Then Write (p,',');Write (Chr(8)+'}'); Readln

End.

Page 7: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

77/23/23

Un exerciţiu cu mulţimi pe care îl propunem ca temă este următorul : “Sa se calculeze C.m.m.d.c. (a,b) “ astfel :

- se determină mulţimile Da şi Db a divizorilor lui a respectiv b,- se calculeaza mulţimea Dc a divizorilor comuni ( Dc:=Da Db )- Cmmdc (a,b) = Maxim ( Dc ).

Pot fi a şi b mai mari dacât 255 ? Cum poate fi modificat acest program pentru a rezolva această problemă ? În mulţimi vom reţine doar indici din şirul tuturordivizorilor. În felul acesta mulţimile pot conţine elemente de orice tip, darcardinalul maxim al mulţimilor va fi doar 255.

Rezolvati o problema in care elementele sunt reale, dar numarul lor nu depaseste255 (utilizand operatorii existenti).

TemeTeme::

Page 8: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

88/23/23

TipulTipul şşir_caractereir_caractere (String )(String ) : :

• Util.: ~~ Array Of Char

• Decl.: String [[ [m] ]] Lung. Max. = m <= 255255.• Ex.:Type Linie = String [80]; { Siruri de maxim 80 de caractere }

SirCar = String; { Siruri de maxim 255 de caractere }Var Mesaj : String;

Rand : Line;S : String [20];X : Array [0..20] Of Char;

Există o compat. între variabilele de tip StringString şi cele de tip Array Of CharArray Of Char (S şiX, în exemplul de mai sus). Memoria ocupată în ambele cazuri fiind de 21 de octeti ( S[0] conţine numărul de caractere ale şirului S, care poate fi cel multm) iar S[i] reprezintă caracterul i din sirul S ( ca şi X[i] , 1 i m ).

ObsObs. : 0 Ord(S[0]) m, pentru că S[0] este de tip Char.

Page 9: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

99/23/23

Constante de tip String :

Descrierea constantelor de tip String se realizează utilizând caracterul apostrof() astfel: sir_caractere . Dacă dorim ca şirul de caractere descris săconţină acest caracter, atunci caracterul apostrof va fi dublat.

Ex. : Str. Lalelelor, Nr.2 , Domnu Trandafir ( reprezintă şirul Domnu Trandafir ).

a) Operaţia de concatenare a două şiruri este notată cu ++ . De exempluAlgoritmica, ++ Programare are valoarea Algoritmica, Programare.

b) Operatorii relaţionali permit compararea a două şiruri utilizând ordinealexicografică (utilizată în dicţionare, cărţi de telefon, etc.) :

== şi <><> pentru egalitatea respectiv neegalitatea a două şiruri ,<, >, <=, >=<, >, <=, >= pentru compararea lexicografică.

Ex. : ‘Alb’ < ‘Albastru’; ‘Ionescu’ < ‘Popescu’ ; ‘0...’ < ‘9...’ < ‘A...’ < ‘Z...’ < ‘a...’ < ‘z...’.

Operatori pentru String :

Page 10: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1010/23/23

Facilităţi ale tipului StringString ( în plus faţă de Array Of Char ) :Valorile variabilelor şi expresiilor de tip String pot fi citite respectiv tipărite, ex.:

Mesaj:=‘Numele autorului’; Write (‘Dati ‘+Mesaj+’ : ‘); Readln (s);

- LengthLength (S) (=Ord(S[0]) ) returnează lungimea şirului S (Length(‘mare’)=4), - CopyCopy (S,p,l) returnează subşirul (lui S) de lungime l începând din pozitia p

( Copy(‘Marinescu’,2,4)=‘arin’ ), - ConcatConcat (S1,S2,...,Sn) (=S1+S2+...+Sn) ( Concat(‘Con’,’Cat’)=‘ConCat’), -- PosPos (x,S) det. poz. subşirului x în şirul S sau 0 dacă şirul S nu conţine ca subşir pe x

( Pos(‘in’,‘Marinescu’)=4 iar Pos(‘pop’,’Popescu’)=0 ),

- DeleteDelete (s,p,l) şterge din s începând din poz. p , l caractere, ex.secventa : s:=‘Ionescu’; Delete (s,4,4); Write (s); va tipari ‘Ion’;

- InsertInsert (x,S,p) inserează şirul x în şirul S la poziţia p. De ex.: s:=‘Alg.Progr.’; Insert(‘ şi ‘,s,5); Write (s); va tipari ‘Alg. şi Progr.’;

- StrStr (e,S) depune în S, şirul cifrelor val. Expr.e , care poate avea ataşat un format (:n:m ca şi Write). Ex. : v:=5/2; Str (v:5:2,S); va depune în S şirul ‘ 2.50’.

- ValVal (S,v,Cr) examinează şirul S. Dacă este corect atunci va depune în v valoarea iarîn Cr val. 0. Dacă şirul S conţine caractere nepermise, atunci în v se depunevaloarea 0 iar în variabila Cr (de tip întreg) poziţia primului caracter nepermis.Val (‘1234’,v,Cr); are ca efect : v=1234 şi Cr=0 , iarVal (‘19d7’,v,Cr); are ca efect : v=0 şi Cr=3 ( pe poziţia 3 se află ‘d’).

Page 11: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1111/23/23

Problema pe care o vom rezolva utilizând tipul string este următoarea :“Să se calculeze valoarea unei expresii aritmetice de forma : n1n2[=] unde :

n1,2 sunt două numere reale, este un operator aritmetic (+, , *, , / sau : ) iarsemnul egal la sfârşitul expresiei poate lipsi. Expresia (simplă, cu un singuroperator şi fără paranteze) este dată sub forma unui şir de caractere, iar rezultatul se va afişa cu două zecimale. “

De exemplu pentru ‘123+45’ rezultatul este 168,00 , iar pentru ‘123.3:3=’rezultatul este 41,10 .

Problema o vom rezolva astfel :e - reprezintă expresia sub forma unui şir de caractere, iar r este rezultatul

(valoarea expresiei) dată tot sub forma unui şir de caractere în care se va înlocuimarca zecimală ‘.’ cu ‘,’ . Dacă expresia nu se termina cu caracterul ‘=‘, acesta vafi adaugat şirului introdus.

Se determină poziţia operatorului (p). Inseamnă că o=e[p] va fi caracterul ce vadesemna operaţia ce urmează a fi facută. n1 este scris cu caracterele e1...ep-1 , decipoate fi obtinut cu procedura Val, iar apoi se sterg primele p caractere, ceea ceînseamnă că în expresia e mai ramane ‘n2=’. În continuare, se procedează analog, extragând pe n2, din şirul rămas , mai puţin ultimul caracter. După tipărirearezultatului (a şirului r ) se va citi alt şir (altă expresie) până când se va introduce expresia vidă (şirul vid) adică se tastează doar Enter în momentul citirii expresiei.

Page 12: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1212/23/23

Programul Pascal este următorul :

Program Valoarea_Expresiei; (* '123+22=' *) (* n1 o n2 = ? *) (* o {+,-,x,:,*,/} *)Var e,r : String; o : Char;

n1, n2 : Real; p , er : Integer;Begin

Repeat Write (' Dati expresia (n1 o n2 =) : '); Readln (e); If e>'' Then BeginIf Pos ('=',e)=0 Then e:=e+'=';Val (e,n1,p); Val (Copy(e,1,p-1),n1,er); { p:=Poz(o) } {n1:=...}o:=e[p]; Delete (e,1,p); Val (Copy(e,1,Length(e)-1),n2,er);Case o Of

'+' : Str (n1+n2:8:2,r); '-' : Str (n1-n2:8:2,r);'x','*' : Str (n1*n2:8:2,r); ':','/' : Str (n1/n2:8:2,r)

Else r:=' Operator necunoscut.'+oEnd; p:=Pos('.',r); If p>0 Then r[p]:=','; Writeln (r) End

Until e=''End.

Page 13: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1313/23/23

Un alt exerciţiu pe care îl propunem ca temă este următorul: “Să se calculeze valoarea unui polinom P (dat ca stringstring), într-un punct x dat.”Polinomul P(X) = a0Xn + a1Xn-1 + ... + an-1X + an se dă sub forma:

“a0X^n+a1X^n-1+...+an-1X+an”.

De exemplu, polinomul P(X) = 3X5-7X2+12X-9 se poate scrie astfel :

3X^5-7X^2+12X-9 , utilizând caracterul ‘^’ pentru a marca puterea.

Pentru a rezolva această problemă, se poate extrage din şirul dat, pe rândfiecare monom (acestea fiind separate de caracterul + sau -), iar din fiecare monomse va extrage coeficientul şi puterea. În acest fel putem memora polinomul ca un şir de perechi de forma (coeficientcoeficient, grad, grad), urmând să calculăm valoareapolinomului obţinut.

TemaTema::

Page 14: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1414/23/23

TipulTipul îînregistrarenregistrare (Record )(Record ) : :

• Permite grupareagruparea datelordatelor de de tipuritipuri diferitediferite înregistrare putem spune că estealcatuită din mai multe câmpuri, nu neapărat de acelaşi tip. Un câmp poate la rândul său să fie alcătuit din mai multe subcâmpuri şi aşa mai departe.

• Ex.: pentru studenţii unei facultăţi avem o structură în care elementele (Nr. matricol, Nume, Rezultate şi Medie) au tipuri diferite ( întreg, sir de caractere, 1..10 sau (FB,B,S,NS) sau (Admis,Respins), real).

• Situaţii în care nu nu toatetoate îînregistrărilenregistrările conconţţinin aceleaaceleaşşii informainformaţţiiii, o structurăvariabilăvariabilă (diferite câmpuri) în funcţie de anumite valori ale unor câmpuri fixe. O înregistrare are o parte o parte fixăfixă formată din mai multe câmpuri de diverse tipuri, urmată eventual de o parte o parte variabilăvariabilă.

. . .. . .. . .. . .. . .. . .. . .. . .

8.33AdmisB.979 Barbulescu Ioan12295

9.00AdmisF.B.9810Avram Valentin12292

SportInformaticăGeometrieAnalizăAlgebră

Mediagenerală

Rezultate (Note şi calificative)Numele şiprenumele

Nr.matricol

Page 15: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1515/23/23

Declararea tipului inregistareinregistare constă într-o o parte fixă (în care se declarăcâmpurile împreună cu tipurile lor) şi eventual o parte variabilă (CaseCase ... , în care câmpurile diferă în funcţie valoarea unor câmpuri din partea fixă) astfel :

Record<listă_câmpuri> : <tip_câmp> { ; // P. Fixa<listă_câmpuri> : <tip_câmp> }[ CaseCase [ <id> : ] <tip_sel> Of // P. Var.

<const> : (<listă_câmpuri> : <tip_câmp> { ;<listă_câmpuri> : <tip_câmp> } ) { ;

<const> : (<listă_câmpuri> : <tip_câmp> { ;<listă_câmpuri> : <tip_câmp> } ) } ]

End;Prin <listă_câmpuri> înţelegem o listă de identificatori de câmpuri, iar

<tip_câmp> este tipul câmpurilor care pot fi chiar Record.

Referirea unui câmp al unei variabile de tip inregistrare se face astfel : <<var_recordvar_record> > .. <<id_câmpid_câmp>>

Ex. Un_Student.Media_Gen, Un_Student.Rezultate.Informatică. Dacă la Informatică este NS sau S, în partea variabilă scris şi practic, iardacă valoarea este B sau FB atunci în partea variabilă nota finală obtinută.

Page 16: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1616/23/23

InstructiuneaInstructiunea WithWith : :

În cazul în care referim mai multe câmpuri din cadrul unei înregistrări se poateevita precizarea multiplă a aceleaşi înregistrări prin instrucţiunea With. Aceastaare următoarea sintaxă :

With <var_record> { , <id_câmp> } DoDo <instrucţiune> ,ceea ce permite omiterea scrierii în <instrucţiune> a selectorilor precizaţi o singură

dată (<var_record> ,<id_câmp> ).De exemplu, în loc de

Writeln (Un_Student.Nume, Un_Student.Media_Gen);se poate scrie mai simplu :

With Un_Student Do Writeln (Nume, Media_Gen);

În cazul în care un câmp este de tip record, se poate omite şi acest selector din instrucţiune, dacă acesta a fost precizat ca <id_câmp> în instrucţiunea With. De exemplu, în loc de Readln (Un_Student.Rezultate.Algebra, Un_Student.Rezultate.Analiza, ...)

se poate scrie mai simplu :With Un_Student, Rezultate Do Readln (Algebra, Analiza, ...) .

Page 17: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1717/23/23

Ex.: Se citesc informaţiile fiecărui student, apoi se ordonează descrescător dupămedii, iar în final se listează studenţii în ordinea mediilor.

Program Inregistrari;Type Calificativ = (NS,S,B,FB);

Student = RecordRecordNr_Matricol : Word;Nume_Prenume : String[20];Rezultate : RecordRecord

Algebra, Analiza, Geometrie : 1..10;Informatica : Calificativ;Sport : (Respins, Admis);CaseCase Inf : CalificativCalificativ Of

Ns : (Scris,Practic : Integer);S,B,FB : (Nota : Integer)

EndEnd;Media_Gen : Real;

EndEnd;Var Studenti : Array [1..25] Of Student; Un_Student : Student;

i, n, k : Byte; Ordonati : (Da, Nu); Rasp : String[10];

Page 18: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1818/23/23

Beginn:=0; {Citeste datele fiecarui student}With Un_Student, Rezultate Do BeginRepeat

Write (' Nume student : '); Readln (Nume_Prenume);If Nume_Prenume<>'' Then Begin

Write (' Numar matricol : '); Readln (Nr_Matricol);Write (' Algebra (1..10) : '); Readln (Algebra);Write (' Analiza (1..10) : '); Readln (Analiza);Write (' Geometrie (1..10) : '); Readln (Geometrie);Write (' Informatica (NS..FB) : '); Readln(Rasp);Case Rasp[1] Of

'N' : Informatica:=NS; 'S' : Informatica:=S;'B' : Informatica:=B; 'F' : Informatica:=FB

End;If Informatica = Ns Then Begin Write (' Scris, Practic : ');

Readln ( Scris, Practic) EndElse Begin Write (' Nota : '); Readln ( Nota) End;

Write (' Sport(Adm,Resp) : '); Readln(Rasp);Case Rasp[1] Of 'A' : Sport:=Admis; 'R' : Sport:=Respins End;

Page 19: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

1919/23/23

If (Informatica in [FB,B,S]) And (Sport = Admis) And(Algebra>4) And (Analiza>4) And (Geometrie>4) ThenMedia_Gen:=(Algebra+Analiza+Geometrie+Nota)/4 Else Media_Gen:=0;n:=n+1; Studenti[n]:=Un_Student

End {If}Until Nume_Prenume='' End; {With}k:=0; { Ordoneaza descrescator dupa medii }Repeat Ordonati:=Da; k:=k+1;

For i:=1 To n-k DoIf Studenti[i].Media_Gen < Studenti[i+1].Media_Gen Then Begin

Un_Student:=Studenti[i]; Studenti[i]:=Studenti[i+1];Studenti[i+1]:=Un_Student; Ordonati:=Nu End

Until Ordonati=Da; { Tipareste studentii în ordinea rezultata }For i:=1 To n Do With Studenti[i] , Rezultate Do Begin

Write (Nr_Matricol:7,Nume_Prenume:20, Algebra:3,Analiza:3,Geometrie:3);Case Informatica OfNS : Write (' Nesatisfacator ',Scris:3,Practic:3);S : Write (' Satisfacator ',Nota:6);B : Write (' Bine ',Nota:6);FB : Write (' Foarte Bine ',Nota:6)End;

Case Sport Of Admis: Write (' Admis '); Respins: Write (' Respins ') End;Writeln (Media_Gen:6:2) End;{With} Readln

End.

Page 20: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

2020/23/23

TemaTema::

Propunem modificarea acestui program astfel încât să se poatăobţine lista studenţilor în ordinea descrescatoare a notelor la fiecaredisciplină fară a interschimba lista studenţilor introdusă de la tastatură. Pentru aceasta se va construi de fiecare dată un vector de ordine O (oi, i=1,...,n ) unde oi reprezintă numărul de ordine al studentului (din lista iniţială) care se afla pe locul i în lista ordonată. Aceasta înseamnă că iniţial şirul O va conţine valorile (1,...,n), apoi se va schimba această ordine, dacă este cazul, (se interschimbă doarelementele şirului O, deci oi oi+1) iar în final se vor tipări studenţiiîn ordinea dorită, adică se va tipări St[oi], i=1,...,n.

Page 21: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

2121/23/23

ÎÎntrntr--un bloc de un bloc de dimensiunidimensiuni mxnmxn locuiesclocuiesc mmxxnnfamiliifamilii. Se . Se cunoacunoaşştete pentrupentru fiecarefiecare familiefamilie ffijij data la data la care scare s--a a mutatmutat îînn acestacest bloc, bloc, iariar pentrupentru fiecarefiecaremembrumembru de de familiefamilie numelenumele şşii data data nanaşşteriiterii..

Se Se cerecere::a)a) ListaLista ((tabelultabelul) cu ) cu totoţţii locatariilocatarii îînn ordineordinedescrescătoaredescrescătoare a a vechimiivechimii îînn bloc;bloc;b)b) ListaLista cu cu locatariilocatarii îînn ordineaordinea zileizilei de de nanaşşteretere((lunaluna, , zizi). (). (CineCine--i i născutnăscut îînn ianuarieianuarie, cine, cine--i i născutnăscut îînn februariefebruarie, , ……))c) O histogramă cu numărul de persoane pefiecare etaj (ca în figura alăturată) –– facultativfacultativ --..

Obs.:Obs.: DataData ((calendaristicăcalendaristică) ) esteeste de forma de forma ((zi,luna,anzi,luna,an) () ( Ex.:1.02.2006).Ex.:1.02.2006).

TemaTema::

Page 22: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

2222/23/23

Să se scrie un program Pascal care să rezolve problemele de tipul: Mutând un singur băţ de chibrit, faceţi ca egalitatea să fie adevărată!

Exemplu : Pentru 3+6=14obţinem 9+5=14

TemaTema::

Page 23: Fundamentele programării - Babeș-Bolyai Universityper/Fp -_-/Fp_4.pdf · e-reprezintăexpresia sub forma unuişir de caractere, iarr este rezultatul (valoarea expresiei) datătot

2323/23/23. . . C. . . C44 / 26.10.2012 / 26.10.2012