Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Übersetzung C -> Delphi: Switch ohne break (https://www.delphipraxis.net/109998-uebersetzung-c-delphi-switch-ohne-break.html)

Luckie 11. Mär 2008 12:40


Übersetzung C -> Delphi: Switch ohne break
 
Ich habe in Co folgende Switch-Anweisung:
Code:
switch x {
  case 0:
    tuwas;
    break;
  case 1:
    tuwas;
    // kein break, damit mit folgendem case-Zweig weitergemacht wird
  case 2:
    tuwas;
    break;
}
Ich kann in Delphi zwar schreiben:
Delphi-Quellcode:
case x of
  0:
  begin
  end;
  1, 2:
  begin
  end;
end;
Aber dann kann man den 2'er Zweig nie alleine ansprechen, was aber auch möglich sein muss. Ich habe nur die Werte 0 bis 2.

Wie löse ich so was am geschicktesten?

jfheins 11. Mär 2008 12:52

Re: Übersetzung C -> Delphi: Switch ohne break
 
Wenn ich mich nicht irre, gibt es sowas in Delphi nicht, das heißt,
du musst wohl oder übel den Code für 2 auch nochmal zu 1 kopieren ;)

Wenns ganz viel Code ist, kannste es ja auch in ne funktion auslagern ;)

Bernhard Geyer 11. Mär 2008 12:54

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von jfheins
du musst wohl oder übel den Code für 2 auch nochmal zu 1 kopieren ;)
Wenns ganz viel Code ist, kannste es ja auch in ne funktion auslagern ;)

Ich würde dafür eine lokale Funktion nehmen.

ralfschwalbe 11. Mär 2008 12:56

Re: Übersetzung C -> Delphi: Switch ohne break
 
Hi,

Delphi-Quellcode:
case x of
  0: begin
       tuwas_case0;
     end;
  1,
  2: begin
       tuwas_case1und2;
       if x = 2 then
       begin
         tuwas_case2;
       end;
     end;
end;

Luckie 11. Mär 2008 13:27

Re: Übersetzung C -> Delphi: Switch ohne break
 
Ich habe es jetzt einfach kopiert, es waren nur ein paar Zeilen. Aber danke für eure Vorschläge.

Haru 29. Apr 2009 16:10

Re: Übersetzung C -> Delphi: Switch ohne break
 
hätt jetzt zu dem thema auch mal ne frage.

wir sollen einen getränkeautomaten mit case programmiern. das programm soweit hab ich fertig. lediglich eine fehlermeldung stört mich und diese bekomm ich trotz inet hilfen nicht weg. könntet ihr mir helfen?
Delphi-Quellcode:
case edtGetr.text of
(zur Getränke auswahl)dort sagt er mir
Zitat:

Ordinaltyp erforderlich
(kein String erlaubt) aber auch wenn ich dieses Editfenster bzw dem Text dort einen anderem Typ zuweise bekomme ich diese Fehlermeldung.

hoffe ihr könnt mir helfen =)

Meflin 29. Apr 2009 16:18

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Haru
hoffe ihr könnt mir helfen =)

Jo: Es geht halt einfach nicht mit strings, sondern nur mit Ordinaltypen (alles was man zählen kann, also Integer, Word, Enums, Boolsche Ausdrücke (ok kann man nicht zählen aber egal :mrgreen:))

Haru 29. Apr 2009 16:21

Re: Übersetzung C -> Delphi: Switch ohne break
 
das weiß ich ja auch. aber wie gesagt. wenn ich edtGetr.text in zb integer umwandel gehts trotzdem nicht :D

Meflin 29. Apr 2009 16:25

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Haru
das weiß ich ja auch. aber wie gesagt. wenn ich edtGetr.text in zb integer umwandel gehts trotzdem nicht :D

Wenn du in das Edit ne Zahl eingibst, dann geht das ;)

Bzw. was "geht dann nicht"??

Bernhard Geyer 29. Apr 2009 16:26

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Haru
das weiß ich ja auch. aber wie gesagt. wenn ich edtGetr.text in zb integer umwandel gehts trotzdem nicht :D

Wirklich nicht?

