![]() |
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:
Dazu sagt der Compiler:
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; [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:
Der Compiler sagt mir in Zeile 8 bei den Uses:
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; [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: |
Re: RightStr() macht mehr Ärger als geplant
|
Re: RightStr() macht mehr Ärger als geplant
Btw. das solltest du dir nochmal überlegen:
Delphi-Quellcode:
label GotoAnfang;
|
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 |
Re: RightStr() macht mehr Ärger als geplant
Zitat:
Delphi-Quellcode:
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)
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
Delphi-Quellcode:
if g[Length(g)] in ['2', '4', '5', '6', '8', '0'] then
|
Re: RightStr() macht mehr Ärger als geplant
Zitat:
|
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! |
Re: RightStr() macht mehr Ärger als geplant
Der erste Parameter ist aber ein String-Typ
|
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 |
Re: RightStr() macht mehr Ärger als geplant
Haaalt, der eine Fehler ist hier erstmal:
Zitat:
In diesem Fall muss StrUtils dazu:
Delphi-Quellcode:
Denn in der Unit StrUtils ist RightStr deklariert wie in der Hilfe steht.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, StrUtils; |
Re: RightStr() macht mehr Ärger als geplant
Hier wäre auch eine Möglichkeit Primzahlen zu berechnen.
Delphi-Quellcode:
function isPrim(zahl: Integer): boolean;
var i: Integer; begin result := true; if zahl = 1 then begin result := false; exit; end; for i := 2 to zahl div 2 do begin if zahl mod i = 0 then begin result := false; exit; end; end; end; procedure TForm1.Button1Click(Sender: TObject); var x, y, i: Integer; begin x := StrToInt(Edx.Text); y := StrToInt(Edy.Text); for i := x to y do begin if isPrim(i) then begin Memo1.Lines.Add(IntToStr(i)); end; end; end; |
Re: RightStr() macht mehr Ärger als geplant
Danke für die viele Hilfe!
jaenicke: danke^^ ich idiot!^^ kannst du mir folgendes erklären: [Fehler] Unit1.pas(47): Es gibt keine überladene Version von 'RightStr', die man mit diesen Argumenten aufrufen kann :wiejetzt: MfG Headshot037 |
Re: RightStr() macht mehr Ärger als geplant
Zitat:
|
Re: RightStr() macht mehr Ärger als geplant
OK, wenn "g" ein Integer ist (PS: warum hast du die Variablendeklaration nicht lokal in der Prozedur drin?)
Zitat:
Delphi-Quellcode:
bzw: (keinen Bereichsprüfung drin ... grund steht schonmal weiter oben)
if ((g mod 10)=2) or ((g mod 10)=4) or ((g mod 10)=5) or ((g mod 10)=6) or ((g mod 10)=8) or ((g mod 10)=0) then
Delphi-Quellcode:
>
if (g mod 10) in [2, 4, 5, 6, 8, 0] then
![]() |
Re: RightStr() macht mehr Ärger als geplant
aaaaaah danke danke danke du hast mich gerettet =)
Bekommst auch nen Platz in den Credits =D Warum ich die Variablendeklaration am Anfang schreibe und nicht in der Prozedur? Nun ja, ich habs so gelernt. Woher sollte ich es auch besser wissen =D Ein Schüler kann eben nur so gut sein, wie sein Meister. Aber ich denke ich habe hier die Community als neuen Meister gefunden =) Ab sofort werde ich das natürlich in der Procedure schreiben ;) Danke nochmal! :zwinker: |
Re: RightStr() macht mehr Ärger als geplant
Variablen immer so nah wie möglich an ihrem Verwendungsord definieren.
Das merkst du eigentlich schon bei den Schleifenvariablen für For-Do-Schleifchen, denn diese müssen dord deklariert werden, wo sie benötigt werden, oder hat der Compiler nicht bei "a" gemeckert? Zitat:
(und globale Variablen werden eh ungern gesehn) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz