Benötige Hilfe



  • Hallo liebe C++ Gemeinde,

    eine Bekannte benötigt hilfe bei einem Projekt, und da ich leider keine Ahnung von C++ habe, habe ich ihr versprochen mich in diversen Foren umzuhören und hr behilflich zu sein. Würd mich freuen, wenn mir jmd. dabei behilflich sein könnte.

    Die Teilaufgabe ihres Projekts kann entweder in C++ oder in Assembler geschrieben werden. Der Projektabgabetermin ist der 21.02 ! Soviel ich verstanden habe besteht die Aufgabe darin, einen 16 bit greycode in einen 16 bit binären code umzuschreiben, das konnte ich zumindest der email entnehmen.

    Wäre super, wenn mir jmd. seine hilfe anbieten könnte/würde. Ich würde dann, die Aufgabe etc. per email an denjenigen zukommen lassen.

    Anbieten kann ich leider nur ein DANKE, da ich ja selbst versuche meine hilfreiche Hand einer Freundin entgegen zu strecken.

    Falls jmd. interesse hat, meine email lautet: volkan62@t-online.de

    Würde mich über ein pos. Feedback freuen.

    Mfg

    VolkanZ



  • Ähm, deine Bekannte?
    Wenn Sie Ausbildung, Studium etc. macht, ist das sicherlich der Falscheweg!

    Trotzdem geb ich ein tipp:
    nehmt den greycode und den binär code und versucht das mithilfe eines Karnaugh-Veitch-Diagramms auszuwerten. Ich glaube das müsste so irgendwie klappen 🙂
    Hab mir jetzt zwar keine tieferen Gedanken gemacht aber man sollte sich im binärsystem auskennen und damit rechnen können(&,| etc)

    mal sehen das würde mich auch irgendwie reizen...
    wenn ich heute abend zeit hab setz ich mich hin und versuch das mal umzusetzen!
    kann aber nix versprechen! 😉

    steht ihr unter Zeitdruck?

    mfg hohesC



  • hohesC schrieb:

    nehmt den greycode und den binär code und versucht das mithilfe eines Karnaugh-Veitch-Diagramms auszuwerten.

    Bei 16 Eingängen und 16 Ausgängen? Naja wenn man grad Urlaub und die nächsten paar Monate nichts vorhat, warum nicht 🤡



  • 🤡 hra hra hra 😃
    wenn man ein programm dazu hat 😃



  • #include <stdio.h>
    #include <math.h>
    #include <stack>
    
    int grayToDec(char*, int);
    void decToBin( char*, int, int );
    
    int main() {
    	char grayCode[17];
    	char binCode[17];
    
    	printf("GrayCode: ");
    	scanf("%s", grayCode);
    	if( strlen( grayCode ) != 16 ) {
    		printf("Fehler, GrayCode zu %s...\n",
    			strlen(grayCode) < 16 ? "kurz" : "lang");
    		return(0);
    	}
    
    	int dec = grayToDec(grayCode, 16);
    	decToBin( binCode, dec, 16 );
    
    	printf("\nGray:    %s\nBinaer:  %s\nDecimal: %i\n",
    		grayCode, binCode, dec);
    
    	return(0);
    }
    
    void decToBin(char *bin, int dec, int len) {
    	*(bin + len) = 0;
    
    	while( dec && len ) {
    		int tmp = (int)pow( 2, len - 1);
    
    		if( dec - tmp >= 0 ) {
    			dec -= tmp;
    			*(bin + len - 1) = '1';
    		} else {
    			*(bin + len - 1) = '0';
    		}
    
    		--len;
    	}
    }
    
    int grayToDec(char *gray, int len) {
    	std::stack<int> stack;
    
    	while( len ) {
    		if( *gray == '1') {
    			stack.push( (int)pow(2, len) - 1 );
    		}
    		++gray;
    		--len;
    	}
    
    	while( !stack.empty() ) {
    		int v1, v2, v3;
    		v1 = stack.top();
    		stack.pop();
    		if( stack.empty() ) return( v1 );
    
    		v2 = stack.top();
    		stack.pop();
    
    		v3 = v2 - v1;
    
    		if( stack.empty() ) return( v3 );
    		stack.push( v3 );
    	}
    	/* kommt eh nicht vor... */
    	return( 0 );
    }
    

    Hm, wenn ich dein Problem richtig verstanden hab, dann müsste das hier wunderbar funktionieren... Vorausgesetzt ich hab den GrayCode wirklich verstanden...



  • #include <stdio.h>
    #include <math.h>
    #include <string.h> /* der hier sollte auch noch rein... */
    #include <stack>
    


  • ah, ich nochmal...

    die ausgabe des Binärcodes funktioniert noch net ganz, aber das macht jetzt ja wohl nix mehr, die kreigt man auch selbst noch hin...

    (ich sollte mich mal wieder anmelden damit ich die dinger bearbeiten kann)



  • void decToBin(char *bin, int dec, int len) {
    	memset( bin, 0, len + 1);
    
    	int mask = 1 << (len - 1);
    	for( int n = 0; n < len; n++) {
    		*bin = ((mask & dec) != 0) + '0';
    		mask >>= 1;
    		++bin;
    	}
    }
    
    //so, das funktioniert...
    


  • @Foo
    Also entweder richtig C++ oder gar nicht. Und nicht so ein C/C++ Mix.



  • Ich hab das schon erwartet...

    Aber ich mag std::cout bzw std::cin einfach nicht... printf und scanf gefallen mir um einiges besser, genau so char* statt std::string

    Aber ich will auf schöne sachen wie Klassen, Template-Klassen/Funktionen und stack/vector auch nicht verzichten.

    Also muss ich wohl oder übel C/C++ mischen... *unschuldig lächel*

    Und ich mein, solange das Produkt am ende funktioniert, ists doch eigentlich egal, oder?...

    (Überzeug mich von std::cout... wie realisiere ich z.B: %1.2f oder %5X ? ich hab keine ahnung, und da ich zu faul bin nachzugucken, weil printf ja wunderbar funktioniert, werd ichs auch erstmal weiter benutzten 🙂 )



  • hier der Quellcode:

    #include <iostream>
    
    using namespace std;
    
    main()
    {
    	int D=0,C=0,B=0,A=0;
    	int D1=0,C1=0,B1=0,A1=0;
    
    	cout<<"Gray-Code angeben(einzelne bits durch leerzeichen trennen):"<<endl;
    
    	cin>>D;
    	cin>>C;
    	cin>>B;
    	cin>>A;
    
    	D1=D;
    	C1=(D&!C)|(!D&C);
    	B1=(!D&!C&B)|(D&C&B)|(!D&!B&C)|(D&!C&!B);
    	A1=(!A&!D&C&!B)|(D&!A&!C&!B)|(D&C&B&!A)|(A&!B&C&D)|(!C&!D&B&!A)|(A&!B&!C&!D)|(B&!C&A&D)|(C&B&!D&A);
    
    	cout<<"der Binaer-Code ist:"<<endl;
    	cout<<D1<<" "<<C1<<" "<<B1<<" "<<A1<<endl;
    
    	return(0);
    }
    

    👍
    mfg hohesC 😃 😃 😃 😃



  • Dafür ist meiner wenigstens nachvollziehbar und nicht über irgendwelche Diagramme, von denen ich ehrlichgesagt keine Ahnung habe, erstellt... Und dafür dass ich vorher noch nie was von GrayCode gehört hatte und auch noch Hausaufgaben machen musste und Latein lernen musste (hmpf) find ich den vollkommen in ordnung... und man muss die bits nicht einzelnd eingeben, man kann den code auf längere/kürzte bitlänge verändern und so weiter 🙂



  • ist doch ok! ist auch nur spaßig gemeint! 😉

    mfg hohesC

    [EDIT]MELD DICH MAL AN[/EDIT]



  • Glaubst du ich meins anders ^^? und denkst du wirklich _ich_ hab hausaufgaben gemacht?



  • Foo schrieb:

    Und ich mein, solange das Produkt am ende funktioniert, ists doch eigentlich egal, oder?...

    Die Frage ist nur wie? Deinen Code könnte man problemlos zum Absturz bringen, mit std::string und std::cin wäre das schon wesentlich schwieriger. Ich will jetzt aber nicht zu sehr auf die Vorteile von cout/cin gegenüber printf/scanf eingehen, das würde den Rahmen sprengen und wäre zu sehr OT.
    Zudem heissen die Header in C++ <cstdio>, <cmath> und <cstring>.



  • naja meiner verarbeitet auch nur 4 bits an gray zu binär! 😃
    wenn ich mal ne halbe stunde zeit hab setz ich die 16 bit version um!

    mfg hohesC 😃 😃 😃

    [EDIT]man sollte nicht die wertigkeit mit den bits verwechseln[/EDIT] 😃



  • groovemaster schrieb:

    Foo schrieb:

    Und ich mein, solange das Produkt am ende funktioniert, ists doch eigentlich egal, oder?...

    Die Frage ist nur wie? Deinen Code könnte man problemlos zum Absturz bringen, mit std::string und std::cin wäre das schon wesentlich schwieriger. Ich will jetzt aber nicht zu sehr auf die Vorteile von cout/cin gegenüber printf/scanf eingehen, das würde den Rahmen sprengen und wäre zu sehr OT.
    Zudem heissen die Header in C++ <cstdio>, <cmath> und <cstring>.

    Dieser Code sollte nicht sicher sein, sondern nur zeigen, wie ich mir das halt mit dem umwandeln von gray zu binär machen würde...

    cstdio, cmath und cstring kannt ich nicht 🙂 werd ich mal schauen



  • #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    main()
    {
    	char i[17]={0};
    
    	int p=16,x=0,y=1;
    	cout<<"Geben Sie bitte den 16bit Gray-Code ein:"<<endl;
    	fgets(i,17,stdin);	
    
    	while(p)
    	{
    		if(i[x] == '1' && i[y] == '1')
    		{
    			i[y]='0';
    			x+=2;
    			y+=2;
    		}
    		else if(i[x] == '1'&& i[y] == '0')
    		{
    			i[y]='1';
    			x+=2;
    			y+=2;
    		}
    		else
    		{	
    			x+=2;
    			y+=2;
    		}
    		p-=2;
    	}
    	cout<<"der Binaer-Code ist:"<<endl;
    	cout<<i<<endl;
    	return(0);
    }
    

    mfg hohesC 😃


Anmelden zum Antworten