Schrift
[thread]1086[/thread]

Dezimalzahl in Dualzahl umwandeln

Leser: 1


<< |< 1 2 3 4 >| >> 38 Einträge, 4 Seiten
SirLant
 2003-09-08 18:55
#11015 #11015
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Habe aus meinem Buch folgendes kleines Progrämmchen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>

/*Prototypen*/
short pruefen (short);
short dezbin (short);

int main () {

short dec;
short eingabe = 1;

while (eingabe) {

printf ("Geben Sie eine Zahl ein (0-255):");
scanf ("%d", &dec);

eingabe = pruefen (dec);
if (eingabe == 1) {

printf ("Fehler bei der Eingabe!\n");

}//if
else {

dezbin (dec);

}

}//while

return (0);

}//main

//Prüft die Eingabe
short pruefen (short input) {

if ((input >= 0) && (input <256)) return (0);
else return (1);

}//pruefen

//Wandelt eine Dezimalzahl in eine Dualzahl um
short dezbin (short zahl) {

short x,i;

for (i = 7; i >= 0; i--) { /* Absichtlich ein wenig Umständlich */

x = zahl / (1 << i);
x = zahl - x * (1 << i);

printf ("%d",x);

}//for

return (0);

}//dezbin


Kann mir jemand erklären, was die Funktion dezbin macht?
Verstehe den Vorgang dort nicht und im Buch wird darauf nicht
näher eingegangen :(\n\n

<!--EDIT|SirLant|1063227448-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
kabel
 2003-09-09 00:35
#11016 #11016
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
wenn ich das beispiel sehe, könnte ich nur heulen. ich sehe das problem, dass der autor mit der seiteneffekt-funktion umgehen will (dynamische speicherallokation zur speicherung der binären repräsentation - anders macht so eine funktion IMO keinen sinn). das führte hier allerdings zu spaghetti-code. ausserdem sind meine C kentnisse schon arg eingerostet :-/ son mist, nächstes semester steht systemprogrammierung auf der speisekarte ...

der algorithmus, funktionierend und noch einmal funktional:
[READMORE]
Quote
kabel@linux:~/progs/C> cat convert.c
#include <stdio.h>

void dez_to_bin_sideeffect (int);
char * dez_to_bin_functional (int);

int main (void) {
dez_to_bin_sideeffect (34);
printf ("%s\n", dez_to_bin_functional (34));
return 0;
}

void dez_to_bin_sideeffect (int zahl) {
int i = 0;

for (i = 7; i >= 0; i--) {
printf ("%d",(zahl&(1<<i))?1:0);
}

printf ("\n");
}

char * dez_to_bin_functional (int zahl) {
int i = 0, j = 0;
char *binary_rep = NULL;
binary_rep = (char *) calloc (sizeof (char), i);
for (i=7, j=0; i >= 0; i--, j++) {
binary_rep[j] = (zahl&(1<<i)) ? '1' : '0';
}
return binary_rep;
}
kabel@linux:~/progs/C> make convert
cc convert.c -o convert
kabel@linux:~/progs/C> ./convert
00100010
00100010
kabel@linux:~/progs/C>

[/READMORE]
preisfrage: so ganz sauber ist mein code auch nicht ;)

HTH
-- stefan
kabel
 2003-09-09 00:46
#11017 #11017
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ach ja, den algorithmus, hätt ich fast vergessen ;)

Quote
//Wandelt eine Dezimalzahl in eine Dualzahl um
short dezbin (short zahl) {
short x,i;
for (i = 7; i >= 0; i--) { /* Absichtlich ein wenig Umständlich */
x = zahl - x * (1 << i);
printf ("%d",x);
}//for
return (0);
}//dezbin


eine aufgezeichnete debugging-session im kopf:
aufruf dezbin (34);
-> zahl = 34, x = i = 0
1. iteration i = 7
x = 34 - 0 = 34
2. iteration i = 6
x = 34 - 34*(1<<6) = 34 - 34*64 = -2142
abbruch, das macht offensichtlich keinen sinn
-- stefan
SirLant
 2003-09-09 13:10
#11018 #11018
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Ich glaube du musst mir zuerst mal erklären was Dualzahlen sind :blush:
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
renee
 2003-09-09 13:53
#11019 #11019
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hier findest Du ein Beispiel zur Errechnung von Dualzahlen (allgemein; kein Algorithmus):
http://www.robert-web.de/dual.shtml
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
kabel
 2003-09-09 14:58
#11020 #11020
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
zahlen repräsentieren werte. ob diese zahl nun im zehnersystem ist oder im zweiersystem, ist egal - beide repräsentieren denselben wert.

(basis 10) <=> (basis 2)
1 <=> 1
2 <=> 10
4 <=> 100
8 <=> 1000 ...

in programmiersprachen werden zahlen meist im 10er system benutzt, das bist du ja auch gewohnt vom täglichen leben.

es gibt auch ganz komische zahlensysteme, denn die basis kann eine beliebige reelle zahl sein! die umrechnung basiert meistens auf dem horner schema.

das problem in C ist: wie stellst du eine wort w dar mit x zeichen c, c element von {0, 1}? das geht eben nur mit zeichenketten.
-- stefan
SirLant
 2003-09-09 18:59
#11021 #11021
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Die Zahlensysteme sind mir bekannt, aber ich versteh jetzt
immernoch nicht was ne Dualzahl ist, auch nach der Beispielrechnung
von Renee's Link.
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
renee
 2003-09-09 19:26
#11022 #11022
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
eine Dualzahl ist eine Zahl, die auf der Basis (Grundzahl) 2 basiert. Zur Darstellung von Zahlen werden nur zwei Zustände (0 und 1) verwendet. Die Einheiten des Dualsystems sind die Potenzen von zwei.

Dualzahlen sind also Zahlen in einer anderen Darstellungsform...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
SirLant
 2003-09-09 19:30
#11023 #11023
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Somit sind Dualzahlen doch Binärzahlen, aber weshalb bekomm
ich bei meinem Skript oben Zahlen über 0 und 1?
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
kabel
 2003-09-09 19:56
#11024 #11024
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
werde mal ein bisschen ausschweifender. du scheinst ein fundamentales problem zu haben. andererseits sind erklärungen angefangen von adam und eva sehr lang und breit ;)

binärzahlen sind eben zahlen mit der basis 2, d.h. du brauchst 2 verschiedene symbole, um binärzahlen darzustellen. das kann auch "foo" und "bar" sein...

zustände ist hier eher unpassend.
-- stefan
<< |< 1 2 3 4 >| >> 38 Einträge, 4 Seiten



View all threads created 2003-09-08 18:55.