PP1 laboratorium 7


Laboratorium 7:  Tablice wielowymiarowe
mgr inż. Leszek Ciopiński
dr inż. Arkadiusz Chrobot
dr inż. Grzegorz Aukawski
3 grudnia 2015
1. Wprowadzenie
W instrukcji 4. zaprezentowane zostały tablice jednowymiarowe. Kontynuując ten temat, niniejsza
instrukcja zawiera informacje o sposobie tworzenia i korzystania z tablic wielowymiarowych w języku c.
2. Tablice
W tym rozdziale zostaną opisane zasady posługiwania się tablicami wielowymiarowymi w języku c.
2.1. Tworzenie tablic wielowymiarowych
Tablicę w języku c deklarujemy podając najpierw typ jej elementów, potem jej nazwę, a na końcu,
w nawiasach kwadratowych umieszczamy liczbę jej elementów. W przypadku tablic wielowymiarowych,
par nawiasów kwadratowych mamy tyle, ile wymiarów tablicy chcemy utworzyć. Deklaracja tablicy
kończy się znakiem średnika. Można również tworzyć zainicjowane tablice wielowymiarowe. Przykłady
deklaracji tablic podano w listingu 1. Tablice mogą być tworzone zarówno jako zmienne lokalne, jak
i globalne.
#define N 10 // Definicja stałej o nazwie N i wartości 10.
char tab[3][3]; // Tablica dwuwymiarowa o dziewięciu elementach (3x3) typu char.
double ulamki[N][N]; // Tablica dwuwymiarowa N×N elementowa liczb rzeczywistych.
long szescian[5][5][5];
int macierz[][3] = {{1,2,3},{4,5,6},{7,8,9}};
// Zainicjowana tablica dwuwymiarowa (3x3). W deklaracji możemy opuścić tylko
// jeden wymiar, pozostałe należy podać. Dodatkowe pary nawiasów klamrowych,
// wewnÄ…trz pierwszej pary, nie sÄ… konieczne.
Listing 1: Deklaracje tablic
2.2. Dostęp do elementów tablicy wielowymiarowej
W języku c, podczas odwoływania się do konkretnego pola tablicy wielowymiarowej, konieczne jest
podanie w każdej parze nawiasów kwadratowych odpowiedniego indeksu. Kolejność indeksów nie jest
przemienna. Przykłady odwołania się do tablicy wielowymiarowej podczas odczytu i zapisu zaprezento-
wano na listingu 2 zawierającym kilka przykładów.
#include
#define WIERSZ 10
#define KOLUMNA 5
int main(void)
{
int i, j;
char macierz[WIERSZ][KOLUMNA];
//wpisanie danych do macierzy
for(i = 0; ifor(j=0; jmacierz[i][j]=i*10+j;
// odczyt danych z macierzy
printf("\n[\n");
for(i = 0; ifor(j=0; jprintf("%d\t",macierz[i][j]);
printf("\n");
}
printf("]\n");
return 0;
}
Listing 2: Sposoby dostępu do elementów tablicy wielowymiarowej
W wyniku działania programu w konsoli uzyskujemy napis:
[
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
]
3. Funkcje, a tablice wielowymiarowe
Relacje pomiędzy funkcjami, a tablicami wielowymiarowymi zaprezentowane będą w oparciu o li-
sting 3.
1 #include
2 #define WIERSZ 10
3 #define KOLUMNA 5
4 typedef char mac[WIERSZ][KOLUMNA];
5
6 void uzupelnij(char macierz[WIERSZ][KOLUMNA])
7 {
8 int i,j;
9 for(i = 0; i10 for(j=0; j11 macierz[i][j]=i*10+j;
12 }
13
14 void uzupelnij2(char (*macierz)[KOLUMNA])
15 {
16 int i,j;
17 for(i = 0; i18 for(j=0; j19 macierz[i][j]=i*10+j+50;
20 }
21
22 void wyswietl(char macierz[][KOLUMNA])
23 {
24 int i,j;
25 printf("\n[\n");
26 for(i = 0; i27 for(j=0; j28 printf("%d\t",macierz[i][j]);
29 printf("\n");
30 }
31 printf("]\n");
32 }
33
34 int wieksza_suma(mac m1, mac m2)
35 {
36 char i, j;
37 int suma1=0, suma2=0;
38 for(i = 0; i39 for(j=0; j40 suma1+=m1[i][j];
41 suma2+=m2[i][j];
42 }
43 if(suma1>suma2) return -1; //return kończy funkcje
44 if(suma145 return 0;
46 }
47
48 int main(void)
49 {
50 char m[WIERSZ][KOLUMNA];
51 mac m2;
52
53 uzupelnij(m);
54 uzupelnij2(m2);
55
56 switch (wieksza_suma(m, m2)){
57 case -1: wyswietl(m); break;
58 case 1: wyswietl(m2); break;
59 default: printf("Sumy elementów obu macierzy są równe");
60 }
61
62 return 0;
63 }
3.1. Parametry
Tablice przekazywane są wyłącznie przez wskaznik. Oznacza to, że zmiany wykonane na tablicy
wielowymiarowej wewnątrz funkcji zawsze pozostają widoczne po jej zakończeniu. Parametr tablicowy
tworzony jest tak jak deklaracja tablicy wielowymiarowej, ale jedną parę nawiasów kwadratowych wolno
zostawić nam pustą (wiesz 22). Podanie wszystkich rozmiarów tablicy nie wpływa na działanie funkcji, ale
może zwiększyć czytelność jej kodu (wiersz 6). Możliwe jest też zadeklarowanie typu tablicowego (wiersze
4 i 34). Jeszcze inny przykład deklaracji parametru jako tablicy dwuwymiarowej z wykorzystaniem
wskaznika przedstawiono w wierszu 14. Umieszczenie słowa kluczowego const nie czyni przekazywanej
tablicy odpornÄ… na modyfikacje.
3.2. Zwracanie wartości
Funkcja nie może zwracać wartości będącej tablicą. W celu porównania sumy wszystkich pól dwóch
macierzy zdefiniowano w programie kod błędu. Zadaniem takiego kodu jest zwrócenie informacji o wyni-
ku wykonanego działania, zarówno o niepowodzeniu, jak i powodzeniu. W przedstawionym przypadku,
funkcja informuje, w której macierzy suma wszystkich elementów jest większa (wiersze 43 45). Taki kod
wymaga jeszcze odpowiedniej interpretacji (wiersze 56 60). Jako wynik, wyświetlone zostaną wartości
od 50 do 99.
4. Zadania
Uwaga! Wszystkie programy muszą być napisane z podziałem na funkcje z parametrami.
1. Napisz program, który wykona mnożenie macierzy o wymiarach 4 ×3 przez skalar1. Macierz należy
wypełnić liczbami typudoublelosowanymi z przedziału (-11, 11) i wypisać przed i po pomnożeniu.
Skalar powinien być wprowadzony przez użytkownika.
2. Napisz program, który znajdzie największą i najmniejszą wartość w macierzy liczby typu int
o wymiarach 3 × 4. Macierz należy wypeÅ‚nić liczbami caÅ‚kowitymi losowanymi z zakresu od -5 do
5 i wypisać jej zawartość na ekranie.
3. Napisz program, który posortuje macierz o wymiarach 4 × 4, wypeÅ‚nionÄ… liczbami typu int loso-
wanymi z zakresu od -10 do 10. Zawartość macierzy należy wypisać na ekran po jej wypełnieniu.
4. Napisz program, który wypeÅ‚ni macierz o wymiarach 4×4 liczbami caÅ‚kowitymi losowanymi z zakre-
su od -20 do 20, wypisze jej zawartość na ekran, a następnie wypisze sumy elementów należących
do poszczególnych wierszy i kolumn tej macierzy.
5. Napisz program, który wypeÅ‚ni macierz o wymiarach 5 × 5 liczbami naturalnymi losowanymi z za-
kresu od 6 do 25, następnie wypisze jej zawartość na ekran, a potem policzy różnicę sum wartości
elementów leżących na przekątnej i przeciwprzekątnej tej macierzy.
6. Napisz program, który wypeÅ‚ni macierz o wymiarach 5 × 5 liczbami naturalnymi losowanymi z za-
kresu od 0 do 15, wypisze zawartość tej macierzy na ekran, a następnie odwróci kolejność liczb
leżących na przekątnej i ponownie wypisze zawartość tej macierzy na ekran.
7. Powtórz poprzednie zadanie dla liczb leżących na przeciwprzekątnej macierzy.
8. Napisz program, który pozwoli użytkownikowi zapisać w tablicy łańcuchów znaków 10 wyrazów,
wypisze na ekran zwartość tej tablicy, a następnie znajdzie wyraz najdłuższy i wypisze go na ekran.
1
Skalar, to inaczej liczba. Należy przez nią pomnożyć wartość każdego elementu macierzy.


Wyszukiwarka

Podobne podstrony:
PP1 laboratorium 8
PP1 laboratorium 3
PP1 laboratorium 6
PP1 laboratorium 9
PP1 laboratorium 2
PP1 laboratorium 4
PP1 laboratorium 5
PP1 laboratorium 5
PP1 laboratorium
Rola laboratoriów w świetle wymagań systemów zarządzania jakoscią
Laboratorium 3
Ćwiczenie laboratoryjne nr 6 materiały
PP1 lecture 4
Windows 2 Laboratorium 4b

więcej podobnych podstron