Dezimal in Binär < Algorithmen < Schule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:42 Do 23.03.2006 | Autor: | MonoTon |
Aufgabe | Das Programm soll eine Dezimalzahl einlesen und diese Zahl dann Binär wieder ausgeben. Als Erweiterung der normalen Dezimal->Binär-Umrechnung soll noch eine beliebige Basis zur Verfügung stehen und das Programm soll dann nach dem selben Schmema die Dezimalzahl nur eben mit der neuen Basis berechnen. Zwischendurch soll noch die Bitanzahl und als Zwischenschritt die verkehrte bitzahl ausgegeben werden. |
Bin schön langsam am verzweifeln [mm] %-\
[/mm]
Mein Lösungsvorschlag, klappt aber leider nicht.
Borland C++ schiebt mir beim Ausführen eine Fehlermeldung die in etwa so aussieht
"Fehler: Access Violation at 0x403fe0: write of address 0x0"
Hier der Programmcode
/* BINÄR-Umrechnung (thu, mar 23th 2006 22:23) */
#include <stdio.h>
#include <conio.h>
void main()
{
char binarray[30];
int dez, r, l, i, imax, k, s, v;
//-----A1-----------------------Hier eine Dezimalzahl und eine Basis eingegeben.
while(1)
{
printf("Basis: ");
scanf("%c*%",s);
printf("Bitte eine Dezimalzahl eingeben: ");
scanf("%c*%",dez);
//-----A2-----Hier wird die Zahl auf die (noch) verkehrte Binärzahl umgewandelt.
for(dez>0;dez=1;dez=dez/s)
{
for(i=0;i<=29;i++)
{
k=dez%s;
if (k==1)
binarray[i]=1;
if (k==0)
binarray[i]=0;
}
}
//-----A3----------------------------------------------Berechnung der Bitanzahl:
l=imax-1;
printf("Laenge des Bin-Strings imax = ", l);
printf("Das verkehrte Bitmuster: ", binarray);
//-----A4-------------------Hier wird mithilfe einer Hilfsvariablen v umgedreht.
r=0;
for(l=imax-1;l=0;l=l-1)
{
v=binarray[l];
while(l=!0)
{
binarray[r]=v;
r=r+1;
}
}
//-----A5-----------------------------------Hier wird die Zahl binär ausgegeben:
printf(" [mm] \n [/mm] Das Bitmuster: ", binarray);
}
}
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 23:54 Do 23.03.2006 | Autor: | Dally |
Aufgabe | Aufgabe
Das Programm soll eine Dezimalzahl einlesen und diese Zahl dann Binär wieder ausgeben.
|
4 kurze Fragen hätte ich noch dazu.
Wenn klar ist das du eine Dezimalzahl in eine Binärzahl umwandeln willst,
was für eine Basis bzw. warum möchtest du das nochmal eine Basis eingegeben wird?
Und kann es sein das du dich bei einer der For-Schleifen vertan hast?
"for(dez>0;dez=1;dez=dez/s)"
Ich habe zugegebener Maßen schon lange nicht mehr programmiert aber dez>0 klingt mir für eine initialisierung etwas eigenartig.
"while(l=!0) "
Meinst du l ungleich 0?
Was macht folgende Schleife?
for(l=imax-1;l=0;l=l-1)
Wenn ich mich recht erinnere läuft eine For-Schleife bis die Bedingung mit false geprüft wird.
Wenn l=imax-1 eine positive Zahl ist, dann bricht doch die Schleife sofort ab. (Bitte sofort laut schreien wenn ich mich irren sollte!)
while(l=!0)
{
binarray[r]=v;
r=r+1;
}
Wenn du den Schleifenzähler in der Schleife nicht veränderst dann läuft die Schleife solange bis du das Programm beendest oder dein Rechner abstürtzt. Außerdem würdest du auf die Art einen größerden Teil des Arrays
mit dem selben Wert(v) vollschreiben.
Ich weiß leider nicht mehr genau wie das mit der konvertierung von Datentypen war. Probleme könntest du wenn du Pech hast in dem Fall auch dadurch bekommen, das du int Werte in ein char Array schreibst und char Werte in eine int Variable.
|
|
|
|
|
Hallo und guten Morgen zusammen,
> Und kann es sein das du dich bei einer der For-Schleifen
> vertan hast?
Ja, genau, da müsste mindestens
for (dez=1; dez >0; dez=dez/s)
stehen. Ob das inhaltlich Sinn macht, sei damit noch nicht gesagt.
> "for(dez>0;dez=1;dez=dez/s)"
> Ich habe zugegebener Maßen schon lange nicht mehr
> programmiert aber dez>0 klingt mir für eine initialisierung
> etwas eigenartig.
> "while(l=!0) "
> Meinst du l ungleich 0?
>
> Was macht folgende Schleife?
> for(l=imax-1;l=0;l=l-1)
Die Schleife bricht wohl tatsächlich sofort ab, aber aus einem anderen Grund.
Du hättest zum Nulltest den Vergleichsoperator == nehmen sollen:
for (l=imax -1;l==0;l=l-1)
oder halt, wenn die Schleife laufen soll, bis l == 0 ist:
for (l=imax-1;l != 0; l=l-1)
> Wenn ich mich recht erinnere läuft eine For-Schleife bis
> die Bedingung mit false geprüft wird.
> Wenn l=imax-1 eine positive Zahl ist, dann bricht doch die
> Schleife sofort ab. (Bitte sofort laut schreien wenn ich
> mich irren sollte!)
>
>
Jetzt kommt die Endlos-Whileschleife, in der das array binarray ueberschrieben wird:
> while(l=!0)
> {
> binarray[r]=v;
> r=r+1;
> }
Genau da passiert das, was den Programmabbruch mit besagter Fehlermeldung hervorruft.
> Wenn du den Schleifenzähler in der Schleife nicht
> veränderst dann läuft die Schleife solange bis du das
> Programm beendest oder dein Rechner abstürtzt. Außerdem
> würdest du auf die Art einen größerden Teil des Arrays
> mit dem selben Wert(v) vollschreiben.
>
>
> Ich weiß leider nicht mehr genau wie das mit der
> konvertierung von Datentypen war. Probleme könntest du wenn
> du Pech hast in dem Fall auch dadurch bekommen, das du int
> Werte in ein char Array schreibst und char Werte in eine
> int Variable.
>
>
>
>
Viele Grüße,
Mathias
|
|
|
|
|
Hallo und guten Morgen,
zur Antwort lies bitte die Antwort auf die Rückfrage von Dally.
Gruss,
Mathias
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 20:42 Sa 25.03.2006 | Autor: | MonoTon |
Aufgabe |
Es sei ein Programm zu schreiben dass eine Dezimalzahl in eine Binärzahl umwandelt.
Des weiteren soll eine beliebige Basis für das dezimal-binär Umrechnungsschema verwendet werden. |
Danke erstmal an Dally & Mathias für die Hilfe!
ich hab das soweit verstanden und mir dabei öfters auf die zunge gebissen...
das waren zeimlich blöde fehler, habe alles(?) ausgebessert und den umkehrschleifen-salat
soweit in ordnung gebracht dass man leichter sagen kann was da drin passiert...
aber, zu allem überfluss möchte dass programm immernoch nicht funktionieren.
ich bekomme noch immer den selben fehler!
ausgebessert hab ich:
-)dass charactervariablen nicht mit int-variablen gemischt werden.
-)die (unabsichtliche) endlosschleife, welche scheinbar den absturz ausgelöst hat, entfernt.
-)unnötig komplizierte for-schleifen durch while-schleifen ersetzt, damit das ganze überschaubarer wird.
/* BINÄR-Umrechnung (sa, mar 25th 2006 19:54) */
#include <stdio.h>
#include <conio.h>
void main()
{
char binarray[30],v;
int dez, r, l, i, imax, k, s;
//-----A1-----------------------Hier eine Dezimalzahl und eine Basis eingegeben.
while(1)
{
printf("Basis: ");
scanf("%c*%",s);
printf("Bitte eine Dezimalzahl eingeben: ");
scanf("%c*%",dez);
//-----A2-----Hier wird die Zahl auf die (noch) verkehrte Binärzahl umgewandelt.
i=0;
while(dez>=1)
{
dez=dez/s;
for(i=0;i<=29;i++)
{
k=dez%s;
if (k==1)
binarray[i]=1;
if (k==0)
binarray[i]=0;
}
}
//-----A3-------------------------------------------------Ausgabe der Bitanzahl:
//---------------Der i-Wert wird aus der vorangegangen for-Schleife herangezogen
//----------------------------------------------und gibt den maximalen Index an.
imax=i;
printf("Laenge des Bin-Strings imax = ", imax);
printf("Das verkehrte Bitmuster: ", binarray);
//-----A4-------------------Hier wird mithilfe einer Hilfsvariablen v umgedreht.
r=0;
l=imax;
while(l>=1)
{
l=l-1;
v=binarray[l];
binarray[r]=v;
r=r+1;
}
//-----A5-----------------------------------Hier wird die Zahl binär ausgegeben:
[mm] printf("\nDas [/mm] Bitmuster: ", binarray);
}
}
|
|
|
|
|
Hallo MonoTon,
was willst du uns jetzt mit diesem neuen Beitrag sagen/fragen?
Liefert das Programm jetzt die gewünschten Ergebnisse?
Gruß informix
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 08:07 Do 30.03.2006 | Autor: | MonoTon |
hi,
also ich wollte sagen dass das programm immer noch nicht funktioniert und ich den fehler nicht finde...
kann nicht bitte nochmal irgendwer einen blick drauf werfen?
mfG
mono
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:39 Do 30.03.2006 | Autor: | Dally |
Na ja,
erklähr mal etwas genauer wie du dir das Programm überhaupt vorstellst.
Du willst eine Dezimalzahl in eine Binärzahl umwandeln.
Dezimal zur Basis 10 und Binär zur Basis 2.
Was machst du genau mit der Basis die der Bewnutzer noch eingeben muss?
Mfg
Dally
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:11 Do 30.03.2006 | Autor: | MonoTon |
ich hab ganz oben im zweig die aufgabenstellung editiert...
damit nicht leute die den beitrag ansehen erst mittendrin die vollständige aufgabenstellung zu lesen bekommen.
sorry dass ich das nicht gleich so hingetipselt hab!
10x
monoton
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 14:28 Do 30.03.2006 | Autor: | Dally |
Wenn ich die Aufgabenstellung richtig verstanden habe sollst du erst eine Dezimalzahl einlesen, diese dann Binär ausgeben und zusätzlich die eigegebene Dezimalzahl noch in ein anderes Stellewertsystem umrechnen, dessen Basis der Benutzer eingibt.
In dem Fall darst du die Basis die der Benutzer eingibt, z.B. 8 (Oktal) aber nicht für die Binärumrechnung benutzen.
Mfg
Dally
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:10 Do 30.03.2006 | Autor: | MonoTon |
für oktal würde die umrechnung auf diese weise doch auch noch funktionieren, bei hex aber würde es aber nicht mehr klappen da man ja dann für 10-16 a-f augeben muss. ich müsste den code hierfür dann noch ensprechend ändern! aber für basen von 1-9 müsste es doch eigentlich funktionieren, wenn nicht dieser blöde fehler ständig auftauchen würde...
wie dem auch sei, ich werd mich nächste woche wieder genauer damit auseinandersetzen weil ich nun für ein paar tests lernen muss..
zb für die morgige mathe schularbeit... sollte ich bald mal zum lernen anfangen.. :)
danke jedenfalls mal für die hilfe!
bis dann, adieu einstweilen!
|
|
|
|