AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

problem mit schleife

Ein Thema von herrentor · begonnen am 29. Mai 2004 · letzter Beitrag vom 30. Mai 2004
Antwort Antwort
Seite 1 von 3  1 23      
herrentor

Registriert seit: 29. Mai 2004
Ort: Emden
158 Beiträge
 
#1

problem mit schleife

  Alt 29. Mai 2004, 15:40
ich hab ein problem mit einer for schleife. und zwar werden bei jedem durchlauf immer alle ergebnise geändert, sprich er liest zeile eins (i=1) aus und erkennt z.b. rechteck, gibt das ergebnis richtig aus, dann liest er zeile zwei (i=2) und erkennt z.b dreieck, gibt das ergebnis dafür richtig aus, ändert jedoch auch das ergebnis der ersten zeile so, als würde dort auch dreieck ausgewählt worden sein.

vielen dank im voraus.

download der *.exe datei

Code:

procedure TForm1.berechnenClick(Sender: TObject);    {Berechnung}
 var i:integer;                                      {deklarieren der Variablen}
     mass1,mass2,Lx,Ly,Sx,Sy,s,b,h:real;
     Xs,Ys,A,AGes,XsGes,YsGes,Vx,Vy:single;

begin

 XsGes:=0; YsGes:=0; AGes:=0;                        {initialisieren}
 flaecheges.caption:='0';
 xsge.caption:='0';
 ysge.caption:='0';

For i:=1 to 6 Do                                     {Anfang der Schleife}
 begin

     mass1:=StrToFloat(Tab.Cells[3,i]);               {umwandeln der Eingabewerte}
     mass2:=StrToFloat(Tab.Cells[4,i]);
     Lx:=StrToFloat(Tab.Cells[5,i]);
     Ly:=StrToFloat(Tab.Cells[6,i]);
     Sx:=StrToFloat(sxge.text);
     Sy:=StrToFloat(syge.Text);

      Xs:=0; Ys:=0; A:=0;                            {initialisieren}

   case ComboBox1.ItemIndex of                       {Fallunterscheidung}

    0: begin                                         {Rechteck}
        A:=mass1*mass2;                              {Fläche}
        Xs:=Lx+mass1/2;                              {Schwerpunkt auf der X-Achse}
        Ys:=Ly+mass2/2;                              {Schwerpunkt auf der Y-Achse}
       end;

    1: begin                                         {Dreieck}
        A:=(mass1*mass2)/2;                          {Fläche}
        Xs:=Lx+mass1/3;                              {Schwerpunkt auf der X-Achse}
        Ys:=Ly+mass2/3;                              {Schwerpunkt auf der Y-Achse}
       end;

    2: begin                                         {Kreissektor}
       A:=pi*sqr(mass1)*mass2/360;                   {Fläche}
       s:=2*mass1*sin(mass2/2*pi/180);               {Sehne}
       b:=pi*mass1*mass2/180;                        {Bogenlänge}
       Xs:=Lx;                                       {Schwerpunkt auf der X-Achse}
       Ys:=Ly+((2/3)*(mass1*s)/b);                   {Schwerpunkt auf der Y-Achse}
      end;

    3: begin                                         {Kreisabschnitt}
        b:=pi*mass1*mass2/180;                       {Bogenlänge}
        s:=2*mass1*sin(mass2/2*pi/180);              {Sehne}
        h:=2*mass1*sqr(sin(mass2/4*pi/180));         {Bogenhöhe}
        A:=(mass1*(b-s)+s*h)/2;                      {Fläche}
        Xs:=Lx;                                      {Schwerpunkt auf der X-Achse}
        Ys:=Ly+(1/12)*((s*s*s)/A);                   {Schwerpunkt auf der Y-Achse}
       end;

    4: begin                                         {Kreis}
        A:=pi*sqr(2*mass1)/4;                        {Fläche}
        Xs:=Lx+0;                                    {Schwerpunkt auf der X-Achse}
        Ys:=Ly+0;                                    {Schwerpunkt auf der Y-Achse}
       end;

   end;

 if (ComboBox2.ItemIndex = 1) then                   {bei negativen Vorzeichen wird die Fläche aktualisiert}
  begin
   A:=A*(-1);
  end;

   Tab2.Cells[0,i]:=FloatToStrF(Xs,ffFixed,7,2);     {umwandeln der Ergebniswerte in i-te Zeile und ausgeben}
   Tab2.Cells[1,i]:=FloatToStrF(Ys,ffFixed,7,2);
   Tab2.Cells[2,i]:=FloatToStrF(A,ffFixed,7,2);

   AGes:=AGes+A;                                     {aktualisieren der Gesamtfläche}
   XsGes:=XsGes+Xs;                                  {aktualisieren des Gesamtschwerpunktes in X-Richtung}
   YsGes:=YsGes+Ys;                                  {aktualisieren des Gesamtschwerpunkets in Y-Richtung}

end;                                                 {Ende der Zählschleife}

XsGes:=XsGes/2;                                      {berechnen des Gesamtschwerpunktes in X-Richtung}
YsGes:=YsGes/2;                                      {berechnen des Gesamtschwerpunktes in Y-Richtung}

