Informatyka 17.01.08

Liczbe wymierna mozemy zapisac w formie ulamka dwoch liczb calkowitych l/m
wiec taka liczbe zapisac mozemy za pomoca dwukolumnowej tablicy
Wprowadzamy pojecie rekordu. Rekord jest rzedem tablicy, ktory ma swoja wlasna nazwe. definiujemy go:
type osoba = Record
nazwisko,imie=string;
pensja:real;
kierownik:boolean
end;

Do poszczegolnych pol rekordu odwolujemy sie za pomoca nazwarekordu.nazwapola.

program wymierna;
type
wymierna = record
licz, mian:integer
end;
procedure czytajulamek (var A:wymierna);
begin
write(’licznik ‘);
readln(A.licz);
repeat
write(’mianownik ‘);
readln(A.mian)
until A.mian>0
end;
procedure Wypiszulamek(A:wymierna);
begin
write(A.licz);
if (A.licz0) and (A.mian>1) then
writeln(’/',A.mian)
end;
function NWD(a,b:integer):integer;
begin
while (a0) and (b0) do
if a>b then
a:=a mod b
else
b:=b mod a;
NWD:=a+b
end;
function NWW(a,b:integer):integer;
begin
NWW:=a*(b div NWD(a,b) )
end;
procedure skroc(var a:wymierna);
var
pom:integer;
begin
if a.licz=0 then
a.mian:=1
else
begin
pom:=nwd(abs(a.licz),a.mian);
a.licz:=a.licz div pom;
a.mian:=a.mian div pom
end
end;
procedure dodaj(A,B:wymierna;var C:wymierna);
var
nw:integer;
begin
nw:=NWW(A.mian,B.mian);
C.mian:=nw;
C.licz:=A.licz*(nw div A.mian)+B.licz*(nw div B.mian);
end;
var
A,B,C:wymierna ;
begin
czytajulamek(A) ;
skroc(A);
czytajulamek(B);
skroc(B);
wypiszulamek(A) ;
wypiszulamek(B);
dodaj(A,B,C);
skroc(C);
wypiszulamek(C);
end.

Napisz odpowiedź