• Nie Znaleziono Wyników

Programowanie proceduralne Laboratorium 8-9

N/A
N/A
Protected

Academic year: 2021

Share "Programowanie proceduralne Laboratorium 8-9"

Copied!
4
0
0

Pełen tekst

(1)

Programowanie proceduralne Laboratorium 8-9 – Struktury

1. Zdefiniuj strukturę fraction, która przechowuje ułamek (struktura ma dwie składowe odpowiadające całkowitym: licznikowi oraz mianownikowi). Struktura powinna być zdefiniowana w pliku fraction.h.

2. Zaimplementuj funkcję simplify pozwalającą na uproszenie ułamka (pomocniczo zaimplementuj funkcję gcd wyznaczającą największy wspólny dzielnik).

3. Zaimplementuj funkcje pozwalające na wypisywanie na ekran i odczytywanie z klawiatury ułamków. Deklaracje funkcji umieść w pliku fraction.h, a ich definicje w osobnych plikach. Zademonstruj ich działanie w programie.

Funkcja odczytująca powinna uprościć ułamek (np. jeżeli użytkownik poda ułamek jako 12/16, ułamek powinien być przechowywany jako 3/4).

4. Zaimplementuj funkcje pozwalające na wykonywanie obliczeń na ułamkach:

 dodawanie ułamków,

 mnożenie ułamków.

W działaniach na ułamkach mogą pojawiać się duże liczby. Aby ograniczyć ten problem wykorzystaj następujące algorytmy (M. Sysło, Algorytmy, WSiP 2002):

 dodawanie ułamków oblicz r = NWD(q, q’)

jeśli r = 1, to wyniku nie można skrócić, czyli 𝑝

𝑞 + 𝑝

𝑞

= 𝑝𝑞

+ 𝑝

𝑞 𝑞𝑞

, w przeciwnym przypadku

oblicz t = p(q’/r) + p’(q/r) oraz s = NWD(t, r) 𝑝

𝑞 + 𝑝

𝑞

= 𝑡 𝑠 ⁄ (𝑞 𝑟 ⁄ )(𝑞′ 𝑠 ⁄ ) ,

 mnożenie ułamków

oblicz r = NWD(p, q’) oraz s = NWD(p’, q) 𝑝

𝑞 ∙ 𝑝

𝑞

= (𝑝 𝑟 ⁄ )(𝑝

⁄ ) 𝑠

(𝑞 𝑠 ⁄ )(𝑞

⁄ ) 𝑟 .

(2)

5. Zdefiniuj strukturę vector3, która przechowuje wektor z przestrzeni trójwymiarowej. Struktura powinna być zdefiniowana w pliku vector3.h.

6. Zaimplementuj funkcje pozwalające na wypisywanie na ekran i odczytywanie z klawiatury wektorów trójwymiarowych. Deklaracje funkcji umieść w pliku vector3.h, a ich definicje w pliku vector3.c. Zademonstruj ich działanie w programie.

Przykładowy efekt uruchomienia programu:

7. Zaimplementuj funkcje pozwalające na wykonywanie działań na wektorach trójwymiarowych:

 dodawanie dwóch wektorów (a+b),

 obliczanie wektora przeciwnego (-a),

 odejmowanie dwóch wektorów (a-b),

 mnożenie skalarne wektorów trójwymiarowych (a⋅b),

 mnożenie wektorowe wektorów trójwymiarowych (a×b),

 długość wektora (|a|),

 mnożenie wektora przez liczbę (α⋅a).

Deklaracje funkcji umieść w pliku vector3.h, a ich definicje w pliku vector3.c.

Zademonstruj ich działanie w programie.

Przykładowy efekt uruchomienia programu:

(3)

8. (*) Zdefiniuj strukturę vectorDouble, która służy do reprezentowania n-elementowego wektora liczb rzeczywistych. Struktura ma dwa pola. Są to liczba całkowita (liczba elementów w wektorze) oraz wskaźnik na typ double (wskazujący na tablicę zawierającą współrzędne wektora). Struktura powinna być zdefiniowana w pliku vectorDouble.h.

9. (*) Zaimplementuj następujące funkcje obsługujące strukturę z poprzedniego zadania:

 struct vectorDouble * newVector(int);

 void printVectorDouble(struct vectorDouble *);

 void setVectorDouble(struct vectorDouble *, int, double);

 double getVectorDouble(struct vectorDouble *, int);

 void deleteVectorDouble(struct vectorDouble **);

Funkcja newVector() pobiera liczbę całkowitą n i tworzy wektor n-elementowy.

Funkcja alokuje n-elementową tablicę współrzędnych wektora i zeruje jej elementy.

Funkcja printVectorDouble() pozwala wypisać współrzędne wektora na ekran.

Funkcja setVectorDouble() pozwala przypisać podaną wartość wskazanej współrzędnej wektora.

Funkcja getVectorDouble() pozwala odczytać wartość wskazanej współrzędnej wektora.

Funkcja deleteVectorDouble() zwalnia pamięć zajmowaną przez strukturę.

Funkcja pobiera wskaźnik na wektor przez referencję, aby móc go wyzerować. Zatem typem argumentu jest wskaźnik na wskaźnik ( struct vectorDouble ** ).

Pamiętaj, aby funkcje getVectorDouble(), setVectorDouble(), printVectorDouble() oraz deleteVectorDouble() sprawdzały czy nie przekazano do nich pustego wskaźnika.

Zademonstruj działanie funkcji w programie.

(4)

Przykładowy kod programu:

i efekt jego działania:

10. (**) Zdefiniuj strukturę Node i typ List pozwalające na przechowywanie danych w postaci listy jednokierunkowej. Zaimplementuj funkcje pozwalające na dodawanie elementów na początek listy, wyświetlanie listy, usuwanie elementów listy.

11. (**) Zdefiniuj strukturę Node i typ Tree pozwalające na przechowywanie danych w postaci binarnego drzewa poszukiwań. Zaimplementuj funkcje pozwalające na dodawanie elementów do drzewa, wyszukiwanie elementów drzewa, wyświetlanie zawartości drzewa, usuwanie drzewa.

Karol Tarnowski

Wrocław, 2019

Cytaty

Powiązane dokumenty

Napisz program, który prosi użytkownika o podanie nazwy pliku zawierającego trzy liczby rzeczywiste, następnie odczytuje liczby ze wskazanego pliku i wyświetla ich

Aby zademonstrować działanie tej funkcji, napisz program, który wywołuje przygotowaną funkcję dla testowych danych (dane mogą być zapisane w programie lub

Napisz program, który wczytuje dane z plików imiona_zenskie.txt oraz imiona_meskie.txt zawierające zestawienie 10 najczęściej nadawanych imion w Polsce w 2019.. Program

Napisz program, który pobiera od użytkownika nazwę pliku tekstowego i wyświetla informację ile ten plik zawiera: liter (w rozbiciu na małe i duże), cyfr, białych znaków

Napisz program, który prosi użytkownika o podanie dwóch liczb całkowitych, a następnie wypisuje na ekranie wyniki ich mnożenia, dzielenia, dzielenia modulo,

Program prosi użytkownika o podanie liczby całkowitej n, a następnie zapisuje do pliku n liczb całkowitych od 0 do n-1.. (c) Zmodyfikuj program, aby działał

Do listy dołączono trzy pliki tekstowe zawierające dane zgodnie z następującą specyfikacją: w pierwszym wierszu znajduje się liczba całkowita określająca

Zaimplementuj funkcje pozwalające na wypisywanie na ekran i odczytywanie z klawiatury liczb zespolonych.. Zademonstruj ich działanie