Procedury, powrót do głównego menu? HELP!

0

Witam wszystkich bardzo serdecznie...
Od września br. zacząłem uczęszczać do Technikum na profil technik-informatyk i stwierdziłem, że trzeba zacząć się samodokształcać...
Postanowiłem wziąć się za język programowanie, więc na początek zabrałem się za Pascala, bo C++ na początek chyba za trudny...
Od wczoraj bawię się w Pascalu, zrobiłem programiki na potęgowanie, obliczanie pola powierzchni całkowitej i objętości sześcianu, obliczanie objętości prostopadłościanu, potem stwierdziłem, że trzeba je zebrać do kupy i w jednym programie dać...
No to udało mi się, ale jest malutki problem...

Do wartości zmiennych dodałem:
wybor:longint;

I na wstęp dodałem takie menu, żeby kliknąć 1-7, aby coś zrobić no i potem w każdym osobym "podprogramiku", na jego początku dodałem np.:

IF wybor=1 THEN
Begin
treść podprogramu
Delay(8000);
Halt;
End;

Wiem, że funkcja "Halt;" zamyka program i dodałem ją z tego względu, żeby program sam się zamknął, a nie żebym ja musiał zamknąć.
Od samego rana kombinuję jak zrobić, aby powyliczeniu, odczekaniu chwili (np. tak jak mam podane 5s) wróciło do głównego menu, aby ponownie wybrać opcję...

Dałem w końcu sobie z tym spokój...
Wyczytałem w jakimś kursie, że procedury są dobre do tego typu rzeczy no to zabrałem się za nie...
Podam w skrócie co zrobiłem:

USES CRT;

VAR
a:char;
i inne zmienne dotyczące działan na pierwiastkach i potęgach

PROCEDURE pierwiastkowanie;
BEGIN
treść
WriteLn('Q - powtórz pierwiastkowanie, W - wróć do menu, E- zamknij program');
a:=readkey;
IF a='q' THEN pierwiastkowanie;
IF a='e' THEN halt;
END;

PROCEDURE potegowanie;
podobnie jak wyżej

Begin
ClrScr;
TextColor(11);
Write('1 - Pierwiastkowanie     ');
TextColor(10);
WriteLn('     Potęgowanie - 2');
TextColor(9);
ReadLn(wybor);
IF wybor=1 THEN pierwiastkowanie;
IF wybor=2 THEN potegowanie;
End.

I teraz właśnie nie wiem co zrobić, żeby wróciło do menu, gdy kliknie się W...
Za żadne skarby nie mogę do tego dojść...
Dodawałem menu jako procedurę na samym początku i jako startowy programik na dole tak jak jest...
i wtedy nie widziało błędu... Błąd pojawiał się w momencie, gdy miało czytać w procedurach: pierwiastkowanie i potęgowanie odnośnik do menu:
IF a='w' THEN menu;

Było napisane, że nie może rozpoznać, a to pewnie z tego względu, że te procedury są pod procedurą menu...

Proszę Was poratujcie mnie... Jest to dla mnie bardzo ważne, bo jak tego się nie dowiem to chyba zasnąć nie będę mógł...

Z góry wielkie dzięki,
pozdrawiam,
Martin.

0

Nie wiem czy dobrze doradzę, ale jeżeli chcesz mieć dostęp do wszystkich procedur z programu głownego to
ja bym stworzył osobny moduł i zadeklarował wykorzystywane funkcje w sekcji interface. A przykładowo tak:

Kod mojunit.pas:

unit mojunit;

interface
  procedure Pierwiastkowanie;
  procedure Menu;

implementation

uses
  Crt;

var
  A : Char;

procedure Pierwiastkowanie;
begin
  WriteLn('Q - powtorz pierwiastkowanie, W - wroc do menu, E - zamknij program');
  A := ReadKey;
  if A = 'q' then Pierwiastkowanie;
  if A = 'w' then Menu;
  if A = 'e' then Halt;
end;

procedure Menu;
begin
  ClrScr;
  Writeln(' MENU GloWNE:');
  Writeln(' ------------');
  Writeln;
  Writeln(' 1 = pierwiastkowanie');
  {I tak dalej}
  A := ReadKey;
  if A = '1' then Pierwiastkowanie;
  {I tak dalej}
