260 likes | 404 Views
TIPUL INREGISTRARE. LECTIA 1. S tudiu de caz : fie o linie dintr -un tabel. TIPUL INREGISTRARE. Cum se stocheaza in memoria unui calculator o linie a unui tabel ? R: folosind o structura de date, ce poate stoca date diferite
E N D
TIPUL INREGISTRARE LECTIA 1
Studiu de caz: fie o liniedintr-un tabel TIPUL INREGISTRARE Cum se stocheaza in memoriaunui calculator o linie a unuitabel? R: folosind o structura de date, cepoatestoca date diferite Aceastastructurapoartanumele de inregistrare Dupa cum se poateobserva, o inregistrare are maimultecomponente, fiecarecomponentafiind de alt tip, componentecepoartanumele de campuri O inregistrare poate primi un nume care sa defineasca intreaga inregistrare. In exemplul nostru, am putea alege numele “elev” deoarece toate campurile definesc in totalitatea lor“proprietatile” ale unui elev
Definitie: tip structurat de date, neomogen, un ansamblu format din una sau mai multe date de tipuri diferite, grupate împreună sub un singur nume. Datele pot fi: Date elementare: numerice, caracter, booleene (logice) (int, long, float, char, double) Ex: varsta unui elev poate fi un numar intreg, inatimea, un numar real; Structuri de date: vectorii numerici, siruri de caractere (structuri omogene), si inregistrarile (structurineomogene) Ex: numele unui elev este un sir de caractere, notele unui elev pot fi stocate intr-un vector numeric, TIPUL INREGISTRARE
Cum lucram cu tipul inregistrare • Pentru a lucra cu inregistrari, este necesar sa: • definim structura sa; • declaram variabile de tipul definit anterior. • Definitia: se va folosi cuvantul cheie struct, urmat de numele tipului definit de noi, si apoi intre acolade se vor defini datele care intra in componenta structurii, fiecare data avand un tip si un nume. Definitia structurii poate fi atat in main cat si inaintea definirii functiei main • Declaram cate variabile dorim de tipul definit anterior
FORMA GENERALA struct [nume structura] { [<tip> <nume variabila [, nume variabila, ……]>]; [<tip> <nume variabila [, nume variabila, ……]>]; … } [lista de variabile];
Definitia structura FORMA 1 DE DECLARARE //definirea structurii este separata de structelev{ charnume[20], prenume[20]; float nota_mate,nota_info; int varsta; }; // declararea variabilelor separat de definite elev x,y;
Declarare obiecte de tipul definit FORMA 2 DE DECLARARE struct elev{ char nume[20], prenume[20]; float nota_mate, nota_info; intvarsta; } x, y;
Accesarea campurilor Fiind data o structuraelevdefinitaastfel: struct elev{ char nume [20], prenume[20]; float nota_mate,nota_info; intvarsta; } popescu; Vomaccesaelementeleinregistrarii, folosindoperatorul de acesaredirecta “.”; Atfelvomavea: popescu.numereprezintacampulnume al variabileipopescu popescu.nume[0]reprezintaprimulcaracter din nume popescu.nota_matereprezintanota la mate a lui popescu
Diferenta intre struct si tablouri • elementele unei structuri pot avea tipuri diferite • structurile pot fi atribuite direct ( x=y ) • elementele unui structuri nu sunt variabile anonime ci au câte un nume fiecare • referirea unui element al unei structuri se realizează cu operatorul de selecţie ( . ) şi nu cu operatorul de indexare ( [ ] ).
Problema1: Se citeste si se afiseaza o variabila de tip elev #include<iostream> struct elev{ char nume [20], prenume[20]; float nota_mate,nota_info; intvarsta; }; intmain(){ elev inr; cout<“Nume “;cin>>inr.nume; cout<<“prenume “;cin>>inr.prenume; cout<<“nota mate”;cin>>inr.nota_mate; cout<<“nota info”;cin>>inr.nota_info; cout<<“varsta”;cin>>inr.varsta; cout<<“Am citit:”<<endl<< inr.nume<< “ ”<<inr.prenume<<endl<< inr.nota_mate<<endl<< inr.nota_info<<endl<< inr.varsta; Return 0; }
TEMA Problema2: Cititi o variabila cu urmatoareastructura: • Nume_elev: 30 caractere • Data_nasterii: sir de caractere, maxim 12 • Zi: intreg; • Luna : intreg • An: intreg • Nota mate real • Nota info real • Nota engleza real • Media real OBS!!!!: Media se calculeaza nu se citeste
TIPUL INREGISTRARE LECTIA 2
Corectura tema • #include<iostream> • usingnamespacestd; • struct elev{ • char nume[31], data_nastere[13]; • float nota_mate, nota_info, nota_engl, media; • int zi,luna,an; • } ; • intmain(){ • //citire date • cout<<"Nume:";cin>>inr.nume; • cout<<"data nasteri:";cin>>inr.data_nastere; • cout<<"nota mate:";cin>>inr.nota_mate; • cout<<"nota info:";cin>>inr.nota_info; • cout<<"nota engl:";cin>>inr.nota_engl; • //calcul medie • inr.media=(inr.nota_mate+inr.nota_info+inr.nota_engl)/3; • //afisare • cout<<"Elevul "<<inr.nume<<" a obtinut "; • cout<<"media: "<<inr.media; • cout<<" Felicitari!!"; • return 0; • }
Aplicatii • Exercitii din variantele de bac:variantele: 2,3 (vezianexa) • Tema: variantele de bac: 5,6,7
TIPUL INREGISTRARE LECTIA 3
Aplicatii • Corectura tema:5,6,7 variantebac • Exercitii din variantele de bac: 8-20 • Tema: variantele de bac: variantebac 22,31,33,37
TIPUL INREGISTRARE 15 febr LECTIA 4
Inregistrari Imbricate struct elev{ char nume[20], prenume[20]; struct { int clasa; float note [20]; } situatie; int varsta;} ; elevinr; inr.situatie.note[0] inr.situatie.clasa inr.varsta
Aplicatii • Variantele de baccu inregistrari imbricate: • Variantele: 21, 64, • Tema: 73, 92
TIPUL INREGISTRARE LECTIA 5
Aplicatii • Corecturatema: variantele de bac: variante 73, 92 • Lucrupeechipede cate 2 elevi: • Compuneti2 probleme cu tipulinregistrare: • “Alegetiraspunsul/raspunsurilecorecte:” sau “scrietiinstructiunea/instructiunile care…” • “Realizati un algoritm care sa: ….”
Vectori de inregistrari Problema 1: Fie urmatoareastructura: Nume: 30 caractere Inaltime: numar real Greutate: numarintreg Cititi n inregistrari de tipulcelei de maisussiafisati-le in ordineaalfabetica a numelui, fiecareinregistrarepecate o linie: Ex: n=2 Ionescu 1.62 70 Antonescu 1.72 80 Se vorafisa: Antonescu 1.72 80 Ionescu 1.62 70
Rezolvare: #include<fstream> #include<string.h> using namespace std; struct elev{ char nume[31]; float h; int g;} v[10],aux; int main(){ int n,i,j,x; ifstream fin("date.in"); ofstream fout("date.out"); fin>>n; for(i=0; i<n; i++){ fin>>v[i].nume; fin>>v[i].h; fin>>v[i].g; }
Rezolvare: //sortare vector de structuri for(i=0;i<n-1;i++) for(j=i+1;j<n;j++){ x=strcmp(v[i].nume,v[j].nume); if(x>0) { aux=v[i]; v[i]=v[j]; v[j]=aux; } } for(i=0;i<n;i++){ fout<<v[i].nume<<" "<<v[i].h<<" "<<v[i].g<<endl; } return 0; }
Vectori de inregistrari Problema2: Fie urmatoareastructura: Nume: 30 caractere Prenume: 30 caractere Inaltime: numar real Greutate: numarintreg Cititi n inregistrari de tipulcelei de maisussiafisati-le in ordinedescrescatoaredupacampulinaltime, fiecareinregistrarepecate o linie: Ex: n=2 IonescuVlad 1.62 70 AntonescuCiprian 1.72 80 Se vorafisa: AntonescuCiprian 1.72 80 IonescuVlad 1.62 70
Vectori de inregistrari Problema3: Fie urmatoareastructura: Nume: 30 caractere Prenume: 30 caractere medie: numar real Nota1,nota2: numareintregi Cititi n inregistrari de tipulcelei de maisussiafisati-le in ordinedescrescatoaredupacampulmedie, fiecareinregistrarepecate o linie: Ex: n=2 Antonescu Ciprian 8.50 8 9 Ionescu Vlad 9.50 10 9 Se vorafisa: Ionescu Vlad 9.50 10 9 Antonescu Ciprian 8.50 8 9