Dezimal in Dual - Verkettung zweier Quellcodes!

chief86

Grünschnabel
Hallo,

wir müssen für unseren Unterricht in der FH ein Programm erstellen,
was Dezimal in Dualzahlen umrechnen kann, allerdings sollen negative Werte vorher speziell angemahnt werden und es soll eine positive zahl eingegeben werden.
Unser Quelltexte sind folgende:
fallunterscheidung mit while schleife zur überprüfung auf negative zahlen

/* Hauptprogramm */
void main()
{
int fall, eins, zwei, drei, dezimal;

printf ("(1) Dezimalzahl -> Dualzahl\n", &eins);
printf ("(2) Dezimalzahl -> Oktalzahl\n", &zwei);
printf ("(3) Dezimalzahl -> Hexadezimalzahl\n", &drei);
printf ("Bitte geben Soe (1), (2) oder (3) ein: \n");
scanf ("%lf", &fall);
printf ("=======================================================================\n");

if (fall == 1); /*Fall 1 Dezimalzahl in Dualzahl*/
while(1) { /* Endlosschleife, weil: 1 ist immer wahr */
printf("Bitte geben Sie eine positive Zahl ein: \n");
scanf("%d", &dezimal);
if(dezimal > 0) /* Positive Zahl? */
break; /* ... dann raus aus der Schleife */
}

}

und einmal der quellcode zur umrechnung in eine dualzahl

#include <stdio.h>
void dez_bin(int z);
void main()
{
int dezimal, z;
printf("Geben Sie die dezimale Zahl ein:\n\n");
scanf("%d",&dezimal);
printf("\n================================================\n ");

printf("\nDualzahl:\n\n");
dez_bin(dezimal);
printf("\n");
}

void dez_bin(int z)
{
if (z>0)
{
dez_bin(z/2);
printf("%d",z%2);
}

}

wie macht man daraus jetzt einen einheitlichen quellcode?
sitze da schon ziemlich lange dran, bekomme es aber nicht wirklich hin.
hoffe ihr könnt mir da helfen

danke
 
hallo,
erstmal ein paar dinge zu deinem quelltext :)

1) eine main-funktion hat immer einen rückgabewert "int" und nicht "void",
auch wenn sie nur 0 zurück gibt:
(ja, es gibt menschen die sagen "void" funktioniert doch auch...aber man sollte "void" nicht verwenden)
Code:
...
int main() {
     return 0;
}
2) deine dez_bin-funktion, funktioniert so wie sie ist - nicht!
die msdn bietet dir schon fertige funktionen zur umrechnung von zahlen.

3) die variablen (eins, zwei, drei), brauchst du in der main-funktion doch garnicht ?!
und kannst du mir mal bitte sagen, was das bedeuten soll:
Code:
printf ("(1) Dezimalzahl -> Dualzahl\n", &eins);
printf ("(2) Dezimalzahl -> Oktalzahl\n", &zwei);
printf ("(3) Dezimalzahl -> Hexadezimalzahl\n", &drei);
...wenn du eine zahl ausgeben willst, dann musst du das so machen:
Code:
int zahl = 1;
...
printf("die zahl ist: %d", zahl);
und wie das einlesen funktioniert, dass weist du ja...
aber das was du da geschrieben hast, hat keine bedeutung(funktionalität)!

OK - die auswahl der umrechnung erfolgt nun per switch-abfrage.
dann wird die dafür zuständige funktion aufgerufen, es wird umgerechnet und die zahl sollte dann in der funktion ausgegeben werden.
wenn du jedoch die ergebnise der main übergeben willst, dann müsstest du mit zeigern arbeiten.
da ich nicht weis was du kannst & was nicht, habe ich das mal nicht verwendet.
solltest du noch eine frage haben, frag einfach :)
aber was machst du an der fh? also welcher fachbereich?

hier der quelltext:
Code:
#include <stdio.h>

/* Funktion (1) */
void dez_bin(int z) {
    /* ... */
}


/* Funktion (2) */
void dez_okt(int z) {
    /* ... */
}


/* Funktion (3) */
void dez_hex(int z) {
    /* ... */
}


/* Hauptprogramm */
int main() {
    /* Variablen mit einem Wert initialisieren,
       da diese sonst einen "unbestimmten" Zustand annehmen */
    int fall=0, dezimal=0;
    
    printf ("(1) Dezimalzahl -> Dualzahl\n");
    printf ("(2) Dezimalzahl -> Oktalzahl\n");
    printf ("(3) Dezimalzahl -> Hexadezimalzahl\n");
    printf ("Bitte geben Sie (1), (2) oder (3) ein: \n");
    scanf ("%d", &fall);
    printf ("==============================================================\n");
    
    while(1) { /* Endlosschleife, weil: 1 ist immer wahr */
        printf("Bitte geben Sie eine positive Zahl ein: \n");
        scanf("%d", &dezimal);
        if(dezimal > 0) /* Positive Zahl? */
            break; /* ... dann raus aus der Schleife */
    }
    
    /* Die Funktion für die richtige Umrechnung auswählen */
    switch(fall) {
        case 1: /* Dez->Dua */
                dez_bin(dezimal);
                break;
        
        case 2: /* Dez->Dua */
                dez_okt(dezimal);
                break;
                
        case 3: /* Dez->Dua */
                dez_hex(dezimal);
                break;  
    }

    getch();
    return 0;
}

mfg adam
 
Zurück