7. Tablice - majsylw/Introduction-to-programming-in-C GitHub Wiki
Na wcześniejszych zajęciach dowiedziałeś się, jak przechowywać pojedyncze liczby oraz znaki. Czasami zdarza się jednak, że potrzebujemy przechować kilka, kilkanaście albo i więcej zmiennych jednego typu. Nie tworzymy wtedy np. dwudziestu osobnych zmiennych. W takich przypadkach z pomocą przychodzi nam tablica.
Tablica to ciąg zmiennych jednego typu. Ciąg taki posiada jedną nazwę a do jego poszczególnych elementów odnosimy się przez numer (indeks) oraz operator []
. Tablice definiuje się podobnie jak zmienne:
typ nazwa[rozmiar];
// Przyklady deklaracji tablicy
char napis[25];
float oceny[7];
int punkty[7];
Dane do tablic można wprowadzać przy definicji, albo przypisać wartość wybranemu elementowi.
// inicjalizacja tablicy liczby
int liczby[3] = {12, 61, 51};
// dobieramy się do konkretnych elementów tablicy liczby zmieniając ich wartość - numerujemy od 0
liczby[0] = 12;
liczby[1] = 61;
liczby[2] = 51;
Tablice mogą służyć do przechowywania wielu wartości tego samego typu w kolejności zadanej przez użytkownika. Możemy też zadbać o ich kolejność stosując odpowiednie algortymy sortujące, np. sortowanie bąbelkowe:
// Autor: Karol Tarnowski
#include <stdio.h>
#define N 5
int main(){
int i, j;
float a[N] = {2,5,9,3,1};
float t;
printf("Tablica nieposortowana.\n");
for(i=0; i<N; i++){
printf("%g ",a[i]);
}
for(i=0; i<N-1; i++){
for(j=0; j<N-i-1; j++){
// jesli kolejnosc jest nieprawidlowa zamien zmienne miejscami
if( a[j] > a[j+1] ){
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
printf("\nTablica posortowana.\n");
for(i=0; i<N; i++){
printf("%g ",a[i]);
}
return 0;
}
Tablice możemy wypełnić także liczbami losowymi. Do generowania całkowitych liczb losowych można wykorzystać funkcję rand()
z biblioteki stdlib
. Funkcja zwraca liczbę całkowitą z przedziału 0, RAND_MAX
, gdzie RAND_MAX
wynosi co najmniej 32 767. Generator liczb pseudolosowych działa
w sposób deterministyczny. W celu zmiany ciągu generowanych liczb należy zmienić ziarno generatora. W tym celu wywołać należy funkcję srand()
przekazując do niej liczbę całkowitą. Przekazywaną liczbą może być czas wywołania funkcji zwracany przez funkcję time()
z biblioteki time
.
// Autor: Karol Tarnowski
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#define N 6
int main(){
int kostka;
char znak;
time_t t;
printf("Program symuluje rzuty kostka.\n");
printf("Aby przerwac dzialanie wprowadz znak x.\n");
srand(time(&t)); //funkcja srand() zmienia ziarno generatora
//srand(time(NULL)); - alternatywne wywołanie
do{
kostka = rand() % N + 1;
printf("Na kostce wypadlo %d.\n", kostka);
scanf(" %c",&znak);
}while(toupper(znak) != 'X');
return 0;
}