Suche Hilfe für ein kleines, simples Programm :)



  • Tja, das Problem ist, das diese Fragen unt Antwortmöglichkeiten mit dem entsprechenden Code schon existieren. Es gibt auch schon ein Programm, welches diesen erstellten Code zurück in den Klartext umwandelt. Also er macht aus dem code dann wieder die Fragen, mit den gegebenen Antworten. Darum kann ich mir den Code der erstellt wird, leider nicht selber aussuchen 😞

    MfG,

    Tanuka



  • Warum muß man denn überhaupt angeben, wie lang der Code sein muß?
    Denn die Länge des Codes kann sogar bei einer Frage variieren. Je nach gegebener Antwort kann er 2-5 Stellen haben..

    MfG,

    Tanuka



  • Oben schreibst du noch es wäre ein Hobbie Projekt, jetzt
    schreibst du du must dich an eine Vorgabe halten.
    Sehr glaubhaft.



  • Ok, also nochmal im Klartext. Dieser Code wird in unserer "Community" benutzt, um auf kleinstem Raum viel über sich auszusagen. So kann man diesen Code z.B. als Signatur an seine Postings hängen und andere können diesen Code dann mit hilfe eines Decoders wieder in Klartext übersetzten und erfahren damit einiges über denjenigen, dem der Code gehört. Deshalb ist der Code sowie die Fragen und Antworten festgelegt. Das Problem ist nun, das es aber noch kein Codierer für dieses Code gibt. Sprich, man muß in mühsamer Arbeit sich seinen Code manuell zusammenstellen, indem man bei jeder Frage nachschaut, welcher Code für welche Antwort steht. Das dauerte bei mir das erste mal gute 2 Stunden. Dadurch das dieses Vorgehen nun natürlich mit etwas Arbeit verbunden ist, schrecken viele Leute davor zurück, sich diesen Code zusammen zu basteln. Aus diesem Grund kam ich auf die Idee, das man dafür doch, genau wie es ein Decodierprogramm gibt, auch ein Codierprogramm schreiben könnte.

    MfG,

    Tanuka



  • Dann versuch es mal so:

    //---------------------------------------------------------------------------
    
    #include "iostream.h"
    #include "conio.h"
    #include "string.h"
    
    //---------------------------------------------------------------------------
    typedef struct
    {
    	char *code;
    } s_code;
    
    const int anzahl = 2;						// Anzahl der Fragen
    
    // hier stehen alle Codes, fuer alle moeglichen Antworten drin
    s_code alle_codes[anzahl][5] =
    {
    	// Code zur 1. Frage
    	{	"A1",	"A2",	"A3",	"A4",	"A5"	},
    
    	// Code zur 2. Frage
    	{	"C1",	"C2",	"C3",	"C4",	"C5"	}
    
    	// ...
    };
    
    s_code code[anzahl];						// der Code, der erstellt werden soll
    
    int fragen( int n );						// diese Funktion stellt die Fragen
    
    int main()
    {
    	char *txt = "";							// der komplette Code in einem char zum
    											// Speichern und Ausgeben
    	char k = 0;								// die gedrueckte Taste
    	char trennzeichen[1];		  			// das Trennzeichen zwischen den einzelnen
    											// Codes
    
    	trennzeichen[0] = ' ';
    
    	do
    	{
    		clrscr();							// Bildschirm loeschen
    
    		int n = 0;							// erste Frage
    
    		do
    		{
    			int r = fragen( n );			// stelle die Frage und schreibe den
    											// Rueckgabewert in eine Variable
    
    			if( r == 0 )					// wenn '0' zurueckgegeben wurde
    			{
    				cout << endl << "Moechten Sie wirklich beenden? J/N" << endl;
    				cin >> k;
    
    				if( k == 'J' || k == 'j' ) // wenn 'J' oder 'j' eingegeben wurde
    				{
    					return 0;						// beende das Programm
    				}
    			}
    			else							// andernfalls
    			{
    				n += r;							// springe zur naechsten
    												// oder zur vorherigen Frage
    			}
    			cout << endl;
    		} while( n < anzahl );				// wenn alle Fragen durch sind
    
    		cout << "Loesung: ";
    
    		for( int a = 0; a < anzahl; a++ )	// Code fuer jede Frage einzeln durchlaufen
    		{
    			// den aktuellen Code zu der Variable fuer den kompletten Code hinzufuegen
    			txt = strncat( txt, code[a].code, strlen( txt ) + strlen( code[a].code ) );
    
    			// wenn wir nicht beim letzten Code sind
    			if( a != anzahl-1 )
    			{
    				// fuege noch das Trennzeichen ein
    				txt = strncat( txt, trennzeichen, strlen( txt ) + 1 );
    			}
    		}
    
    		cout << txt << endl;				// den Code ausgeben
    
    		cout << "\n\n[E] zum Beenden druecken." << endl;	// Hinweis zum Beenden
    		cout << "Eine andere Taste druecken, um an den Anfang zu springen" << endl;
    
    		cin >> k;
    	} while( k != 'E' && k != 'e' );		// Wenn nicht 'E' oder 'e' gedrueckt wurde
    											// beginne von vorne
    
    	FILE *file;							  	// Dateihandle
    
    	file = fopen( "d:\\text.txt", "w" );	// Datei oeffnen / erstellen
    
    	if( !file )								// Wenn das Handle ungueltig ist
    	{
    		// Gebe Hinweis aus und beende
    		cout << "\n\nDie Datei konnte nicht beschrieben werden." << endl;
    		return 0;
    	}
    
    	fwrite( txt, strlen( txt ), 1, file );	// schreibe Code in die Datei
    	fclose( file );							// schliesse die Datei
    
    	cout << "\n\nDie Datei wurde erstellt!";	// Hinweis ausgeben
    
    	return 0;								// beenden
    }
    //---------------------------------------------------------------------------
    
    int fragen( int n )
    {
    	char k = ' ';							// die gedrueckt Taste
    
    	if( n == 0 )							// die richtige Frage stellen
    	{
    		cout << "1. Wie alt bist du?" << endl;
    		cout << "[1] Zwischen 18 und 25 Jahre" << endl;
    		cout << "[2] Zwischen 25 und 35 Jahre" << endl;
    		cout << "[3] Zwischen 35 und 45 Jahre" << endl;
    		cout << "[4] älter als 45 Jahre" << endl;
    		cout << "[5] Bin mir nicht sicher :P" << endl;
    	}
    
    	else if( n == 1 )
    	{
    		cout << "2. Wieviele Geschwister hast du?" << endl;
    		cout << "[1] Einen Bruder" << endl;
    		cout << "[2] Eine Schwester" << endl;
    		cout << "[3] Zwei Geschwister" << endl;
    		cout << "[4] Mehr als zwei Geschwister" << endl;
    		cout << "[5] Keine Geschwister" << endl;
    		cout << "[B] zur voherigen Frage zurueckspringen" << endl;
    	}
    
    	do
    	{
    		// lasse solange eine Taste eingeben, bis es eine Taste von 1-5 oder 'B' oder 'b'
    		// war
    		cin >> k;
    
    		// wenn bei der ersten Frage 'B' oder 'b' gedrueckt wurde
    		if( k == 'b' && n == 0 || k == 'B' && n == 0 )
    		{
    			// nicht gueltig, deshalb setzen wir 'k' auf '0'
    			k = '0';
    		}
    	} while(	k != '1' && k != '2' && k != '3' && k != '4' && k != '5' &&
    				k != 'B' && k != 'b' && k != 'e' && k != 'E' );
    
    	if( k == 'e' || k == 'E' )
    	{
    		return 0;
    	}
    	else if( k == 'B' || k == 'b' )	 		// wenn 'B' oder 'b' gedrueckt wurde
    	{
    		return -1;								// gebe -1 zurueck
    	}
    	else									// andernfalls
    	{
    		int ascii = int( k ) - 49;				// schreibe den Asciiwert der
    												// gedrueckten Taste in eine Variable
    		code[n].code = alle_codes[n][ascii].code;	// schreibe den Code
    		return 1;								// gebe 1 zurueck
    	}
    }
    


  • Community? Internet? Links? Gib doch einfach dazu mal Infos 😉



  • Hi C-O-M-M-A-N-D-E-R,

    ich werde hier keine Links oder Aussagen darüber angeben, da wir ziemlichen Wert auf anonymität legen, sorry.

    MfG,

    Tanuka



  • Hi Aoeke,

    dieser Quellcode ist sogar für mich schon relativ verständlich 🙂

    Leider funktioniert er aber nicht so richtig..

    Nach beantwortung der beiden Fragen, erscheint auf dem Bildschirm nur:

    Lösung

    Dahinter wird aber kein Code angegeben und es wird auch keine Datei erstellt 😞

    PS. Was genau bewirkt diese Zeile am Ende des Quellcodes?

    int ascii = int( k ) - 49;

    Würde gerne nachvollziehen können, was die -49 da soll 😃

    Herzliche Grüße,

    Tanuka



  • 1. Also wenn ich mir eine neue Konolenanwendung erstelle, und den Code, den ich als letztes gepostet habe ohne Aenderung einfuege und anschliessend kompiliere, laeuft das Programm. Auch wird die Loesung angezeigt und nach dem Druecken der 'E'-Taste, wird auch die Datei erstellt?????

    2.

    Tanuka schrieb:

    PS. Was genau bewirkt diese Zeile am Ende des Quellcodes?

    int ascii = int( k ) - 49;

    Das ist kompliziert zu erklaeren... 49 ist der Ascii-Wert fuer das Zeichen '1'. Da wir die '1' naemlich bloss als Zeichen und nicht als Zahl in einer Variable haben (naemlich in der Variablen 'k'), muessen wir das ja erst in eine Zahl umwandeln. Naja und da die Zahl, die wir brauchen, wenn '1' gedrueckt wurde '0' sein soll, und fuer '2' '1', ..., ziehen wir von dem Ascii-Code des Zeichens (fuer '1' = 49, fuer 2 = '50'...) einfach 49 ab, um so auf die gewollte Zahl zu kommen...
    Das ist ziemlich dumm erklaert, aber vielleicht hast du es ja sogar verstanden...
    MfG Aoeke

    PS. Welchen Compiler verwendest du?



  • Hi Aoeke,

    Danke für die Erläuterung mit der -49. Hatte mir sowas schon gedacht, das es was mit dem Asciicode zu tuhen hat, nur hatte ich erst wohl falsche Ascii-Tabellen in denen nichts davon stand, das 1=049 ist 😛
    Habe nun aber die richtige gefunden 🙂

    Also als Compiler verwende ich Dev-C++ und am Quellcode habe ich nichts verändert, außer vor das clrscr ein // gesetzt, weil der den befehl irgendwie nicht mag und mir dann immer eine Fehlermeldung ausspuckt, was ansich ja auch schon sehr komisch ist...

    Hier mal die Fehlermeldung wenn ich clrscr nicht entferne:

    test.o(.text+0x159):test.cpp: undefined reference to `clrscr'

    Vielleicht taugt dieser Compiler ja nichts?! Welchen benutzt denn du?

    Liebe Grüße,

    Tanuka



  • Ich selbst benutze Borland C++ Builder 5.0... Das mit 'clrscr' hängt glaube ich irgendwie mit der Header-Datei 'conio.h' zusammen (wo die Funktion bei mir deklariert ist).. Habe ich mal irgendwo gelesen, das die wohl irgendwie von Compiler zu Compiler unterschiedlich sein soll und der deshalb einige Funktionen kennt und andere widerum nicht.. Aber vielleicht täusche ich mich auch gerade und erzähle bloß Mist... 😃 Bin mir nicht sicher...
    Ich werde mal versuchen, mir DevC++ zu beschaffen und das dann mal damit zu testen...
    MfG Aoeke



  • Das wäre echt klasse, wenn du das machen könntest 🙂

    Danke schonmal 🙂

    Liebe Grüße,

    Tanuka



  • Hi,

    #include <iostream>
    #include <conio.h> 
    #include <string>
    using namespace std; 
    
    //--------------------------------------------------------------------------- 
    typedef struct 
    { 
        char *code; 
    } s_code; 
    
    const int anzahl = 2;                        // Anzahl der Fragen 
    
    // hier stehen alle Codes, fuer alle moeglichen Antworten drin 
    s_code alle_codes[anzahl][5] = 
    { 
        // Code zur 1. Frage 
        {    "A1",    "A2",    "A3",    "A4",    "A5"    }, 
    
        // Code zur 2. Frage 
        {    "C1",    "C2",    "C3",    "C4",    "C5"    } 
    
        // ... 
    }; 
    
    s_code code[anzahl];                        // der Code, der erstellt werden soll 
    
    int fragen( int n );                        // diese Funktion stellt die Fragen 
    
    int main() 
    { 
        char *txt = "";                            // der komplette Code in einem char zum 
                                                // Speichern und Ausgeben 
        char k = 0;                                // die gedrueckte Taste 
        char trennzeichen[1];                      // das Trennzeichen zwischen den einzelnen 
                                                // Codes 
    
        trennzeichen[0] = ' '; 
    
        do 
        { 
            system("cls");                            // Bildschirm loeschen 
    
            int n = 0;                            // erste Frage 
    
            do 
            { 
                int r = fragen( n );            // stelle die Frage und schreibe den 
                                                // Rueckgabewert in eine Variable 
    
                if( r == 0 )                    // wenn '0' zurueckgegeben wurde 
                { 
                    cout << endl << "Moechten Sie wirklich beenden? J/N" << endl; 
                    cin >> k; 
    
                    if( k == 'J' || k == 'j' ) // wenn 'J' oder 'j' eingegeben wurde 
                    { 
                        return 0;                        // beende das Programm 
                    } 
                } 
                else                            // andernfalls 
                { 
                    n += r;                            // springe zur naechsten 
                                                    // oder zur vorherigen Frage 
                } 
                cout << endl; 
            } while( n < anzahl );                // wenn alle Fragen durch sind 
    
            cout << "Loesung: "; 
    
            for( int a = 0; a < anzahl; a++ )    // Code fuer jede Frage einzeln durchlaufen 
            { 
                // den aktuellen Code zu der Variable fuer den kompletten Code hinzufuegen 
                txt = strncat( txt, code[a].code, strlen( txt ) + strlen( code[a].code ) ); 
    
                // wenn wir nicht beim letzten Code sind 
                if( a != anzahl-1 ) 
                { 
                    // fuege noch das Trennzeichen ein 
                    txt = strncat( txt, trennzeichen, strlen( txt ) + 1 ); 
                } 
            } 
    
            cout << txt << endl;                // den Code ausgeben 
    
            cout << "\n\n[E] zum Beenden druecken." << endl;    // Hinweis zum Beenden 
            cout << "Eine andere Taste druecken, um an den Anfang zu springen" << endl; 
    
            cin >> k; 
        } while( k != 'E' && k != 'e' );        // Wenn nicht 'E' oder 'e' gedrueckt wurde 
                                                // beginne von vorne 
    
        FILE *file;                                  // Dateihandle 
    
        file = fopen( "d:\\text.txt", "w" );    // Datei oeffnen / erstellen 
    
        if( !file )                                // Wenn das Handle ungueltig ist 
        { 
            // Gebe Hinweis aus und beende 
            cout << "\n\nDie Datei konnte nicht beschrieben werden." << endl; 
            return 0; 
        } 
    
        fwrite( txt, strlen( txt ), 1, file );    // schreibe Code in die Datei 
        fclose( file );                            // schliesse die Datei 
    
        cout << "\n\nDie Datei wurde erstellt!";    // Hinweis ausgeben 
    
        return 0;                                // beenden 
    } 
    //--------------------------------------------------------------------------- 
    
    int fragen( int n ) 
    { 
        char k = ' ';                            // die gedrueckt Taste 
    
        if( n == 0 )                            // die richtige Frage stellen 
        { 
            cout << "1. Wie alt bist du?" << endl; 
            cout << "[1] Zwischen 18 und 25 Jahre" << endl; 
            cout << "[2] Zwischen 25 und 35 Jahre" << endl; 
            cout << "[3] Zwischen 35 und 45 Jahre" << endl; 
            cout << "[4] älter als 45 Jahre" << endl; 
            cout << "[5] Bin mir nicht sicher :P" << endl; 
        } 
    
        else if( n == 1 ) 
        { 
            cout << "2. Wieviele Geschwister hast du?" << endl; 
            cout << "[1] Einen Bruder" << endl; 
            cout << "[2] Eine Schwester" << endl; 
            cout << "[3] Zwei Geschwister" << endl; 
            cout << "[4] Mehr als zwei Geschwister" << endl; 
            cout << "[5] Keine Geschwister" << endl; 
            cout << "[B] zur voherigen Frage zurueckspringen" << endl; 
        } 
    
        do 
        { 
            // lasse solange eine Taste eingeben, bis es eine Taste von 1-5 oder 'B' oder 'b' 
            // war 
            cin >> k; 
    
            // wenn bei der ersten Frage 'B' oder 'b' gedrueckt wurde 
            if( k == 'b' && n == 0 || k == 'B' && n == 0 ) 
            { 
                // nicht gueltig, deshalb setzen wir 'k' auf '0' 
                k = '0'; 
            } 
        } while(    k != '1' && k != '2' && k != '3' && k != '4' && k != '5' && 
                    k != 'B' && k != 'b' && k != 'e' && k != 'E' ); 
    
        if( k == 'e' || k == 'E' ) 
        { 
            return 0; 
        } 
        else if( k == 'B' || k == 'b' )             // wenn 'B' oder 'b' gedrueckt wurde 
        { 
            return -1;                                // gebe -1 zurueck 
        } 
        else                                    // andernfalls 
        { 
            int ascii = int( k ) - 49;                // schreibe den Asciiwert der 
                                                    // gedrueckten Taste in eine Variable 
            code[n].code = alle_codes[n][ascii].code;    // schreibe den Code 
            return 1;                                // gebe 1 zurueck 
        } 
    }
    

    So läuft es stürtzt dann allerdings ab.
    @Tanuka, ein bisschen C++ könntest du ja schon lernen,
    damit du weist wie include anweisungen funktionieren.
    @Aoeke komisch das deine Header Files in deinem
    Projekt verzeichniss sind :

    #include "iostream.h"
    

    Das .h ist nicht mehr nötig und

    using namespace std;
    

    braucht man dann auch. Ich hab dein clscr() oder wie das heißt durch:

    system("cls");
    

    ersetzt.
    Cooles Programm @Aoeke.

    cu max



  • Ja also bei mir stuerzt das mit Dev-Cpp auch ab... In der Zeile mit "strncat(...)" glaube ich... Muss mich mal ein wenig mit Dev-Cpp beschaeftigen, und herausfinden, wie man Haltepunkte setzt etc... Und das mit Headerdateien kommt daher, dass ich mit der Konsole und StandardC++ eigentlich kaum Erfahrungen habe.. Ich beschaeftige mich hauptsaechlich mit der VCL und schreib eigentlich ganz selten bis nie irgendwelche Progs fuer die Konsole... Nur bei dem Programm hier habe ich mir gedacht, kannst ja mal versuchen, ist wieder eine tolle Uebung... 😃
    Naja.. Also ich werde mal noch ein bisschen rumprobieren und dann mal schauen......
    MfG Aoeke



  • Tanuka schrieb:

    Hi C-O-M-M-A-N-D-E-R,

    ich werde hier keine Links oder Aussagen darüber angeben, da wir ziemlichen Wert auf anonymität legen, sorry.

    MfG,

    Tanuka

    aha, sehr merkwürdig 😕



  • lol. wasn Spinner ... Community, die geheim ist und wir sollen aber sein Programm schreiben.

    Willst du auch noch n bissle Geld? Meinen PC? 👎



  • 😕 Komisch, ich dachte immer eine community besteht aus Mitgliedern,
    aber wie wollt ihr ohne Mitglieder existieren?
    Denn wenn ihr geheim seit, werdet ihr kaum Mitglieder finden.

    (Oder ihr seid ein Anonymes Alkoholiker Forum. 😃
    Und ihr braucht das Programm damit es Fragen wie Was ist dein liebstes Alkoholisches Getränk codiert,
    damit es nur eingeweihte Mitglieder Herausfinden können. 😉 )

    @dEUs, falls er deinen PC nicht will, so ist es ja nicht,
    du kannst ihn ja auch an mich "spenden" 😉



  • *g* den willst du garnet 😉

    Naja, wahrscheinlich doch 😃 🙄



  • Vielleicht ist es ja ein Sektenforum?
    Eventuell von:
    ((s****ce*****y)oder den(Z****n J*****s))(Auch wenn die Z****n J*****s))
    Laut meiner Religions Lehrerin gar keine richtige Sekte sind.

    Ich habe natürlich nichts gegen sollche Volksgruppierungen 😉 , jeder
    soll an das Glauben dürfen was er für richtig hält. Ich halte
    aber sollche Gruppierungen nicht für richtig.

    Ich will hier keinen Thread zu dem Thema provuzieren, ich
    frage mich nur warum der "Tanuka" ein Forum erröffnen will
    was keiner kennen darf.

    @dEUs, trotzdem danke für dein Angebot, ich lehne es hiermit
    schriftlich ab.

    cu max



  • lol. wasn Spinner ... Community, die geheim ist und wir sollen aber sein Programm schreiben.

    Willst du auch noch n bissle Geld? Meinen PC?

    Hi dEUs,

    ich weiss ja nicht, was du für ein Problem hast aber,

    1. ist hier nicht die Rede von "sollen", da ich höflich darum gebeten habe, mir dabei zu helfen und

    2. Was spielt es für eine Rolle, wofür ich dieses Programm verwende, solange ich damit nichts illegales anstelle?

    Um nochmal auf unsere Community zu sprechen zu kommen:

    Wir legen nicht ohne Grund wert auf anonymität, da wir eine Gruppierung sind, die von der Öffentlichkeit noch nicht wirklich aktzeptiert wird. Wer allerdings die selben Interessen hat wie wir, wird keine Probleme damit haben, uns im Internet mit Hilfe einer Suchmaschine zu finden. Ich möchte lediglich verhindern, das Leute, die sich nicht ernsthaft für unsere Thematik interessieren fernbleiben, da wir keinen Wert auf Leute legen, die Beleidigungen oder intollerante Aussagen tätigen.

    Mit freundlichen Grüßen,

    Tanuka


Anmelden zum Antworten