Delphi ! Hilfe was mach ich falsch ?

Hey Leute,

Ich möchte mit Delphi sprich Konsolen Anwendung eine Division mit Rest durchführen. Aber iw. mach ich falsch bitte helft mir

program Probe1;
//Felix Schmidt,15.09.2012
{$APPTYPE CONSOLE}
uses
sysutils;
Var a,b,Quotient :integer;
begin
// Hier Anwender-Code

write('Zahla: ');readln(a);
write('Zahlb: ');readln(b);

Quotient:=(a mod b);

write(Quotient);

readln;

end.

Bitte wäre echt nett.

Generell würde es helfen, wenn Du schreiben würdest warum Du glaubst etwas falsch zu machen. Also eine Fehlermeldung oder kommt ein falsches Ergebnis?

Leider habe ich in letzter Zeit nichts mehr mit Delphi zu tun gehabt und kann es nicht testen, aber ich würde auf jeden Fall mal prüfen, ob du mit readIn direkt in eine Integer Variable lesen darfst und ob du mit write einfach einen Integer Wert ausgeben darfst oder ob Du nach noch konvertieren musst

Beste Grüße

Man muss auf der Benutzeroberfläche zunächst drei Editfelder schaffen. Mit dem Objektinspektor links kann man sie z.B. Zahl1, Zahl2 und Antwort nennen.
Nach der Variablenvereinbarung VAr a,b,c:integer;
geht es so weiter:
a:=StrToInt/Zahl1.text) " Übernahme der 1.Eingabe"
b:=StrToInt(Zahl2.texT)
c:=a mod b
Antwort.text:=IntToStr© „Zahl in Ausgabesring
umwandeln“
end

Hallo Antitofu,

mir ist nicht exakt klar welches Ergebnis du erwartest, daher hier alle Möglichkeiten:

a,b,z: integer;
z := a mod b;

Du erhältst als z nur den ganzzahligen nicht-teilbaren Rest der Divison.
Beispiel 10 mod 3 = 1 (weil man 9 durch 3 teilen kann)

a,b,z: integer;
z := a div b;

Du erhältst ein ganzzahliges Divisionsergebnis was immer nach unten abgerundet ist.
Beispiel 10 div 3 = 3, 99 div 100 = 0

a,b: integer;
z: double;
z := a / b;

Du erhältst das Divisonsergebnis als Gleitpunktzahl.
Beispiel 10 / 3 = 3,33333 (usw…)

Möchtest du eine Divison ganzzahlig aber mit Rundung machen musst du z := Round(a / b) rechnen.

Ich hoffe ich konnte helfen - bei Fragen bitte einfach fragen!
Wenn es geholfen hat gerne auch bewerten :wink:

Viel Erfolg!
Andreas

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

var a,b,Rest:Integer;
begin
{ TODO -oUser -cConsole Main : Hier Code einfügen }
write(‚ZahlA:‘);readln(a);
write(‚ZahlB:‘);readln(b);
Rest:=a mod b;
writeln(‚Rest der Division (a mod b):‘,Rest);
writeln(‚Ergebniss der Division (a div b):‘,a div b);
writeln(‚Bitte Taste Return drücken‘);
readln;
end.

ok danke

und wie ist der ausgabe befehl… ?

Also am einfachsten mit WriteLn.

Du musst nur den Datentyp vorher in einen String wandeln.

a: integer;
b: float;
s: string;

s := IntToStr(a);
WriteLn(s);

s := FloatToStr(b);
WriteLn(s);

Dazu gibt es auch die Befehle mit Formatierungsmöglichkeit sofern du das brauchst.
Zum Beispiel
s := FloatToStrF(b, ffFixed, 5, 2);

Solltest du das brauchen dann frag nochmal :smile:

ok danke

und wie ist der ausgabe befehl… ?

1 Like

also ich kapiers immer noch nicht ich hab jetzt das :

program Probe1;
//Felix Schmidt,15.09.2012
{$APPTYPE CONSOLE}
uses
sysutils;
Var a,b,Z :integer;
begin
// Hier Anwender-Code

write('Zahla: ');readln(a);
write('Zahlb: ');readln(b);

Z:=a Mod b;

write(‚Das Ergebnis ist:‘,a mod b);

readln;

end.

so aber ich möchte gerne das es mir ein ergebniss mit Rest anzeigt …ich hab zwar ein ergebniss aber kein rest und wenn ich zum Beispiel 10:10 kommt 0 raus ist doch falsch ???

Bitte :smiley:

Wie in den Beispielen liefert dir „mod“ nur den Rest. Daher ist 10 mod 10 = 0 korrekt :wink:

Was du brauchst ist folgendes:

Var
a,b,Y,Z :integer;
s: string;
begin

write('Zahla: ');readln(a);
write('Zahlb: ');readln(b);

Y:=a div b; // ganzzahlige Division
Z:=a Mod b; // ganzzahliger Rest

s := IntToStr(Y) + ’ Rest ’ + IntToStr(Z);

writeln('Das Ergebnis ist: ’ + s);
readln;
end;

Ausgabe bei 10, 10: Das Ergebnis ist: 1 Rest 0
Ausgabe bei 10, 3 : Das Ergebnis ist: 3 Rest 1
usw. usw. :smile:

1 Like

mod (Modulo) ist der Rest, bei einer Ganzzahldivision.
Also 5 durch 2 ist 2 REST 1

Der Quotirn ist 2. Ganzzahldivision ist div.

also.

Quotient := a div b;

Lieber Delphi-Programmierer,
ich muss Dir leider eine negative Antwort geben. Ich kenne mich mit Konsolen nicht aus und bin schon 91 Jahre alt. Trotzdem viel Erfolg mit dem Problem. Grüsse
Egon Zürrer

kein proplem … trotzdem danke :wink:

hey ich hab mal ne andere Frage hab hier mal ein ausschnitt einer programmier-ausgabe:

writeln;
writeln;
write('Wurfzeit: ‚,(2*Wurfgeschwindigkeit)/(g)*sin(Wurfwinkel):7:2, ‚s‘);
write(‘ Wurfweite: ',(sqr(Wurfgeschwindigkeit))/(g)*sin(2*Wurfwinkel):7:2, ‚m‘);

write(’ Wurfhoehe: ',(sqr(Wurfgeschwindigkeit))/(2*g)*sqr(sin(Wurfwinkel)):7:2, ‚m‘ );

readln;

end.

weißt du wie man das hinbekommt das man die Ergebnisse unter den Wörtern hat also sprich :

Wurfweite:
5.00m

??? wäre echt toll von dir

hey ich hab mal ne andere Frage hab hier mal ein ausschnitt einer programmier-ausgabe:

writeln;
writeln;
write('Wurfzeit: ‚,(2*Wurfgeschwindigkeit)/(g)*sin(Wurfwinkel):7:2, ‚s‘);
write(‘ Wurfweite: ',(sqr(Wurfgeschwindigkeit))/(g)*sin(2*Wurfwinkel):7:2, ‚m‘);

write(’ Wurfhoehe: ',(sqr(Wurfgeschwindigkeit))/(2*g)*sqr(sin(Wurfwinkel)):7:2, ‚m‘ );

readln;

end.

weißt du wie man das hinbekommt das man die Ergebnisse unter den Wörtern hat also sprich :

Wurfweite:
5.00m

??? wäre echt toll von dir

Du bist echt neu in der Programmierung, oder?!

Lies dir dazu bitte in der Hilfe doch mal die Unterschiede von „Write“ und „WriteLn“ durch.

Du benutzt doch sogar beides in deinem Code…