Aufgabe für die Schule



  • Hallo Leute
    Ich hab ein kleines Problem. Und zwar hat uns der Lehrer ein kleines Programm vorgeführt, dass wir mehr oder weniger genauso schreiben sollen.
    Hier könnt ihr euch das mal ansehen.
    http://home.versanet.de/~d-hoeppn/MindReader.jpg

    Nun habe ich bisher dieses hier dazu geschrieben, aber ich habe keine Ahnung wie es weitergehen soll. Helf mir bitte. Das ist mein bisheriger Quelltext:

    #include<iostream>
    #include "conioex.h"
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	int i=0;
    	char tabelle[]={'a','b','c','d','e','f'};
    
    	for (i=0; i<=41; i++)
    	{
    		cout<<i<<"\t"<<tabelle[1]<<" ";
    			if (i=9)
    			         cout<< tabelle[2];
    			if (i=18)
    				cout<< tabelle[2];
    			if (i=27)
    				cout<< tabelle[2];
    			if (i=36)
    				cout<< tabelle[2];
    
    	}
    	system("pause");
    	return 0;
    }
    


  • Kann das Bild nicht sehen, aber wenn du versuchen würdest das ganze zu beschreiben, dann würdest du es vielleicht auch besser lösen können.



  • if (i=9)
    

    das bedeutet:

    i = 9;
    if (i)
    

    du willst sicher:

    if (i == 9)
    


  • Also Bild geht jetzt.(war meine Schuld, lag im falschen Ordner)
    Ich erkläre nun mal die Aufgabe aus der Schule. Wir sind gerade bei Feldern/Arrays. Nun sollen wir zeigen das der Computer klüger ist, als der Mensch. Wir sollen ein Programm schreiben das man sich eine Zahl zwischen eins und vierzig aussucht. Wenn man sich zum Beispiel die vierzig raussucht, rechnet man noch 40-4-0=36. 36 deshalb, weil das Ergebnis immer die Quersumme von neun ergeben muss.Bei jedem Durchlauf soll sich hinter der Zahl der Buchstabe ändern, so dass es wirklich aussieht als wäre der Mensch doof. Mein Problem ist nun die Umsetzung.



  • Ich sehe gerade, dass es schon besser ist, wenn ich
    if (i==0)
    schreibe, da es dann keine Endlosschleife ist.



  • Der Trick bei der Aufgabe ist, dass egal welche Zahl du nimmst immer auf ein Feld mit dem gleichen Zeichen kommst. Daher kannst es ganz einfach machen indem du nen 2D-Array verwendest, die Zeichen so platzierst, das dann ausgibst und nach dem Enterdruck einfach "b" ausgibst als gedachte Zahl.
    Sehe nirgends, dass verlangt wird, dass diese Zeichen wechseln soll (sollte das der Fall sein, schau einfach alle Positionen an wo nen b steht und wechsel an der Stelle einheitlich das Zeichen).



  • Hab die Antwort auf deine Frage, oder zumindest eine Lösung, ferner du noch keine hast.

    #include <iostream>
    #include <iomanip>      // Für das Aussehen
    #include <ctime>
    using namespace std;
    
    int main()
    {
        char counter;
        char begin;
        char field[12] = { 'a','b','c','d','e','f','g','h','i','j','k','l'};
        // erst einmal ein paar Buchstaben
        srand(time(NULL)); //entscheidet über den Startpunkt
    
        begin = field[(rand() % 11)];         // Setzt den Startpunkt nach dem Feld von oben.
        counter = begin;                      // begin wird später noch gebraucht.
        begin++;
        cout << setw(40) << "Mindreader" ;
        cout << "\nDu h\x84lst es fuer unm\x94glich. Du wirst staunen und gruebeln\n";
        for(int i = 0;i < 40; i++, counter++)
        {
    		if (counter == begin)
    			counter++;
    		if (counter >= field[11])
    		{
               counter = field[0];
    		}
            cout << i << ":";
            if (i == 1 || (!(i % 9)))
            {
                  cout << setw(3) << begin << "\t\t";
            }
            else
    		{
                cout << setw(3) << counter << "\t\t";
    		}
        }
        cout << "\n\n1. Denke an eine zweistellige Zahl(zum Beispiel: 23)\n";
        cout << "2. Bilde die Quersumme davon(Beispiel: 23 - 2 - 3 = 18).\n";
        cout << "3. Suche in der Liste das Resultat und merke dir das dazugehörige Symbol.\n";
        cout << "4. Konzentriere dich auf dieses Symbol und druecke die Enter - Taste.\n";
    	cin.get();
        cout << "5. Das Symbol lautet: " << begin;
    
        cin.get();
        return 0;
    }
    


  • So und jetzt verratet mir mal wie das funktioniert! Hab es zweimal gemacht und es hat funktioniert! Ich bin irgendwie verwirrt!



  • So der Quelltext sieht suppi aus. ICh werd ihn heut Abend wenn ich von Arbeit komme mal ausprobieren.
    Allerdings hab ich noch ein paar Fragen.
    Wazu benötige ich die Bibliotheken iomanip und ctime?
    Durch was hast du es nun geschafft, dass irgendein Buchstabe aus dem Feld genommen wird?



  • <ctime> -> time(...) - lol wer häts gedacht
    <iomanip> -> setw(...)

    Gruß



  • Also gut halten wir mal fest:
    Es Gibt ein Feld von 12 Buchstaben, welches später über den Anfang vom Programm entscheidet.
    srand(time(NULL)) stellt die Funktion rand() bereit
    begin = field[(rand() % 11)] erstellt eine zufällige Zahl zwischen 0 und 11
    Danach wird ein Counter gesetzt der den Startpunkt von begin hat, begin wird um 1 Inkrementiert d.h. es ist ein Buchstabe höher als vorher.
    cout << setw(40) << "Mindreader";
    erstellt ersteinmal 40 Freizeichen in denen der Nachstehende Text Rechtsbündig eingetragen wird.
    In der For Schleife wird bei jedem Durchlauf counter um ein Buchstabe erhöht,
    i stellt den Zahlenbereich von 0 bis 40 dar.
    Falls der counter gleich dem begin Zeichen ist soll der counter ein Buchstabe höher. Wenn jetzt der counter gleich dem Letzten Buchstaben des Feldes ist wird der counter wieder auf 'a' gesetzt, damit nicht irgendwann einige komische Zeichen auftauchen.
    Grundsätzlich wird counter ausgegeben außer bei den Zahlen 1 und alle Zahlen die Restlos durch 9 teilbar sind.
    Wenn man das richtig durchjeuchtet ist es leicht. 🙂


Anmelden zum Antworten