Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Tipul de date inregistrare (RECORD)

c



+ Font mai mare | - Font mai mic



Tipul de date inregistrare (RECORD)

In practica trebuie sa lucram cu date diferite la un moment dat. De exemplu, datele despre un student sunt de tipuri diferite: numele este string, varsta este byte, etc.



Este un tip de date care reuneste mai multe date de tip diferit. Mai multe obiecte din lumea inconjuratoare sunt caracterizate printr-o lista de atribute. Lista de atribute utilizata pentru a descrie o clasa generala de obiecte formeaza tipul obiectului respectiv. Un obiect particular de acest tip este definit prin atribuirea de valori concrete pentru fiecare dintre atributele sale.

De exemplu presupunem ca obiect o "carte", pe care o vom descrie. Vom folosi pentru aceasta descriere cele mai importante atribute (proprietati, insusiri) ale cartii, ca de exemplu:

titlul cartii

autorul

anul aparitiei

editura

numarul de pagini

In limbajul Pascal o astfel de descriere se face utilizand tipul RECORD (inregistrare).

Intr-o inregistrare fiecare atribut este numit camp, iar o variabila care se declara de acest tip se numeste variabila inregistrare.

Definirea (declararea) unui tip inregistrare:

type nume = record

camp_1: tip_1;

camp_2: tip_2;

.......

camp_n: tip_n;

end;

unde:     - "nume" este un identificator care reprezinta tipul inregistrare.

- camp_1, camp_2, ., camp_n reprezinta identificatorii pentru numele campurilor (atributelor) datei respective;

- tip_1, tip_2, ., tip_n reprezinta tipurile corespunzatoare campurilor si pot fi orice tipuri predefinite sau definite de utilizatori, simple sau structurate.

Exemple:

1) Pentru a defini un tip care sa descrie o multime de obiecte "carte", conform exemplului anterior putem folosi urmatorul tip de date:

type carte = record

titlu: string [50];

autor: string [25];

an_ap: 1900..2000;

editura: string [30];

nr_pag: word;

end;

2) Pentru a defini un tip de date care descrie o data calendaristica:

type data = record

zi: 1..31;

luna: 1..12;

an: 1900 .. 2000;

end;

3) Pentru a defini un tip de date care caracterizeaza o persoana:

type persoana = record

nume: string;

data_n: data;

adresa: string;

end;

Declararea unor variabile de acest tip se face astfel:

var c: carte;

p: persoana;

d : data;

Selectarea unui camp dintr-o inregistrare se face utilizand o constructie de forma:

nume_inregistrare. nume_camp

Exemple:

c.titlu: = 'Amintiri din copilarie';

c.autor: = 'Ion Creanga';

c.an_ap: = 1983;

c.editura: = 'Albatros';

c.nr_pag: = 100;

sau, pentru o variabila de tip persoana:

p.nume: = 'Ionescu';

p.data_n.zi: = 17;

p.data_n.luna: = 5;

p.data_n.an: = 1970;

Variabilele inregistrare in memoria calculatorului

O variabila de tip inregistrare este reprezentata in memoria calculatorului utilizand o secventa de locatii de memorie pentru a memora fiecare camp al inregistrarii. De exemplu, o variabila p, de tip persoana avand urmatoarele valori pentru campurile sale

p.nume: = 'Ionescu Ana';

p.data_n.zi: = 17;

p.data_n.luna: = 'mai';

p.data_n.an: = 1970;

p.adresa: = 'Hunedoara'

ocupa in memoria calculatorului 24 octeti consecutivi.

Inregistrari cu structura variabila

Se pot defini variabilele de tip inregistrare la care unele dintre campuri depind de o informatie deja prezenta in inregistrare. Astfel de tipuri se pot defini astfel:

type nume = record

camp1: tip_1;

camp2: tip_2;

.......

case selector: tip_selector of

const_1:(camp_i: tip_i; camp_j; tip_j;.);

const_2:(camp_k: tip_k;.);

