INFORMATYKA I Ćwiczenie 8 1. Wykonaj nastÄ™pujÄ…ce polecenia: ·ð Zadeklaruj w programie głównym statycznÄ… tablicÄ™ dwuwymiarowÄ… o M wierszach N kolumnach. ·ð Napisz funkcjÄ™ wypeÅ‚niajÄ…cÄ… elementy tej tablicy iloczynami indeksów wierszy i kolumn: Bij =ð (ði +ð1)ð*(ðj +ð1)ð. ·ð Napisz funkcjÄ™ wyÅ›wietlajÄ…cÄ… elementy tej tablicy. ·ð Napisz funkcjÄ™ liczÄ…cÄ… Å›redniÄ… wartość wszystkich elementów tej tablicy. Wynik wyÅ›wietl w funkcji main(). ·ð Napisz funkcjÄ™ zwracajÄ…cÄ… liczby elementów tablicy majÄ…cych wartoÅ›ci wiÄ™ksze od Å›redniej i majÄ…cych wartoÅ›ci mniejsze od Å›redniej. Wynik wyÅ›wietl w funkcji main(). ·ð Napisz funkcjÄ™, która zwróci n-ty wiersz tablicy. Użyj do tego wektora zadeklarowanego w funkcji main(). Wektor ten zadeklaruj dynamicznie. ·ð Napisz funkcjÄ™, która wyÅ›wietli otrzymany wektor na ekranie. 2. Przerób program stosujÄ…c dynamicznÄ… alokacjÄ™ tablicy: // przydziel ciÄ…gÅ‚y obszar pamiÄ™ci dla wszystkich elementów tablicy double* p = (double* ) malloc( M * NN * sizeof(double) ); // przydziel pamięć dla wektora przechowujÄ…cego adresy wierszy double** tt = ( double** ) malloc ( M * sizeof(double) ); // podstaw do wszystkich wierszy odpowiedni adres poczÄ…tkowy for( int ii = 0; ii < M; ii++ ) { tt[ii] = p; p += NN; // przesuÅ„ wskaznik do nastÄ™pnego wiersza } // ...kod programu // zwalnianie pamiÄ™ci free( tt[0] ); // zwalnianie pamiÄ™ci elementów tablicy free( tt ); // zwalnianie pamiÄ™ci wektora wierszy Przy zwalnianiu pamiÄ™ci należy zachować ostrożność. Pomimo, że przydzieliliÅ›my pamięć używajÄ…c zmiennej p, to używaliÅ›my tej zmiennej jako wskaznika i przesunÄ™liÅ›my go na inny obszar pamiÄ™ci niż ten, na który pierwotnie wskazywaÅ‚. Pierwotny adres przypisaliÅ›my do pierwszego elementu tablicy tt. Na koÅ„cu należy jeszcze zwolnić pamięć wektora.