du Metodyki i techniki programowania 1 2008/2009 ZAJ CIA 7. Tablice Na tych zaj ciach poznamy tablice liczb, zarówno jedno jak i wielowymiarowe. Tworzymy je, gdy mamy do czynienia z ilo ci powi zanych ze sob danych. Bo jak inaczej wyobrazi s sobie mo na ledzenie np. miesi cznych zarobków, wyników na giełdzie, czy ilo ci dziennych opadów. Takie dane przechowywane wła nie w tablicach jednowymiarowych. Tablic dwuwymiarow mo e by np. rozkład barw poszczególnych pikseli na ekranie monitora, a tablic trójwymiarow np. rozkład temperatury w jakim pomieszczeniu. TABLICE s Tablica elementów jest ci głym obszarem pami ci. W tym obszarze elementy przechowywane obok siebie. Deklaruj c tablic nale y poda typ elementów oraz ich ilo. DEKLARACJA TABLICY JEDNOWYMIAROWEJ Przykład 1.: int tab[5] ; tab nazwa tablicy i jednocze nie adres pierwszego elementu int - typ jej elementów [ ] - operator indeksu Jak wida w tablicy musz znajdowa si elementy tego samego typu. W powy szym przykładzie tych elementów b dzie 5. W j zyku C tablice indeksujemy od 0. INICJALIZACJA TABLICY Przypisanie poszczególnym komórkom tablicy (pami ci) konkretnych danych robi si w sposób nast puj cy: lub inaczej: tab[0] = 3; tab[1] = 5; tab[2] = 4; tab[3] = 7; tab[4] = 8; tab[5] = 3,5,4,7,8; mgr in. Adam Id kowski 1
TABLICE DWUWYMIAROWE DEKLARACJA Przykład 2: int tab [3] [4]; int typ elementów tab nazwa tablicy [3] liczba wierszy (w tym przypadku 3) [4] liczba kolumn (w tym przypadku 4) INICJALIZACJA TABLICY tab [3] [4] = 1,3,5,2,5,4,7,8,6,4,5,6; S lub inaczej: tab [3] [4] = 1,3,5,2,5,4,7,8,6,4,5,6; WI CEJ O INICJALIZACJI TABLIC trzy rodzaje tablic: zewn trzne, statyczne i automatyczne. Warto wiedzie, e je li zapomnimy zainicjowa tablic, to je li jest ona zewn trzna lub statyczna - b dzie ona domy lnie wypełniona zerami. Z kolei je li jest ona automatyczna - mo e mie ona dowoln warto. Kompilator wykorzystuje po prostu przypadkowe dane, które znajduj si w obszarze pami ci przeznaczonym na tablic. Przykład 3. #include <stdio.h> #include <conio.h> #define ROZMIAR 4 int zewntab[rozmiar]; // niezainicjalizowana tablica zewnetrzna int main (void) static int statab[rozmiar]; // niezainicjalizowana tablica statyczna int autab [ROZMIAR]; // niezainicjalizowana tablica automatyczna int i; for (i=0; i<rozmiar; i++) printf( %10d %10d %10d\n,zewntab[i], statab[i], autab[i]); getch(); mgr in. Adam Id kowski 2
Po zrobieniu tego przykładu sprawd co b dzie je eli zainicjujemy tablice cz ciowo (tzn. podaj c np. po 2 elementy). WPISYWANIE ELEMENTÓW Z KLAWIATURY DO TABLICY DWUWYMIAROWEJ I WY WIETLENIE WPISANYCH ELEMENTÓW NA EKRANIE Przykład 4.: #include<stdio.h> #include<conio.h> int main (void) int tab [3][4]; int i, j; // wpisywanie elementow do tablicy z klawiatury printf( Podaj element %d,%d /n,i,j ); scanf( %d, &tab[i][j]); printf( \n ); printf( %3d, tab[i][j] ); // wypisywanie ich wszystkich na ekran getch(); mgr in. Adam Id kowski 3
GENEROWANIE LOSOWYCH LICZB Z ZAKRESU OD 0 DO 99 DO TABLICY DWUWYMIAROWEJ Przykład 5.: #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> // funkcje srand, rand // funkcja time int main (void) int tab [3][4]; int i, j; srand(time(0)); //uruchamia generator liczb losowych korzysta z //zegara wewn trznego komputera tab[i][j]=rand()%100; printf(" \n"); printf( "%3d ", tab[i][j] ); getch(); // wpisanie losowych liczb do tablicy //wyswietlenie tablicy mgr in. Adam Id kowski 4
ZADANIA 1. Napisz program, który policzy ilo zerowych elementów w tablicy jednowymiarowej 15-elementowej z liczbami typu int. Zainicjuj tablice z 15 liczbami, wsród nich umie w dowolnych miejscach kilka zer. 2. Napisz program który b dzie liczył sum liczb w tablicy n-elementowej. Liczba elementów n oraz elementy maj by podawane z klawiatury. 3. Napisz program, który policzy ilo zerowych elementów w tablicy dwuwymiarowej 3x4 z liczbami typu int. Zainicjuj tablice z liczbami, wsród nich umie w dowolnych miejscach kilka zer. 4. Napisz program, który zapisze do tablicy jednowymiarowej 20 wygenerowanych losowo liczb całkowitych z zakresu < 48, 122 >. Traktuj c te liczby jako kody ASCII program ma podawa liczb liter, cyfr, i innych znaków wyst puj cych w tablicy. Kody ASCII: Cyfry od 48 do 57 Litery od 65 do 90 i od 97 do 122 Inne znaki od 58 do 64 i od 91 do 96 mgr in. Adam Id kowski 5
Dodatek o u ywaniu funkcji generuj cych liczby losowe Random Numbers There may be times when you need to generate and use random numbers in your programs. Maybe you are writing code for a game program in which you need to simulate rolling dice. If you truly want to have a fair game, you should use random numbers. The code to generate random numbers differs depending on your compiler. In this tutorial, I am assuming you are using Dev's C++ compiler. How do random numbers get generated? Well, every computer has an internal clock and this clock makes it possible to seed random numbers. In standard C++, the statement: srand(unsigned(time(&t))); initializes, or "seeds", the random number generator. You must use this code before attempting to get any random number. You should only use this statement once in a program. It does not generate a random number; it simply gets the generator ready. t must be declared as: time_t t; You also must include the following two header files: #include <stdlib.h> // for srand ( ) and rand ( ) #include <time.h> // for time ( ) and time_t To get a random number in the range 0 to 100, you could use: int x = rand ( ) % 101; Suppose you want to generate random numbers in the range -15 to 33. After initializing the random number generator, use: var = rand ( ) % 49-15; In general, use the following form depending on the range of random numbers you wish to generate: rand ( ) % [number of integers in desired range] + [lowerbound]; Example: Write code that will fill the contents of an integer array, MAXSIZE of 50 integers, named intarr with randomly chosen numbers in the range -10 to 110. NOTE: If you are not familiar with arrays, see [One- Dimensional Arrays (section 8)]. srand(unsigned(time(&t))); time_t t; for (int k = 0; k < 50; k++) intarr[k] = rand() % 121-10; Our next topic is the member functions which are built in to C++ that allow programmers to perform operations necessary for programs to complete their overall purpose. Read on for more... mgr in. Adam Id kowski 6