Documente Academic
Documente Profesional
Documente Cultură
Cursul 07 Tipuri Structurate Array Set String Record PDF
Cursul 07 Tipuri Structurate Array Set String Record PDF
49
{ Exemplu Array }
Begin
Write ( Calendarul pe anul 199); Readln (Anul);
Anul:=1990+Anul; Zi:=2
{ Calendarul pe luna l }
For s:=1 To 6 Do
For ziua:=Luni To Duminica Do
Luna[s,ziua]:=0;
Case l Of
2
{ Nr.zile n luna l }
: If Anul Mod 4 = 0 Then Zl:=29
Else Zl:=28;
4,6,9,11 : Zl:=30
Else
Zl:=31
End;
s:=1;
');
');
');
');
');
Writeln;
Writeln
Readln
End;
End.
51
A : Matrice;
X : Linie;
Exemplu :
Type Multime_Nr = Set Of 0..255;
reuniunea ( ) se noteaz cu +
intersectia (
diferenta ( \ ) se noteaz cu
) se noteaz cu
(A B vom scrie A + B ) ,
(A
B vom scrie A B ) ,
( A \ B vom scrie A B ) ;
b) relaionali :
-
Inclus := A<=B ;
Case e n A Of ... End;
53
Exemplu :
Vocale := [A,E,I,O,U];
Consoane := [A..Z] Vocale;
Readln (N); Numere := [1..N];
If e n M Then Write(e); .
{ Ciur= }
Rezultate Prime.
54
Program Ciurul_lui_Eratostene;
Var
Begin
Write ( Dati n : ); Readln (n);
Ciur:=[2..n]; Prime:=[ ]; p:=2;
Repeat
If p n Ciur Then Begin
Prime:=Prime+[p];
(* Prime:=Prime U {p} *)
Mp:=[]; m:=p;
Repeat
Mp:=Mp+[m]; m:=m+p
Until m>n;
Ciur :=Ciur Mp
(* Ciur := Ciur \ Mp *)
End; {If}
p:=p+1
Until Ciur = [ ];
Write(' Prime = {');
Db )
55
Exemplu :
Type
Linie
= String [80];
SirCar = String;
Var
Mesaj : String;
Rand : Line;
S
: String [20];
56
Algoritmica, Programare.
Exemple :
Alb < Albastru;
Ionescu < Popescu ; 0... < 9... < A... < Z... < a... < z....
Tipul String are ( n plus fa de tipul Array Of Char ) implementate
urmtoarele faciliti :
a) valorile variabilelor i expresiilor de tip String pot fi citite respectiv tiprite,
de exemplu :
Mesaj:=Numele autorului; Write (Dati +Mesaj+ : ); Readln (s);
b)
string :
- Length (S) (=Ord(S[0]) ) returneaz lungimea irului S (Length(mare)=4),
- Copy (S,p,l) returneaz subirul (lui S) de lungime l ncepnd din pozitia p
( Copy(Marinescu,2,4)=arin ),
- Concat (S1,S2,...,Sn) (=S1+S2+...+Sn) d ca rezultat irul obinut prin
concatenarea irurilor i , 1i QQ 2
( Concat(Con,Cat)=ConCat),
De exemplu :
57
v:=5/2;
58
(* 123+22= *)
(* n1 o n2 = ? *)
(* o {+,-,x,:,*,/} *)
n1, n2 : Real;
p , er : Integer;
Begin
Repeat
Write ( Dati expresia (n1 o n2 =) : ); Readln (e);
If e> Then Begin
If 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.+o
End;
p:=Pos(.,r); If p>0 Then r[p]:=,;
Writeln (r)
End
Until e=
End.
59
60
nregistrare are o parte fix format din mai multe cmpuri de diverse tipuri,
urmat eventual de o parte variabil.
Nr.
Numele i
Media
matricol
prenumele
general
12292
Avram Valentin
10
F.B.
Admis
9.00
12295
Barbulescu Ioan
B.
Admis
8.33
...
...
...
...
...
...
...
...
18944
Zaharascu Paula
10
F.B.
Respins
61
notele obinute la scris i practic, iar dac valoarea depus a fost B sau FB
atunci n partea variabil se va reine doar nota final obtinut.
n cazul n care referim mai multe cmpuri din cadrul unei nregistrri se
poate evita precizarea multipl a aceleai nregistrri prin instruciunea With.
Aceasta are urmtoarea sintax :
With <var_record> { , <id_cmp> } Do <instruciune> ,
ceea ce permite omiterea scrierii n <instruciune> a selectorilor precizai o
singur dat (<var_record> ,<id_cmp> ).
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 cmp este de tip record, se poate omite i acest
selector din instruciune, dac acesta a fost precizat ca <id_cmp> n
instruciunea With.
De exemplu, n loc de
62
Program Inregistrari;
Type
Calificativ = (NS,S,B,FB);
Student = Record
Nr_Matricol : Word;
Nume_Prenume : String[20];
Rezultate : Record
Algebra, Analiza, Geometrie : 1..10;
Informatica : Calificativ;
Sport : (Respins, Admis);
Case Inf : Calificativ Of
Ns : (Scris,Practic : Integer);
S,B,FB : (Nota : Integer)
End;
Media_Gen : Real;
End;
Var Studenti : Array [1..25] Of Student;
Un_Student : Student;
i, n, k : Byte;
Ordonati : (Da, Nu);
Rasp : String[10];
Begin
n:=0;
{Citeste datele fiecarui student}
With Un_Student, Rezultate Do
Begin
Repeat
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)
End
Else Begin Write ( Nota : );
Readln ( Nota)
End;
Write ( Sport(Adm,Resp) : ); Readln(Rasp);
Case Rasp[1] Of
63
A : Sport:=Admis;
R : Sport:=Respins
End;
If (Informatica in [FB,B,S]) And (Sport = Admis) And
(Algebra>4) And (Analiza>4) And (Geometrie>4) Then
Media_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 Do
If 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 Of
NS : 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.
Ca tem propunem modificarea acestui program astfel nct s se poat
obine lista studenilor n ordinea descrescatoare a notelor la fiecare disciplin
far a interschimba lista studenilor introdus de la tastatur. Pentru aceasta se
va construi de fiecare dat un vector de ordine O (oi, i=1,...,n ) unde oi
reprezint numrul de ordine al studentului (din lista iniial) care se afla pe
locul i n lista ordonat. Aceasta nseamn c iniial irul O va conine valorile
(1,...,n), apoi se va schimba aceast ordine, dac este cazul, (se interschimb
64
doar elementele irului O, deci oi oi+1) iar n final se vor tipri studenii n
ordinea dorit, adic se va tipri St[oi], i=1,...,n.
65