Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi RightStr() macht mehr Ärger als geplant (https://www.delphipraxis.net/130186-rightstr-macht-mehr-aerger-als-geplant.html)

Headshot037 4. Mär 2009 20:21


RightStr() macht mehr Ärger als geplant
 
Hallo!

Mal wieder eine dieser Ich-lerne-Delphi-in-der-Schule-Fragen , sorry erstmal dafür, doch ich interessiere mich sehr dafür aber mein Lehrer ist einfach nicht in der Lage, mir zu helfen o_O

Am besten erstmal den Code. Ich will Primzahlen berechnen (bitte erschlagt mich nicht wegen der GoTo-Anweisung, die kenn ich aus C++ und hab das mal probiert... bzw es probiert, es zu probieren -,- )

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
label GotoAnfang;
begin
g:=StrToInt(Edit1.Text);
h:=StrToInt(Edit2.Text);
Label1.Caption:='';
   // ToDo: maximal durch hälfte teilen, da anschließend immer Rest vorhanden
    // halb:=(h/2);
    // halb2:=(round(halb));


    GotoAnfang:         //Anfangspunkt
    for a:=g to h do

      begin     //jetzt alle Zahlen rauswerfen, die mit 0,2,4,5,6,8 enden, da sowieso keine Primzahlen
      if RightStr(g,1)=2 or RightStr(g,1)=4 or RightStr(g,1)=5 or RightStr(g,1)=6 or RightStr(g,1)=8 or RightStr(g,1)=0
      then goto GotoAnfang;
        for b:=1 to h do
          begin
            x:=a mod b;
            if x=0 then y:=y+1
          end;
        if y=2 then Label1.caption:=label1.caption+chr(13)+IntToStr(a);
    y:=0 ;
    b:=0 ;
      end;

end;
Dazu sagt der Compiler:
[Fehler] Unit1.pas(48): Es gibt keine überladene Version von 'RightStr', die man mit diesen Argumenten aufrufen kann

:wiejetzt:

und in den Uses (keine Ahnung, ob das richtig ist)
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
  function RightStr(const AText: AnsiString; const ACount: Integer): AnsiString; overload;
  function RightStr(const AText: WideString; const ACount: Integer): WideString; overload;
Der Compiler sagt mir in Zeile 8 bei den Uses:
[Fehler] Unit1.pas(8): Ungenügende Forward- oder External-Deklaration: 'RightStr'
:wall:

Ehrlich gesagt: Ich versteh kein Wort und brauche eure Hilfe!

MfG
Headshot037 :dance:

Jens Hartmann 4. Mär 2009 20:25

Re: RightStr() macht mehr Ärger als geplant
 
Hallo erstmal,

Versuch mal dein Glück, mit folgendem Link..

Primzahlen berechnen

mkinzler 4. Mär 2009 20:27

Re: RightStr() macht mehr Ärger als geplant
 
Btw. das solltest du dir nochmal überlegen:

Delphi-Quellcode:
label GotoAnfang;

Headshot037 4. Mär 2009 20:29

Re: RightStr() macht mehr Ärger als geplant
 
naja mir war es wichtig, den code selbst erarbeitet zu haben.
Ich weiß dass meine Methode nciht sehr effizient ist.
Es gibt noch mehrere andere Lösungen, und ich weiß, dass diese auch schneller arbeiten.
Aber das ist ja eigentlich nicht die Frage, sondern wie ich das mit RightStr hinbekomme, das braucht man ja nicht nur bei diesem Programm.


mkinzler: Was ist daran falsch? Bitte um Hilfe =)

MfG
Headshot037

himitsu 4. Mär 2009 20:30

Re: RightStr() macht mehr Ärger als geplant
 
Zitat:

Delphi-Quellcode:
if RightStr(g,1)=2 or RightStr(g,1)=4 or RightStr(g,1)=5 or RightStr(g,1)=6 or RightStr(g,1)=8 or RightStr(g,1)=0 then

da gehören noch ein paar Klammern rein :zwinker:

Delphi-Quellcode:
if (RightStr(g,1)=2) or (RightStr(g,1)=4) or (RightStr(g,1)=5) or (RightStr(g,1)=6) or (RightStr(g,1)=8) or (RightStr(g,1)=0) then
bzw: (hab hier keine Bereichsprüfung für den Zeichenindex eingebaut, da ich weiß daß hier mindestens ein Zeichen vorhanden ist ... also in dieser Button1Click-Prozedur ... sonst bitte aufpassen)

Delphi-Quellcode:
if g[Length(g)] in ['2', '4', '5', '6', '8', '0'] then

mkinzler 4. Mär 2009 20:34

Re: RightStr() macht mehr Ärger als geplant
 
Zitat:

mkinzler: Was ist daran falsch? Bitte um Hilfe =)
Ein Grund, warum Herr Wirth Pascal erfunden hat, war das goto. Es gibt einfach viel bessere (strukturierte) Alternativen

Headshot037 4. Mär 2009 20:44

Re: RightStr() macht mehr Ärger als geplant
 
hab mal das mit dem kürzeren Code getestet:

[Fehler] Unit1.pas(49): Inkompatible Typen

Also g ist Integer, weiß nicht, obs damit zusammen hängen kann...

und die Fehler
[Fehler] Unit1.pas(8): Ungenügende Forward- oder External-Deklaration: 'RightStr'
treten auch noch auf =(

aber danke erstmal für die schnelle hilfe!

mkinzler 4. Mär 2009 20:49

Re: RightStr() macht mehr Ärger als geplant
 
Der erste Parameter ist aber ein String-Typ

thkerkmann 4. Mär 2009 20:56

Re: RightStr() macht mehr Ärger als geplant
 
Hi,

um zu prüfen, ob eine Zahl gerade oder ungerade ist, gibt es die Funktionen Odd(i) bzw. Even(i),
wobei i natürlich ein integer ist.

Das sollte dir weiterhelfen.

Zahlenvergleiche durch Stringverarbeitung sind weder elegant noch performant.

Gruss

jaenicke 4. Mär 2009 21:05

Re: RightStr() macht mehr Ärger als geplant
 
Haaalt, der eine Fehler ist hier erstmal:
Zitat:

Zitat von Headshot037
und in den Uses (keine Ahnung, ob das richtig ist)
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
  function RightStr(const AText: AnsiString; const ACount: Integer): AnsiString; overload;
  function RightStr(const AText: WideString; const ACount: Integer): WideString; overload;
Der Compiler sagt mir in Zeile 8 bei den Uses:
[Fehler] Unit1.pas(8): Ungenügende Forward- oder External-Deklaration: 'RightStr'

In die uses Liste gehören Unitnamen rein. Du siehst das doch eigentlich am vorhandenen Quelltext...

In diesem Fall muss StrUtils dazu:
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StrUtils;
Denn in der Unit StrUtils ist RightStr deklariert wie in der Hilfe steht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr.
Seite 1 von 2  1 2      

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