structuri de date neomogene

28
STRUCTURI DE DATE NEOMOGENE Prof. Gabriela Conea Colegiul National, 16-05-2009

Upload: nubia

Post on 12-Jan-2016

192 views

Category:

Documents


6 download

DESCRIPTION

STRUCTURI DE DATE NEOMOGENE. Prof. Gabriela Conea Colegiul National, 16-05-2009. Structuri. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: STRUCTURI DE  DATE NEOMOGENE

STRUCTURI DE DATE NEOMOGENE

Prof. Gabriela Conea

Colegiul National, 16-05-2009

Page 2: STRUCTURI DE  DATE NEOMOGENE

Structuri

O structură este un ansamblu format din una sau mai multe variabile grupate împreună sub un singur nume. Structurile se deosebesc de tablouri prin următoarele aspecte:(i) elementele unei structuri pot avea tipuri diferite, (ii) structurile pot fi atribuite, (iii)funcţiile pot returna structuri, (iv) elementele unui structuri nu sunt variabile anonime ci au câte un nume, (v) referirea unui element al unei structuri se realizează cu operatorul de selecţie ( . ) şi nu cu operatorul de indexare ( [ ] ).

Page 3: STRUCTURI DE  DATE NEOMOGENE

Tipul struct

Dacă dorim să prelucrăm date referitoare la mai mulţi elevi, pentru fiecare elev trebuie să cunoaştem:

Numele – char[20] Prenumele – char[20] Nota matematică - float Nota informatică - float Vârsta - int

Page 4: STRUCTURI DE  DATE NEOMOGENE

Tipul struct

În C++ există un tip de date, numit struct, care permite ca fiecărui elev să-i corespundă o singură înregistrare.

Forma generală este:struct [nume structura]

{

[<tip> <nume variabila [, nume variabila, ……]>];

[<tip> <nume variabila [, nume variabila, ……]>];

} [lista de variabile];

Page 5: STRUCTURI DE  DATE NEOMOGENE

Tipul struct (C++)

Structura o denumim elev şi este:

struct elev

{ char nume[20], prenume[20];

float nota_mate, nota_info;

int varsta;

};

Page 6: STRUCTURI DE  DATE NEOMOGENE

Tipul inregistrare-record (Pascal)

Structura o denumim elev şi este:

Type elev=record

Begin

nume, prenume: string[20];

nota_mate, nota_info: real;

varsta: integer;

End;

Page 7: STRUCTURI DE  DATE NEOMOGENE

Tipul structExistă două posibilităţi de declarare a variabilelor care

alcătuiesc structura:

1. Scriind la sfârşit numele variabilelor:

struct elev

{ char nume[20], prenume[20];

float nota_mate, nota_info;

int varsta;

} inr1,inr2;2. Declarând variabilele aşa cum suntem obişnuiţi:

elev inr1, inr2;

Page 8: STRUCTURI DE  DATE NEOMOGENE

Tipul struct

Definiţia structurii poate fi făcută: În cadrul funcţiei main() Înaintea funcţiei main() (caz

recomandat)

Pentru accesul la câmpurile unei variabile de tip struct se foloseşte operatorul de selecţie directă, notat cu ‘.’, operator cu prioritate maximă.

Page 9: STRUCTURI DE  DATE NEOMOGENE

Tipul struct

Dacă inr este o variabilă de tipul elev. Atunci:

inr.nume – reprezintă şirul nume al variabilei inr;

inr.nume[0] - reprezintă primul caracter al şirului nume;

inr.nota_mate – reprezintă câmpul nota_mate al variabilei inr.

Page 10: STRUCTURI DE  DATE NEOMOGENE

Tipul struct

Între două variabile de acelaşi tip struct se poate folosi atribuirea.

Dacă inr1, inr2 sunt două variabile de tip elev, prin atribuirea inr1=inr2, variabila inr1 ia aceeaşi valoare ca variabila inr2.

O astfel de atribuire se mai numeşte copiere bit cu bit.

Page 11: STRUCTURI DE  DATE NEOMOGENE

Înregistrările imbricate

Putem avea un tip structurat ce conţine în interiorul său un alt tip structurat.

