Laboratorium 3:
Operacje na tablicach 2D – dostep do tablicy 2D za pomocą
wskaźników, pobieranie argumentów
z konsoli, definicje makr, funkcje przeciążone.
Przykład 1. Suma elementów tablicy
"dwu-wymiarowej"
#include
<iostream.h>
int tab[][3]
=
{
{ 1, 2, 3 },
{ 4, 5, 6 }
};
int
main(void)
{
int suma = 0;
for(int i = 0; i < 2 ; i++)
for(int j = 0; j < 3 ; j++)
suma += tab[i][j];
cout << "Suma = "
<< suma << endl;
return 0;
}
Przykład 2. Sumowanie elementów
tablicy za pomocą wskazników
#include
<iostream.h>
int tab[][3]
=
{
{ 1, 2, 3 },
{ 4, 5, 6 }
};
int
main(void)
{
int suma = 0;
int *ptr = &tab[0][0];
for(int i = 0; i < 6 ; i++)
suma += *ptr++;
cout << "Suma = " <<
suma << endl;
return 0;
}
Przykład
3. Pobranie i wyswietlenie argumentów z konsoli
#include
<iostream.h>
int
main(int argv, char **argc)
{
for(int i=0;i<argv;i++){
cout<<argc[i]<<"
";
}
return 0;
}
Przykład
4. Definicje makr
#include
<iostream.h>
#define
Max(a,b) (a<b?b:a)
int
main(int argv, char **argc)
{
int a = 10;
int b = 20;
int m = 0;
cout<<"Wartosc maksymalna =
"<<(m = Max(a,b))<<endl;
double A = 0.01;
double B = 0.02;
double M = 0;
cout<<"Wartosc maksymalna =
"<<(M = Max(A,B))<<endl;
return
0;
}
Przykład 5. Podobne zadanie jak
w przykładzie 4, ale zamiast makr zostały wykorzystane funkcje
przeciążone. Zwróć uwagę na argument domyślny int two = 0.
#include
<iostream.h>
int max(int
one, int two = 0);
char max(char
one, char two);
int
main(void)
{
cout << max(2, 3) <<
endl; // 3
cout << max('a', 'b') <<
endl; // b
cout << max('a') << endl; // 97
return 0;
}
int max(int
one, int two)
{
return one > two ? one : two;
}
char max(char
one, char two)
{
return one > two ? one : two;
}
Zadanie 0. Zdefiniuj
3 zmienne: jedną typu int, drugą typu float i trzecią char.
Wyświetl wartości i adresy tych zmiennych oraz rozmiar każdej z
nich (w bitach i w bajtach).
Zadanie 1. Do
każdej ze zmiennych z zadania 1 zdefiniuj zmienną referencyjną i
spóbuj modyfikować wartości zmiennych referencyjnych. Jak się
będzie zmieniać wartość zmiennej oryginalnej.
Zadanie 2.
Na podstawie programu z przykładu 1 (i przykładu 2) napisz
programy, który zsumują wszystkie elementy w wierszach (w pierwszej wersji wykorzystaj dostęp
do poszczególnych elementów tablicy przy pomocy indeksów, a w drugim przy
pomocy wskaźników). Suma elementów w każdym wierszu powinna
zostać wyświetlona.
Zadanie 3.
Na podstawie programu z przykładu 1 (i przykładu 2) napisz
programy, który zsumują wszystkie elementy w kolumnami (w pierwszym programie wykorzystaj
dostęp do poszczególnych elementów tablicy przy pomocy indeksów, a w
drugim przy pomocy wskaźników). Suma elementów w każdej kolumnie
powinna zostać wyświetlona.
Zadanie 4. Uzupełnij
program z przykładu 4 o makro Min(a,b) wyznaczające wartość minimalną z dwóch liczb. Dopisz
makra MAX3(a,b,c) i MIN3(a,b,c) obliczające wartość maksymalną
i minimalną z trzech liczb. Jakie jest niebezpieczeństwo
używania makr?
Zadanie 5. Zaimplementuj makra z zadania 4 jako
funkcje przeciążone
Zadanie 6. Napisz funkcję FIND, która znajdzie w dwuwymiarowej tablicy liczb
całkowitych o rozmiarze 10 na 20, (wypełnionej wartościami
losowymi z zakresu od 0 do 100), wartość maksymalną. Tablica
jest przzekazywana do funkcji jako argument.
Zadanie 7. Napisz funkcję FIND, która znajdzie w trójwymiarowej tablicy liczb
całkowitych o rozmiarze 20 na 10 na 8, (wypełnionej wartościami
losowymi z zakresu od -100 do 100), podtablice o rozmiarze 3 na 3 na 3 o maksymalnej sumie elementów. Tablica
wejściowa i wynikowa przzekazywane są do funkcji jako argumenty.