kostenloser Webspace werbefrei: lima-city


Operator ist auf den Operandentyp nicht anwendbar

lima-cityForumProgrammiersprachenDelphi & Pascal

  1. Autor dieses Themas

    kevinweiler

    Kostenloser Webspace von kevinweiler

    kevinweiler hat kostenlosen Webspace.

    Hallo Leute,

    bei folgendem Programm zeigt mir Delphi zwei Fehlermeldungen an.
    Einmal Operator ist auf den Operandentyp nicht anwendbar und einmal Operator oder Semikolon fehlt.
    begin
      if zeichen[1] not in (Grossbuchstaben) or (Kleinbuchstaben)
        then showmessage('Unkorrekt!')
        else begin
               for i := 2 to Length(zeichen) do
                 if zeichen[i] not in (Grossbuchstaben) and (Ziffern) and (Kleinbuchstaben) and (unterlaenge)
                   then showmessage('Unkorrekt');
                   else showmessage('Korrekte Buchstabenfolge');
               end;
             end;
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Ohne dem Drumherum ist das nicht ganz so einfach. Zumindest die Deklaration der Variablen wäre sehr hilfreich, da ansonsten die Datentypen nicht ersichtlich sind :wink:.
    Allgemein wäre das Posten der gesamten Funktion wünschenwert, da Deine Schreibweise / Einrückungen beim end-Schlüsselwort etwas, wie sag ich's denn, eigenwillig ist ...
  4. Autor dieses Themas

    kevinweiler

    Kostenloser Webspace von kevinweiler

    kevinweiler hat kostenlosen Webspace.

    mein ganzer code:
    unit buchstabenakzeptor_u;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    const ziffern = [0..9];
          grossbuchstaben = ['A'..'Z'];
          kleinbuchstaben = ['a'..'z'];
          unterlaenge = ['_'];
    
    type
      TForm1 = class(TForm)
        bt_eingabe: TButton;
        bt_test: TButton;
        bt_ende: TButton;
        procedure bt_endeClick(Sender: TObject);
        procedure bt_eingabeClick(Sender: TObject);
        procedure bt_testClick(Sender: TObject);
      private
        { Private-Deklarationen }
      public
        { Public-Deklarationen }
      end;
    
    var
      Form1: TForm1;
      zeichen: string;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.bt_endeClick(Sender: TObject);
    begin
      close
    end;
    
    procedure TForm1.bt_eingabeClick(Sender: TObject);
    begin
      Zeichen:= inputbox('Buchstabenfolge eingeben','Eingabe','');
    
    end;
    
    procedure TForm1.bt_testClick(Sender: TObject);
    var i : integer;
    begin
      if zeichen[1] not in (Grossbuchstaben) or (Kleinbuchstaben)
        then showmessage('Unkorrekt!')
        else begin
               for i := 2 to Length(zeichen) do
                 if zeichen[i] not in (Grossbuchstaben) and (Ziffern) and (Kleinbuchstaben) and (unterlaenge)
                   then showmessage('Unkorrekt');
                   else showmessage('Korrekte Buchstabenfolge');
               end;
             end;
    end;
    
    end.
  5. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Also ich würd's mal so versuchen (ungeteste):
    procedure TForm1.Button1Click(Sender: TObject);
    var i : integer;
    begin
      if not (zeichen[1] in (Grossbuchstaben)) or not (zeichen[1] in (Kleinbuchstaben))
        then showmessage('Unkorrekt!')
          else
            begin
               for i := 2 to Length(zeichen) do
                 if not (zeichen[i] in (Grossbuchstaben)) and
                    not (zeichen[i] in (Ziffern)) and
                    not (zeichen[i] in (Kleinbuchstaben)) and
                    not (zeichen[i] in (unterlaenge))
                   then showmessage('Unkorrekt')
                     else showmessage('Korrekte Buchstabenfolge');
            end;
    end;

    Weiters musst du im const-Abschnitt die Zeile ändern:
    ziffern = ['0'..'9'];

    Du kannst ja schwer ein Char (Zeichen(i)) mit einem Integer [0..9] vergleichen ...
  6. Autor dieses Themas

    kevinweiler

    Kostenloser Webspace von kevinweiler

    kevinweiler hat kostenlosen Webspace.

    Danke, aber ich bekomme leider immer wieder die Meldung unkorrekt. Dabei möchte ich wenn z.B. das Wort Hallo eingegeben wird eine Ausgabe "Korrekt". Leider komme ich nicht auf die Lösung.
  7. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Ich habe ja auch nur auf's sprachliche hin gekuckt. Wenn ich mir das genauer anschaue, kann das von der Logik her gar nicht funktionieren, da du ja 1) für jedes einzelne Zeichen eine Meldung ausgibst und 2) ein Zeichen nicht in Grossbuchstaben, Ziffern, Kleinbuchstaben und Unterlänge gleichzeitig sein kann. Ein or wäre hier angebracht.
  8. Autor dieses Themas

    kevinweiler

    Kostenloser Webspace von kevinweiler

    kevinweiler hat kostenlosen Webspace.

    So habe es jetzt mit Zuständen gemacht.
    Nur jetzt zeigt er mir die Fehlermeldung an Deklaration erwartet aber if gefunden.
    unit buchstabenakzeptor_u;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    const ziffern = ['0'..'9'];
          grossbuchstaben = ['A'..'Z'];
          kleinbuchstaben = ['a'..'z'];
          unterlaenge = ['_'];
    
    type
      TForm1 = class(TForm)
        bt_eingabe: TButton;
        bt_test: TButton;
        bt_ende: TButton;
        procedure bt_endeClick(Sender: TObject);
        procedure bt_eingabeClick(Sender: TObject);
        procedure bt_testClick(Sender: TObject);
      private
        { Private-Deklarationen }
      public
        { Public-Deklarationen }
      end;
    type Tzustand = (z0,z1,z2);
    var
      Form1: TForm1;
      zeichen: string;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.bt_endeClick(Sender: TObject);
    begin
      close
    end;
    
    procedure TForm1.bt_eingabeClick(Sender: TObject);
    begin
      Zeichen:= inputbox('Buchstabenfolge eingeben','Eingabe','');
    
    end;
    
    procedure TForm1.bt_testClick(Sender: TObject);
    var i : integer;
        zustand : Tzustand;
    begin
    
      if not (zeichen[1] in (Grossbuchstaben)) or not (zeichen[1] in (Kleinbuchstaben))
        then zustand := z0
        else zustand := z1;
      for i:=2 to length(zeichen) do
        if not (zeichen[i] in (Grossbuchstaben)) and
           not (zeichen[i] in (Ziffern)) and
           not (zeichen[i] in (Kleinbuchstaben)) and
           not (zeichen[i] in (unterlaenge)) or
           not (zustand=z1)
        then zustand := z0
        else zustand := z2;
      end;
    
    
      if zustand = z0
        then showmessage('Da war was falsch!')
        else showmessage('Gut gemacht. Das war richtig');
    
    end;
    
    end.
  9. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Wieso machst du es dir eigentlich nicht einfach??
    const
      allowed = [#32, '0'..'9', 'A'..'Z', '_', 'a'..'z'];


    und die Prüfung:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      SpecialChars: Boolean;
      i: Integer;
    begin
      Zeichen := 'Just a Test$';
      SpecialChars := False;
      for i := 1 to Length(Zeichen) do
      begin
        if not (Zeichen[i] in allowed) then SpecialChars := True;
      end;
      if SpecialChars then
        ShowMessage('nicht korrekt')
          else
            ShowMessage('korrekte Zeicheneingabe');
    end;

    Ist geprüft, sollte so bestens für dich funktionieren :thumb:
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!