struct elev{ char nume[20], prenume[20];

struct{ int clasa;float note[20];} situatie;

int varsta;};

Page 12: STRUCTURI DE  DATE NEOMOGENE

Înregistrările imbricate

Dacă inr este o variabilă de tipul elev. Atunci accesarea elementelor situate în interiorul structurii se face astfel:

inr.situatie.clasa – se accesează câmpul clasa al substructurii

inr.situatie.note[0] – se accesează prima notă a vectorului inclus în substructură

Page 13: STRUCTURI DE  DATE NEOMOGENE

Înregistrările imbricate

Dacă avem

struct elev1

{ char nume[20], prenume[20];

struct

{ int clasa;

float note[20];

} situatie_1, situatie_2;

int varsta;

};

Page 14: STRUCTURI DE  DATE NEOMOGENE

Înregistrările imbricate

Tipul structurat elev1, subordonează structurile situatie_1 şi situatie_2.

Dacă una sau mai multe structuri sunt incluse una în alta, acestea se numesc structuri imbricate.

Page 15: STRUCTURI DE  DATE NEOMOGENE

Înregistrările imbricate

struct elev1{ char nume[20], prenume[20]; struct

{ int clasa; float note[20];} situatie_1,

situaţie_2; int varsta;};

struct elev1{ char nume[20], prenume[20]; struct

{ int clasa; float note[20];} situatie_1;

struct{ int clasa; float note[20];} situaţie_2;

int varsta;};

Cele două structuri sunt echivalente.

Page 16: STRUCTURI DE  DATE NEOMOGENE

Înregistrări cu structură variabilă

# include <iostream.h>union test

{ int a; char b[10]; double c;};

main(){ test var; int i; cin>>var.c; cout<<var.c<<endl; cin>>var.b; cout<<var.b;}

# include <iostream.h>union test

{ int a; char b[10]; double c;};

main(){ test var; int i; cin>>var.c; cout<<var.c<<endl; cin>>var.b; cout<<var.b;}

Variabila var este de tipul union. Câmpurile subordonate ar trebui să ocupe 2,10 şi 8 octeţi dar toate variabilele ocupă numărul de octeţi necesari pentru memorarea câmpului cel mai lung.

La un moment dat se poate memora doar un singur câmp dintre cele subordonate.

Page 17: STRUCTURI DE  DATE NEOMOGENE

Înregistrări cu structură variabilă

Forma generală a unei uniuni este:

union [<numele uniunii>]

{ <tip> <nume variabila>;

} [lista de variabile] ;

La un moment dat numai un câmp poate fi ocupat. Înregistrările pot avea structură variabilă.

Page 18: STRUCTURI DE  DATE NEOMOGENE

Înregistrări cu structură variabilă

Uniunile pot fi incluse în structuri.

Structurile pot fi incluse în uniuni.

Înregistrarea are structură variabilă dar ocupă un număr fix de octeţi.

Citirea şi afişare înregistrării se face, de fiecare dată , sub switch, în funcţie de datele citite sau conţinute.

Page 19: STRUCTURI DE  DATE NEOMOGENE

Definirea structurilor şi uniunii#include<iostream.h>struct persoana

{ char nume[30], studii; union

{ int nr_clase; struct

{ int an_t; char oras[20];} liceu;

struct{ char nume_f[30]; int nr_ani;} facultate;

} std;};

Page 20: STRUCTURI DE  DATE NEOMOGENE

Citirea părţii fixe a înregistrăriimain()

