Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== Tablice====== Tablica przechowuje ciąg elementów tego samego typu, np. liczb całkowitych typu ''int''. {{ zajecia:pp1_2020_1:tab1.png?300 |}} Tablica posiada swoją nazwę, ma określony typ elementów składowych oraz rozmiar.\\ Deklaracja tablicy wygląda w następujący sposób: <code C> int t[10]; </code> Powyższa instrukcja tworzy tablicę o nazwie ''t'', która pomieści 10 liczb całkowitych typu ''int''. 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?400 |}} Przykłady posługiwania się tablicami: <code C> float tablica[100]; tablica[0] = 1.23; tablica[99] = 1.0 / 3; tablica[1] = tablica[0] - 1 ; </code> **Ważne:** 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: <code C> int x[10]; x[10] = 42; </code> W typowych zastosowaniach iteruje się po kolejnych elementach tablicy za pomocą pętli ''while'' lub ''for''.\\ Przykład: wyzerowanie wszystkich elementów tablicy: <code C> int i = 0; int tab[100]; while( i < 100) { tab[i] = 0; i = i + 1; } </code> Pętla ''for'' pozwala zrealizować to samo w bardziej zwięzły sposób, np,: <code C> int i; int tab[100]; for (i=0; i<100; i++) tab[i] = 0; </code> 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: <code C> int i = 0; while ( i < 10 ) { a[i] = b[i]; i++; } </code> ===== Przykładowy program ===== Poniższy program wyznacza sumę oraz wartość średnią ''N'' liczb rzeczywistych podanych przez użytkownika. <code C> #include <stdio.h> int main() { int n, i; float tablica[100]; float suma = 0.0; printf("Ile liczb posumowac: "); scanf("%d",&n); printf("Podaj kolejne liczby:\n"); i=0; while(i<n) { scanf("%f", &tablica[i]); i++; } for(i=0; i<n; i++) suma = suma + tablica[i]; printf("Suma = %f\n", suma); printf("Srednia = %f\n", suma/n); return 0; } </code> Plik: {{zajecia:pp1_2020_1:suma.c}} Ćwiczenia: * Dla jakiej ilości liczb wejściowych powyższy program działa poprawnie? * Spróbuj zabezpieczyć działanie programu tak aby nie możliwe było wprowadzenie większej liczby wartości niż wynosi rozmiar tablicy. * Dodaj do programu wypisywanie następujących wartości wyznaczonych dla sekwencji podanych liczb: * wartość maksymalna i minimalna * odchylenie standardowe * ilość wartości dodatnich i ujemnych ===== Zadanie: 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 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 ===== Zadanie: Sortowanie liczb ===== Napisz program, który posotruje ciąg liczb rzeczywistych w kolejności od najmniejszej do największej.\\ **Dane:** liczba całkowita ''n'' określająca ilość liczb oraz sekwencja ''n'' liczb rzeczywistych (zakładamy, że ''n<1000'')\\ **Wynik:** sekwencja ''n'' liczb w kolejności rosnącej. **Przykład:** n=5 1.3 0.0 2 6 3.14 Wynik: 0.000000 1.300000 2.000000 3.140000 5.000000 6.000000 ===== Zadanie: Sito Eratostenesa ===== Napisz program, który wypisze wszystkie liczby pierwsze w zakresie od 2 do ''n''. Zakładamy, że ''n < 1000000''. Do wyznaczenia liczb pierwszych wykorzystaj algorytmu [[http://pl.wikipedia.org/wiki/Sito_Eratostenesa|sita Eratostenesa]] . **Dane:** liczba całkowita ''n'' (zakładamy, że ''n<1000000'')\\ **Wynik:** sekwencja wszystkich liczb pierwszych od 2 do ''n'' **Przykład:** n=20 2 3 5 7 11 13 17