Delphi-Quellcode:
case StrToInt(edtGetr.text) of
  0:
  1:
end;
Oder kommt eine Exception das "..." kein gültige Zahl ist?

Haru 29. Apr 2009 16:32

Re: Übersetzung C -> Delphi: Switch ohne break
 
war auch nur nen beispielt..wollte eigentlich nen wort eingeben.
naja er gibt mir zb von Str nach Int aus I
Zitat:

nkompatible Typen: 'String' und 'Integer'
ich mein da muss ich doch irgendwo anders nen fehler gemacht habn ôo aber in dem ganzen prog benutz ich eigentlich (bis auf edt) immer real ôo

Meflin 29. Apr 2009 16:33

Re: Übersetzung C -> Delphi: Switch ohne break
 
Btw, wenn mans denn unbedingt machen will ;)
http://www.delphipraxis.net/internal...t.php?p=533280

Mithrandir 29. Apr 2009 16:36

Re: Übersetzung C -> Delphi: Switch ohne break
 
Erstell dir ein Array mit allen möglichen Wörtern, die in dem Edit vorkommen dürfen (für die du als ein Pendant in der Case-Anweisung hast).

Wenn du jetzt den Inhalt des Edits auswerten willst, dann suchst du mithilfe von Delphi-Referenz durchsuchenAnsiIndexText den eingegebenen Begriff in dem Array. Als Rückgabewert bekommst du bei Erfolg den Index des Wortes in dem Array (und hast somit einen Wert, den du im Case-Statement nutzen kannst), oder halt ein "-1", wenns nicht gefunden wurde.

Klar soweit?

//Edit: Roter Kasten? Roooter Kaaasten? Hey! Ich rede mit dir!

Haru 29. Apr 2009 16:40

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Meflin
Btw, wenn mans denn unbedingt machen will ;)
http://www.delphipraxis.net/internal...t.php?p=533280

das ja mit zahln ^^ das is doof :P

Mithrandir 29. Apr 2009 16:41

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Haru
das ja mit zahln ^^ das is doof :P

Aua. :wall: Das haben Ordinaltypen nunmal so an sich.. Anders gehts nicht..

Haru 29. Apr 2009 16:44

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Daniel G
Erstell dir ein Array mit allen möglichen Wörtern, die in dem Edit vorkommen dürfen (für die du als ein Pendant in der Case-Anweisung hast).

Wenn du jetzt den Inhalt des Edits auswerten willst, dann suchst du mithilfe von Delphi-Referenz durchsuchenAnsiIndexText den eingegebenen Begriff in dem Array. Als Rückgabewert bekommst du bei Erfolg den Index des Wortes in dem Array (und hast somit einen Wert, den du im Case-Statement nutzen kannst), oder halt ein "-1", wenns nicht gefunden wurde.

Klar soweit?

//Edit: Roter Kasten? Roooter Kaaasten? Hey! Ich rede mit dir!

ich mach das nur für die schule :D also keinen stress ^^ und arrays habn wa da nich erstellt aber ich klopp mich ma durch den hilfe text -.-"

hauptsächlich geht es mir ja darum,dass ich bei edtGetr.text nen Word eingeben kann..also kann ich nich den String auch irgendwie einfacher in ein Word umwandeln?ôo

Haru 29. Apr 2009 16:44

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Haru
das ja mit zahln ^^ das is doof :P

Aua. :wall: Das haben Ordinaltypen nunmal so an sich.. Anders gehts nicht..

reg dich nicht auf...schulintern eben ~.~ meinst ich hab mir das zum hobby gemacht?:D

Meflin 29. Apr 2009 16:57

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Haru
hauptsächlich geht es mir ja darum,dass ich bei edtGetr.text nen Word eingeben kann..also kann ich nich den String auch irgendwie einfacher in ein Word umwandeln?ôo

Ein Word ist vermutlich nicht das was du denkst... es ist nämlich eine Zahl. Du kannst einen string genau dann in eine Zahl umwandeln, wenn er eine beinhaltet. also "1" oder "4356817". SONST NICHT!

Wenn du also in dein Edit "Hallo du" eingeben willst und mit case of behandeln.... dann vergiss es einfach ;) (oder verwende besagten Umweg)

