www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Schul-Informatik Algorithmen" - Dezimal in Binär
Dezimal in Binär < Algorithmen < Schule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Schul-Informatik Algorithmen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Dezimal in Binär: in C
Status: (Frage) beantwortet Status 
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);

     }

}

        
Bezug
Dezimal in Binär: Rückfrage.
Status: (Frage) beantwortet Status 
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.


        

Bezug
                
Bezug
Dezimal in Binär: Antwort
Status: (Antwort) fertig Status 
Datum: 06:32 Fr 24.03.2006
Autor: mathiash

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





Bezug
        
Bezug
Dezimal in Binär: Antwort
Status: (Antwort) fertig Status 
Datum: 06:33 Fr 24.03.2006
Autor: mathiash

Hallo und guten Morgen,

zur Antwort lies bitte die Antwort auf die Rückfrage von Dally.

Gruss,

Mathias

Bezug
                
Bezug
Dezimal in Binär: ok, aber...
Status: (Frage) reagiert/warte auf Reaktion Status 
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);

     }

}

Bezug
                        
Bezug
Dezimal in Binär: was denn?
Status: (Antwort) fertig Status 
Datum: 21:21 So 26.03.2006
Autor: informix

Hallo MonoTon,

was willst du uns jetzt mit diesem neuen Beitrag sagen/fragen?

Liefert das Programm jetzt die gewünschten Ergebnisse?

Gruß informix


Bezug
                                
Bezug
Dezimal in Binär: funkt nicht
Status: (Frage) reagiert/warte auf Reaktion Status 
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

Bezug
                                        
Bezug
Dezimal in Binär: Rückfrage
Status: (Mitteilung) Reaktion unnötig Status 
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

Bezug
                                                
Bezug
Dezimal in Binär: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
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

Bezug
                        
Bezug
Dezimal in Binär: Tipp
Status: (Antwort) fertig Status 
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

Bezug
                                
Bezug
Dezimal in Binär: stimmt!
Status: (Mitteilung) Reaktion unnötig Status 
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!

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Schul-Informatik Algorithmen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]