====== 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:
int t[10];
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:
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;
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;
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
===== Ćwiczenie: 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
===== Zadanie: Sortowanie liczb =====
Napisz program o nazwie ''sortowanie.c'', który posortuje ciąg liczb rzeczywistych w kolejności od najmniejszej do największej.
Spróbuj samodzielnie zaprojektować i zaimplementować algorytm sortowania. \\
**Dane wejściowe (podaje użytkownik):**
* liczba całkowita ''n'' określająca ilość liczb
* sekwencja ''n'' liczb rzeczywistych (zakładamy, że liczb nie będzie więcej niż 1000)
**Wynik:**
* sekwencja ''n'' liczb wypisanych w kolejnych liniach w rosnącej kolejności.
**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
Rozwiązanie w postaci pliku zawierającego program w języku C umieść [[https://moodle.umk.pl/WFAIIS/mod/assign/view.php?id=1884|tutaj]]