PRM, ćwiczenie 9, Zadanie 3 PRM, ćwiczenie 9, Zadanie 3
Transkrypt
PRM, ćwiczenie 9, Zadanie 3 PRM, ćwiczenie 9, Zadanie 3
PRM, ćwiczenie 9, Zadanie 3 Należy napisać prosty kalkulator obsługujący następujące działania: dodawanie, odejmowanie, mnożenie i dzielenie na liczbach zmiennoprzecinkowych. Użytkownik ma podać dwie liczby oraz symbol wykonywanej operacji, a program ma zwrócić wynik tej operacji (to ma nie być parser wyrażeń! Symbol operacji podawany jest oddzielnie) Przykład działania programu: Wpisz pierwszą liczbę: Wpisz drugą liczbę: Wpisz symbol operacji: Obliczony wynik operacji: 5 7 + 5 + 7 = 12 UWAGA! Tym razem zadanie jest nieco inne niż zwykle. Sam problem programistyczny jest bardzo łatwy, natomiast głównym elementem zadania jest odpowiedni podział kodu na moduły (pliki). Przykładowy minimalny podział na moduły: main.c, gui.c, obliczanie.c Oczywiście każdy plik z implementacją funkcji musi posiadać skojarzony z nim plik nagłówkowy z prototypami (*.h). Należy także przygotować plik makefile (choćby o najprostszej budowie) który zapewni poprawną i kompletną kompilację całego projektu po wydaniu w konsoli polecenia make . PRM, ćwiczenie 9, Zadanie 3 Należy napisać prosty kalkulator obsługujący następujące działania: dodawanie, odejmowanie, mnożenie i dzielenie na liczbach zmiennoprzecinkowych. Użytkownik ma podać dwie liczby oraz symbol wykonywanej operacji, a program ma zwrócić wynik tej operacji (to ma nie być parser wyrażeń! Symbol operacji podawany jest oddzielnie) Przykład działania programu: Wpisz pierwszą liczbę: Wpisz drugą liczbę: Wpisz symbol operacji: Obliczony wynik operacji: 5 7 + 5 + 7 = 12 UWAGA! Tym razem zadanie jest nieco inne niż zwykle. Sam problem programistyczny jest bardzo łatwy, natomiast głównym elementem zadania jest odpowiedni podział kodu na moduły (pliki). Przykładowy minimalny podział na moduły: main.c, gui.c, obliczanie.c Oczywiście każdy plik z implementacją funkcji musi posiadać skojarzony z nim plik nagłówkowy z prototypami (*.h). Należy także przygotować plik makefile (choćby o najprostszej budowie) który zapewni poprawną i kompletną kompilację całego projektu po wydaniu w konsoli polecenia make . Wskazówki: W module gui.c mają znaleźć się wszystkie funkcje, które realizują interakcję z użytkownikiem (czyli wszystkie wywołania funkcji printf() , scanf() i podobnych), np. funkcja wczytująca od użytkownika komplet danych niezbędnych do wykonania obliczeń oraz zwracająca te dane na zewnątrz w postaci np. struktury. Tutaj także należy umieścić funkcję wyświetlającą wynik czy powitanie. W module obliczanie.c powinna znaleźć się funkcja/e, która przyjmie wprowadzone wcześniej dane wejściowe, dokona na nich stosownych obliczeń oraz zwróci wynik (ale nie wyświetli go!) . W module main.c powinno znaleźć się wywołanie przywitania z użytkownikiem programu oraz tzw. pętla główna zawierająca proste menu, wywołanie wczytywania danych (ale nie samo wczytywanie!), wywołanie obliczeń (ale nie same obliczenia!) oraz wywołanie wyświetlenia wyniku. Podział na moduły można zmodyfikować, ale należy starać się zachować rozdzielenie warstwy wizualizacji (interfejs użytkownika) od logiki aplikacji. Można bazować na kodzie z zadania 1B. Wskazówki: W module gui.c mają znaleźć się wszystkie funkcje, które realizują interakcję z użytkownikiem (czyli wszystkie wywołania funkcji printf() , scanf() i podobnych), np. funkcja wczytująca od użytkownika komplet danych niezbędnych do wykonania obliczeń oraz zwracająca te dane na zewnątrz w postaci np. struktury. Tutaj także należy umieścić funkcję wyświetlającą wynik czy powitanie. W module obliczanie.c powinna znaleźć się funkcja/e, która przyjmie wprowadzone wcześniej dane wejściowe, dokona na nich stosownych obliczeń oraz zwróci wynik (ale nie wyświetli go!) . W module main.c powinno znaleźć się wywołanie przywitania z użytkownikiem programu oraz tzw. pętla główna zawierająca proste menu, wywołanie wczytywania danych (ale nie samo wczytywanie!), wywołanie obliczeń (ale nie same obliczenia!) oraz wywołanie wyświetlenia wyniku. Podział na moduły można zmodyfikować, ale należy starać się zachować rozdzielenie warstwy wizualizacji (interfejs użytkownika) od logiki aplikacji. Można bazować na kodzie z zadania 1B.