~~NOCACHE~~ ~~REVEAL theme=simple&disableLayout=0&transition=none&controls=1&show_progress_bar=1&build_all_lists=0&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1024x768~~ ====== Tablice====== Tablica przechowuje ciąg elementów tego samego typu, np. liczb całkowitych typu ''int''. {{ zajecia:pp1_2020_1:tab1.png |}} Tablica posiada swoją nazwę, ma określony typ elementów składowych oraz rozmiar. ===== Deklaracja tablicy ===== Deklaracja tablicy wygląda w następujący sposób: int t[10]; Powyższa instrukcja tworzy tablicę o nazwie ''t'', która pomieści 10 liczb całkowitych typu ''int''. ===== Indeksowanie tablic ===== Do poszczególnych elementów tablicy odnosimy się poprzez numer elementu, gdzie elementy są numerowane (indeksowane) liczbami: 0, 1, 2, 3, ... {{ zajecia:pp1_2020_1:tab2.png |}} Przykłady posługiwania się tablicami: float tablica[100]; tablica[0] = 1.23; tablica[99] = 1.0 / 3; tablica[1] = tablica[0] - 1 ; ===== ===== * Elementy tablicy są numerowane od 0. * Wynika z tego, że dla ''N'' elementowej tablicy ostatni dozwolony indeks to ''N-1''. * Przekroczenie zakresu tablicy może się zakończyć błędem w czasie działania. Przykład niepoprawnego użycia tablicy: int x[10]; x[10] = 42; ===== Iteracja po elementach ===== W typowych zastosowaniach iteruje się po kolejnych elementach tablicy za pomocą pętli ''while'' lub ''for''. Przykład: wyzerowanie wszystkich elementów tablicy: int i = 0; int tab[100]; while( i < 100) { tab[i] = 0; i = i + 1; } ===== ===== Pętla ''for'' pozwala zrealizować to samo w bardziej zwięzły sposób, np,: int i; int tab[100]; for (i=0; i<100; i++) tab[i] = 0; ===== Kopiowanie tablic ===== Jeżeli chcemy skopiować zawartość tablicy do innej tablicy wówczas należy przekopiować każdy element osobno. \\ Przykładowo, dla danych tablic ''a'' i ''b'' kopiowanie pierwszych 10-ciu elementów może wyglądać tak: int i = 0; while ( i < 10 ) { a[i] = b[i]; i++; } ===== Przykładowy program ===== Poniższy program wyznacza sumę oraz wartość średnią ''N'' liczb rzeczywistych podanych przez użytkownika. #include int main() { int n, i; float tablica[100]; float suma = 0.0; printf("Ile liczb: "); scanf("%d", &n); printf("Podaj kolejne liczby:\n"); i=0; while(i ==== Ćwiczenia ==== * Czy powyższy program będzie działał poprawnie dla dowolnej wartości ''N'' (ilość liczb)? Co się stanie dla $N=101$ ? * Spróbuj zabezpieczyć działanie programu tak aby niemożliwe było wprowadzenie większej liczby wartości niż wynosi rozmiar tablicy. * Rozbuduj program w taki sposób aby dla podanej sekwencji liczb wyznaczył następujące statystyki: * wartość maksymalna * wartość minimalna * odchylenie standardowe $\sqrt{\frac{1}{N}\sum{(x_i - \hat{x})^2}}$, gdzie $\hat{x}$ to wartość średnia ==== Ćwiczenie: Odwracanie kolejności liczb ==== Napisz program, który wczyta ''n'' liczb rzeczywistych a następnie wyświetli je w odwrotnej kolejności. **Dane:** liczba ''n'' określająca ilość liczb oraz sekwencja ''n'' liczb rzeczywistych. Zakładamy, że ''n < 1000''\\ **Wynik:** sekwencja ''n'' liczb rzeczywistych w odwrotnej kolejności niż podana na wejściu.\\ **Przykład:** n=5 1.3 0.0 -2 6 3.14 Wynik: 3.14 6 -2 0.0 1.3 {{page>.:zadania:04_zad_sort&nofooter}}