Informatika2-2014/Gyakorlat14

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „= Elmélet = == Ismétlés == * Dinamikus memória kezelés:: <c> #include<stdlib.h> ... int i; // ciklusváltozónak int m; // ebbe olvassuk be a t…”)
 
1. sor: 1. sor:
= Elmélet =
+
= Gyakorlás =
  
== Ismétlés ==
+
'''1.''' Minden PRINT-et tartalmazó sornál határozzuk meg a kimenet értékét!
  
* Dinamikus memória kezelés::
 
 
<c>
 
<c>
#include<stdlib.h>
+
#include <stdio.h>
...
+
#define PRINT(int) printf("%d\n",int)
int i;          // ciklusváltozónak
+
 
int m;          // ebbe olvassuk be a tömb méretét
+
int main(void) {
scanf("%d",&m)
+
    int i, j, k=5;
int *vec = (int *)malloc(m * sizeof(int)); // itt foglaljuk le a memóriát a tömbnek
+
    i = 17 - 17/k*k; PRINT(i);
...
+
    k += j = i *= 3;
for(i=0; i<M; i++){
+
    k -= i == j; PRINT(k);
  vec[i]=i*i;     // majd feltöltjük a tömböt az indexek négyzetével
+
    i=2; j=3; k=5;
 +
    PRINT( i & j | k );
 +
    PRINT( !i || j && k);
 +
    i=4; j = 3; i <<= j; PRINT( i );
 +
    k = i<32 ? ++i : --i; PRINT( k );
 +
    return 0;
 
}
 
}
...
 
 
</c>
 
</c>
  
== File I/O, argumentumok ==
+
'''2.''' Az alábbi kódrészletet töltsük ki úgy, hogy a ’b’ tömbbe az ’a’ mátrix transzponáltja kerüljön!
* Előadásjegyzet: [http://wiki.math.bme.hu/view/Informatika2-2013/Eloadas#File_I.2FO File I/O ]
+
* fopen-el nyitunk meg file-t, fclose-al zárjuk be, FILE* segítségével dolgozunk rajta.
+
* 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...)
+
* Egy további példa:
+
 
<c>
 
<c>
#include<stdio.h>
+
int i,j,a[3][2]={{1,2},{2,0},{3,3}}, b[2][3];
 +
for( i=0; i<3; i++ ) {
  
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, "Most irunk a file-ba.\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;
 
 
}
 
}
 
</c>
 
</c>
* Argumentumokról: [http://wiki.math.bme.hu/view/Informatika2-2013/Eloadas#Param.C3.A9terek.2C_argumentumok előadásjegyzet]
 
 
= Feladatok =
 
== Mátrixok, 2 dimenziós tömbök ==
 
* Írj függvényt, mely dinamikusan lefoglal egy mátrixnak megfelelő helyet a memóriában.
 
* Írj függvényt, mely kiírja egy 2 dimenziós, dinamikusan lefoglalt mátrix elemeit a képernyőre.
 
* Dinamikus memóriafoglalással számold ki egy mátrix transzponáltját és négyzetét is.
 
* Írj függvényt, mely összead / kivon egymásból / összeszoroz 2 mátrixot.
 
* Megoldásaidat példákkal szemléltesd.
 
 
== File I/O==
 
=== Mátrixok ===
 
* Írj függvényt, mely file-ból beolvas a fenti függvényekkel használható mátrixot.
 
* Írj függvényt, mely file-ba  ír egy megadott mártixot, használd az előző feladat kódjait.
 
=== Gyakoriság, hisztogram ===
 
* Írj függvényt, mely megszámolja egy egész számokból álló dinamikus tömb elemeinek a gyakoriságát.
 
* A függvény paraméterként kapja meg a vizsgált tömböt. Feltételezzük, hogy a tömbben N=20-nál kisebb, vagy egyenlő értékek szerepelnek (miért van erre szükség?)
 
* Oldjuk meg a feladatot tetszőleges N-re.
 
* Írj függvényt, mely az adatokat file-ból olvassa be.
 

A lap 2014. május 6., 11:10-kori változata

Gyakorlás

1. Minden PRINT-et tartalmazó sornál határozzuk meg a kimenet értékét!

#include <stdio.h>
#define PRINT(int) printf("%d\n",int)
 
int main(void) {
    int i, j, k=5;
    i = 17 - 17/k*k; PRINT(i); 
    k += j = i *= 3;
    k -= i == j; PRINT(k);
    i=2; j=3; k=5; 
    PRINT( i & j | k );
    PRINT( !i || j && k);
    i=4; j = 3; i <<= j; PRINT( i );
    k = i<32 ? ++i : --i; PRINT( k );
    return 0;
}

2. Az alábbi kódrészletet töltsük ki úgy, hogy a ’b’ tömbbe az ’a’ mátrix transzponáltja kerüljön!

int i,j,a[3][2]={{1,2},{2,0},{3,3}}, b[2][3];
for( i=0; i<3; i++ ) {
 
 
 
}
Személyes eszközök