{ persoana pers;

cout<<“Nume persoana ”; cin.get(pers.nume,30);

cout<<“Studii (f-fara, g-generala, l-liceu, s-superioare)”;

cin>>pers.studii;

Page 21: STRUCTURI DE  DATE NEOMOGENE

Citirea părţii variabile a înregistrăriiswitch(pers.studii)

{ case ‘g’: cout<<“ numar clase ”;

cin>>pers.std.nr_clase; break;

case ‘l’: cout<<“ anul terminarii liceului ”;

cin>>pers.std.liceu.an_t;

cout<<“ orasul ”;

cin>>pers.std.liceu.oras; break;

case ‘s’: cout<<“ numele facultatii ”; cin.get();

cin.get(pers.std.facultate.nume_f,30);

cout<<“ nr. Ani de studiu ”;

cin>>pers.std.facultate.nr_ani;

}

Page 22: STRUCTURI DE  DATE NEOMOGENE

Afişarea înregistrăriicout<<pers.nume<<endl;switch(pers.studii){case ‘f’: cout<<“n-are saracu’ studii ”; break; case ‘g’: cout<<“numar clase”<<pers.std.nr_clase;

break; case ‘l’: cout<<“ a terminat liceul in ”

<<pers.std.liceu.an_t<<“ in orasul ” <<pers.std.liceu.oras; break;

case ‘s’: cout<<“ A terminat facultatea “ <<pers.std.facultate.nume_f<<“ de “ <<pers.std.facultate.nr_ani<<“ ani ”;

}

}

Page 23: STRUCTURI DE  DATE NEOMOGENE

Aplicatii

1. Agenda Se citesc din fisierul de intrare agenda.in un

numar natural (n<200), apoi numarul de telefon si numele a n persoane. Programul va crea o agenda telefonica in care va retine informatiile citite in ordinea alfabetica a numelor persoanelor. Dupa crearea agendei telefonice, se va citi de la tastatura numele unei persoane. Daca persoana e gasita atunci se va afisa in fisierul de iesire agenda.out numarul sau de telefon altfel mesaj de eroare.

Page 24: STRUCTURI DE  DATE NEOMOGENE

2. Cabinetul de informatica

In cabinetul de info din CN se afla n calculatoare (numerotate de la 1 la n). Pentru fiecare se cunosc tipul procesorului (486, Pentium I, II, III, IV, Duron, etc), frecventa procesorului (exprimata in MHz), memoria RAM (exprimata in Mb) si capacitatea harddiscului (exprimata in MB). Realizati un program care afiseaza calculatoarele ce pot fi conectate intr-o retea sub un sistem de operare (frecventa cel putin x Mhz, memoria cel putin y Mb si capacitatea harddiscului cel putin z Mb). Ca server va fi ales un calculator cu cele mai bune performante in ordinea: frecventa, memorie, RAM. Datele se citesc din fisierul cabinet.in iar rezultatele se vor scrie in fisierul cabinet.out.

Page 25: STRUCTURI DE  DATE NEOMOGENE

3. Elevi

Se considera o lista formata din date referitoare la n elevi. Fiecarui elev i se cunoaste numele si prenumele, media notelor de la oral la disciplina Informatica si nota la teza. Realizati un program care afiseaza pentru fiecare litera a alfabetului numele si prenumle elevului care a obtinut cea mai mare medie dintre cei a caror nume de familie incepe cu acea litera. Datele de intrare se citesc din fisierul elevi.in iar rezultatele se scriu in fisierul elevi.out.

Page 26: STRUCTURI DE  DATE NEOMOGENE

4. Intervale

Se considera n intervale inchise [a,b], a si b fiind numere intregi. Determinati reuniunea acestora.

Datele de intrare se citesc din fisierul intervale.in iar rezultatul in fisierul intervale.out.

Page 27: STRUCTURI DE  DATE NEOMOGENE

5. Fractii

Se considera un sir de n fractii identificate prin numarator si numitor. Datele de inrare se citesc din fisierul fractii.in.

Sa se stearga din sir toate fractiile ireductibile. Fractiile reductibile vor fi afisate in fisierul

fractii.out in ordinea crescatoare a valorilor. In fisierul in. txt se va citi de pe fiecare linie perechea: numarator, numitor. Fractiile rezultate vor fi afisate in acelasi format in fisierul text out.txt.

Page 28: STRUCTURI DE  DATE NEOMOGENE

6. Puncte

Se considera un sir de n puncte in plan, pentru fiecare cunoscindu-se coordonatele intregi (x,y).

Datele de inrare se citesc din fisierul puncte.in.

Realizati un program care determina si afiseaza in fisierul de iesire puncte.out numarul maxim de puncte coliniare situate pe o dreapta paralela cu axa OX.