Haru 29. Apr 2009 17:04

Re: Übersetzung C -> Delphi: Switch ohne break
 
warum auch einfach wenns umständlich geht -.-" wär ja schon längst fertig mit dem scheiß wenn ichs mit if else hätte machen dürfen -.-"
trotzdem danke für die hilfe

Mithrandir 29. Apr 2009 17:06

Re: Übersetzung C -> Delphi: Switch ohne break
 
Vor einer halben Stunde hast du den entsprechenden Link bekommen. Stimmt, du hättest mit dem "Scheiß" schon fertig sein können... ;)

Haru 29. Apr 2009 17:09

Re: Übersetzung C -> Delphi: Switch ohne break
 
der mir nicht hilft ja... ~.~
weil wie gesagt ich mach das nicht hobby mäßig und mit AnsiIndexText komm ich nicht klar..tut mir leid

Mithrandir 29. Apr 2009 17:10

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Haru
mit AnsiIndexText komm ich nicht klar..tut mir leid

*hust* :shock:

Woran scheitert es denn?

Haru 29. Apr 2009 17:17

Re: Übersetzung C -> Delphi: Switch ohne break
 
hab halt ka wie ichs definiern soll, weil ich mit dem quelltext nich klar komm -.-" warum hört mir nie einer zu das das schulniveau ist? :wall:

Mithrandir 29. Apr 2009 17:22

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Haru
warum hört mir nie einer zu das das schulniveau ist? :wall:

Warum erkenne ich bloß keinerlei Eigeninitiative... :wall:

Himmelherrgott, muss man euch Schülern denn alles vorkauen? Ihr tut ja fast so, als wäre es verboten, mal selbst das Hirn einzuschalten. Es gibt so viele Tutorials und Referenzen. Ich möchte ja gar nicht ausschließen, dass es dem einen oder anderen Lehrer nicht gelingt, das Wissen zu vermitteln. Aber deshalb hier zu sitzen und rumzujaueln, das nervt gewaltig!

*durchschnauf'*

Haru 29. Apr 2009 17:24

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Haru
warum hört mir nie einer zu das das schulniveau ist? :wall:

Warum erkenne ich bloß keinerlei Eigeninitiative... :wall:

Himmelherrgott, muss man euch Schülern denn alles vorkauen? Ihr tut ja fast so, als wäre es verboten, mal selbst das Hirn einzuschalten. Es gibt so viele Tutorials und Referenzen. Ich möchte ja gar nicht ausschließen, dass es dem einen oder anderen Lehrer nicht gelingt, das Wissen zu vermitteln. Aber deshalb hier zu sitzen und rumzujaueln, das nervt gewaltig!

*durchschnauf'*

jahaha schön das weiß ich auch. aber wenn ichs nicht verstehe is es meine schuld oder wie?!

himitsu 29. Apr 2009 17:29

Re: Übersetzung C -> Delphi: Switch ohne break
 
Delphi-Referenz durchsuchenAnsiIndexText steht in der OH, dort kann man nachsehn,
selbst im Forum wird es oft genug verwendet > Hier im Forum suchenAnsiIndexText
und da finde ich auf der ersten Suchseite case string of funktioniert nicht? oO, was genau deinem Problem entspricht ... warum erkenn ich dann auch selten (nicht nur bei dir) etwas Eigeninitiative :?:

DeddyH 29. Apr 2009 17:29

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zeig uns doch einfach mal Deinen Code, dann können wir evtl. erkennen, was Du vorhast und Dir Alternativen unterbreiten, bei denen der Compiler nicht meckert.

Haru 29. Apr 2009 17:38

Re: Übersetzung C -> Delphi: Switch ohne break
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    lblEinwurf: TLabel;
    lblRest: TLabel;
    edtEinwurf: TEdit;
    edtRest: TEdit;
    pnlAuswahl: TPanel;
    pnlUeberschrift: TPanel;
    pnlStatus: TPanel;
    btnEinwurf: TBitBtn;
    btnNeu: TBitBtn;
    lblGetr: TLabel;
    edtGetr: TEdit;
    lblCola: TLabel;
    lblFanta: TLabel;
    lblSprite: TLabel;
    lblWasser: TLabel;
    lblSaft: TLabel;
    btnGetr: TBitBtn;
    btnEnde: TBitBtn;
    procedure btnEinwurfClick(Sender: TObject);
    procedure btnEndeClick(Sender: TObject);
    procedure btnNeuClick(Sender: TObject);
    procedure btnGetrClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var Einwurf:Real;
