Autor Beitrag
Stinke
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 06.12.05 16:56 
So ich muss ein programm entwickeln dualzahl in dezimalzahl aber naja ich komm nich weiter :D aber naja seht selber hier ist der quellcode:



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.ButtondualdeziClick(Sender: TObject);
Var
      dezi:integer;
      anzahl:integer;
      position:integer;
      zeichen:integer;
begin
  dezi:=0;
  Anzahl:=length(editdual.text);  //length ermittelt die Anzahl der Stellen...
  position:=1;                   //welche Stelle der Zahl... in diesem fall die erste
  while Anzahl=0
    do
      begin
        dezi:=Zeichen(Position)*2^(anzahl-1);   <----- hier macht der nie weiter!!!
        dec(anzahl);        // Anzahl=Anzahl-1
        inc(position);      // Position=Position-1
        dezi:=dezi+dezi
      end;
  editdezi.text:=IntToStr(dezi);

end;


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Di 06.12.05 17:06 

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Di 06.12.05 17:20 
Wenn deine Dualzahl kleiner als 32 Bit ist könntest du Bitweise die Bits eines Cardinal setzen (Wenn Ziffer 1=true dann setze Bit 0 usw.), da der ja auch binär codiert ist und anschließend inttostr aufrufen.
Ironwulf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: Di 06.12.05 17:26 
hy,

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  while Anzahl=0  
    do  
      begin  
        dezi:=Zeichen(Position)*2^(anzahl-1);   <----- hier macht der nie weiter!!!  
        dec(anzahl);        // Anzahl=Anzahl-1  
        inc(position);      // Position=Position-1  
        dezi:=dezi+dezi  
      end;


also mag sein das ich da jetz falsch lieg aber wenn die länge größer is als null geht der doch niemals in die schleife rein, wenn er die nur solang durchführt wie anzahl 0 ist...
ich würd das mit ner for schleife machen

ausblenden Delphi-Quelltext
1:
2:
for i:= 1 to Length(editdual.text) Do
 bla...
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 06.12.05 17:27 
Wir haben auch eine schöne Library:
Das könnte helfen
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Di 06.12.05 17:51 
Das Problem warum der da nie weiter geht ist, dass der ^-Operator nur zur Compilierzeit ausgewertet wird, das heißt insbesondere der Exponent muss konstant sein. Zur Laufzeit musst du hierzu eine Funktion aufrufen z.B. EXP() oder Intpower() oder du baust dir die Potenz selbst mit ner Schleife.
Stinke Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 07.12.05 17:42 
ok dann frag ich mal so!

ich hab ja die anzahl der stellen ermittelt mit dem befehl....
naja und bei z.B. 1011 wären das 4!!!!!
so jetzt will ich die position "1" auswählen d.h. die erste ziffer von den zahlen...
und dann will ich, dass eine andere variable diese 1. zahl speichert und dann
die zahl *2 hoch die (anzahl minus ... [kommt drauf an])

naja und dann will ich dass er beim nächsten durchlauf die 2. position wählt und die ziffer 0 nimmt...
ich hab die befehle bl0oß nich drauf und delphi hilfe kann mir nich heflen
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Mi 07.12.05 18:56 
Wie schon gesagt. Du solltest die Tipps auch lesen! Dein Algo sollte funktionieren nur das 2^(anzahl-1) musst du durch eine Exponentialfunktion, die3 ich dir oben genannt habe ersetzen.
Stinke Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 08.12.05 16:48 
hehe habs hinbekommen (etwas unkomplizierter):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.ButtondualdeziClick(Sender: TObject);
Var
     
      faktor:integer;
      dezi:integer;
      laenge:integer;
      dual:string;

begin
  Faktor:=1;
  Dezi:=0;
  laenge:=length(editdual.text);   
  while laenge>0
    do
      begin
        dual:=editdual.text;
        dezi:=StrToInt(dual[laenge])*faktor+dezi;
        dec(laenge);
        faktor:=faktor*2;
      end;
  editdezi.text:=IntToStr(dezi);

end;


funktioniert einwandfrei :)
thx an alle die zu diesem thema geschrieben haben

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.