end;

end.

Kod programu głownego - u mnie nazwa bzdet.pas ale to tylko przykład :)

program bzdet;

uses
 MojUnit;

begin
  Menu;
end.

Poza tym stosuj formatowanie kodu, a słowa kluczowe pisz raczej z małej, nazwy procedur pierwsz litera od
każdego wyrazu wielka. Zresztą jak uważasz, ale taki kod jest według mnie - bardziej czytelny dla każdego :)

0

A ja bym poczytał o takim czymś jak case ;)

0

na menu w takim przypadku najłatwiejsze chyba jest użycie pętli :P
na początku pętli rysujesz menu jesli wybierasz jakas opcje to przechodzisz do odpowiedniej procedurki jesli wybierze sie wyjscie z programu to wychodzi z petli w innym przypadku po wykonaniu procedury przechodzi z powrotem do rysowania menu ;)

0

Menu mozna nawet zrobic w trybie graficznym i zaznaczac paskiem-negatywem wybierana opcje strzalkami. Kiedys zrobilem taki program w pascalu potem to przenioslem na freebasica, od dawna z tego nie korzystam bo formy takiego czegos nie wymagaja, ale docelowo powiem ze programy konsolowe juz dawno wypadly z obiegu kazdy program ma "okienko" czyli formę. Proponuje się pobawić komponentami ...
Chyba ze chcesz pisac aplikacje dos-owe tylko dorzucaj do nich dos-a bo nie kazdy go ma w dzisisejszych czasach.

0
PROCEDURE menu; {Menu programu}

LABEL miejsce2,miejsce3,miejsce4;

 BEGIN
 miejsce4: {Kotwica}
 clrscr;
 sound(2000);
 delay(600);
 nosound;
 miejsce3: {Kotwica}
 textcolor(red);
 writeln(':::Menu:::');
 writeln('1-Tabliczka mnozenia');
 writeln('2-Kalkulator');
 writeln('3-Kolory');
 writeln('4-Exit');
 writeln;
 textcolor(7);
 write('Twoj wybor: ');
 readln(wybor);
 IF wybor=1 THEN {Tabliczka mnozenia}
  BEGIN
  tab;
  GOTO miejsce4;
  END;
 IF wybor=2 THEN {Kalkulator}
  BEGIN
  kal;
  GOTO miejsce4;
  END;
 IF wybor=3 THEN {Kolory}
  BEGIN
  kol;
  GOTO miejsce4;
  END;
 IF wybor=4 THEN {Wyjscie z programu}
  BEGIN
  miejsce2: {Kotwica}
  clrscr;
  write('Czy napewno chcesz wyjsc z programu [Y/N] : ');
  wybor3:=readkey;
  IF (wybor3='N') OR (wybor3='n') THEN menu;
  IF (wybor3='Y') OR (wybor3='y') THEN exit
  ELSE {Error}
   BEGIN
   writeln;
   textcolor(red);
   writeln('BLAD: wprowadz [Y] lub [N]');
   textcolor(7);
   delay(2000);
   GOTO miejsce2;
   END;
  END
 ELSE {Error}
  BEGIN
  textcolor(red);
  writeln;
  writeln('BLAD: wprowadz 1,2,3 lub 4');
  textcolor(7);
  delay(2000);
  clrscr;
  GOTO miejsce3;
  END;
 END;

BEGIN
  menu;
END.
0

Nie to wkleiłem brrr. Tak jak powyżej zrobiłbym dwa lata temu

teraz to powinno wygladac tak:

BEGIN
  REPEAT 

    ClrScr;
    TextColor(11);
    Write('1 - Pierwiastkowanie');
    TextColor(10);
    WriteLn('2 - Potegowanie');
    TextColor(9);
    WriteLn('3 - Exit');
    TextColor(8);
    WriteLn('     Potęgowanie - 2');

    ReadLn(wybor);

    CASE wybor OF
      1: pierwiastkowanie;
      2: potegowanie;
    END;

  UNTIL wybor = 3 // exit
END.

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