Bitte um Korrektur Vorschläge für ein Programm, sehr dringend!!!
-
Hallo Leute!
Habe die Aufgabe ein Programm zu schreiben das Hexadezimal und Dezimal zahlen in Dual (Binär) umrechnet mit vollgender Aufgabenstellung.
Schreiben Sie ein Konsolenprogramm BinCalc.exe, das dezimale und hexadezimale Zahlen im Bereich von unsigned long int (32 Bit) im Binärformat ausgibt. Überlegen Sie sich dazu einen allgemeingültigen mathematischen Algorithmus.
Die Eingabe der umzurechnenden Zahl erfolgt als Kommandozeilenparameter. Dabei gelten folgende Regeln: Zahl mit 0x am Anfang wird als hexadezimale Zahl interpretiert, Zahl ohne 0x am Anfang wird als dezimale Zahl interpretiert und Buchstaben werden als Pfad auf eine Textdatei gewertet, in der die Zahl steht.
Die Ausgabe erfolgt bei Eingabe von Zahlen mit printf (auf der Kommandozeile) und bei einer Eingabe durch eine Datei mit einer Ausgabedatei, die denselben Namen hat wie die Eingabedatei, aber die Endung .bin trägt. Die Ausgabe soll aus Lesbarkeitsgründen in 8BitBlöcke
mit Leerzeichen unterteilt werden und mehrfarbig sein. Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle möglichen Fehlerquellen ab.Habe folgenden Code geschrieben, habe aber noch Fehler drin die ich selber nicht korregieren kann. Außerdem Kann dass mit verschiedenen Farben aus der aufgabenstellung vernachlässigt werden.
#include <stdio.h> #include <stdlib.h> #define MAX 8 #define A 10 #define B 11 #define C 12 #define D 13 #define E 14 #define F 15 int Zahl; void Dezimalzahl(); void Hexadezimalzahl(); void Text(); int main(int argc, char * argv[]) { char eingabe [MAX+1]; Zahl = atoi (argv[1]); sprintf(eingabe,"%d",Zahl); if (argc < 2) { printf ("\t\tUebergeben sie bitte eine Zahl in der Kommandozeile!!!\n\n\t\tDezimalzahl: max 32 Stellen\n\n\t\t0x am Anfang fuer eine Hexadezimalzahl: max 8 Stellen\n\n\t\tBuchstaben um die zahl aus der Datei Zahl.txt auszulesen\n\t\tund als eine Dualzahl in die Datei Text.bin zu schreiben"); return (-10); } if (eingabe[0] == 0 && eingabe[1] == 'x') { Hexadezimalzahl(); } else if(eingabe[0] >=1) { Dezimalzahl(); } else Text(); } void Dezimalzahl() { unsigned long x=0, y; int rest; y = Zahl; for (x=y/2; y==0; y = y/2) { rest=y-(x*2); printf ("Dualzahl: %i",rest); } return; } void Hexadezimalzahl() { char eingabe [MAX+1]; int index, rest, x; sprintf(eingabe,"%i",Zahl); for (index=2; eingabe[index] =='/0'; index = index + 1) { for (x = eingabe[index]/2; eingabe[index] == 0; eingabe[index] = eingabe[index]/2) { rest = eingabe[index]-(x*2); printf ("Dualzahl: %i",rest); } } return; } void Text() { int anzahl, rest; unsigned long x=0, y = Zahl; FILE *fIN, *fOUT; if( (fIN = fopen("Zahl.txt","r"))== NULL) { printf( "Fehler beim Oeffnen der Datei %s! \n", "Zahl.txt"); return; } if(NULL == (fOUT = fopen( "Zahl.bin", "w"))) { printf( "Fehler beim Oeffnen der Datei %s! \n", "Zahl.bin"); return; } if ((anzahl = fscanf (Text, "%u", &Zahl)) == EOF) { printf("Zahl aus '%s' konnte nicht gelesen werden", "Zahl.txt"); return; } else { if (anzahl == 0) { printf("Die Datei '%s' ist lehr", "Zahl.txt"); } return; } for (x=y/2; y==0; y = y/2) { rest=y-(x*2); fprintf (fOUT, "%i" ,rest); } fclose( fIN); fclose( fOUT); return; }
Es währe sehr nett wenn mir jemand helfen kann.
Warte auf Antworten und vielen Dank im voraus!!!
-
Wenn Du nicht etwas konkreter deine Fehler beschreibst, wird dir hier wohl keiner helfen.
PS
-Code bitte sinnvoll einrücken
-Code-Tags des Forums benutzen
-"vollgend" wird "folgend" geschrieben
-
dezimale und hexadezimale Zahlen im Bereich von unsigned long int (32 Bit)
Dezimalzahl: max 32 Stellen
Finde ich in Kombination rätselhaft.
Denk mal nach, was die Fakultät von 13 ist!Außerdem geht's von Hexadezimal nach Binär viel einfacher --
da reicht ein simpler Textersatz.
-
MiP schrieb:
Wenn Du nicht etwas konkreter deine Fehler beschreibst, wird dir hier wohl keiner helfen.
PS
-Code bitte sinnvoll einrücken
-Code-Tags des Forums benutzen
-"vollgend" wird "folgend" geschriebenAlso erstmall habe ich nicht um Korrektur meiner Rechtschreibung gebeten und zweitens ist dein Beitrag vollkommen nutzlos.
Ich schätze jeder der mir bei dem Problem helfen kann oder möchte, sieht das kopieren des codes in einen compeiler nicht als ein unlösbares Problem.
zu meinen Fehlern: Der compeiler zeigt keine an, lediglich 7 Wahrnungen
-
Also erstmall habe ich nicht um Korrektur meiner Rechtschreibung gebeten und zweitens ist dein Beitrag vollkommen nutzlos.
Ich schätze jeder der mir bei dem Problem helfen kann oder möchte, sieht das kopieren des codes in einen compeiler nicht als ein unlösbares Problem.
Wer so unfreundlich ist, sollte sich andere Idioten suchen, die ihm helfen.
Er hat 1.) recht und 2.) "bitte" gesagt.
Und daß es ein Compiler ohne weiteres versteht, heißt nicht, daß das auch für uns gilt.
-
flamer schrieb:
dezimale und hexadezimale Zahlen im Bereich von unsigned long int (32 Bit)
Dezimalzahl: max 32 Stellen
Finde ich in Kombination rätselhaft.
Denk mal nach, was die Fakultät von 13 ist!Außerdem geht's von Hexadezimal nach Binär viel einfacher --
da reicht ein simpler Textersatz.Dezimale Zahlen 32 stellig ist schon richtig und Heaxdezimale dürfen also nur 8 stellig sein.
Außerdem sehe ich kein konkreten Vorschlag in deinem Beitrag, schreibst zwar etwas von einem simplem Textersatz und dabei bleibts?!?!
-
flamer schrieb:
Also erstmall habe ich nicht um Korrektur meiner Rechtschreibung gebeten und zweitens ist dein Beitrag vollkommen nutzlos.
Ich schätze jeder der mir bei dem Problem helfen kann oder möchte, sieht das kopieren des codes in einen compeiler nicht als ein unlösbares Problem.
Wer so unfreundlich ist, sollte sich andere Idioten suchen, die ihm helfen.
Er hat 1.) recht und 2.) "bitte" gesagt.
Und daß es ein Compiler ohne weiteres versteht, heißt nicht, daß das auch für uns gilt.Ist das hier eine Klatschbude für jedermann, Ich habe nur um Konstruktive Vorschläge gebeten nicht um die Diskussion meiner Rechtschreibung oder sonnstiges.
-
Sergioscorpion schrieb:
MiP schrieb:
Wenn Du nicht etwas konkreter deine Fehler beschreibst, wird dir hier wohl keiner helfen.
PS
-Code bitte sinnvoll einrücken
-Code-Tags des Forums benutzen
-"vollgend" wird "folgend" geschriebenAlso erstmall habe ich nicht um Korrektur meiner Rechtschreibung gebeten und zweitens ist dein Beitrag vollkommen nutzlos.
Ich schätze jeder der mir bei dem Problem helfen kann oder möchte, sieht das kopieren des codes in einen compeiler nicht als ein unlösbares Problem.
zu meinen Fehlern: Der compeiler zeigt keine an, lediglich 7 Wahrnungen
Also du hast immernoch nicht gesagt, was das Problem ist. Nur, dass der Compiler Warnungen ausgibt. Vielleicht solltest du das Programm einfach einmal ausführen und schauen was passiert?
So wie du hier Fragen stellst scheinst du einfach nicht genügend Eigeninitiative zu besitzen um zu versuchen die Warnungen zu verstehen. Du scheinst dein Problem einfach nur Auslagern zu wollen.
Hier bekommt niemand Geld dafür, dass er dir hilft. Also musst du schon Glück haben, wenn jemand deinen hingeschmissenen Quelltext kompiliert und sich ihn genauer anschaut.
Ich gebe MiP hier vollkommen Recht.
Und:
- 32-Bit hat noch lange nichts mit 32 Dezimalstellen zu tun.
- Wenn der Quelltext kompiliert, dann ist er noch lange nicht korrekt oder macht, was du willst.
- Das Nullterminierungszeichen sieht so aus: '\0' nicht '/0'Da du mir zu offensiv-fordernd bist werde ich mich mit deinem eher einfachen Problem nicht länger befassen.
-
schreibst zwar etwas von einem simplem Textersatz und dabei bleibts?!?
Nicht ganz:
(define (replacement-text next-four-chars) (cdr (assoc next-four-chars '(("0000" . "0") ("0001" . "1") ("0010" . "2") ("0011" . "3") ("0100" . "4") ("0101" . "5") ("0110" . "6") ("0111" . "7") ("1000" . "8") ("1001" . "9") ("1010" . "a") ("1011" . "b") ("1100" . "c") ("1101" . "d") ("1110" . "e") ("1111" . "f")))))
Und sonst: EOD.
-
flamer schrieb:
schreibst zwar etwas von einem simplem Textersatz und dabei bleibts?!?
Nicht ganz:
(define (replacement-text next-four-chars) (cdr (assoc next-four-chars '(("0000" . "0") ("0001" . "1") ("0010" . "2") ("0011" . "3") ("0100" . "4") ("0101" . "5") ("0110" . "6") ("0111" . "7") ("1000" . "8") ("1001" . "9") ("1010" . "a") ("1011" . "b") ("1100" . "c") ("1101" . "d") ("1110" . "e") ("1111" . "f")))))
Und sonst: EOD.Danke!!!
-
Zebald schrieb:
Sergioscorpion schrieb:
MiP schrieb:
Wenn Du nicht etwas konkreter deine Fehler beschreibst, wird dir hier wohl keiner helfen.
PS
-Code bitte sinnvoll einrücken
-Code-Tags des Forums benutzen
-"vollgend" wird "folgend" geschriebenAlso erstmall habe ich nicht um Korrektur meiner Rechtschreibung gebeten und zweitens ist dein Beitrag vollkommen nutzlos.
Ich schätze jeder der mir bei dem Problem helfen kann oder möchte, sieht das kopieren des codes in einen compeiler nicht als ein unlösbares Problem.
zu meinen Fehlern: Der compeiler zeigt keine an, lediglich 7 Wahrnungen
Also du hast immernoch nicht gesagt, was das Problem ist. Nur, dass der Compiler Warnungen ausgibt. Vielleicht solltest du das Programm einfach einmal ausführen und schauen was passiert?
So wie du hier Fragen stellst scheinst du einfach nicht genügend Eigeninitiative zu besitzen um zu versuchen die Warnungen zu verstehen. Du scheinst dein Problem einfach nur Auslagern zu wollen.
Hier bekommt niemand Geld dafür, dass er dir hilft. Also musst du schon Glück haben, wenn jemand deinen hingeschmissenen Quelltext kompiliert und sich ihn genauer anschaut.
Ich gebe MiP hier vollkommen Recht.
Und:
- 32-Bit hat noch lange nichts mit 32 Dezimalstellen zu tun.
- Wenn der Quelltext kompiliert, dann ist er noch lange nicht korrekt oder macht, was du willst.
- Das Nullterminierungszeichen sieht so aus: '\0' nicht '/0'Da du mir zu offensiv-fordernd bist werde ich mich mit deinem eher einfachen Problem nicht länger befassen.
Das Problem ist ja genau das, dass das Programm nicht dass macht was ich wollte, deswegen suche ich auch Hilfe.
Ich bin Anfänger in C, und Programmiersprachen sind auch nicht mein Ding, brauche es halt nur für ein Informatikschein.Ich fordere auf keinen Fall die Hilfe, sondern bitte darum und wenn du schon sagst dass mein Problem eher ein einfaches ist, währe es wohl auch kein Problem für dich den Code zu Kompilieren anstatt nur schlaue Sprüche zu kloppen.
Aber, jedem das seine!Ausgeführt habe ich das Programm und dies endet in einer Endlosschleife, deswegen frage ich hier ob jemand sich das Programm ansehen kann und Korrekturvorschläge hatt. Für erfahrene Programierer wird es wohl kein Poroblem sein.
-
Schau Dir mal Zeile 99 an, da scheint was nicht zu stimmen. Wundert mich, dass der Compiler nicht meckert.
-
Ich fordere auf keinen Fall die Hilfe, sondern bitte darum und wenn du schon sagst dass mein Problem eher ein einfaches ist, währe es wohl auch kein Problem für dich den Code zu Kompilieren anstatt nur schlaue Sprüche zu kloppen.
Schon mal daran gedacht, daß ich manchmal vor Maschinen ohne C-Compiler sitze?
Abgesehen davon ist recht einfach, in über hundert Zeilen ein system("rm -rf /")*
zu verstecken. Deshalb: compilieren ja, aber erst überfliegen. Und da helfen
die Code-Tags schon sehr, weil man sich den indent-Aufruf erspart (ok -- zumindest manchmal).sondern bitte darum
Und dir wird geholfen werden.
Wie ist denn der letzte Stand?