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.

Tablice

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;
}
⚠️ **GitHub.com Fallback** ⚠️