Napisać program w Pascalu!

TREŚĆ ZADANIA:

Napisz program obliczający NWW (najmniejszą wspólną wielokrotność) dwóch wczytanych liczb a, b.

ROZWIĄZANIE POWINNO ZAWIERAĆ:

1. Opis problemu:
a. dane wejściowe
b. dane wyjściowe
c. zmienne pomocnicze

2. Opis zastosowanego algorytmu w postaci:
a. schematu blokowego
b. pseudojęzyka (lista kroków np. jak tu http://edu.i-lo.tarnow.pl/inf/index.php)

3. Program źródłowy w języku Pascal . Program powinien zaczynać się komentarzem zawierającym:

a. imię nazwisko
b. datę
c. treść zadania

np. {Jan Kowalski 22.01.2010; Napisz program, który wypiszę sumę dwóch liczb}

NIEZBĘDNE WZORY I ZALEŻNOŚCI POTRZEBNE DO ROZWIĄZANIA ZADANIA MOŻNA ZNALEŹĆ W TABLICACH MATEMATYCZNYCH, SŁOWNIKU MATEMATYCZNYM ORAZ INTERNECIE.

OCENIANIE:

Ocenie podlegać będzie:
1. Styl napisania programu źródłowego (wcięcia, komentarze, trafność nazw zmiennych)
2. poprawność wybranego algorytmu i jego opisu
3. Terminowość oddania pracy

To jest całe zadanie, które muszę przesłać potem do szkoły :>
Proszę o napisanie go tak jak wyżej podałem.
Punktów za rozwiązanie dałem sporo. Wszystko co miałem. Czekam do 17-02-2010.

1

Odpowiedzi

Najlepsza Odpowiedź!
2010-02-14T16:10:03+01:00
1. Opis problemu:
a. dane wejściowe:
a, b - liczby typu całkowitego (integer)

b. dane wyjściowe
nww - najmniejsza wspólna wielokrotność a i b

c. zmienne pomocnicze:
nwd - największy wspólny dzielnik (typu integer)

2. Opis zastosowanego algorytmu w postaci:
a. schematu blokowego (załącznik)
b. pseudojęzyka

funkcja policz_nwd:
K01: dopóki a ≠ b wykonuj krok K02
K02: jeśli a > b, to a ← a - b
--------------------inaczej b ← b - a
K03: pisz a
K04: zakończ

program główny:
K01: nwd ← policz_nwd (a, b)
K02: nww ← (a*b) div nwd
K03: pisz nww
K04: zakończ

3. Program źródłowy w języku Pascal:

{Jan Kowalski 14.02.2010; Napisz program obliczający NWW (najmniejszą wspólną wielokrotność) dwóch wczytanych liczb a, b.}

program policz_nww;
var a, b: integer; {zmienne podawane przez uzytkownika}
-----nww: integer; {tutaj na koncu znajdzie sie wynik}
-----nwd: integer; {tutaj przechowujemy wartosc najwiekszego wspolnego dzielnika a i b}

function policz_nwd (liczba1, liczba2: integer): integer;
begin {prosta wersja algorytmu euklidesa}
-------while liczba1 <> liczba2 do
-------begin
--------------if liczba1 > liczba2 then liczba1 := liczba1 - liczba2
-------------------------------------else liczba2 := liczba2 - liczba1;
-------end;

-------policz_nwd := liczba1;
end;

begin {poczatek programu glownego}
-------writeln ('Podaj a');
-------readln (a);
-------writeln ('Podaj b');
-------readln (b);

-------nwd := policz_nwd (a, b);
-------nww := (a * b) div nwd;
-------writeln ('nww = ', nww);
-------readln;
end.

UWAGI!
Znaki '-' nie należą do kodu, przed wklejeniem do kompilatora trzeba je usunąć (poprawiają przejrzystość kodu, tu się nie da dać tabulatora). Instrukcja i 'readln' na końcu kodu w zasadzie nie jest potrzebna, ale dzięki niej program od razu po wczytaniu danych nie zamknie się tylko poczeka na naciśnięcie ENTER i będzie można zobaczyć wynik.

Jeżeli sobie tego życzysz na pisz mi swój adres e - mail na pw to wyślę ci kod źródłowy w rozszerzeniu .pas (niestety nie da się go dodać w załączniku).

Metoda obliczania jest oparta na znanej własności nww i nwd:
nww (a, b) = (a*b)/nwd(a,b)
Można ją znaleźć na przykład tutaj: http://pl.wikipedia.org/wiki/Najmniejsza_wsp%C3%B3lna_wielokrotno%C5%9B%C4%87.

Dzięki zastosowaniu dodatkowej funkcji i przekazaniu zmiennych przez wartość, a nie przez zmienną w programie głównym pozostają pierwotne wartości zmiennych a i b (pomimo zmian w funkcji). Można równie dobrze wprowadzić zmienne pomocnicze i rozwiązać zadanie bez użycia funkcji. Jeżeli tak wolisz to napisz to zmienię to.

w razie pytań pisz na pw
3 5 3