Skocz do zawartości


Gdzie jest błąd?


5 odpowiedzi w tym temacie

#1 kepasa

    Nowy na forum

  • Użytkownicy
  • 1 Postów:

Napisano wto, 27 sty 2015 - 18:00

Hej, jestem tu nowa, więc sorry jeżeli napisałam w złym miejscu.

Mam na zaliczenie zrobić program w pascalu do liczenia pól figur. Napisałam coś takiego:


PROGRAM Pola_i_objetosci;
uses crt;

CONST pi=3.14;

VAR
r, h, a, pole : real;
c : byte;


PROCEDURE Kolo;
BEGIN
ClrScr;
writeln('Podaj dlugosc promienia');
readln®;

pole := pi*r*r;
writeln('pole = ' , pole:0:2);
end;

PROCEDURE Trojkat;
BEGIN
ClrScr;
writeln('Podaj wysokosc trojkata');
readln(h);
writeln('Podaj dlugosc podstawy');
readln(a);

pole := 0.5*h*a;
writeln('pole = ' , pole:0:2);
end;

PROCEDURE Kwadrat;
BEGIN
ClrScr;
writeln('Podaj dlugosc boku');
readln(a);

pole := a*a;
writeln('pole = ' , pole:0:2);
end;

BEGIN
REPEAT
writeln('Pole jakiej figury chcesz policzyc?');
writeln('1. Kolo');
writeln('2. Trojkat');
writeln('3. Kwadrat');
writeln;
writeln('Zeby dokonac wyboru nacisnij cyfre 1-3 i enter');
readln©;

if c = 1 then Kolo else
begin;
if c = 2 then Trojkat else
begin;
if c = 3 then Kwadrat;
end
end;
readln;
END.

I wyskakuje mi błąd "113 error in statement". Rozumiem z tego, że mam jakiś błąd w kodzie, ale nie mam pojęcia gdzie. Może mi ktoś coś podpowiedzieć?

#2 olesio

    Ekspert

  • Super użytkownicy
  • 363 Postów:
  • Gadu-Gadu:478088

Napisano śro, 28 sty 2015 - 11:30

Po pierwsze trzeba poznać podstawy języka, bo w ogóle nie myślisz co robisz.

W kodzie jaki podałaś, masz niedozwolone znaki przed średnikami w niektórych instrukcjach to też powoduje błedy.

Poza tym zero formatowania, zero wstawienia w odpowiednie tagi koloryzujące kodu. Masakra i jedno wielkie WTF!

Wiem, że forumowy parser rozwala formatowania, ale czy tak ciężko użyć http://olesio.eu/jcf i wkleić kod na zewnętrzny pastebin?

Wedle mnie kod powinien wyglądać tak: http://pastebin.com/YENs3syR - bo skoro już używasz modułu crt do czyszczenia ekranu, to skorzystaj też z innych jego możłiwości. Kod kompilowany pod FPC. Działa ok. W poprawność obliczeń się nie zagłębiałem. Według mnie powinno się dodatkowo dorobić sprawdzanie poprawności wprowadzonych liczb procedurą Val. Ale to już pozostawiam Tobie.

Oczywiście rozumiem też, że ktoś jest początkujący. Ale szanuj odpisujących na Twój post. Bo wkleiłaś kod, wykazując się totalnym olewactwem wspomnianych przeze mnie powyżej spraw. Ale ok, miałem chwilę czasu to się zlitowałem i odpisałem.

#3 Kaczus

    Bywalec

  • Użytkownicy
  • 36 Postów:

Napisano pią, 20 lut 2015 - 21:25

Wyświetl postUżytkownik olesio dnia śro, 28 sty 2015 - 11:30 napisał

Po pierwsze trzeba poznać podstawy języka, bo w ogóle nie myślisz co robisz.

W kodzie jaki podałaś, masz niedozwolone znaki przed średnikami w niektórych instrukcjach to też powoduje błedy.


Ma średniki po begin, pozostałe dziwne znaki, to kwestia kodowania przez forum...

Cytat


Wiem, że forumowy parser rozwala formatowania, ale czy tak ciężko użyć http://olesio.eu/jcf i wkleić kod na zewnętrzny pastebin?



chyba nie jest aż tak zły...

delphi
PROGRAM Pola_i_objetosci;
uses crt;
CONST pi=3.14;
VAR
r, h, a, pole : real;
c : byte;
 
PROCEDURE Kolo;
BEGIN
  ClrScr;
  writeln('Podaj dlugosc promienia');
  readl(r);
  pole := pi*r*r;
  writeln('pole = ' , pole:0:2);
end;
PROCEDURE Trojkat;
BEGIN
  ClrScr;
  writeln('Podaj wysokosc trojkata');
  readln(h);
  writeln('Podaj dlugosc podstawy');
  readln(a);
  pole := 0.5*h*a;
  writeln('pole = ' , pole:0:2);
end;
PROCEDURE Kwadrat;
BEGIN
  ClrScr;
  writeln('Podaj dlugosc boku');
  readln(a);
  pole := a*a;
  writeln('pole = ' , pole:0:2);
end;
BEGIN
REPEAT
  writeln('Pole jakiej figury chcesz policzyc?');
  writeln('1. Kolo');
  writeln('2. Trojkat');
  writeln('3. Kwadrat');
  writeln('4. Wyjscie'); {dodane, aby zakonczyc dzialanie programu}  
  writeln;
  writeln('Zeby dokonac wyboru nacisnij cyfre 1-3 i enter');
  readln(c);
  if c = 1 then
        Kolo
  else
  begin
        if c = 2 then
        Trojkat
        else
        begin
        if c = 3 then
        Kwadrat;
        end
  end;
  readln;
  until c = 4;
END.


Cytat

Wedle mnie kod powinien wyglądać tak: http://pastebin.com/YENs3syR - bo skoro już używasz modułu crt do czyszczenia ekranu, to skorzystaj też z innych jego możłiwości.


W sumie nawet lepiej przekształcony program, jeśli mieli już case na zajęciach pewnie może wykorzystać, jeśli nie się przyda osobie pytającej na przyszłość. Przydałoby się aby użyszkodnicy nauczyli się korzystać z formatowania, albo należałoby zmienić edytor na czytelniejszy (mniej opcji, ale bardziej widoczne)

#4 xevil21

    xevil

  • Super użytkownicy
  • 521 Postów:
  • Gadu-Gadu:11909981

Napisano sob, 21 lut 2015 - 11:37

w głównym bloku programu masz niedokończoną pętlę REPEAT, albo ją zamknij, albo usuń słowo REPEAT.

Pozdrawiam,Łukasz

#5 Kaczus

    Bywalec

  • Użytkownicy
  • 36 Postów:

Napisano sob, 21 lut 2015 - 12:23

Wyświetl postUżytkownik xevil21 dnia sob, 21 lut 2015 - 11:37 napisał

w głównym bloku programu masz niedokończoną pętlę REPEAT, albo ją zamknij, albo usuń słowo REPEAT.

Pozdrawiam,Łukasz

rzeczywiście - to kolejny błąd w tamtym programie. Dodałem, aby inni poszukujący nie błądzili.

#6 karyma

    Nowy na forum

  • Użytkownicy
  • 1 Postów:

Napisano nie, 03 sty 2016 - 15:56

Witam. Mam 30 lat i zaczynam ponownie naukę programowania...
Z drobnym problemem zgłoszonym w tym wątku sam sobie poradziłem, ale zapewne zgłoszę się tutaj z jakimś kodem do sprawdzenia.