.......

end;

O astfel de inregistrare este compusa dintr-o parte fixa si o parte variabila. Partea fixa a unei inregistrari trebuie pusa in mod obligatoriu la inceput. "Selector" este un camp al inregistrarii in functie de valorile caruia inregistrarea are in continuare o structura variabila.

Exemplu:

type masina= record

marca: string [20];

culoarea: string [15];

data_fab: data;

case provenienta: char of

'r': (nr_inmatr: string [9]);

'r': (tara: string; data_intrarii: data; nr_provizoriu: string [10]);

end;

Instructiunea WITH

Se foloseste pentru prescurtarea referii campurilor unei inregistrari. Sintaxa instructiunii este:

with variabila_inregistrare do instructiune

Instructiunea evita notatiile lungi si greoaie in care apar numele variabilelor inregistrare si numele campurilor.

Exemplu:

type data = record

An: 1900 .. 2000;

Luna: 1..12;

Zi: 1..31;

end;

var data_nasterii: data;

.....

data_nasterii.an: = 1999;

data_nasterii.luna: = 10;

data.nasterii.zi: = 16;

Aceste atribuiri se mai pot face utilizand constructia:

with data_nasterii do

begin

An: = 1999;

Luna: = 10;

Zi: = 10;

end;

4. Tipul de date multime (SET)

Tipul de date multime (SET) desemneaza o multime (in sens matematic) de elemente de acelasi tip, precum si operatii specifice de lucru cu multimi.

Fiind dat un tip ordinal, numit tip de baza, putem defini un tip multime (SET) ca fiind multimea tuturor submultimilor tipului de baza, inclusiv multimea vida.

Valorile pe care le poate lua o variabila de tip multime sunt chiar submultimile tipului de baza.

Observatie. La versiunea Turbo Pascal pentru calculatoare personale tipul de baza poate avea maximum 256 elemente. Alte limbaje nu dispun de acest tip de date (limbajul C).

Exemple de multimi:

;

Ordinea elementelor in cadrul unei multimi nu are importanta. De asemenea, aceleasi elemente care apar o singura data: ;

Definirea unui tip de date multime se face astfel:

type nume = set of tip_de_baza;

Exemple:

type litere = set of 'a'..'z';

numere = set of byte;

sau

type examene = (mate, fizica, chimie, informatica, desen);

mult_examene = set of examene;

var promovate, nepromovate: mult_examene;

Valorile unui tip multime sunt de fapt submultimile multimii definite de tipul de baza specificat la declarare. Daca n este numarul de valori ale tipului de baza, atunci o variabila sau constanta de tip multime va fi reprezentata in memorie pe n biti intr-o zona de lungime [n/8]+1 octeti, fiecarui element din tipul de baza corespunzandu-i in aceasta zona 1 bit. Bitul respectiv va avea valoarea 1 daca elementul corespunzator din tipul de baza apartine multimii si 0 in caz contrar. Multimea vida va fi reprezentata printr-un sir de bti cu valoarea 0.

Exemplu:

Un tip de date cu elemente multime din domeniul 1..25 este definit prin declaratia:

type M = set of 1..25;

Tipul de baza al acestei multimi are 25 elemente. O multime a acestui tip va fi reprezentata in memorie pe [25/8]+1 = 4 octeti adica pe 32 de biti. Din acesti 32 de biti doar 25 vor fi utilizati.

Specificarea unei valori de tip multime se face scriind elementele multimii respective intre paranteze drepte, separate prin virgula.

Exemple:

[ ] - multimea vida

['a', 'c', '0', '9', '$'] - o multime de tipul SET OF CHAR.

[1,4,5,78,123,234] - o multime de tipul SET OF BYTE

Operatiile care se pot efectua cu date de tip multime sunt cele cunoscute din teoria multimilor:

- reuniunea: A B :    A+B - inegalitatea A B: A<>B

- intersectia: A B: A*B - incluziunea A B: A<=B