procedure TForm1.btnEinwurfClick(Sender: TObject);
begin
Einwurf:=StrToFloat(edtEinwurf.Text);
pnlStatus.Caption:=('Bitte wählen Sie ein Getränk aus, indem die die dafür vorgesehenen Zahl bei Getränk eingeben und mit OK bestätigen!');
end;

procedure TForm1.btnEndeClick(Sender: TObject);
begin
close;
end;

procedure TForm1.btnNeuClick(Sender: TObject);
begin
edtEinwurf.Clear;
edtRest.Clear;
end;

procedure TForm1.btnGetrClick(Sender: TObject);
begin

 case StrToInt(edtGetr.text) of
   1: begin
                edtRest.Text:=(einwurf-1.20);
                pnlStatus.Caption:='Danke für ihren Einkauf!';
           end;
   2: begin
                edtRest.Text:=(einwurf-1.20);
                pnlStatus.Caption:='Danke für ihren Einkauf!';
            end;
   3: begin
                edtRest.Text:=(einwurf-1.20);
                pnlStatus.Caption:='Danke für ihren Einkauf!';
            end;
   4: begin
                edtRest.Text:=(einwurf-1.00);
                pnlStatus.Caption:='Danke für ihren Einkauf!';
            end;
   5: begin
                edtRest.Text:=(einwurf-1.50);
                pnlStatus.Caption:='Danke für ihren Einkauf!';
            end;
 else
   pnlStatus.Caption:='Sie haben zu wenig Geld eingeworfen!';
 end;
end;

end.
viel spaß..ich geh meine kopfschmerzen auszockn....inzw wurde das eh mind. 5milliarden mal verändert...

Mithrandir 29. Apr 2009 17:38

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Haru
Aber wenn ichs nicht verstehe is es meine schuld oder wie?!

Nunja, ist das unsere Schuld?

Haru 29. Apr 2009 17:42

Re: Übersetzung C -> Delphi: Switch ohne break
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Haru
Aber wenn ichs nicht verstehe is es meine schuld oder wie?!

Nunja, ist das unsere Schuld?

hab ich das gesagt?nein...

DeddyH 29. Apr 2009 17:45

Re: Übersetzung C -> Delphi: Switch ohne break
 
Aha, der Fehler kommt nicht vom case, sondern von den Zeilen der Art
Zitat:

Delphi-Quellcode:
edtRest.Text:=(einwurf-1.20);

einwurf ist eine Fließkommazahl genau wie das Ergebnis der Berechnung. Das musst Du erst wieder in einen String wandeln, bevor Du es dem Text des Edits zuweisen kannst.
Delphi-Quellcode:
edtRest.Text := FloatToStr(einwurf-1.20);

Haru 29. Apr 2009 18:03

Re: Übersetzung C -> Delphi: Switch ohne break
 
danke danke..sowas hab ich mir schon gedacht aber naja..

DeddyH 29. Apr 2009 18:07

Re: Übersetzung C -> Delphi: Switch ohne break
 
Normalerweise markiert Delphi Dir aber auch die fehlerhafte Zeile, Du hast es Dir und uns also unnötig schwer gemacht :zwinker:

blauweiss 29. Apr 2009 18:39

Re: Übersetzung C -> Delphi: Switch ohne break
 
[Senf dazugeb]
Also ich find: Dieser Thread hebt sich ab von den meisten anderen "Hausaufgaben"-Threads.
Haru, du hast dir Mühe gegeben ! :thumb: Und das Listing ist für nen Neuling.... Hut ab !
Für nen Delphi-Anfänger ist halt ein "word" auf den ersten Blick auch ein "word".
[/Senf dazugeb]

Glückwunsch zum 1.(?) eigenen Programm ! :mrgreen:

blauweiss


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz