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