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.