![]() |
Exponenten
Guten Tag,
ich bin ein Delphi Anfänger und behandel es erst seit ein paar Wochen in der Schule.. meine Aufgabe lautet: Auf einem Schachbrett wird auf das erste Feld ein Cent, auf das zweite Feld zwei Cent, auf das dritte Feld 3 Cent, auf das vierte Feld acht Cent usw gelegt. Schriebe ein Projekt, das die Centbeträge auf den Feldern berechnet.. Wie es mathematisch funktioniert weiß ich, jetzt muss ich es noch aufschrieben. Das Programm soll es in einer Listbox wieder geben. Mein Quelltext procedure TForm1.Button1Click(Sender: TObject); var n,i:integer ; zeile:string; begin for i:=1 to 64 do begin for n:=power(2,0) to power (2,63) do begin zeile:=inttostr (i)+' '+inttostr(n); listbox1.items.add(zeile); end; end; end; Das Problem, die Syntaxprüfung spuckt jetzt immer aus: [Fehler] Unit1.pas(31): Inkompatible Typen: 'Integer' und 'Extended' [Fehler] Unit1.pas(31): Inkompatible Typen: 'Integer' und 'Extended' [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden kann mir jemand sagen, wo der Fehler liegt, und wie ich ihn behebe? Danke!!! |
Re: Exponenten
Nimm statt "power" einfach "intpower". Power gibt eine Gleitkommazahl zurück, du willst aber eine ganze Zahl ausgeben. Am einfachsten erreicht du das in dem Fall, indem du einfach "intpower" aufrufst, welches einen Integer zurückgibt.
Wenn du allerdings bis 2^63 gehen willst, wird dir das nicht reichen - in dem Fall brauchst du wirklich einen Gleitkommatypen. Also einfach das "power" lassen und statt "inttostr" "floattostr" verwenden, oder gleich ein "format". (siehe Delphi-Hilfe) Im übrigen gibt es für Delphi-Quellcode die [delphi]-Tags. Einfach
Delphi-Quellcode:
schreiben, und schon wird das ganze richtig formatiert.
Code
Dein Algorithmus ist übrigens relativ ineffizient, es wäre deutlich einfacher und schneller, einfach eine Variable zu nehmen, mit 1 zu initialisieren und sie dann in einer Schleife 63 mal auszugeben und zu verdoppeln. |
Re: Exponenten
benutz floatToStr anstatt IntToStr ....
#edit: oh, da war jemand schneller... |
Re: Exponenten
Zitat:
|
Re: Exponenten
Hallo,
versuche es mal so:
Delphi-Quellcode:
Power ist kein Integer und kann daher nicht in einer For-Schleife benutzt werden.
i := 1;
repeat zeile := inttostr(i) + ' ' + Format('%64.0n',[power(2,i)]); listbox1.items.add(zeile); inc(i); until i > 64; |
Re: Exponenten
Zitat:
Zitat:
|
Re: Exponenten
Nicht? Oha. Ist aber auch völlig klar: Die Basis ist nicht unbedingt ganzzahlig, daher muss das Ergebnis auch nicht unbedingt ganzzahlig sein.
|
Re: Exponenten
Hallo nochmal, erstmal viele Dank, für eine schnelle Antwort, ich glaube jedoch, euch unterliegt ein Denkfehler, nicht was die Programmierung angeht, sondern das mathematische...
Denn Feld 1: 1 Cent = 2^0 Feld 2: 2 Cent = 2^1 Feld 3: 4 Cent = 2^2 Feld 4: 8 Cent = 2^3 Wenn ich i (sihe Quelltext) als Exponenten nehme, erhalte ich später in der Listbox nur die Quadratzahl, und nicht das, was ich euch oben aufgeführt habe. procedure TForm1.Button1Click(Sender: TObject); var n,i:integer ; zeile:string; begin for i:=1 to 64 do begin n:=2; zeile:=inttostr (i)+' '+inttostr(i*i); listbox1.Items.Add(zeile); end; end; end. Oder war da wieder ein Missverständnis meiner Seits? ich brauch ja schließlich die Rechnung 1^x...also Exponentionell Wenn ich für meinen Grundqquelltext von oben statt InttoStr floattostr nehme, muss ich bei der variablenbestimmung doch auch n als extended nehmen, wobei mir mein Delphi dann wieder sagt, dass für die FOR-Schleifen eine Variable von ordinalem Typ gebraucht wird, ich weiß nichtmal, was diese ordinale Typen seien sollen... Desweiteres: Wie gesagt, ich habe erst seit Anfang des Schuljahres mit Delphi zu tun, und bin ehrlich gesagt noch nicht soweit. Es müsste eine einfachere Lösung geben, da wir heute erst mit den FOR-Schleifen angefangen haben, und ich soll, selbst wenn ich eure Gedanken nachvollziehen könnte, es dem Kurs präsentieren, die es glaube ich nicht nachvollziehen könnten... Bitte um weitere Hilfe!!! DANKE!! |
Re: Exponenten
Bitte benutze doch die delphi-Tags und rücke das ganze ein bisschen ein, dann ist es deutlich leichter zu lesen.
Delphi-Quellcode:
So würde ich das machen. n muss hier ein Double sein (oder ein Single oder ein Extended), weil Integer nicht ausreiche - der geht nur bis 2^31-1 (bzw. Cardinal bis 2^32-1), du brauchst es aber bis 2^63, ich glaube das schafft nichtmal ein Int64 (der geht glaube ich nur bis 2^63-1).
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; n: Double; begin n:=1; for i:=1 to 64 do begin listbox1.Items.Add(inttostr(i)+' '+floattostr(n)); n:=n*2; end; end; Was passiert jetzt da genau? Du fängst bei n=1 an und dann machst du 64 mal folgendes: Du gibst n aus und verdoppelst es dann. n ist daher im i. Durchlauf 2^(i-1). Passt. ;) |
Re: Exponenten
Problem:
Nach der obrigen Lösung, bekomme ich bei Feld 1 2 Cent, cih will aber nur 1 Cent^^ ich brauch am schluss 2^i, dass halt logischerweise am passedem I steht, am ende soll in der Listbox da stehen: 1 1 2 2 3 4 4 8 . . . Also die Exponenten (Hochzahlen) müssen bei 0 anfangen.. |
Re: Exponenten
Tut es auch.
|
Re: Exponenten
Ich glaube er meint miit obiger Lösung die von nahpets #5. Die fängt nämlich bei 2^1 = 2 an.
Manuels (#11) sollte das gewünschte (#10) Zitat:
|
Re: Exponenten
ich habs endlich...danke nochmals^^
|
Re: Exponenten
Zitat:
Feld 1 = 1 Cent Feld 2 = 2 Cent Feld 3 = 3 Cent (hier bin ich noch dabei) Feld 4 = 8 Cent (hier nicht mehr) Die grundsätzliche Frage lautet also erst mal: Liegt auf jedem Feld ein Cent mehr als auf dem vorherigen Feld oder liegt auf jedem Feld das doppelte des vorherigen Feldes? |
Re: Exponenten
ganzen thread lesen :P, das war ein tippfehler.
die felder sind 2^i. also wie er es in beitrag 10 geschrieben hatte. |
Re: Exponenten
Hallo,
Wenn auf dem ersten Feld 1 Cent, auf dem zweiten 2 Cent auf dem dritten 3 Cent liegensollen, brauchst Du gar keine Exponenten. Die sind nur erforderlich, wenn Du Dich verschrieben hast und in Wirklichkeit auf jedem nachfolgenden Feld die doppelte Anzahl Cent verglichen mit dem vorhergehenden Feld liegen sollen. |
Re: Exponenten
hallo leute,
hab ein problem mit dem potenzieren. ich habe einen zahlenwandler gebastelt, der zwischen hexadezimal-, binär- und dezimalzahlen umwandeln kann. beim unmwandeln von binär- in dezimalzahlen verwende ich den algorithmus
Delphi-Quellcode:
hierbei kommt bei mir die fehlermeldung [Error] bin_hex.pas(90): Undeclared identifier: 'power'
procedure bin_dez(i dez:integer);
var zahl:string; begin dez:=0; zahl:=form1.edit1.text; for i:=8 downto 1 do begin dez:=dez+strtoint(zahl[i])*power(2,i-1); end; offensichtlich hat hier jmd ein problem mit der funktion power... kann mir jmd sagen, was ich falsch gemacht habe? |
Re: Exponenten
Power ist in der Unit math, hast Du die eingebunden?
|
Re: Exponenten
ich habe math bei den uses eingebunden...is das korrekt?
|
Re: Exponenten
Zitat:
|
Re: Exponenten
ne, meckert immer noch. selbe fehlermeldung wie vorher...
irgendwelche anderen möglcihen fehlerquellen? |
Re: Exponenten
ne, meckert immer noch. selbe fehlermeldung wie vorher...
irgendwelche anderen möglcihen fehlerquellen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 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 by Thomas Breitkreuz