You are not logged in.

  • Login

1

Wednesday, June 6th 2007, 6:27pm

Binär Zahlen dividieren

Ich möchte eine binär Zahl durch die andere Teilen.
jetzt darf da aber ja nichts mit 0, rauskommen und man darf nicht durch 0 teilen.

Bsp 1111=15
0100=4

15/4=3,75== nicht erlaubt

jetzt muss das Programm den Anwender auffoerdern neue Zahlen einzugeben!
Aber wie muss die bedignung heißen um dies herrauszufinden.

2

Wednesday, June 6th 2007, 7:51pm

Hi,

die Überprüfung machst du mit Modulo.

C Quellcode

1
2
if(15%4 == 0)
 printf("Die Rechnung geht auf");

3

Friday, June 8th 2007, 4:12pm

hmm... die überprüfung geht leider nicht mit modulo da ja keins der z.b.: 0100111011 eine 0 sein darf also ich würd das ergebnis dann konvertieren in eine binärzahl in einem char array speichern und dann einfach jedes feld durchlaufen lassen ob es ==0 ist

mfg Donasa

4

Friday, June 8th 2007, 4:13pm

aja und ob die zweite zahl gleich 0 ist findest du einfach raus indem du

C Quellcode

1
2
3
4
if(zahl2==0)
   //nicht dividieren
else
   //dividieren


machst

5

Saturday, June 9th 2007, 9:05pm

mit dem Array würde es schon gehen, aber Du kannst es auch so machen Du nimmst einfach die nächst höhere Zahl zur basis 2, ziehst eins ab und vergleichst die beiden zahlen. Wenn sie nicht identisch sind ists falsch.

6

Saturday, June 9th 2007, 9:20pm

Machs doch genauso wie beim schriftlichen Dividieren, nur dass du nun 2 Ziffern anstatt 10 hast. Wenn ein Rest rauskommt, dann ist das Ganze fehlgeschlagen.

7

Saturday, June 9th 2007, 10:28pm

Aber es geht doch gar nicht ums teilen ohne Rest, so habs ich zumindest verstanden. Wenns darum gehen würde wäre modulo natürlich das einfachste.

Aber ich habs so verstanden das z.B

1111 = 15
0101 = 5

15/5 = 3

3 = 11

eine gültige zahl ist,
dass solche Zahlen erlaubt sind 111111111111 und solche nicht 1001111111

8

Saturday, June 9th 2007, 10:32pm

Quoted

Ich möchte eine binär Zahl durch die andere Teilen.
jetzt darf da aber ja nichts mit 0, rauskommen


weil sonst würde ich diesen Satz überhaupt nicht verstehen.
Und am einfachsten gehts einfach indem Du die kleinste 2^n zahl (zahl zur basis 2) nimmst die größer ist als das ergebnis und davon eins abziehst. Ist diese dann identisch stimmt die rechnung.

z.B

15/5 = 3

kleinste größere Zahl zur basis 2 ist 4 = 100
um eins erniedrigt ist 3, stimmt. Und das gilt für alle natürlich.[/coderwiki]

9

Saturday, June 9th 2007, 10:44pm

also ich hab auch verrstanden das

11111111=richtig
10001000=falsch
wenn die zweite zahl == 0 ist auch falsch

10

Saturday, June 9th 2007, 11:14pm

ach soo, also sind nur alle 2er Potenzen -1 richtig.
1
3
7
15
31
63
127
255
511
1023
usw.

11

Saturday, June 9th 2007, 11:15pm

richtig

so habs ich zumindest verstanden, ansonsten müsste der themenstarter mir wirklich den Satz nochmal in seiner bedeutung erklären

12

Saturday, June 9th 2007, 11:28pm

Also, dann hat man 2 Möglichkeiten.
1. Man rechnet mit den Binärzahlen. Dann braucht man das Ergebnis nur auf Nullen testen.
2. Man rechnet mit Dezimalzahlen, dann muss man schauen ob das Ergebnis + 1 und Logarithmus zur Basis 2 eine ganze Zahl ergibt.

13

Saturday, June 9th 2007, 11:33pm

ja und zu 2. ja von der anderen seite her kommend ists sogar noch besser stimmt.

14

Saturday, June 9th 2007, 11:37pm

und zu 1tens bräuchte ich kein Array, ich schau mir immer die erste ziffer an un schiebe die die ganzen zahlen um die länge immer nach rechts. Mache das so lange wie die binärzahl stellen hat und bilde immer eine logische-und verknüpfung. Schreibe immer das ergebnis in die selbe Variable mit der ich die 1te stelle des zahlenstroms vergleiche, natürlich initialisiere ich die Variable mit 1. Und am ende steht entweder ne 1 oder ne null in der variablen. Man kann da sogar noch ne vorzeitige abbruchfunktion einbauen weil wenn die variable einmal 0 ist erholt sie sich nie wieder.

Similar threads

Social bookmarks