Informatika2-2013/Gyakorlat06

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „== Ismétlés == * Dinamikus memória kezelésrõl volt szó: <c> #include<stdlib.h> ... int i; // ciklusváltozónak int m; // ebbe olvassuk be a t…”)
 
89. sor: 89. sor:
 
Í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.
 
Í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]
+
Az elõzõ gyakorlat 1. feladatának egy megoldása itt található: [http://math.bme.hu/~kkovacs/info2/legkozelebb.c Megoldás], [http://math.bme.hu/~kkovacs/info2/legkozelebb_kommentezve.c Megoldás kommentezve]

A lap 2013. március 19., 04:27-kori változata

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, Megoldás kommentezve

Személyes eszközök