Vx:=2*pi*(YsGes+Sx)*AGes/1000000;                    {berechnen des Rotationsvolumens um die X-Achse}
Vy:=2*pi*(XsGes+Sy)*AGes/1000000;                    {berechnen des Rotationsvolumens um die Y-Achse}


xsge.Caption:=Format('%.2f mm  ',[XsGes]);          {umwandeln und ausgeben des Gesamtschwerpunktes in X-Richtung}
ysge.Caption:=Format('%.2f mm  ',[YsGes]);          {umwandeln und ausgeben des Gesamtschwerpunktes in Y-Richtung}
vxge.Caption:=Format('%.2f dm³   ',[Vx]);            {umwandeln und ausgeben des Rotationsvolumens um die X-Achse}
vyge.Caption:=Format('%.2f dm³   ',[Vy]);            {umwandeln und ausgeben des Rotationsvolumens um die Y-Achse}
flaecheges.Caption:=Format('%.2f mm²  ',[AGes]);     {umwandeln und ausgeben der Gesamtfläche}

end;
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#2

Re: problem mit schleife

  Alt 29. Mai 2004, 15:58
hallo herrentor

willkommen in der dp

kannst du den teil mal spezifizieren, in dem du den fehler erwartest, es ist ziemlich unübersichtlich

lass dir mal den Combobox.itemindex in deiner procedure anzeigen

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
herrentor

Registriert seit: 29. Mai 2004
Ort: Emden
158 Beiträge
 
#3

Re: problem mit schleife

  Alt 29. Mai 2004, 16:49
ich denke der fehler liegt in dieser zeile:

Code:

  Tab2.Cells[2,i]:=FloatToStrF(A,ffFixed,7,2);
A hat je nach combobox auswahl andere formeln. das problem liegt darin, dass die formel der letzte auswahl für alle ergebnisse gilt.

wie kann ich die combobox.itemindex denn anzeigen lassen? hab die items in einer anderen procedure definiert.
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#4

Re: problem mit schleife

  Alt 29. Mai 2004, 16:58
Delphi-Quellcode:

showmessage(inttostr(combobox.itemindex));
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#5

Re: problem mit schleife

  Alt 29. Mai 2004, 17:09
frage nimmst du immer die gleiche combobox in der auswahl deiner flächen?

du mustt die berechnung im event der combobox machen, sonst kriegst du probleme oder du nimmst ein array.
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
herrentor

Registriert seit: 29. Mai 2004
Ort: Emden
158 Beiträge
 
#6

Re: problem mit schleife

  Alt 29. Mai 2004, 17:18
die combobox bleibt immer die selbe

Code:

with Combobox1 do
  begin
    Tab.DefaultRowHeight := Height;
    Visible := False;
    Items.Add('Rechteck');
    Items.Add('Dreieck');
    Items.Add('Kreissektor');
    Items.Add('Kreisabschnitt');
    Items.Add('Kreis');
    Text := '';
  end;
du meinst ich soll dann gleich hinter der jeweiligen auswahl die formeln setzen?
was ist ein array?
ich sollte vielleicht dazu sagen, dass ich mich erst seit 2 wochen mit delphi beschäftige.
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#7

Re: problem mit schleife

  Alt 29. Mai 2004, 17:24
damit liest er immer den gleichen wert aus der combobox wenn du die statisch abfragst, wie in deinem fall.

für dich ist es erstmal am einfachsten, wenn du jeder zeile eine combobox zuordnest.

ansonsten gucke mal hier in der suche nach 'Delphi einsteiger' da findest du auf jeden fall einige sachen, die dir in delphi weiterhelfen
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
herrentor

Registriert seit: 29. Mai 2004
Ort: Emden
158 Beiträge
 
#8

Re: problem mit schleife

  Alt 29. Mai 2004, 17:30
mit der combobox gibt es auch keine problem, er erkennt was ich ausgewählt habe, jedoch wenn eine zeile darunter etwas anderes ausgewählt, wird auch das ergebniss der anderen zeile geändert.
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#9

Re: problem mit schleife

  Alt 29. Mai 2004, 17:37
hallo herrentor,

eine möglichkeit habe ich noch,

du deklarierst eine globale variable und lädst da den itemindex rein
Delphi-Quellcode:
var
  index : integer;

procedure TForm1.ComboBox1Change(Sender: TObject);

begin
  index := combobox1.itemindex;
end;

 // in deiner routine
  case index of
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 17. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: problem mit schleife

  Alt 29. Mai 2004, 17:57
Ich nehme an, er lässt die Schleife mehrmals durchlaufen. Der Fehler liegt höchstwahrscheinlich da, wo ihn alle vermuten: Der ItemIndex der ComboBox wird ja in der Schleife nicht verändert.

Ich versuche das gerade hier, ihm beizubringen.

In Delphi-Groups haben sie seinen Thread schon in die Tonne getreten, wegen Cross-Posting. Und ich hätte mich da auch nicht so lange mit befasst, wenn ich das vorher gesehen hätte ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.
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