Opis algorytmu do programu L100
by
Tomasz Kowalczyk DIX1012
function SprawdzL100(const liczba : string) : boolean;
Do napisania programu posłużyłem się kilkoma dodatkowymi funkcjami i procedurami, które ułatwiły mi napisanie programu. Pierwszą z nich jest funkcja SprawdzL100, która zwraca zmienną typu logicznego. Funkcja ma za zadanie sprawdzać, czy liczba jest poprawnie zapisana. Jeśli tak, funkcja zwraca wartość true, jeśli nie - false. Wykorzystałem ją dwukrotnie: raz przy pisaniu procedury CzytajL100, a drugi raz przy pisaniu procedury PrzypiszL100.
procedure ObetnijL100(var liczba : string);
Kolejną procedurą jest ObetnijL100. Procedura ta obcina wszystkie zbędne zera występujące na początkowych miejscach.
procedure CzytajL100(var liczba : string);
Procedura CzytajL100 wczytuje liczbę podaną przez użytkownika za pomocą klawiatury trakcie wykonywania programu i sprawdza poprawność zapisu. Liczba jest zapisywana według pewnego schematu: najpierw znak, potem liczba. Na koniec, przy pomocy ObetnijL100 obcinane są zbędne zera.
procedure PrzypiszL100(var liczba : string; const lancuch : string);
Procedura PrzypiszL100 jest bardzo podobna do poprzedniej procedury, tylko że ta przypisuje liczbie pewną wartość podaną przez użytkownika poprawność poziomu programu i sprawdza poprawność zapisu. Liczba jest zapisywana według pewnego schematu: najpierw znak, potem liczba. Na koniec, przy pomocy ObetnijL100 obcinane są zbędne zera.
procedure WypiszL100(const liczba : string);
Procedura po prostu wypisuje na ekranie liczbę podaną jako parametr.
procedure PorownajL100(const liczba1,liczba2 : string; var wynik : byte);
Procedura ta pomogła mi w znacznym stopniu przy pisaniu OdejmowanieL100 i . Procedura porównuje dwie liczby, i w parametrze wynik zwraca 0 gdy liczby są równe, 1 gdy liczba1 jest większa od liczba2 i 2 gdy liczba2 jest większa od liczba1.
procedure PrzeciwnaL100(var liczba : string);
Procedura zamienia liczbę podaną jako parametr na przeciwną,
procedure OdejmowanieL100(liczba1, liczba2 : string; var liczba3 : string);
Procedura, która wbrew pozorom jest najbardziej skomplikowana, ponieważ odejmowanie nie jest przemienne. W tej procedurze w zasadzie najważniejsze jest dobranie odpowiedniej metody wykonywania obliczeń, bo np. algorytm odejmowania liczb dodatnich, ale z tą różnicą, że najpierw pierwsza jest większa, a później pierwsza jest mniejsza, jest trochę inny. Do tego jest właśnie potrzebna procedura PorownajL100, która potrafi wskazać liczbę większą. Wiedząc to, łatwo można już dobrać sposób liczenia. Na koniec ponowne wykorzystanie procedury ObetnijL100, która pozbędzie się zbędnych początkowych zer.
Brak wydruku schematu blokowego jest spowodowany tym, że jest on zbyt duży, aby po wyskalowaniu był czytelny, więc odsyłam do pliku OdejmowanieL100.jpg (i do pozostałych).
procedure DodawanieL100(liczba1, liczba2 : string; var liczba3 : string);
Procedura na dodawanie również nie jest banalna, gdyż należy tu uwzględnić dodawanie liczb przeciwnych znaków (a w zasadzie odejmowanie). Ponieważ jest bardziej skomplikowane niż , dlatego postanowiłem wykorzystać odejmowanie w dodawaniu niż na odwrót. Również ,tak jak w przypadku odejmowania, pomocna okazała się procedura PorownajL100,pozwalająca dobranie odpowiedniej metody.
procedure MnozenieL100(liczba1, liczba2 : string; var liczba3 : string);
Procedura ta przy poprawnie działających poprzednich podprogramach, nie była już tak skomplikowania. Sprowadzała się tylko do dopisywania zer w zależności od mnożenia liczb na pozycji jedności, dziesiątek, setek itd.
- 1 -