/* 2. félév, új tematika, C nyelv bináris fájl, struktúra, 5. gyak textfájl project-ről szóban: lényege, célja 1. prg: bináris fájl létrehozása, 2. prg: bináris fájl feldolgozása, 3. prg: textfájl olvasása. */ /* 1.prg: A menzán minden nap mind a három (A,B,C) menü egy adagjához feljegyzik a benne szereplő fehérjék, a zsírok és a szénhidrátok mennyiségét */ #include main() { FILE * fajl; typedef struct { char menu; float feherje; float zsir; float szenhidrat; } ADAGTIP; ADAGTIP adag; char fiznev[80]; int i, db; clrscr(); printf("Ételösszetétel nyilvántartás\n\n"); printf("Adja meg a nyilvántartófájl nevét:"); gets(fiznev); fajl = fopen(fiznev,"wb"); if (fajl == NULL) { printf("\nFájlnyitás sikertelen!"); exit(1); } printf("\nHány étel adatait adja meg:"); scanf("%d", &db); for (i = 0; i < db; i++) { printf("\nAz %d. menü típusa:",i+1); adag.menu = getch(); printf("%c",adag.menu); printf("\nFehérjetartalom="); scanf("%f",&adag.feherje); printf("Zsírtartalom="); scanf("%f",&adag.zsir); printf("Szénhidráttartalom:"); scanf("%f",&adag.szenhidrat); fwrite(&adag, sizeof (adag), 1, fajl); } fclose(fajl); printf("\nFájllezárás sikeres"); } /* 2. prg:Határozzuk meg, hogy a D jelű diétás menü szénhidráttartalma hány százaléka az A menü szénhidráttartalmának a tárolt menükre */ #include #include main() { FILE * fajl; typedef struct { char menu; float feherje; float zsir; float szenhidrat; } ADAGTIP; ADAGTIP adag; char fiznev[80]; int adb = 0, ddb = 0; float aszh = 0 , dszh = 0; clrscr(); printf("Szénhidrátarány-meghatározás\n\n"); printf("Adja meg a nyilvantartófájl nevét:"); gets(fiznev); fajl = fopen(fiznev,"rb"); if (fajl == NULL) { printf("\nFájlnyitás sikertelen!"); exit(1); } while ( !( feof(fajl) ) ) { fread( &adag, sizeof (adag), 1 , fajl); switch (adag.menu) { case 'a': case 'A': { adb++; aszh += adag.szenhidrat; break; } case 'd': case 'D': { ddb++; dszh += adag.szenhidrat; } } } fclose(fajl); printf("\nAz A menük átlagos szénhidráttartalma= %lf", aszh/adb); printf("\nA D menük átlagos szénhidráttartalma= %lf", dszh/ddb); printf("\nA D menük szénhidráttartalma az A menükének %lf része.", (dszh/ddb)/(aszh/adb) ); } /* 3. prg:Egy C forrásprogramot TEXT tipusú fájlnak tekintve határozzuk meg benne a szövegkonstansok előfordulásának számát. Egy szövegkonstans kezdete a " karakterről ismerhető fel. */ #include #include FILE * f; char fiznev[79]; char sor[128]; void main() { int i,db= 0; clrscr(); puts("Szövegkonstansok számlálása\n"); do { printf("A C fájl neve:"); gets(fiznev); f= fopen(fiznev,"rt"); } while (f == NULL); while (!feof(f)) { fgets(sor,128,f); i= 0; while (sor[i]) //végigmegy a sor karakterein { if (sor[i] == '"') db++; i++; } } fclose(f); printf("\n%d darab blokk van a fájlban", db/2); getch(); } //Kérdés: hol csalhat a program? //Válasz: a " karakter nem csak blokk kezdete lehet, hanem // egy keresett karakter is, mint ebben a programban, // vagy előfordulhat a megjegyzésben is. /*Project Nagyobb C programok csak projektfájl segitségével, több modulban megirva készithetők. A több modul előnye a team munka, adatrejtés, 64 Kbyte-os határ átlépése. A projekt leiró fájl tartalmazza azon modulok nevét, amelyekből felépül a teljes C programrendszer. Ezekből fordítás után egyetlen .EXE fájl keletkezik. Több modul esetén van értelme az extern tárolasi osztálynak és a fájlra nézve static minősítésnek. */