- diferenta: AB: A-B - apartenenta xIA: x in A

- egalitatea A=B: A = B

In aceste relatii A si B sunt 2 multimi, iar x este un element de tipul de baza al multimii A. Doua multimi pot opera cu ajutorul operatorilor descrisi anterior daca cele 2 multimi sunt de tipuri compatibile. Doua tipuri multime sunt compatibile daca ele au acelasi tip de baza, sau daca tipurile de baza sunt ambele subdomenii ale aceluiasi tip, sau daca unul dintre tipurile de baza este subdomeniu al celuilalt.

Citirea si afisarea variabilelor de tip multime

Operatiile de citire si scriere se pot efectua numai element cu element. Pentru citirea unei variabile de tip multime se citesc pe rand elementele multimii respective si apoi se reunesc cu multimea respectiva. Aceasta se va initializa prealabil cu multimea vida.

var m: set of tip_de_baza;

x: tip_de baza;

i,n: byte;

begin

write ('nr. elemente multime:');

readln (n);

m: = [ ];

for i:= 1 to n do

begin

read(x);

m:= m + [x];

end;

end.

Observatie: Citirea elementelor multimii m din exemplul anterior poate fi efectuata numai daca x apartine unui tip de data ale carui valori pot fi citite de la tastatura.

Pentru afisarea elementelor aceleasi multimi m, se procedeaza astfel:

for x:= valoare_initiala to valoare_finala do

if x in m then write (x);

Teme pentru laboratorul 1.

Se considera notele unui student obtinute la cele n examene din timpul unui an universitar. Sa se determine media generala a studentului, numarul de examene nepromovate, care a fost cea mai mare si cea mai mica nota obtinuta si daca acesta a obtinut note de 10 la examen.

In urma unor masuratori se obtin n valori reale. Sa se determine care au fost valorile care s-au incadrat in limitele normale (limitele normale se introduc sub forma unui interval [a,b]). De asemenea, se va determina daca o anumita valoarea ( ce se introduce de la tastatura ) apare printre valorile masurate. Se va calcula media valorilor masurate, numarul de valori care se apropie de medie cu o aproximatie de 0.5. Se va afisa si cea mai apropiata valoare masurata de medie.

Se considera pentru fiecare din cei n studenti ai unei grupe, notele obtinute la cele m examene din timpul unui an universitar. Sa se determine pentru fiecare student media sa generala si numarul de examene nepromovate. De asemenea, sa se determine media generala a grupei si care a fost studentul cu cele mai multe examene nepromovate. Sa se afiseze pentru fiecare student mediile in ordine crescatoare.

Incercati rezolvarea aplicatiei in conditiile in care studentii au avut maxim m examene.

Un text a carui lungime nu depaseste 255 de caractere se introduce de la tastatura. Sa se determine numarul de cuvinte si de propozitii din text.

Se considera doua nume de studenti introduse de la tastatura. Sa se verifice daca cele doua nume sunt egale :

fara a face deosebire intre literele mari si literele mici.

facand deosebire intre literele mari si mici.

Pentru evidenta studentilor, la secretariatul facultatii se retin, pentru fiecare student, urmatoarele date: numar matricol, nume, adresa, telefon, liceul absolvit, media bacalaureat. Sa se citeasca datele despre cei n studenti ai unei grupe. Se va afisa o lista alfabetica cu studentii. De asemenea, se va afisa numele studentului care a avut cea mai mare medie la bacalaureat. Pentru un alt nume, sa se verifice daca acesta face parte din aceasta grupa.

Fie informatiile despre marfurile dintr-un magazin: denumire, cod, furnizor, data intrarii, cantitate, pret unitar. Se cere:

sa se citeasca informatiile despre cele n marfuri din magazin.

sa se afiseze o lista cu denumirea si valoarea fiecarei marfi.

sa se afiseze o lista alfabetica cu marfurile.

sa se afiseze valoarea marfurilor din magazin



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2254
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved