tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von vfl_freak
  • 1 Beitrag von sheel
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1407
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ch275 ch275 ist offline Mitglied
    Registriert seit
    Dec 2010
    Beiträge
    12
    Hallo,

    ich soll ein C-Programm zur Umrechnung von Dualzahlen in Dezimalzahlen erstellen, das zunächst prüft, ob die Zahl eine Dualzahl ist. Wenn sie keine ist, soll eine Fehlermeldung erfolgen und eine erneute Eingabeaufforderung. Gerade dieser Teil bereitet mir große Probleme. Vielleicht kann mir aber schon jemand sagen, ob der Rest in etwa richtig oder wo ich noch etwas verbessern müsste. In der main-Funktion soll die Dualzahl eingeben und die Dezimalzahl ausgegeben werden.


    #include <stdio.h>

    void dezimal(int n, int z){
    if(n>0){
    if(n%10=1){
    x=x+pow(2,i);
    i++;
    n=n/10;
    }
    else {
    i++;
    n=n/10;
    }
    }
    return x;
    }
    int main(){
    int x;
    int n;
    int z;
    x=0;

    printf("Bitte Dualzahl eingeben: ");
    scanf("%d", &n);

    printf("Die Dezimalzahl ist %d", x);
    }


    Für Hilfe wäre ich sehr dankbar, habe nämlich noch nicht so viel Ahnung vom Programmieren.
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Willkommen bei tutorials.de

    Zuerst einmal: Wenn du [cpp]...[/cpp] schreibst, machst du das Ganze übersichtlicher und besser lesbarer. Hilft vor allem bei längeren Quelltexten.

    Zur Aufgabe: Es wäre sinnvoller, die Dualzahl als String einzulesen

    Ein int hat 32 Bit (4 Byte) (bzw. je nach Betriebssystem auch 16, 64 etc, ist jetzt aber egal).
    Dh es kann 32 einzelne (Dual-)Stellen haben.
    scanf behandelt seine Eingabe aber zuerst einmal als Dezimalzahl, damit hast du max. Werte bis 2^32=4294967296, also 10 Stellen.

    Du könntest natürlich auch bei einem int prüfen, ob es nur aus Einsern und Nullern besteht und es dann umrechnen, aber so kommst du nicht auf die 32 bit.

    Wenn du die Zahl als String hast (wobei dann jeder "Buchstabe" automatisch genau eine Ziffer ist) kannst du auch leichter prüfen, ob nur 1/0 vorkommt.

    Ich schreib am Besten mal ein Beispiel und du sagst, was du nicht verstehst

    edit: Hier
    Code cpp:
    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
    
    #include<stdio.h>
     
    int dezimal(char *x)
    {
        int zahl=0, i;
        for(i=0;i<strlen(x);i++)
            zahl=zahl*2+(x[i]-'0');
        return zahl;
    }
     
    int main()
    {
        char eingabe[32];
        int zahl, i;
        char allespasst;
     
        while(1)
        {
            printf("Bitte Zahl eingeben:\n");
            fgets(eingabe,31,stdin);
            allespasst=1;
            for(i=0;i<strlen(eingabe);i++)
            {
                if(eingabe[i]!='0'&&eingabe[i]!='1')
                    allespasst=0;
            }
            if(allespasst==1)
            {
                zahl=dezimal(eingabe);
                printf("Die Dezimalzahl ist %d\n",zahl);
            }
            else
            {
                printf("Fehlerhafte Eingabe!\n");
            }
        }
    }
    Geändert von sheel (01.12.10 um 22:30 Uhr)
     

  3. #3
    ch275 ch275 ist offline Mitglied
    Registriert seit
    Dec 2010
    Beiträge
    12
    Danke für die Antwort.

    Ich muss aber leider C schreiben, dass ist das was wir benutzen müssen.

    Was ich zudem nicht verstanden habe, ist, an welcher Stelle ruft deine main-Funktion die dezimal-funktion auf? Außerdem, was bedeuten die eckigen Klammern in der if-Schleife?
     

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von ch275 Beitrag anzeigen
    Was ich zudem nicht verstanden habe, ist, an welcher Stelle ruft deine main-Funktion die dezimal-funktion auf?
    in Zeile 29 des Beispiels ....


    Zitat Zitat von ch275 Beitrag anzeigen
    Außerdem, was bedeuten die eckigen Klammern in der if-Schleife?
    Meinst Du dies hier: eingabe[ i ]
    "eingabe" ist als 32 Zeichen langes char-Array deklariert und hiermit wird auf das i-te Zeichen zugegriffen (Array-Index immer von 0 bsi x-1)

    Gruß
    Klaus
    ch275 bedankt sich. 
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Zitat Zitat von ch275 Beitrag anzeigen
    Ich muss aber leider C schreiben, dass ist das was wir benutzen müssen.
    Und? Was ist an meinem Code nicht C?

    Wegen den [] nocheinmal: eingabe kannst du dir wie eine Menge einzelner Buchstaben vorstellen.
    Jeder Tastendruck beim einlesen ist einer (zumindest bei den Buchstaben-Tasten)
    Mit [xyz] holst du dir einfach einzelne Buchstaben heraus.
    Zu beachten ist aber, dass man nicht bei 1, sondern bei 0 zu zählen beginnt.

    eingabe[0] ist also der erste Buchstabe
    eingabe[1] der Zweite,
    eingabe[2] der Dritte und so weiter.

    Und strlen(eingabe) bei der for-Schleife ermittelt, wieviel Buchstaben eigentlich drin sind, von den maximal 32.
    Man muss ja nicht immer genau 32 eingeben, es kann ja auch weniger sein.

    Gruß

    PS: if ist KEINE Schleife!
    Schleifen wiederholen sich. Also while, for, dowhile ...
    ch275 bedankt sich. 

  6. #6
    ch275 ch275 ist offline Mitglied
    Registriert seit
    Dec 2010
    Beiträge
    12
    Danke für die Hilfe. Wie gesagt, ich habe so gut wie keine Ahnung vom Programmieren. Habe erst seit einem Monat Informatik und es wird alles nicht so gut erklärt.
     

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 25.01.10, 16:36
  2. Antworten: 7
    Letzter Beitrag: 28.06.06, 18:42
  3. Dualzahlen speichern
    Von flooo im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 05.04.06, 15:57
  4. Linux skript zum umwandeln von Dezimal in dualzahlen
    Von borisbrause im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 26.10.05, 21:55
  5. Umwandlung von Dezimalzahlen in Dualzahlen!
    Von Trendy Andy im Forum C/C++
    Antworten: 14
    Letzter Beitrag: 11.08.04, 18:54