Procedurlne programovanie 6 prednka Gabriela Koskov Obsah 1
Procedurálne programovanie: 6. prednáška Gabriela Kosková
Obsah 1. 2. 3. 4. príklady (definície + 1 príklad) jednorozmerné polia príklady (3) reťazce
Procedurálne programovanie: Práca s ukazovateľmi - príklady
Príklady definícií int x; - x je typu int *y; - y je ukazovateľ na typ int *z(); - z je funkcia vracajúca ukazovateľ na int (*v)(); - v je ukazovateľ na funkciu vracajúcu int *(*w)(); - w je ukazovateľ na funkciu vracajúcu ukazovateľ na int
Príklad program načíta celé číslo n a alokuje blok pamäte pre n celých čísel. Od používateľa čísla načíta. Nakoniec vypočíta ich priemer.
#include <stdio. h> #include <stdlib. h> int *alokuj(int pocet); void nacitaj(int *pole, int pocet); float priemer(int *pole, int pocet); void vypis(int *pole, int pocet); int main() { int *pole, n; printf("Zadajte pocet cisel: "); scanf("%d", &n); if ((pole = alokuj(n)) == NULL) { printf("Nepodarilo sa alokovat pole. n"); return 1; } nacitaj(pole, n); printf("Priemer cisel: n"); vypis(pole, n); printf("je %. 3 f. n", priemer(pole, n)); free(pole); return 0; }
int *alokuj(int pocet) { return (int *) malloc(pocet * sizeof(int)); } void nacitaj(int *pole, int pocet) { int i; for(i = 0; i < pocet; i++) { printf("%d-te cislo: ", i); scanf("%d", pole + i); } } float priemer(int *pole, int pocet) { int i, suma = 0; for(i = 0; i < pocet; i++) suma += *(pole + i); return (float) suma / (float) pocet; }
void vypis(int *pole, int pocet) { int i; for(i = 0; i < pocet; i++) printf("%d, ", *(pole + i)); }
Procedurálne programovanie: Jednorozmerné polia
Základy práce s poliami • pole je štruktúra zložená z niekoľkých prvkov rovnakého typu (blok prvkov) TYP x[N]; statická definícia poľa N: 3 TYP: int index: – pole obsahuje N prvkov – dolná hranica je vždy 0 horná hranica je N-1 – číslo N musí byť známe v čase prekladu – hodnoty nie sú inicializované na 0 0 5 1 6 2 7
Príklady definícií statického poľa #define N 10 int x[N], y[N+1], z[N*2]; x má y má z má 10 11 20 prvkov poľa, od indexu 0 0 0 po index 9 10 19
Prístup k prvkom poľa #define N 10 priradenie hodnoty do prvého prvku poľa . . . int x[N], i; x[0] = 1; for (i = 0; i < N; i++) x[i] = i+1; v cykle priradenie hodnoty postupne všetkým prvkom poľa výpis prvkov poľa for (i = 0; i < N; i++) pritnf("x[%d]: %dn", i, x[i]);
Príklad statického poľa: histogram písmen v reťazci #include <stdio. h> #include <stdlib. h> #define N ('Z' - 'A' + 1) int main() { int i; char hist[N], slovo[100]; scanf("%s", slovo); for (i = 0; i < N; i++) hist[i] = 0; /* nacitanie slova */ /* inicializacia hist */ i = 0; /* naplnenie hist */ while (i < 100 && slovo[i] != '