[PASCAL] - Moduł ułamki.

0

Witam.
Mam do napisania w Free Pascalu program, który będzie liczył ułamki zwykłe dodawanie, odejmowanie, mnożenie, dzielenie,skracanie. Większość procedur i funkcji mam utworzyć w module stworzonym przeze mnie. Pięknie ładnie napisałem ale moduł sypie błędami jak w zime.

Unit ulamki;
Interface
Uses crt;

function nwd(a,b:integer):integer;
// NWD

function nww(a,b:integer):integer;
//NWW
procedure wspolne_mianowniki(var licznik,licznik1:real; var mianownik,miannownik1:integer);
// WSPOLNE MIANOWNIKI

procedure skracanie_ulamkow(var licznik,mianownik:integer);
// SKRACANIE ULAMKOW

procedure dodawanie(licznik1:real; var licznik:real);
// DODAWANIE

procedure odejmowanie(licznik1:real; var licznik:real);
// ODEJMOWANIE

procedure mnozenie(licznik1,mianownik1:real; var licznik,mianownik:real);
// MNOZENIE

procedure dzielenie(licznik1,mianowni1:real; var licznik,mianownik:real);
// DZIELENIE

IMPLEMENTATION

function nwd(a,b:integer):integer;
var c:integer;
begin
WHILE b<>0 DO
begin
c := a mod b;
a := b;
b := c;
end;
nwd:=a;
end;

function nww(a,b:integer):integer;
var ab:integer;
begin
ab:=a*b;
nww:=ab div nwd(a,b);
end;

procedure wspolne_mianowniki(var licznik,licznik1:real; var mianownik,mianownik1:integer);
var c:integer; // zmienna przechowujaca NWW
begin
c:=nww(mianownik,mianownik1);
mianownik:=c;
mianownik1:=c;
licznik:=licznik*(c/mianownik);
licznik1:=licznik1*(c/mianownik1);

end;

procedure skracanie_ulamkow( var licznik,mianownik:integer);
var a:real;
begin
a:=licznik; // po skroceniu licznika aby zachowac takie same nwd w mianowniku
licznik:=licznik/nwd(licznik,mianownik);
mianownik:=mianownik/nwd(a,mianownik)
end;

procedure dodawanie(licznik1:real; var licznik:real):
begin
licznik:=licznik+licznik1;
end;

procedure odejmowanie(licznik1:real; var licznik:real):
begin
licznik:=licznik-licznik1;
end;

procedure mnozenie(licznik1,mianownik1:real; var licznik,mianownik:real):
begin
licznik:=licznik*licznik1;
mianownik:=mianownik*mianownik1;
end;

procedure dzielenie(licznik1,mianowni1:real; var licznik,mianownik:real);
var a:integer;
begin
mnozenie(mianownik1,licznik1,licznik,mianownik);
end;
end.

Błędy:
ulamki.pas(50,11) Error: function header "wspolne_mianowniki" doesn't match forward : var name changes miannownik1 => mianownik1
procedure wspolne_mianowniki(var licznik,licznik1:real; var mianownik,mianownik1:integer);
Ten kod błędu widzę po raz pierwszy.

  • ulamki.pas(53,28) Error: Identifier not found "mianownik1" *
  • ulamki.pas(55,11) Error: Identifier not found "mianownik1" *
  • ulamki.pas(57,33) Error: Identifier not found "mianownik1" *
    mianownik:=c;
    mianownik1:=c;
    licznik:=licznik*(c/mianownik); 

    Rozumiem identyfikator nie znaleziono ale dlaczego jeśli mam w procedurze ?
    procedure wspolne_mianowniki(var licznik,licznik1:real; var mianownik,mianownik1:integer);
    Reszta błędów to zupełna czarna magia i tym bardziej absurdalne

  • ulamki.pas(65,17) Error: Incompatible types: got "Extended" expected "SmallInt" *
  • ulamki.pas(66,27) Error: Incompatible type for arg no. 1: Got "Real", expected "SmallInt" *
  • ulamki.pas(69,53) Error: Fields cannot appear after a method or property definition, start a new visibility section first *
  • ulamki.pas(72,1) Fatal: Syntax error, "BEGIN" expected but "END" found *
  • ulamki.pas(0) Fatal: Compilation aborted *
    Dziękuje za wszelaką pomoc.
1

Do pierwszego:
Literówka w interface:procedure wspolne_mianowniki(var licznik,licznik1:real; var mianownik,miannownik1:integer); - masz miannownik1 i tej wartości kompilator oczekuje w implementation - znajduje mianownik1 i wywala błąd.

Co do 2 kolejnych błędów:

licznik:=licznik/nwd(licznik,mianownik);
mianownik:=mianownik/nwd(a,mianownik)

Operator / w Delphi powoduje zwrócenie liczby zmiennoprzecinkowej (real). Możesz użyć operatora dzielenia całkowitego div lub zaokrąglać wynik funkcją Round (jak się nie mylę, trzeba dodać jeszcze moduł Math).

Linia 69: procedure dodawanie(licznik1:real; var licznik:real):Z jakiego powodu zamiast średnika wstawiłeś na końcu dwukropek? To samo linia 72.

0

Dziękuje za pomoc.
Powodem pomyłki są małe literki w trybie tekstowym ;/
Zostały dwa dziwne problemy

  • ulamki.pas(69,53) Error: Fields cannot appear after a method or property definition, start a new visibility section first *
    Pierwszy tyczy się tego fragmentu kodu
    procedure mnozenie(licznik1,mianownik1:integer; var licznik,mianownik:integer):
  • ulamki.pas(72,1) Fatal: Syntax error, "BEGIN" expected but "END" found *
    Drugi tyczy się co dziwniejsze tej części kodu
    procedure mnozenie(licznik1,mianownik1:integer; var licznik,mianownik:integer):
    begin
    licznik:=licznik*licznik1;
    mianownik:=mianownik*mianownik1;
    end;

Dziękuje za pomoc.
Powodem pomyłki są małe literki w trybie tekstowym ;/
Zostały dwa dziwne problemy
// ulamki.pas(69,53) Error: Fields cannot appear after a method or property definition, start a new visibility section first //
Pierwszy tyczy się tego fragmentu kodu

procedure mnozenie(licznik1,mianownik1:integer; var licznik,mianownik:integer):

// ulamki.pas(72,1) Fatal: Syntax error, "BEGIN" expected but "END" found //
Drugi tyczy się co dziwniejsze tej części kodu

 procedure mnozenie(licznik1,mianownik1:integer; var licznik,mianownik:integer):
begin
licznik:=licznik*licznik1;
mianownik:=mianownik*mianownik1;
end;

Złe posługiwanie się opcją cytuj. Bryy pomyłka

1

OK, powtórzę jeszcze raz: w tych errorowych deklaracjach walnąłeś dwukropki zamiast średników na końcu.

0

Dzięki, bardzo wielkie dzięki. Męczyłem się z tym szukałem gdzie się dało : ]

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0