Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   fehler gibts... die gibts nit... (https://www.delphipraxis.net/42082-fehler-gibts-die-gibts-nit.html)

Thunderbolt 13. Mär 2005 12:30


fehler gibts... die gibts nit...
 
Kann mir irgendjemand Erklären, warum um alles in der Welt dieses Programm total unsinnige Sachen ausgibts?


Delphi-Quellcode:
program aa;
{$APPTYPE CONSOLE}
uses SysUtils;

const obergrenze=50;

type feld = array [1..obergrenze] of string;

var potenzen :feld;
    i,eingabe :integer;

function zwei_hoch (n: word) :extended;
var temp :integer;
begin
  temp:=1;
  for i:=1 to n do temp:=temp*2;
  zwei_hoch:=temp;
end;

procedure generieren;
begin
  for i:=1 to obergrenze do potenzen[i]:=floattostr(zwei_hoch(i));
end;

begin
  generieren;
  repeat
    readln(eingabe);
    writeln(potenzen[eingabe]);
  until eingabe=0;
end.
Eigentlich solls ja nur ein Paar Potenzen generieren und speichern. Ich musste aber lustigerweise feststellen dass die for schleife beim generieren in 2 er schritten hochgeht und andere unerklärliche sachen...

KLS 13. Mär 2005 12:45

Re: fehler gibts... die gibts nit...
 
Hallo, diese Warnungen sollte man unbedingt beachten!

Code:
  [Warnung] Project2.dpr(16): FOR-Schleifenvariable muss eine einfache lokale Variable sein
[Warnung] Project2.dpr(22): FOR-Schleifenvariable muss eine einfache lokale Variable sein
Du veränderst nämlich die variable i bei deinen berechnungen, so das ein normaler schleifendurchlauf nicht möglich ist.

leddl 13. Mär 2005 13:23

Re: fehler gibts... die gibts nit...
 
So was ähnliches wollt ich auch grad antworten, dann is mir aber aufgefallen, daß er eigentlich das i in der Funktion "zwei_hoch" nicht verändert. Die Schleife dort läuft immer nur von 1 bis zu dem i aus der For-Schleife in "generieren". Daher steht das i nach "zwei_hoch" eigentlich wieder genau dort, wo es vorher war...
Schön ist es sicherlich nicht, aber ich kann jetzt direkt keinen logischen Fehler feststellen. Aber nichtsdestotrotz wirds wohl daran liegen.

Aber auf jeden Fall versteh ich nicht ganz, warum du das so kompliziert machst, Thunderbolt. Warum denn nicht einfach so:
Delphi-Quellcode:
program aa;
{$APPTYPE CONSOLE}
uses
  SysUtils, Math;

var eingabe : integer;

Begin
  WriteLn('Berechnung der 2er-Potenzen. Zum Beenden 0 eingeben!');
  Repeat
    Repeat
      Write('Geben sie den Exponenten ein: ');
      readln(eingabe);
      If eingabe > 50 Then
        WriteLn('Exponent muss <= 50 sein!');
    Until eingabe <= 50;
    WriteLn('2^' + IntToStr(eingabe) + ' = ' + FloatToStr(power(2,eingabe)));
  Until eingabe = 0;
End.
"power" macht ja schließlich genau das, was du willst. Erster Parameter ist die Basis, der zweite der Exponent. Mußt halt dafür noch die Unit Math einbinden

Christian Seehase 13. Mär 2005 14:08

Re: fehler gibts... die gibts nit...
 
Moin Thunderbolt,

warum deklarierst Du eigentlich den Ergebnistyp von zwei_hoch als Extended, und verwendest dann nur integer?
(temp ist als integer deklariert)
Ab einer bestimmten Zahlengrösse muss das schiefgehen.

[EDIT]
Ausserdem ändere bitte umgehend mal den Titel Deines Threads.
Danke.
[/EDIT]

Thunderbolt 13. Mär 2005 15:06

Re: fehler gibts... die gibts nit...
 
tut mir leid. ich muss für meine klassenkameraden die nichts checken aufgaben vormachen und das war so vorgegeben von der aufgabenstellung also was von wegen mach prozerdur für dies mach prozedur für das...

[edit] hab vergessen ne lokale variable i zu erstellen in der prozedur zwei_hoch. hat sich erledigt. [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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