Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Quersumme errechnen

38 views
Skip to first unread message

Jürgen Braukmeier

unread,
Mar 23, 1998, 3:00:00 AM3/23/98
to

Hallo;
habe keine Erklärung für folgendes Programm.
Beim Errechnen der Quersumme läuft alles bestens, solange die Zuweisung an
Label2 aktiviert ist, ansonsten bekomme ich eine Fiktive-Zahl.
Es ist nicht lebenswichtig, aber trotzdem wurmt mich der Gedanke, warum das
Programm nur mit der Zuweisung an label2 läuft.
Mir geht es um eine Klärung, nicht um ein andere Lösung.

Falls jemand eine Erklärung hat, vielen Dank im voraus.

JBrau...@welfen-netz.com

unit Quersumme;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}


procedure TForm1.Button1Click(Sender: TObject);
var rest,zahl,Summ:integer;
begin
zahl:=strtoint(edit1.text);
while zahl <> 0 do
begin
rest:=zahl mod 10;
//label2.caption:=inttostr(rest);
Summ:=Summ+rest;
zahl:=zahl div 10;
end;//While Schleifen-Ende
label1.caption:=inttostr(Summ);
end;
end.


Herbert Urwer

unread,
Mar 23, 1998, 3:00:00 AM3/23/98
to

>Beim Errechnen der Quersumme läuft alles bestens, solange die Zuweisung an
>Label2 aktiviert ist, ansonsten bekomme ich eine Fiktive-Zahl.
>Es ist nicht lebenswichtig, aber trotzdem wurmt mich der Gedanke, warum das
>Programm nur mit der Zuweisung an label2 läuft.
>Mir geht es um eine Klärung, nicht um ein andere Lösung.
>
>Falls jemand eine Erklärung hat, vielen Dank im voraus.


In Deinem Code fehlt die Initialisierung von Summ. Warum das Ergebnis
trotzdem stimmt, wenn Du die Zuweisung an label2 machst, weiß ich nicht. Sie
bewirkt jedenfalls, daß Summ beim Eintritt in die Funktion den Wert 0 hat.
Das ist m.E. nach reiner Zufall.

Noch ein Tip: in Delphi 3 gibt es die Compilerschalter $HINTS ON und
$WARNINGS ON (ich bin mir nicht ganz sicher, aber ich glaube, daß diese
Schalter auch schon in Delphi 2 vorhanden sind). Die Schalter bewirken, daß
der Compiler auf solche "Fehler" mit entsprechenden Meldungen
reagiert(Variable 'Summ' wurde wahrscheinlich nicht initialisiert).


Herbert

--

---
Herbert Urwer
hur...@usd.de
http://www.usd.de

"The road goes ever on and on ..." (Bilbo Baggins)


Thomas G. Liesner

unread,
Mar 23, 1998, 3:00:00 AM3/23/98
to

Jürgen Braukmeier schrieb:

>procedure TForm1.Button1Click(Sender: TObject);
>var rest,zahl,Summ:integer;
>begin
>zahl:=strtoint(edit1.text);
Summ:=0;

>while zahl <> 0 do
>begin
>rest:=zahl mod 10;
>//label2.caption:=inttostr(rest);
>Summ:=Summ+rest;
>zahl:=zahl div 10;
>end;//While Schleifen-Ende
>label1.caption:=inttostr(Summ);
>end;
>end.

So long,
Thomas G. Liesner

Ingo Düppe

unread,
Mar 23, 1998, 3:00:00 AM3/23/98
to

Hi!

Du hast die Variable "Summ" nicht initialisiert, kann sein das Du daher
einen Nebeneffekt bekommst, der
durch Deinen label2 aufruft eliminiert wird.

Gruß
Ingo

>procedure TForm1.Button1Click(Sender: TObject);
>var rest,zahl,Summ:integer;
>begin

summ:=0;
>zahl:=strtoint(edit1.text);

Thomas Bettermann

unread,
Mar 24, 1998, 3:00:00 AM3/24/98
to

Jürgen Braukmeier schrieb in Nachricht <35167...@195.143.56.1>...


>Hallo;
>habe keine Erklärung für folgendes Programm.

>Beim Errechnen der Quersumme läuft alles bestens, solange die Zuweisung an
>Label2 aktiviert ist, ansonsten bekomme ich eine Fiktive-Zahl.
>Es ist nicht lebenswichtig, aber trotzdem wurmt mich der Gedanke, warum das
>Programm nur mit der Zuweisung an label2 läuft.
>Mir geht es um eine Klärung, nicht um ein andere Lösung.
>
>Falls jemand eine Erklärung hat, vielen Dank im voraus.
>

>JBrau...@welfen-netz.com


>
>procedure TForm1.Button1Click(Sender: TObject);
> var rest,zahl,Summ:integer;
> begin

> zahl:=strtoint(edit1.text);
> while zahl <> 0 do begin
> rest:=zahl mod 10;
> //label2.caption:=inttostr(rest);
> Summ:=Summ+rest;
> zahl:=zahl div 10;
> end;//While Schleifen-Ende
> label1.caption:=inttostr(Summ);
> end;

Hallo Jürgen !

Du solltest die Variable Summ vor der while-Schleife initialisieren
(auf 0 setzen), da sie sonst irgendeinen zufälligen Wert enthält
der in der Zeile: summ:=summ + rest mit addiert wird.

Der Compiler weist per Var-Deklaration den Variablen zwar einen bestimmten
Speicherbereich zu, was da für Werte drinstehen interessiert ihn aber nicht.

Die 2. Möglichkeit wäre summ als typisierte Konstante zu deklarieren :
----------------------
const
summ : Integer = 0;
----------------------

Mit der Zuweisung an Label2 ändert sich wahrscheinlich nur die
Speicheradresse der Variable summ, die dann zufällig Null enthält.

Hoffe das hilft ....

Gruß Thomas


Meno Sellschopp

unread,
Mar 26, 1998, 3:00:00 AM3/26/98
to

Anmerkung zu : Jürgen Braukmeier
zum Thema : "Re: Quersumme errechnen":



> procedure TForm1.Button1Click(Sender: TObject);
> var rest,zahl,Summ:integer;
> begin
> zahl:=strtoint(edit1.text);

Summ := 0; // hier einfügen.


> while zahl <> 0 do begin
> rest:=zahl mod 10;
> //label2.caption:=inttostr(rest);
> Summ:=Summ+rest;
> zahl:=zahl div 10;
> end;//While Schleifen-Ende
> label1.caption:=inttostr(Summ);
> end;

Anderer Vorschlag:

procedure TForm1.Edit1Change(Sender: TObject);
const
Nums : set of char = ['0'..'9'];
var
i, Summ: word;
begin
Summ := 0;
for i:=1 to Length(Edit1.Text) do
if Edit1.Text[i] in Nums
then inc(Summ, StrToInt(Edit1.Text[i]));
Label1.Caption := IntToStr(Summ);
end;

Meno
----------------------------------------------------------------------

0 new messages