Zadania
Transkrypt
Zadania
SYSTEMY INFORMATYCZNE M.A. Jankowska, G. Sypniewska-Kamińska LABORATORIUM NR 01 TEMAT : TABLICE JAKO ARGUMENTY FUNKCJI / ZADANIA Zadanie 1 Napisz program, w którym dla danych dwóch liczb rzeczywistych (nazwy zmiennych typu float w programie: a, b) zostanie obliczony pierwiastek ich sumy. Do obliczeń wykorzystane zostaną trzy różne funkcje. Liczby a, b zostaną w programie wczytane z klawiatury, a odpowiednie wyniki obliczeń wyświetlone na ekranie. W przypadku pierwszej funkcji o nazwie fun1 obie liczby zostaną przekazane do funkcji przez wartość (nazwy odpowiednich parametrów w funkcji: liczba1, liczba2), a wynik zostanie przekazany do programu przy wykorzystaniu instrukcji return. W przypadku drugiej funkcji o nazwie fun2 obie liczby zostaną przekazane do funkcji przez wartość (nazwy odpowiednich parametrów w funkcji: liczba1, liczba2), a wynik zostanie przekazany do programu przy wykorzystaniu trzeciego parametru formalnego typu referencyjnego (nazwa parametru w funkcji: wynik, nazwa odpowiedniej zmiennej w programie: w1). Funkcja fun2 nie zwraca wartości (typem wartości funkcji występującym przed jej nazwą jest void). W przypadku trzeciej funkcji o nazwie fun3 obie liczby zostaną przekazane do funkcji przez wartość (nazwy odpowiednich parametrów w funkcji: liczba1, liczba2), a wynik zostanie przekazany do programu przy wykorzystaniu trzeciego parametru formalnego typu wskaźnikowego (nazwa parametru w funkcji: pwynik, nazwa odpowiedniej zmiennej w programie: w2). Funkcja fun3 nie zwraca wartości. Zadanie 2 Zaimplementuj program opisany w Zadaniu 1 wykorzystując do tego rozwiązanie polegające na przeciążaniu funkcji. W tym celu napisz odpowiedni kod trzech opisanych powyżej funkcji (funkcje mają taką samą nazwę pierwiastek, różnić się będą natomiast sygnaturami) oraz kod programu, który te funkcje wykorzysta do obliczeń. Zadanie 3 Napisz program, w którym zostaną wykonane następujące zadania: § deklaracja tablicy statycznej dwuwymiarowej (macierzy) o wartościach typu double i nazwie A; liczbę jej wierszy i kolumn określają dwie stałe całkowitoliczbowe nmax = 30, mmax = 50; § wczytanie z klawiatury dwóch wartości całkowitoliczbowych do zmiennych n (bieżąca liczba wierszy) i m (bieżąca liczba kolumn); § nadanie w programie losowych wartości z przedziału [-5,5] dla elementów macierzy A; § wczytanie z klawiatury wartości całkowitoliczbowej odpowiadającej wybranemu przez użytkownika indeksowi wiersza macierzy A (nazwa zmiennej w programie nrW); § wywołanie funkcji moja_funkcja; funkcja zwraca wartość typu double; do funkcji przekazana jest macierz A (nazwa parametru w funkcji: macA), liczba wierszy macierzy A (nazwa parametru w funkcji: nn), liczba kolumn macierzy A (nazwa parametru w funkcji: mm), indeks wiersza macierzy A (nazwa parametru w funkcji indA); funkcja oblicza/wyznacza następujące wielkości: maksymalną (co do wartości bezwzględnej) wartość elementu w tablicy przekazaną do programu przez wskaźnik (nazwa parametru w funkcji: maxA, nazwa odpowiedniej zmiennej w programie: max_elem); liczbę elementów dodatnich w tablicy przekazaną do programu przez referencję (nazwa parametru w funkcji: dodA, nazwa odpowiedniej zmiennej w programie: licz_dodatnich); sumę elementów w wierszu o indeksie indA przekazaną do programu przy wykorzystaniu instrukcji return (nazwa odpowiedniej zmiennej w programie suma_wierszy); § wypisanie wszystkich obliczonych w funkcji wartości na ekranie. Zadanie 4 Zaimplementuj program opisany w Zadaniu 3 wykorzystując zamiast tablicy statycznej dwuwymiarowej A odpowiednią tablicę dynamiczną dwuwymiarową A. Uwagi do zadania: przydzielenie pamięci dla tablicy dynamicznej oraz odpowiednie zwolnienie pamięci wykonane jest bezpośrednio w programie; do funkcji przekazujemy macierz dwuwymiarową (nazwa parametru w funkcji: macA), liczbę jej wierszy oraz kolumn (nazwa parametrów w funkcji: nn, mm); nazwy i przeznaczenie pozostały parametrów formalnych funkcji pozostają takie same jak w Zadaniu 3. Zadanie 5 Zaimplementuj program opisany w Zadaniu 3 wykorzystując zamiast tablicy statycznej dwuwymiarowej A odpowiednią tablicę dynamiczną dwuwymiarową A. Uwagi do zadania: przydzielenie pamięci dla tablicy dynamicznej oraz odpowiednie zwolnienie pamięci wykonane jest w programie przy wykorzystaniu odpowiednich funkcji rozlokuj_macierz i zwolnij_pamiec (porównaj z instrukcją do laboratorium 2); do funkcji przekazujemy macierz dwuwymiarową (nazwa parametru w funkcji: macA), liczbę jej wierszy oraz kolumn (nazwa parametrów w funkcji: nn, mm); nazwy i przeznaczenie pozostałych parametrów formalnych funkcji pozostają takie same jak w Zadaniu 3. Po wypisaniu wszystkich obliczonych w funkcji wartości na ekranie, należy również Laboratorium 1 1 SYSTEMY INFORMATYCZNE M.A. Jankowska, G. Sypniewska-Kamińska wypisać wartości tablicy dwuwymiarowej A. W tym celu należy zaimplementować odpowiednią funkcję wypisz_macierz. Zadanie 6 Napisz program, w którym zostaną wykonane następujące zadania: § deklaracja dwóch tablic statycznych jednowymiarowych (wektorów) o wartościach typu short oraz nazwach u i w; liczbę ich elementów określa stała całkowitoliczbowa max_elem = 50; § wczytanie z klawiatury wartości całkowitoliczbowej do zmiennej n (bieżąca liczba elementów w każdym wektorze); § nadanie wartości w programie dla elementów wektora u w taki sposób, że u (i) = i + 3, i = 0, 1, … , n – 1; § wywołanie funkcji obliczenia; funkcja zwraca wartość typu short; do funkcji przekazane są wektory u i w (nazwa parametrów w funkcji: vec_u, vec_w), liczba elementów tych wektorów n (nazwa parametru w funkcji: nn); funkcja znajduje minimalną wartość elementów w tablicy vec_u i przekazuje ją do programu wykorzystując do tego instrukcję return (nazwa odpowiedniej zmiennej w programie: min_value); nadaje wartości dla elementów tablicy vec_w; zakładamy przy tym, że vec_w (i) = vec_u (i) * vec_u (i), i = 0, 1, … , nn – 1, § wypisanie minimalnej wartości znajdującej się u tablicy u na ekranie § wypisanie na ekranie wartości wszystkich elementów tablicy w (należy do tego zadania napisać odpowiednią funkcję wypisz_wektor, która dla dowolnego wektora i liczby jego elementów, przekazanych do funkcji wypisze wszystkie jego wartości na ekranie). Zadanie 7 Zaimplementuj program opisany w Zadaniu 6 wykorzystując zamiast tablic statycznych jednowymiarowych u i w odpowiednie dynamiczne tablice jednowymiarowe. Zadanie 8 Napisać program, który umożliwi pracę z danymi typu double przechowywanymi w jednowymiarowej tablicy alokowanej dynamicznie. Niech wskaźnik do pierwszego elementu tej tablicy ma nazwę q a liczba elementów tej tablicy ma nazwę n (n jest wartością całkowitoliczbową określaną przez użytkownika). Zadaniem programu jest wykonanie następujących zadań: - wczytanie z klawiatury liczby n, zarezerwowanie miejsca w pamięci dla tablicy q oraz wczytanie z klawiatury odpowiednio n elementów do tablicy q, - wywołanie trzech zdefiniowanych przez programistę funkcji, które obliczą odpowiednio: liczbę elementów tablicy o wartościach większych od 2.5 (funkcja pierwsza), sumę elementów o wartościach z przedziału [-1,1] (funkcja druga) oraz sumę elementów o indeksach mniejszych od 4 (funkcja trzecia), - wypisanie wyników na ekranie, - zwolnienie miejsca przeznaczonego na tablicę q. Zadanie 9 W pliku o nazwie „macierz_dane.txt” zapisane są elementy pewnej macierzy. W pierwszej linii tego pliku, albo jak odtąd będziemy mówić – w pierwszym jego rekordzie, zapisane są dwie liczby całkowite określające rozmiar macierzy. Pierwsza z podanych liczb określa liczbę wierszy macierzy, druga – liczbę jej kolumn. W następnych rekordach pliku zapisane są elementy pierwszego, drugiego i kolejnych wierszy macierzy. Mówimy, że macierz w tym pliku zapisana jest wierszami. Uwaga! Liczby zapisane w jednym wierszu powinny być oddzielone spacjami. Nie można stosować przecinków jako separatorów. Napisać program, który wykonuje następujące działania: a) po odczytaniu danych zapisanych w pierwszym rekordzie pliku przydziela pamięć dla dynamicznej tablicy dwuwymiarowej o elementach typu double, b) odczytuje z dysku elementy danej macierzy i zapisuje je w dwuwymiarowej tablicy; program powinien być na tyle uniwersalny, by odczytać dowolną macierz dwuwymiarową, zapisaną w pliku według wyżej określonych zasad, c) oblicza sumę elementów każdego wiersza macierzy, zapamiętując wynik w jednowymiarowej dynamicznej tablicy mającej tyle elementów, ile wierszy ma dana macierz, d) oblicza sumę kwadratów elementów każdej kolumny macierzy, zapamiętując wynik w jednowymiarowej dynamicznej tablicy mającej tyle elementów, ile kolumn ma dana macierz, e) oblicza sumę wszystkich elementów macierzy, f) sprawdza czy macierz jest kwadratowa i - jeżeli tak, to oblicza sumę elementów na przekątnej głównej macierzy (tzw. ślad macierzy), Laboratorium 1 2 SYSTEMY INFORMATYCZNE M.A. Jankowska, G. Sypniewska-Kamińska - jeżeli nie, to wyprowadza na ekran monitora i do pliku informację, że macierz nie jest macierzą kwadratową, g) znajduje największy co do wartości bezwzględnej element każdego wiersza macierzy, zapamiętując wynik w jednowymiarowej dynamicznej tablicy mającej tyle elementów ile wierszy ma dana macierz, h) znajduje największy co do wartości bezwzględnej element całej macierzy, i) tworzy nową macierz zapisaną w tablicy dynamicznej, która od danej macierzy różni się jedynie tym, że w wierszu i kolumnie wybranych przez użytkownika programu ma wszystkie elementy równe zeru. Użytkownik programu powinien zostać poinformowany o aktualnym rozmiarze tablicy, aby mógł w prawidłowy sposób dokonać wyboru wiersza i kolumny. Program powinien jednak być tak napisany, aby w sytuacji, gdy podane wartości są nieprawidłowe, umożliwić użytkownikowi skorygowanie błędu, j) zwalnia pamięć przydzieloną dynamicznie wszystkim tablicom. Wymagania dotyczące struktury programu: 1. Zadania opisane w punktach c) - e) oraz g) - i) powinny zostać zaprogramowane w postaci oddzielnych funkcji. 2. Wyniki działań zrealizowanych w punktach c) - i) powinny być zapisane na dysku w pliku o nazwie „macierz.wyniki”. Laboratorium 1 3