Jak użyć poprawnie funkcji CASE?

0

Witam wpisuje taki kod programu i kompilator pokazuje że jest błędny

program Lekcje;
var minka,ex:char;
begin
while ex <> 'T' do
Writeln('Wpisz nazwe przedmiotu a dowiesz sie jaka minke bedziesz miec podczas tego przedmiotu');
Writeln('podczas tego przedmiotu');
Readln(minka);
CASE minka OF
'Matematyka' : begin Writeln(';-)'); end;
'Informatyka' : begin Writeln(':-D'); end;
'Fizyka' : begin Writeln (':-('); end;
'Chemia' : begin Writeln (':-)'); end;
'Angielski' : begin Writeln (':-|'); end;
'Rosyjski' : begin Writeln (':-|'); end;
'Wych-fiz' : begin Writeln (':-|'); end;
writeln('Chcesz kontynulowac? [T/N]');
readln(ex);
end;
Exit;
end.

Jaki ja robie błąd? To jest moje pierwsze użycie funkcji CASE wiedz chce wiedzieć co źle robie?

0

Hallo pl65!

Tak na pierwszy rzuk oka, to brakuje jeden end:

pl65 napisał(a)
program Lekcje;
var minka,ex:char;
begin
while ex <> 'T' do
Writeln('Wpisz nazwe przedmiotu a dowiesz sie jaka minke bedziesz miec podczas tego przedmiotu');
Writeln('podczas tego przedmiotu');
Readln(minka);
CASE minka OF
'Matematyka' : begin Writeln(';-)'); end;
'Informatyka' : begin Writeln(':-D'); end;
'Fizyka' : begin Writeln (':-('); end;
'Chemia' : begin Writeln (':-)'); end;
'Angielski' : begin Writeln (':-|'); end;
'Rosyjski' : begin Writeln (':-|'); end;
'Wych-fiz' : begin Writeln (':-|'); end;
end;             <-------------------- end konczacy case
writeln('Chcesz kontynulowac? [T/N]');
readln(ex);
end;
Exit;
end.

Pozdrawiam
Markus

0

Pierwszy problem jaki mi wyświetlna to Constans end CASE types do not mach

Mimo poprawienia wg. tego co podałeś :)

0

Hallo pl65!

pl65 napisał(a)

Pierwszy problem jaki mi wyświetlna to Constans end CASE types do not mach

Mimo poprawienia wg. tego co podałeś :)

Na drugi rzut oka, to minka musi byc typem porzadkowym "Ordinal type" .
Np. liczba calkowita 1, 2, 3 ... itd. albo litera 'A', 'B', 'c' ... itd.

Pozdrawiam
Markus

0

na pierwszy rzut oka? eee lol... zacznijmy od tego ze w CASE dałeś zmienną minka która jest typu char!! char to 1 znak np: A, B, C, D ... a Ty jednoznakową zmienną porównujesz do całego wyrazu? :) minka nigdy nie będzie równała się "Matematyka" bo w niej możesz upchnąć tylko jeden znak...

0

Zrobiłem inaczej wykorzystując IF i wpisując nr przedmiotu ale dlaczego nie che działć CrtScr ? POdaje kod programu

program Lekcje;
var ex:char;
minka:real;
USES Crt;
procedure przedmiot;
begin
ClrScr;
Writeln('Wpisz mumer przedmiotu a dowiesz sie jaka minke bedziesz miec podczas tego przedmiotu');
Writeln('Lista przedmiotów');
Writeln('1. Matematyka 2.Informatyka 3. Fizyka 4. Chemia 5. Angielski');
Readln(minka);
writeln;
If minka=1 then begin Writeln(';-)'); end;
If minka=2 then begin Writeln(':-D'); end;
If minka=3 then begin Writeln (':-('); end;
IF minka=4 then begin  Writeln (':-)'); end;
IF minka=5 then begin Writeln (':-|'); end;
writeln;
writeln;
writeln('Chcesz kontynulowac? [T/N]');
readln(ex);
end;
begin
przedmiot;
begin
while ex <> 'T' do
przedmiot;

writeln('Chcesz kontynulowac? [T/N]');
readln(ex);
end;
Exit;
end.
0
program Lekcje;
var ex:char;
minka:real;
USES Crt;

nie wiem czy to ma wpływ ale uses powinno byc przed var

w ogóle w tym kodzie nakombinowales tak ze nie wiem czy to delphi czy pascal i gdzie jest poczatek glownego bloku kodu itp itd.... wroce do Twojego pierwszego kodu :

program Lekcje;
uses crt;

var
  ex: char;
  minka: string;


begin
  ex := #00;
  while (ex <> 'N') and (ex <> 'n') do
  begin
    Writeln('Wpisz nazwe przedmiotu a dowiesz sie jaka minke bedziesz miec podczas tego przedmiotu');
    Readln(minka);  //wczytanie ciagu znakow do wcisniecia entera
    CASE minka OF
      'Matematyka' : begin Writeln(';-)'); end;
      'Informatyka' : begin Writeln(':-D'); end;
      'Fizyka' : begin Writeln (':-('); end;
      'Chemia' : begin Writeln (':-)'); end;
      'Angielski' : begin Writeln (':-|'); end;
      'Rosyjski' : begin Writeln (':-|'); end;
      'Wych-fiz' : begin Writeln (':-|'); end;
      else begin Writeln('Nieznany przedmiot'); end;
    end;
    writeln('Chcesz kontynulowac? [T/N]');
    ex := readkey; //wczytanie pojedynczego znaku z klawiatury
  end;
  Exit;
end.

moze tego sprobuj... nie mam kompilatora wiec sprawdzic nie moge..

0

Hallo pl65!

  1. Zadeklaruj minka jako integer:
minka: integer;
  1. Zamiast if-ow zastosuj case (jest bardziej elegancki):
case minka of
   1: Writeln(';-)');
   2: Writeln(':-D');
   3: Writeln(':-(');
   4: Writeln(':-)');
   5: Writeln(':-|');
end;

Pozdrawiam
Markus

0
MarkusB napisał(a)

Hallo pl65!

  1. Zadeklaruj minka jako integer:

minka: integer;

> 2. Zamiast if-ow zastosuj case (jest bardziej elegancki):
> 
> <code>case minka of
   1: Writeln(';-)');
   2: Writeln(':-D');
   3: Writeln(':-(');
   4: Writeln(':-)');
   5: Writeln(':-|');
end;

Pozdrawiam
Markus

Jeśli przewidujesz rozwijanie listy, możesz sobie ułatwić przyszłe życie stosując stałe, np:

const
  EMOT_WINK = 1;
  EMOT_LAUGH = 2;
  ...

i następnie
  case minka of
     EMOT_WINK: ...
     EMOT_LAUGH: ...


Uwierz, za miesiąc o tym, co właściwie znaczyło 2 a co 5 - pamiętają wyłącznie co lepsi szachiści :D

0
TheBigStaticObject napisał(a)
MarkusB napisał(a)

Hallo pl65!

  1. Zadeklaruj minka jako integer:
minka: integer;
  1. Zamiast if-ow zastosuj case (jest bardziej elegancki):
case minka of
   1: Writeln(';-)');
   2: Writeln(':-D');
   3: Writeln(':-(');
   4: Writeln(':-)');
   5: Writeln(':-|');
end;

Pozdrawiam
Markus

Jeśli przewidujesz rozwijanie listy, możesz sobie ułatwić przyszłe życie stosując stałe, np:

const
  EMOT_WINK = 1;
  EMOT_LAUGH = 2;
  ...

i następnie
  case minka of
     EMOT_WINK: ...
     EMOT_LAUGH: ...


Uwierz, za miesiąc o tym, co właściwie znaczyło 2 a co 5 - pamiętają wyłącznie co lepsi szachiści :D

A. Jezeli miala byc to uwaga do mnie, to musze Ci powiedziec, ze popieram w takich przypadkach (i nie tylko) stosowanie stalych i sam je stosuje. Kod staje sie elegancki i co duzo wazniejsze bardziej czytelny.

B. Jezeli miala byc to wskazowka do autora postu, to jezeli Twoj program mial byc tylko mala wprawka albo cwiczeniem, to nie inwestowalbym wiecej czasu. Tym bardziej ze:

...
Writeln('1. Matematyka 2.Informatyka 3. Fizyka 4. Chemia 5. Angielski');
...

To pewnie zrozumie najgorszy szachista :-) .
Ale mimo to jeszcze raz podkreslam, ze popieram to co napisal TBSO (jezeli wolno mi tak skrocic jego nick :-) )
Tylko pamietaj, ze w Twoim programie w "case" chodzi o przedmioty nie o smilies.

Pozdrawiam
Markus

0

->MarkusB

Oczywiście, że to było do "właściciela" wątku :)
A co do techniki - sądzę, że nawet w "małych" programach warto ćwiczyć dobre nawyki, nawet jeśli to jest sztuką dla sztuki i stratą czasu. W programowaniu bywa jak w brydżu meczowym, traci się 100 razy po jednym punkcie żeby raz nie stracić 10 :) Właśnie zresztą przegryzam się przez kod popełniony przez jakiegoś programistę 2 lata temu, i co chwila zerkam do ściągawki, co właściwie znaczy 0xFF0D, a co 65293 - właśnie w case :)

Pozdrawiam
TBSO :)

0

yyyy chlopaki a moze po prostu latwiej bedzie uzyc kodu ktory ja napisalem? :|:|:| bo widze ze juz klepiecie doglebnie inne tematy:D

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