tipul-structaplicatii

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

Upload: cristina-surdu

Post on 12-Apr-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 1/28

STRUCTURI DEDATE NEOMOGENE

Prof. Gabriela ConeaColegiul National, 16-05-2009

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 2/28

Structuri

O structură este un ansamblu format din una sau maimulte 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 structurinu sunt variabile anonime ci au câte un nume, (v)referirea unui element al unei structuri se realizează cuoperatorul de selecţie ( . ) şi nu cu operatorul de indexare( [ ] ).

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 3/28

Tipul struct

Dacă dorim să prelucrăm datereferitoare la mai mulţi elevi, pentru

fiecare elev trebuie să cunoaştem: Numele – char[20]Prenumele – char[20]

Nota matematic ă - floatNota informatică- floatVârsta - int

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 4/28

Tipul struct

În C++ există un tip de date, numitstruct ,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];

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 5/28

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 6/28

Tipul inregistrare-record

(Pascal)Structura o denumim elev şi este:

Type elev=record

Beginnume, prenume: string[20];nota_mate, nota_info: real;

varsta: integer;End;

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 7/28

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;

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 8/28

Tipul struct

Definiţia structurii poate fi făcută: În cadrul funcţieimain()

Înaintea funcţieimain() (cazrecomandat)

Pentru accesul la câmpurile unei variabilede tip struct se foloseşte operatorul deselecţie directă, notat cu „. , operator cuprioritate maximă.

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 9/28

Tipul struct

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

inr.nume – reprezintă şirul nume alvariabilei inr ;inr.nume[0] - reprezint ă primul caracteral şiruluinume ;inr.nota_mate – reprezintă câmpulnota_mate al variabilei inr .

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 10/28

Tipul struct

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

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

O astfel de atribuire se mai numeştecopiere bit cu bit .

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 11/28

Înregistrările imbricate

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

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

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

int varsta;};

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 12/28

Î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âmpulclasa al substructuriiinr.situatie.note[0] – se accesează primanot ă a vectorului inclus în substructură

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 13/28

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 14/28

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 15/28

Î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.

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 16/28

Î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 toatevariabilele ocupă numărul de octeţinecesari pentru memorareacâmpului cel mai lung.

La un moment dat se poate memoradoar un singur câmp dintre celesubordonate.

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 17/28

Î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 fiocupat. Înregistrările pot avea structurăvariabilă.

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 18/28

Înregistrări cu structură

variabilă Uniunile pot fi incluse în structuri.Structurile pot fi incluse în uniuni.

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

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

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 19/28

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;};

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 20/28

Citirea părţii fixe a înregistrării main(){ persoana pers;cout<<“Nume persoana ”; cin.get(pers.nume,30); cout<<“Studii (f -fara, g-generala, l-liceu, s-

superioare)”; cin>>pers.studii;

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 21/28

Citirea părţii variabile a

înregistrării switch(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;

}

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 22/28

Afişarea înregistrării cout<<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 ”;

}}

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 23/28

Aplicatii

1. AgendaSe citesc din fisierul de intrare agenda.in unnumar natural (n<200), apoi numarul de telefonsi numele a n persoane. Programul va crea oagenda telefonica in care va retine informatiilecitite in ordinea alfabetica a numelorpersoanelor. Dupa crearea agendei telefonice,se va citi de la tastatura numele unei persoane.Daca persoana e gasita atunci se va afisa infisierul de iesire agenda.out numarul sau detelefon altfel mesaj de eroare.

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 24/28

2. Cabinetul de informatica

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

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 25/28

3. Elevi

Se considera o lista formata din date referitoarela n elevi. Fiecarui elev i se cunoaste numele siprenumele, media notelor de la oral la disciplinaInformatica si nota la teza. Realizati un programcare afiseaza pentru fiecare litera a alfabetuluinumele si prenumle elevului care a obtinut ceamai mare medie dintre cei a caror nume de

familie incepe cu acea litera. Datele de intrarese citesc din fisierul elevi.in iar rezultatele sescriu in fisierul elevi.out.

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 26/28

4. Intervale

Se considera n intervale inchise [a,b], asi b fiind numere intregi. Determinati

reuniunea acestora.Datele de intrare se citesc din fisierulintervale.in iar rezultatul in fisierulintervale.out.

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 27/28

5. Fractii

Se considera un sir de n fractii identificate prinnumarator si numitor. Datele de inrare se citescdin fisierul fractii.in.Sa se stearga din sir toate fractiile ireductibile.Fractiile reductibile vor fi afisate in fisierulfractii.out in ordinea crescatoare a valorilor. Infisierul in. txt se va citi de pe fiecare linieperechea: numarator, numitor. Fractiilerezultate vor fi afisate in acelasi format infisierul text out.txt.

7/21/2019 tipul-structaplicatii

http://slidepdf.com/reader/full/tipul-structaplicatii 28/28

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 fisierulpuncte.in.Realizati un program care determina siafiseaza in fisierul de iesire puncte.outnumarul maxim de puncte coliniaresituate pe o dreapta paralela cu axa OX.