Wyjatki w kodzie sprawdzającym płeć na podstawie imienia.

0

Napisalem taki kod

procedure TForm1.Button1Click(Sender: TObject);
var
  imie : string;
  a : integer;
begin
  imie := Edit1.Text;
  a := length(imie);
  if (imie[a] = 'a') then showmessage('kobieta') else
  showmessage('mezczyzna');
begin
  case Edit1.Text of
  barnaba : Edit1.Text := showmessage('mezczyzna');
  kuba : Edit1.Text := showmessage('mezczyzna');
end;
end;
end.

i jak nie ma instrukcji case of to dziala a jak jest to wyswietla blad ordinal type required.
Dopiero sie ucze programowaniei to moj 1 post wiec prosze o wyrozumialosc jestem w gimnazjum.

1

cośtam to nie jest string, 'cośtam' to już natomiast jest string.

0
procedure TForm1.Button1Click(Sender: TObject);
var
  imie : string;
  a : integer;
begin
  imie := Edit1.Text;
  a := length(imie);
  if imie = 'barnaba' then 
    showmessage('mezczyzna')
  else if imie = 'kuba' then 
    showmessage('mezczyzna')
  else if (imie[a] = 'a') then
    showmessage('kobieta') 
  else
    showmessage('mezczyzna');
end.

A co mi tam gotowcem rzucę :)

a co do case

```delphi begin case Edit1.Text of 'barnaba' : showmessage('mezczyzna'); 'kuba' : showmessage('mezczyzna'); end; ``` i powinno działać. **EDIT:** Fakt string w case nie zadziała :) .Jednak Twój kod po wpisaniu w edit kuba wyrzuci najpierw messagebox z napisem kobieta a potem z napisem mężczyzna. Czemu nie powiem bo widać, że się uczysz a najlepiej nauka wchodzi jak samemu się błędy poprawi i dojdzie dlaczego występują :)

I przy okazji

Edit1.Text := showmessage('mezczyzna');

co to jest??

0
bartek655 napisał(a):

i jak nie ma instrukcji case of to dziala a jak jest to wyswietla blad ordinal type required

w casie można porównywać tylko typy porządkowe (ordinal), tj. integer, char, boolean, byte, longint itp.
nie można porównywać np zmiennych real czy stringów tak jak próbujesz - musisz do tego użyć ifa

btw - jest pełno popularnych imion żeńskich obcego pochodzenia nie kończących się na "a" - przykładowo Noemi
takie wykrywanie płci nie ma w dzisiejszych czasach za bardzo sensu - lepiej się o płeć po prostu spytać

0
babubabu napisał(a)
procedure TForm1.Button1Click(Sender: TObject);
var
  imie : string;
  a : integer;
begin
  imie := Edit1.Text;
  a := length(imie);
  if imie = 'barnaba' then 
    showmessage('mezczyzna')
  else if imie = 'kuba' then 
    showmessage('mezczyzna')
  else if (imie[a] = 'a') then
    showmessage('kobieta') 
  else
    showmessage('mezczyzna');
end.

A co, jeśli wyjątków będzie np. 30? Nie dość, że tworzy się śliczną drabinkę if'ów, to jeszcze aby zmodyfikować zawartość listy wyjątków trzeba ingerować w kod; Już lepszym rozwiązaniem byłoby utworzyć dwie listy typu TStrings (osobno dla mężczyzn, osobno dla kobiet) i istnienie danego imienia na liście sprawdzać metodą IndexOf; Taką listę można łatwo modyfikować bez dodawania kolejnych if'ów;

unikalna_nazwa napisał(a)

btw - jest pełno popularnych imion żeńskich obcego pochodzenia nie kończących się na "a" - przykładowo Noemi
takie wykrywanie płci nie ma w dzisiejszych czasach za bardzo sensu - lepiej się o płeć po prostu spytać

Dokładnie tak, teraz jest moda na zagraniczne imiona (ot po drodze - Nikol), dzięki czemu z czasem lista wyjątków będzie się powiększać; Trzeba brać pod uwagę wszystkie możliwości i odpowiednio na nie zwracać uwagę, jednak nic nie zastąpi wymienionego wyżej pytania o płeć;

babubabu napisał(a)

Fakt string w case nie zadziała

Zależy jakiego środowiska się używa, np. w TP7 dopuszczalne były łańcuchy w instrukcji wyboru :]

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