Autor Beitrag
nixblicker
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 30.10.09 19:43 
Hallo!

Wie kann ich prüfen, ob eine Zahl eine Ganzzahl, also Integer, ist?

Ich teile eine Zahl durch 1 bis 9 und prüfe dann immer, ob das Ergebnis
eine Ganzzahl ist. Wie krieg ich das hin?

Vielen Dank im Voraus!

Mfg.
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 30.10.09 19:53 
Hey und :welcome: im Forum!
Schau Dir mal den Befehl mod an. Dieser gibt Dir den Rest einer Division zurück. :)
Alternativ bietet sich hier auch die Funktion Frac() an, die Dir die Nachkommastellen einer Zahl zurückgibt. ;)
nixblicker Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 30.10.09 20:23 
Okay, danke ich versuchs mal damit. Wenn Fragen kommen, meld ich mich nochmal ;)
Aber jetzt noch eine kleine Frage:
Wenn ich in einer If-Konstruktion mehrer Bedingungen haben will, wie geht das?
z.B.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
If Rest = 0 and Rest1 = 0 then
  begin
    ...
  end;


Ich will etwas nur ausführen, wenn Rest = 0 und eben Rest1 = 0 sind. Wie oben geschrieben
funktioniert das nicht. Aber wie sonst?

Danke schonmal.

Mfg.
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Fr 30.10.09 20:28 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
If Rest = 0 or Rest1 = 0 then
  begin
    ...
  end;



Du sagst ja: wenn das eine ODER das andere eintritt. Dein Quelltext aber sagte, ausführen nur dann, wenn Bedingung 1 UND Bedingung 2 wahr (gleichzeitig) zutreffen...

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Fr 30.10.09 20:31 
Hi, folgendes zu beachte denn in z.B. Delphi 6 wird es ohne Klammern probleme geben. Da keine Delphi Version bekannt gegeben worden ist.

ausblenden Delphi-Quelltext
1:
If (Rest = 0or (Rest1 = 0then					
nixblicker Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 30.10.09 20:34 
Okay danke. Ich habs jetzt so gelöst, dass ich kein AND oder OR brauch...
Aber ne andre Frage...
Ich glaub ich post mal den ganzen Code.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
...
var
Teiler: integer;
Rest: integer;

begin

zahler := StrToInt(Edit1.Text);
nenner := StrToInt(Edit2.Text);

for Teiler := 1 to 10 do
  begin
     Rest := (Zahler mod Teiler) + (Nenner mod Teiler) ;

     If Rest = 0 then
      begin
           zahlerneu := zahler / teiler;
           nennerneu := nenner / teiler ;
      end
     else;

end;
...


Es kommt bei der Zeile zahlerneu := ... die Fehlermeldung "Incompatible types: 'Integer' and 'Extended'".
(zahlerneu und nennerneu sind weiter oben schon als integer deklariert.)

Warum das denn?

EDIT: Ich hab zahlerneu und nennerneu als double deklariert, jetzt scheints zu funktionieren!

Danke schonmal.

Mfg.
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Fr 30.10.09 20:39 
Integer = ganzzahl
double = gleitkommazahl
Integer kann nur Ganze zahlen darstellen wie es schon sagt.
Daher kann man nicht sagen Integer := 1,1;
hoffe das hilft wenn nicht einfach mal F1 drücken in der Delphi-Hilfe wird das sehr gut erklärt.

Edit: Das ist das selbe wie string := integer nicht geht.
Man muss es auf jeden fall vorher Konvertieren mit z.b.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure xy;
var i: integer;
    d: double;
begin
  I := 1;
  d := 1;
  I := d; // falsch
  I := Floattoint(d); // richtig
//aber
  d := 1,5;
  i := d; // falsch
  i := Floattoint(d); // auch falsch da Integer nur Ganzzahlen beinhalten kann.
end;


mfg nic
nixblicker Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 30.10.09 20:50 
Danke, hab jetzt aber ein anderes Problem:
Wie breche ich eine for-Schleife ab?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
for Teiler := 20 downto 2 do
  begin
     Rest := (Zahler mod Teiler) + (Nenner mod Teiler) ;

     If Rest = 0 then
      begin
           zahlerneu := zahler/teiler;
           nennerneu := nenner/teiler;
           showmessage(FloatToStr(zahlerneu) + ' / ' + FloatToStr(nennerneu));
               //hier will ich abbrechen
      end
     else;

end;


Wie geht das? Sorry für die vielen Fragen^^

Mfg.
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Fr 30.10.09 20:55 
Break oder Exit für Unterschied F1 ;)
nixblicker Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 30.10.09 21:06 
Danke, Frage ist erstmal beantwortet.
Ihr werdet aber sicher nochmal von mir hören...;)

Mfg.
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Fr 30.10.09 23:09 
so. Warum jetzt nicht tryStrToInt?!

edit: gemeint war natürlich tryIntToStr
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 31.10.09 14:29 
user profile iconnixblicker hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
 for Teiler := 20 downto 2 do
 {...}
     Rest := (Zahler mod Teiler) + (Nenner mod Teiler) ;
 {...}
           zahlerneu := zahler/teiler;
           nennerneu := nenner/teiler;
 {...}

Es geht wohl eindeutig ums Kürzen. Aber warum verwendest Du nicht einfach den Algorithmus von Euklid zur Bestimmung des ggTs? :idea:
nixblicker Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 31.10.09 18:35 
Hallo...
Zitat:

Es geht wohl eindeutig ums Kürzen. Aber warum verwendest Du nicht einfach den Algorithmus von Euklid zur Bestimmung des ggTs? :idea:

weiiil ähm...ich wollt schauen ob ichs selber hinkrieg. und es hat sogar geklappt...wird ein programm für die schule, deshalb will ich so wenig wie möglich "fremden" (mit fremd mein ich vorgefertigt) Code einbauen...und für EUKLID fehlt
mir grad die Zeit und die Lust ;)