Programy się zwykle pisze a nie robi
Przy pisaniu programów musisz wykonać następujące kroki:
1. Zdefiniować problem
W przypadku twojego kalkulatora musisz określić:
- typ obsługiwanych danych - czy to będą liczby wyłącznie całkowite czy całkowite i ułamkowe (ogólnie mówiąc rzeczywiste)
- rodzaje działań jakie ma wykonywać twój kalkulator, np. dodawanie, odejmowanie itd
- funkcje dodatkowe: kasowanie wyniku, kasowanie ostatniej wprowadzonej liczby, możliwość obliczeń z użyciem dodatkowej pamięci, możliwość użycia nawiasów, możliwość programowania sekwencji obliczeń (mówiąc prosto podstawiania kolejnych liczb do wzoru, który wczesniej opisałeś w postaci poleceń zrozumiałych dla centralnej jednostki czy procedury wykonującej obliczenia
- następnie musisz zdefiniować sposób wprowadzania danych i zobrazowania wyników (czy będą wyświetlane i jak, a może drukowane)
- definicja obsługi błędów - np, dzielenie przez zero, pierwiastek z -1
Następnie opracowujesz tak zwane algorytmy wykonywania poszczególnych operacji jakie wykonuje kalkulator.
Algorytm to jest ogólnie przepis na wykonanie konkretnej czynności złożonej w skończonej ilości kroków, np. algorytm gotowania wody:
Procedura Gotowanie
1. Weź czajnik
2. Czy jest woda ? Jeżeli jest to idź do kroku 4
3. Napełnij czajnik wodą -> wywołaj procedurę Napełnianie
4. Postaw na kuchence
5. Zapal gaz w palniku
6. Czekaj (lub wykonaj inne czynności)
7. Czy woda wrze ? Jeżeli nie to idź do punktu 6
8. Zamknij dopływ gazu
KONIEC PROCEDURY GOTOWANIE
Oczywiście część z powyższych czynności można rozpisać na jeszcze prostsze czynności uwzględniające pośrednie czynności potrzebne do wykonia czynności głównych (np. szukanie zapałek, odkręcanie/zakręcanie wody itd)
W przypadku naszego kalkulatora (najprostszy przypadek bez nawiasów) będziesz miał:
Kalkulator wykonuje operację obliczenia:
a) dla dwóch argumentów - po naciśnieciu klawisza =
b) dla operacji jednoargumentowej po wciśnięciu klawisz operacji
1. Kasowanie rejestrów danych wejściowych i wyniku
argument1=0
argument2=0
wynik=0
2. Wprowadzanie pierwszej danej
argument1=liczba z klawiatury
3. Wprowadzenie żądanej operacji (+,-,*, :, pierwiastek, odwrotność, zmiana znaku)
operacja=kod_operacji
{ poniżej do 12 punktu nastąpi skok dla pierwiastka, odwrotności i zmiany znaku)
4. Czy działanie wymaga drugiej liczby ? Jeżeli nie to idź do pkt 12
{ Pobieramy drugą daną }
5. Wprowadzanie drugiej danej
argument2=liczba z klawiatury
6 Czy wciśnieto klawisz = ? Jeżeli tak to idź do pkt. 8
7 Idź do pkt. 6 { Czekanie na wciśnięcie równa się }
8a. jeżeli operacja="+" to Wynik=argument1+argument2
8b. jeżeli operacja="-" to Wynik=argument1-argument2
8c. jeżeli operacja="+" to Wynik=argument1*argument2
8d. jeżeli operacja=":" to
jeżeli argument2=0 to skocz do Błąd(dzielenie przez 0)
Wynik=argument1+argument2
9. Wyświetl wynik
10. Czekanie na klawisz Kasowanie Jeżeli nie wciśnieto to idź do 10
11. Skocz do punktu pierwszego
{Komentarz - Operacja jednoargumentowa}
12a.
jeżeli operacja="pierwiastek" to
jeżeli argument1<0 to skocz do pkt. 15 Błąd(próba liczenia
pierwiastka z liczby ujemnej)
wynik=Pierwiastek(argument1)
12b.
Jeżeli operacja="1/x" to
Jeżeli argument1=0 to skocz do pkt 15, Błąd(dzielenie przez 0)
argument2=argument1 { Przesunięcie danej z arg2 do arg 1
(kopiowanie)
argument1=1
Skocz do pkt. 8d {dzielenie}
13b Jeżeli operacja ="zmiana znaku" to
wynik= -argument1
13. Wyświetl wynik
14. Skocz do punktu 10 (czyli czekanie na kasowanie)
15. Obsługa błędów
16. Wyswietl błąd
17. Skocz do pkt 10 {Czekanie na skasowanie }
Jak już masz powyższy ciąg czynności to kodujesz go w jakimś języku programowania (Pascal, C, asembler)
Oczywiście każdy język ma swoje ograniczenia i może się okazać, że wykonanie danej operacji należy rozpisać na czynności prostsze (np. funkcja pierwiastek może nie być dostępna w danej wersji języka i trzeba go obliczać metodą kolejnych przybliżeń używając mnożenia, dzielenia i dodawania.
Tak to wygląda pokrótce.
Zwykle największy problemy są przy zdefiniowanie problemu (rozbicie go na czynności proste) , jego ograniczeń (co chce zamawiający program a co my możemy jako programiści fizycznie zrealizować na danym sprzęcie z jego ograniczeniami ) i napisanie algorytmu. Samo kodowanie jest już prostsze.