Sunteți pe pagina 1din 2

Tema pregatitoare Laborator 11 se prezinta obligatoriu la laborator

1. Creati fisierul antet analize.h in care definiti tipurile: T1 (persoana), cu campurile: - id - adresa sir de forma Nume, Prenume (de ex. Ion,Ion), alocat dinamic in faza de citire date - ocup adresa sir alocat dinamic in faza de citire date- reprezinta ocupatia persoanei (de ex. muncitor | student | casnica etc.) - cj sir de 15 caractere : primele 13 - cnp, ultimele 2 judetul de domiciliu (de ex. 1870120400423BV) - gs grupa sanguina [0,3] - aa adresa la care se vor memora valori intregi reprezentand rezultate analize medicale standard (este initializata de functia de alocare spatiu) T2 (grup), cu campurile: - a1 adresa vector de elemente de tip T1, alocat dinamic initial - a2 adresa de sfarsit a spatiului alocat pt.vector - nc numar curent persoane (<= cu nr.maxim de persoane ce pot exista in vector) - na numar de analize medicale - a3 adresa unui vector in care sunt pastrate valorile intregi reprezentand rezultatele analizelor medicale standard pentru numarul maxim de persoane din grup (adresa la care se gasesc analizele persoanei cu indice i (i >= 0) din grupul cu adresa x este (x->a3 + i * x->na) ) 2. Completati fisierul AA.c cu definitiile urmatoarelor functii : - Aloc - Functia de alocare a spatiului necesar initial pentru un grup de maxim MP persoane care fac NA analize, unde MP si NA sunt parametri. Functia intoarce NULL sau adresa spatiului alocat - Elib - Functia de eliberare a intregului spatiu ocupat de un grup (inclusiv cel alocat la citirea datelor pentru nume si ocupatie) - Afi - Functia de afisare a informatiilor pentru un grup de persoane. 3. Executati folosind fisierul de date a1.txt.

/*-- AA.c --*/ #include "analize.h" int Cit(FILE* fs, T2 *ag) /* citeste din fisierul sursa fs, presupus corect, id, cj, ocup, gs si analize */ { int i = 0, j, max = ag->a2 - ag->a1, gs; T1 *p = ag->a1; char id[61], ocup[21], cj[17]; while (i < max && fscanf(fs, "%s%s%s%i", id, cj, ocup, &gs) == 4) { p->id = (char*)strdup(id); if(!p->id) break; p->ocup = (char*)strdup(ocup); if(!p->ocup) { free(p->id); p->id = NULL; break; } strcpy(p->cj, cj); p->gs = gs; for (j = 0; j < ag->na; j++) fscanf(fs, "%i", p->aa+j); p++; } return p - ag->a1; }

int main() { T2 *ag; FILE*f; char numefis[61]; int na; printf("Nume fisier: ", id); fflush(stdin); gets(id); f = fopen(id, "rt"); if (!f) { printf("Eroare deschidere fisier %s\n", id); getch(); return -1; } fscanf(f, "%i", &na); /* citeste numar analize */ ag = Aloc(20, na); if(!ag){ printf("Eroare alocare"); getch(); return -2; } ag->nc = Cit(f, ag); fclose(f); if (ag->nc == 0){ printf("Fisier vid!!!\n"); getch(); return -3;} printf("%i persoane\n", ag->nc); Afi(ag); Elib(&ag); printf("\nSfarsit program\n"); getch(); }

Continut a1.txt 3 Popescu,Ciprian-Dumitru 1870221222333AR student 1 94 134 141 Adumitrei-Ionescu,Mihaela 2861003123456B5 casnica 2 108 208 127 Banu,Marius-Andrei 1871001100400BV student 0 101 110 132 Cristea,Mihaela 2870303111111HD elev 0 90 110 135 Dudu,Alexandru-Dan 1860110112233B1 muncitor 2 120 260 142 Barbu,Alexandru 1871001100401B5 paznic 3 84 177 128 Albu,Adrian-Marius 1870222200402B5 fara 2 88 199 135 Albu,Ana 2870222200402B5 fara 1 118 149 131 -------

S-ar putea să vă placă și