You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Sunday, April 30th 2006, 11:22am

Problem mit Umrechnungspogram

Hey ho ich bin neu hier im Forum,

also erstmal hallo!!

Ich muss meinem Kumpel helfen seine Hausaufgaben zu machen. Der hat noch weniger Plan von C als ich. Naja er muss ein Programm schreiben das von Dezimal in Binär, Oktal und Hexadezimal umrechnet. Für die Umrechnung von Dezimal in Oktal und Hexadezimal gibt es in C ja Bibliotheksfunktionen. Das Umrechnen von Dezimal in Binärzahlen gibs aber wohl nicht.

Und genau da liegt auch das Problen. Den Rest des Programms haben wir uns selbst zusammengebastelt und der funktioniert so weit auch aber der Teil mit den Binärzahlen ist aus irgendnem Programm kopiert. Da ich wie gesagt selber kaum Plan von C habe ist wahrscheinlich nur eine ganz kleine Sache falsch die ich ständig übersehe zudem Blick ich durch den Code von der Funktion überhaupt nicht durch.

Naja wär super wenn ihr mir/uns da weiterhelfen könntent und mal in den Code reinschaut:(es geht um die Funktion Dez_Dual)

C Quellcode

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdio.h>
#include <math.h>
 
int main ()
{
   char auswahl,ergebnis[33], a[33],b[33],dual[33],Hex[33],Okt[33],ant='j';
   long dez,dezi;
   void Dez_Dual(long,char *);
   void Dez_Hex();
   void Dez_Okt();
 
 
while (ant=='j')
       {
        printf(" ---------------------------------------------------------------\n");
         printf("  Umwandlungen von Dezimal in Dual, Hexadezimal oder Oktalzahlen\n");
          printf("  maximale Eingabe der Dezimalzahl von 2147483647\n ");
           printf(" ---------------------------------------------------------------\n\n");
            printf("  Umwandlung von einer natuerlichen Zahl ... \n\n");
             printf("  (1) ... in eine Dualzahl\n");
              printf("  (2) ... in eine Hexadezimalzahl\n");
               printf("  (3) ... in eine Oktalzahl\n"); 
 
do
     {
      printf("  Bitte entsprechende Wahl (1/2/3) eingeben: ");
      scanf ("%c",&auswahl);
if    (auswahl!='1' && auswahl!='2' && auswahl!='3'); 
      printf("\n  Falsche Eingabe! Entweder 1, 2 oder 3!\n\n");
      }
 
while ( auswahl=='1'|| auswahl=='2' || auswahl=='3');
 
   if(auswahl=='1')
   {     printf(" ------------------------------------\n");
         printf("  Umrechnung Dezimalzahl in Dualzahl\n");
         printf(" ------------------------------------\n\n");
         printf("  Ergebnis mit maximal 32 Stellen!\n\n");
         printf("  Dezimalzahl: ");  
         scanf (" %c",&dez); 
         Dez_Dual(dez,b);
         printf("%d" "  Dualzahl: ", &b);
         }
    if(auswahl=='2')
      {
        Dez_Hex();
      }
    if(auswahl=='3')
      {
        Dez_Okt();
      }     
      printf("\n\n\n  Noch einmal (j/n)? ");
      scanf("%c",& ant);
      printf("\n\n");  
    }
return 0;
}
 
 
void Dez_Dual(long dez,char b[])
{
     int i,k,ergebnis; 
     while (b!=0)
     {
     ergebnis[i]=b%2;
     b=b/2;
     i=i+1;
 
                 for(k=i-1;k>=0;k=k-1) 
                 {              /*Ausgabe der Binärzahl*/  
                 printf(" %d ",ergebnis[k]);      
                 printf (" \n\n");
                 }
     }
}
 
void Dez_Hex()
{
     long dezi;
     printf("  Ergebnis mit maximal 32 Stellen!\n\n");
     printf("  Dezimalzahl: ");
     Scanf("%c",&dezi);
     printf("  Hexadezimalzahl: %X\n",dezi);                   
}
 
void Dez_Okt() 
{
     long dezim;
     printf("  Ergebnis mit maximal 32 Stellen!\n\n");
     printf("  Dezimalzahl: ");
     Scanf("%c",&dezim);
     printf("  Oktalzahl: %o\n",dezim);
}

2

Sunday, April 30th 2006, 11:45am

hi,

ob die standardbibliotheken wirklich gewollt waren??
hier hast du ne andere methode, die du dir auch so anpassen kannst, dass die andere zahlensystem berechnet:

C Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char hex[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int zahl=100, basis=2, rest;
String ergebnis="";
do
{
	printf("%d / %d", zahl, basis);
	rest = zahl;
	zahl = zahl / basis; 
	rest = rest - (zahl * basis);
	printf(" = %d Rest: %d\n", zahl, rest);
 
	ergebnis = hex[rest]+""+ergebnis;
} while(zahl > 0);
 
printf("%s", ergebnis);

3

Sunday, April 30th 2006, 12:10pm

@ d0nUt

der weg mit den standardbibliotheken ist wohl der einfachste und kürzeste, wie gesagt so viel ahnung hab ich nicht mit c, damit funktionierts aber.

die umrechnung von dezimal in hexal funktioniert ja bereits wenn du jetzt noch ne lösung für die umrechnung von dezimal in binär hast wäre das super

also wie ich dasseh ist das ne umrechnung von dezimal in hexal oder nicht? keine ahnung!

4

Monday, May 1st 2006, 2:00pm

ne, aktuell berechnet es das dualsystem
für andere systeme musst du dann einfach nur die variable "basis" ändern

das basissystem ist immer das dezimalsystem
int basis gibt das zielsystem an

basis 2 = Dualsystem
basis 8 = Oktalsystem
basis 12 = Duodezimalsystem
basis 12 = Hexadezimalsystem
basis 60 = Sexagesimalsystem

Social bookmarks