![]() |
fehler gibts... die gibts nit...
Kann mir irgendjemand Erklären, warum um alles in der Welt dieses Programm total unsinnige Sachen ausgibts?
Delphi-Quellcode:
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...
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. |
Re: fehler gibts... die gibts nit...
Hallo, diese Warnungen sollte man unbedingt beachten!
Code:
Du veränderst nämlich die variable i bei deinen berechnungen, so das ein normaler schleifendurchlauf nicht möglich ist.
[Warnung] Project2.dpr(16): FOR-Schleifenvariable muss eine einfache lokale Variable sein
[Warnung] Project2.dpr(22): FOR-Schleifenvariable muss eine einfache lokale Variable sein |
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:
"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
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. |
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] |
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