====== Dynamiczny przydział pamięci ===== ===== Funkcja malloc() i free() ===== Funkcja ''malloc'' alokuje pamięć zaś funkcja ''free'' pozwala zwolnić przydzieloną pamięć. \\ Funkcje te zadeklarowane są w pliku ''stdlib.h'' #include void *malloc(size_t rozmiar); void free(void *wskaznik); Funkcja ''malloc'' alokuje pamięć o padanym rozmiarze (w bajtach). Np. tablica 100 liczb całkowitych potrzebuje ''sizeof(int)*100'' bajtów. Wartością zwracaną jest adres początku zaalokowanej pamięci, który należy zrzutować na wskaźnik do odpowiedniego typu. int *x = (int*)malloc(100*sizeof(int)); Jeżeli operacja alokacji pamięci się nie powiodła zwracana jest wartość ''NULL'' (adres 0) **Przykład** \\ #include #include int main() { float stab[10]; float *dtab; int n,i; printf("Podaj rozmiar :"); scanf("%d",&n); dtab = (float *) malloc(n * sizeof(float)); if(dtab == NULL) { printf("Blad przydzialu pamieci\n"); exit(1); } for(i=0;i 10 } while(--n >= 0) printf("%.4f %.4f\n",dtab[n],stab[n]); free(dtab); // free(stab); !!! Blad } Plik źródłowy: {{zajecia:pp1_2019_1:malloc.c}}\\ ===== Zadanie - Dane z pliku ===== Napisz program, który posortuje liczby rzeczywiste umieszczone w pliku ''dane.txt''. Plik może zawierać dowolną ilość liczb rzeczywistych oddzielonych białymi znakami. Liczby powinny zostać umieszczone w tablicy o takim rozmiarze aby pomieścić wszystkie liczby z pliku. **Dane:** plik tekstowy ''dane.txt'' \\ **Wynik:** ciąg liczb w kolejności od najmniejszej do największej\\ Algorytm sortowania umieść w stosownej funkcji. ===== Zadanie - Macierz ===== Zaimplementuj program, który wykona mnożenie dwóch macierzy. W tym celu zaimplementuj następujące funkcje: * ''**utworz_macierz**'' - tworzy macierz o zadanych rozmiarach \\ **Argumenty:** dwie liczby całkowite ''w'' i ''k'' określające ilość wierszy i ilość kolumn macierzy. Macierz tworzona jest dynamicznie wg. struktury podanej na poniższym rysunku. \\ **Wartość zwracana:** adres (wskaźnik) macierzy lub ''NULL'', gdy tworzenie macierzy się nie powiodło * ''**wczytaj_macierz**'' - wypełnia macierz wartościami podanymi przez użytkownika \\ **Argumenty:** rozmiary macierzy ''w'' i ''k'' oraz adres macierz do wypełnienia\\ **Wartość zwracana:** adres wypełnionej macierzy \\ * ''**wyświetl_macierz**'' - wyświetla macierz na ekranie \\ **Argumenty:** rozmiary macierzy ''w'' i ''k'' oraz adres macierz ''m''\\ **Wartość zwracana:** brak \\ * ''**zwolnij_macierz**'' - zwalnia pamięć zajętą przez macierz \\ **Argumenty:** ilość wierszy macierzy ''w'' oraz adres macierzy ''m'' \\ **Wartość zwracana:** brak \\ * ''**iloczyn_macierzy**'' - wykonuje operację mnożenia dwóch macierzy o odpowiednich rozmiarach. \\ **Argumenty:** rozmiary macierzy macierzy pierwszej ''w1'' i ''k1'' oraz adres macierzy pierwszej ''m1'' oraz rozmiary i adres macierzy drugiej ''w2'', ''k2'', ''m2''\\ **Wartość zwracana:** adres macierzy o wymiarach ''w1'' na ''k2'' stanowiącej iloczyn macierzy pierwszej i drugiej lub wartość ''NULL'', gdy nie udało się pomnozyc macierzy (np. niezgodne wymiary lub bład alokacji pamięci) \\ **Struktura alokacji pamięci dla macierzy** {{ zajecia:pp1_2019_1:macierz-wskazniki.png?300 }} ===== Zadania domowe ===== - W programie sortującym liczby z pliku wykorzystaj funkcję ''qsort'' z biblioteki ''stdlib.h'' lub zaimplementuj własną wersję algorytmu [[wppl>Sortowanie_szybkie|Quick sort]] - Do programu wyznaczającego iloczyn macierzy dodaj następujące funkcjonalności: * program pozwala na zapisanie macierzy wynikowej do pliku tekstowego * program pozwala na wczytanie dwóch macierzy z plików tekstowych po czym wykonuje na nich operacje mnożenia