Informatika2-2013/Gyakorlat06
A MathWikiből
A lap korábbi változatát látod, amilyen Kkovacs (vitalap | szerkesztései) 2013. március 19., 05:26-kor történt szerkesztése után volt.
Tartalomjegyzék |
Ismétlés
- Dinamikus memória kezelésrõl volt szó:
#include<stdlib.h> ... int i; // ciklusváltozónak int m; // ebbe olvassuk be a tömb méretét scanf("%d",&m); int *vec = (int *)malloc(m * sizeof(int)); // itt foglaljuk le a memóriát a tömbnek ... for(i=0; i<M; i++){ vec[i]=i*i; // majd feltöltjük a tömböt az indexek négyzetével } ...
- Típus konverzió:
... int a = 2; int b = 4; double c = a / (double)b; ...
- NULL és lezáró nulla '\0'
... int *vec = (int *)malloc(m * sizeof(int)); if(vec == NULL){ printf("Nem sikerult a memoriafoglalas."); return 1; } ...
- Valamint a fõ mondanivalója az elõzõ gyakorlatnak a 2. feladatban rejlett, mégpedig:
- Nagyobb problémának nem érdemes eszetlenül nekivágni
- Részenként kell megírni, ezeket a részeket folyamatosan teszteni hogy jól mûködnek-e
- Ha már egyszer megírtunk valamit függvényként, akkor felesleges ugyanezt megírni mégegyszer
- Tehát új függvények írásánál, ha értelmes próbáljuk használni a korábbiakat
File I/O
- Egy példa, alatta és a kommentekben magyarázom:
#include<stdio.h> int main(void){ int i; int z; char s[100]; FILE* fp; // Letrehozzuk a file pointerunket fp = fopen("test.txt", "w"); // Megnyitjuk a test.txt-t irasra for(i = 0; i < 10; i++){ fprintf(fp, "%d\n", i * i); // Negyzetszamokat irunk a file-ba } fprintf(fp, "Volt egyszer egy kiskutya elment a vasarba.\n"); // Csak ugy irtunk valami szoveget a file-ba fclose(fp); // Bezarjuk a file-t fp = fopen("test.txt", "r"); // Ujra megnyitjuk, de olvasasra for(i = 0; i < 10; i++){ fscanf(fp, "%d", &z); // Kiolvasunk a file-bol egy int-et printf("%d, ", z); // Kiirjuk a kepernyore amit kiolvastunk } fscanf(fp, "%s", s); // Kiolvasunk egy szot a file-bol printf("%s", s); // Majd ezt ki is irjuk fclose(fp); // Bezarjuk a file-t return 0; }
- Tehát fopen-el nyitunk meg file-t, fclose-al zárjuk be, FILE* segítségével dolgozunk rajta (ezeknek a leírása az elõadáson jobban megvan).
- Ugyanúgy írhatunk file-ba mintha printf-el tennénk csak fprintf-el kell és meg kell adni a file pointerét.
- Ugyanúgy olvashatunk file-ból mintha a terminálból, a felhasználótól olvasnánk be, csak fscanf-el és meg kell adni a file pointerét.
- Karakter tömbökbe olvashatunk a %s-el, ekkor az fscanf az elsõ whitespace karakterig olvas (space, újsor, tab...)
Feladat 1
1. Átlaghoz közel file-al
Írjátok meg az elõzõ gyakorlat 1. feladatát úgy, hogy file-ból olvassa be a bemeneteket, és egy másik file-ba mentse a kimenetet.
Az elõzõ gyakorlat 1. feladatának egy megoldása itt található: [Megoldás http://math.bme.hu/~kkovacs/info2/legkozelebb.c], [Megoldás kommentezve http://math.bme.hu/~kkovacs/info2/legkozelebb_kommentezve.c]