Info2/2008tavasz/kuka
A MathWikiből
A lap korábbi változatát látod, amilyen Wettl (vitalap | szerkesztései) 2008. március 14., 07:12-kor történt szerkesztése után volt.
Tartalomjegyzék |
4. előadás (2008-03-14)
Tömbök átadása paraméterként
Index jelölés
ld a gyakorlaton: ~/info2/mx.c
Mutató jelölés, típuskényszerítés (casting)
~/info2/mx2.c
#include <stdio.h> #define SOROKSZ 10 #define OSZLOPOKSZ 10 int legnagyobb(int *a, int oszsz, int ssz, int osz) { int i, j; int mx = *a; for( i = 0; i < ssz; i++) for( j = 0; j < osz; j++) if ( *(a + i*oszsz + j) > mx) mx = *(a + i*oszsz + j); return mx; } int main() { int t[SOROKSZ][OSZLOPOKSZ] = { {21, 42, 13}, {35, 20, 15} }; int ssz = 2; int osz = 3; int m; m = legnagyobb( (int *)t, OSZLOPOKSZ, ssz, osz); printf("A legnagyobb érték %d.\n", m); return 0; }
Véletlen sorozat generálása
Véletlen számok generálása: rand() az stdlib.h betöltése után egy [0,RAND_MAX] = [0,INT_MAX] intervallumba eső egészt generál. random seed: srand( <szám> ) hívással befolyásolható az elsőnek generált -- és ezzel az összes -- szám, mivel ez csak álvéletlen sorozat. Valódi véletlenség látszatához használjuk a time( NULL ) függvényt.
~/info2/rand.c
#include <stdio.h> #include <stdlib.h> #include <time.h> int main (void) { int i; srand( (unsigned int) time( NULL )); // seed for (i=0; i<5; ++i) printf("%d ",rand()%64); // [0..RAND_MAX] printf("\n"); return 0; }
Struktúra
#include <stdio.h> #include <stdlib.h> int main(void) { struct allat // struktúra deklaráció { char nev[20]; int db; struct allat *kov; // mutató a következőre }; struct allat *elso = NULL; // mutató az első állatra struct allat *ez = NULL; // mutató erre az állatra struct allat *utso = NULL; // mutató az előzőre char c = '\0'; for( ; ; ) { printf("\nBeviszed egy allat adatait? (i/n) "); scanf(" %c",&c); if(c == 'n' || c == 'N') break; // memóriaallokáció ez = (struct allat*) malloc(sizeof(struct allat)); if(elso == NULL) elso = ez; // mutató az első állatra if(utso!= NULL) utso -> kov = ez; printf("\nAz allat neve? "); scanf("%s", ez -> nev); printf("\nHany %s lesz a hajon? ", ez -> nev); scanf("%d", &ez -> db); ez->kov = NULL; // lehet, hogy ez az utolsó utso = ez; // áttesszük az utso-ba } // állatok listájának kiírása ez = elso; while (ez != NULL) // amíg ez egy érvényes mutató { printf("\n%d darab %s,\n", ez->db, ez->nev); utso = ez; // mentés memóriafelszabadításhoz ez = ez->kov; // mutató a következőre free(utso); // memóriafelszabadítás } return 0; }
Struktúra átadása paraméterként
#include <stdio.h> #include <stdlib.h> struct allat *uj_allat(void); struct allat // struktúra deklaráció { char nev[20]; int db; struct allat *elozo; // mutató az előzőre struct allat *kov; // mutató a következőre }; int main(void) { struct allat *elso = NULL; // mutató az első állatra struct allat *ez = NULL; // mutató erre az állatra struct allat *utso = NULL; // mutató az előzőre char c = '\0'; for(;;) { printf("\nBeviszed %segy allat adatait? (i/n) ", elso == NULL ? "" : "meg " ); scanf(" %c",&c); if(c == 'n' || c == 'N') break; // memóriaallokáció ez = uj_allat(); if(elso == NULL) { elso = ez; utso = ez; } else { utso->kov = ez; ez->elozo = utso; utso = ez; } } /* KIÍRÁS */ ez = elso; while (ez != NULL) // amíg ez egy érvényes mutató { printf("%d darab %s,\n", ez->db, ez->nev); utso = ez; // mentés memóriafelszabadításhoz ez = ez->kov; // mutató a következőre free(utso); // memóriafelszabadítás } return 0; } struct allat *uj_allat(void) { struct allat *a; a = (struct allat*) malloc(sizeof(struct allat)); printf("\nAz allat neve? "); scanf("%s", a -> nev); printf("\nHany %s lesz a hajon? ", a -> nev); scanf("%d", &a -> db); a->kov = a->elozo = NULL; return a; }