Cwiczenia 8 - Operacje na macierzach ------------------------------------ 1. Utworzyc projekt w jezyku C 2. W pliku glownym (zrodlowym) nalezy: - zdefiniowac rozmiar macierzy makrodefinicjami #define M 3 #define N 3 - utworzyc macierze : tablica dwuwymiarowa liczb float o rozmiarze MxN, nazwa tablicy: a, b, c - utworzyc wektor : talbica jednowymiarowa liczb float o rozmiarze N, nazwa tablicy: wek - napisac funkcje: (ponizszy blok deklaracji funkcji nalezy skopiowac do wlasnego programu) void wyswietl_macierz(float x[M][N]);// macierz ma byc wyswietlona tak, aby w jednym wierszu byly tabulatorem (\t) oddzielone wartosci wiersza, kolejne wiersze w kolejnych linijkach int wczytaj_macierz(float x[M][N], char *nazwa_pliku); // wczytuje zawartosc macierzy z podanego pliku int zapisz_macierz(float x[M][N], char *nazwa_pliku); // zapisuje macierz do pliku o podanej nazwie void wypeln_macierz(float x[M][N], float liczba); // wypelnia macierz podana liczba void przemoz_przez_skalar(float x[M][N], float skalar, float wynik[M][N]); // mnozy wszystkie elementy macierzy przez skalar void przemnoz_mac_wekt(float x[M][N], float w[M], float wynik_wekt[N]); // mnozenie macierzy przez wektor void dodaj_macierze(float x[M][N], float y[N][M], float wynik[M][N]); // x+y=wynik void odejmij_macierze(float x[M][N], float y[N][M], float wynik[M][N]); // x-y=wynik void przemnoz_macierze(float x[M][N], float y[N][M], float wynik[M][N]); // x*y=wynik void algorytm_wegierski(float x[M][N]); // wyjasnione na zajeciach :) Funkcje wczytaj_macierz i zapisz_macierz maja zwracac wartosci: 1 - udalo sie otworzyc plik do zapisu/odczytu i wykonano operacje 0 - nie udalo sie otworzyc pliku - zaniechano odczytu/zapisu 3. Program main powinien: posiadac menu jak w poprzednich programach, gdzie wcisniecie wybranego klawisza wykonywalo odpowiednia funcje: 0. Wyswietl macierze a i b 1. Wczytaj macierz a z pliku (o nazwe pliku powinno sie zapytac uzytkownika) 2. Wczytaj macierz b z pliku (o nazwe pliku powinno sie zapytac uzytkownika) 3. wprowadz wektor wek (z klawiatury) 4. dodaj macierze a i b (wynik ma byc wstawiony do macierzy c i wyswietlony) 5. odejmij macierz b od a (wynik ma byc wstawiony do macierzy c i wyswietlony) 6. przemnoz macierz a przez skalar (wynik ma byc wstawiony do macierzy c i wyswietlony) 7. przemnoz macierz b przez wektor (wynik ma byc wstawiony do macierzy c i wyswietlony) 8. wymnoz macierz a i b (wynik ma byc wstawiony do macierzy c i wyswietlony) 9. algorytm wegierski z macierzy a (wynik ma byc wstawiony do macierzy c i wyswietlony) /**********************************************************************/ /***************** SZKIELET PROGRAMU *******************************/ /**********************************************************************/ /* makrodefinicje */ #define M 3 #define N 3 /* deklaracje funkcji */ void wyswietl_macierz(float x[M][N]);// macierz ma byc wyswietlona tak, aby w jednym wierszu byly tabulatorem (\t) oddzielone wartosci wiersza, kolejne wiersze w kolejnych linijkach int wczytaj_macierz(float x[M][N], char *nazwa_pliku); // wczytuje zawartosc macierzy z podanego pliku int zapisz_macierz(float x[M][N], char *nazwa_pliku); // zapisuje macierz do pliku o podanej nazwie void wypeln_macierz(float x[M][N], float liczba); // wypelnia macierz podana liczba void przemoz_przez_skalar(float x[M][N], float skalar, float wynik[M][N]); // mnozy wszystkie elementy macierzy przez skalar void przemnoz_mac_wekt(float x[M][N], float w[M], float wynik_wekt[N]); // mnozenie macierzy przez wektor void dodaj_macierze(float x[M][N], float y[N][M], float wynik[M][N]); // x+y=wynik void odejmij_macierze(float x[M][N], float y[N][M], float wynik[M][N]); // x-y=wynik void przemnoz_macierze(float x[M][N], float y[N][M], float wynik[M][N]); // x*y=wynik void algorytm_wegierski(float x[M][N]); // wyjasnione na zajeciach :) /* deklaracje zmiennych */ float a[M][N], b[M][N], c[M][N]; /************ MAIN **********/ int main(int argc, char *argv[]) { int kl; char nazwa_pl[256]; while(1) { // wyswietlane menu printf("\nWcisnij"); printf("\n 0 - aby wyswietlic macierze a i b "); printf("\n 1 - aby wprowadzic macierz a z pliku"); // .... dalsze opcje kl = getch(); if(kl == 27) // Esc konczy dzialanie programu break; switch(kl) { case '0': printf("\nMacierz a: \n"); wyswietl_macierz(a); printf("\nMacierz b: \n"); wyswietl_macierz(b); break; case '1': printf("podaj nazwe pliku:"); scanf("%s", nazwa_pl); wczytaj_macierz(a, nazwa_pl); break; case '2': // analogicznie case '4': dodaj_macierze(a, b, c); wyswietl_macierz(c); break; } } } /******* IMPLEMENTACJE FUNKCJI **********/ void wyswietl_macierz(float x[M][N]) { int i,j; for(i=0;i