# Hilfe gesucht beim C++ Programmieren



## nekyl (30. Oktober 2007)

Hallo Leute! ich bin ein newbie in C++ und komme ich einfach nicht mehr weiter voran mit den Sachen(Übungen), wo ich unten hingefügt habe. Freue mich auf jede Hilfe und Tipps!
Vielen Dank im Voraus! 

Legende 
Legen Sie alle Programme so aus, dass der Benutzer die geforderten Berechnungen beliebig oft durchführen kann, ohne das Programm jedes mal neu zu starten. Anspruchsvollere Aufgaben sind mit einem Stern (*) gekennzeichnet. 

*Aufgabe 3a.1 *
(*) Rechnen Sie eine von der Benutzerin einzugebende natürliche Zahl n in die entsprechende Darstellung in römischer Schreibweise um.  

Dabei sind folgende Regeln zu beachten: 

Die möglichen Zahlzeichen sind I (1), V (5), X (10), L (50), C (100), D (500) und M (1000). 

Grundsätzlich wird der Wert einer römischen Zahl durch die Addition der Werte der einzelnen Zahlzeichen, die absteigend sortiert angeschrieben werden, berechnet. Etwa MCCLVI = 1256. 

Dabei ist es aber nicht erlaubt, das gleiche Zahlzeichen öfter als dreimal hintereinander zu verwenden. Statt dessen dürfen die Zeichen I,X und C jeweils den beiden nächstgrößeren Zeichen vorangestellt werden, um eine Subtraktion der Werte darzustellen. 

Also z.B. IV für 4 (statt IIII) und XC für 90. Nicht aber VX, da V nicht vor einem höherwertigen Zeichen auftreten darf, und nicht XD, da X nur vor L und C (den beiden nächstgrößeren Zeichen) verwendet werden darf. 

Es ist weiters nicht erlaubt, zwei oder mehrere gleiche niederwertigere Zeichen vor einem höherwertigen Zeichen zu verwenden. So ist etwa IIX nicht zur Darstellung des Werts 8 verwendbar. Und nach einem Zeichen dürfen nicht mehrere höherwertige Zeichen auftreten. Also ist XIXX nicht erlaubt, sondern muss als XXIX notiert werden. Ebenso ist IXV verboten und ist korrekt als XIV anzuschreiben. 

Durch konsequente Anwendung dieser Regeln lassen sich alle Zahlen im Bereich von 1 bis 3999 in römischen Ziffern darstellen. Schreiben Sie ein Programm, das prüft, ob eine eingegebene Zahl n im erlaubten Bereich liegt und die Zahl gegebenenfalls in die Darstellung in römischen Ziffern umrechnet. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.2 *
Schreiben Sie ein Programm, das den Spielplan für ein Turnier, bei dem jede(r) gegen jede antritt, für eine von der Benutzerin einzugebende Anzahl n von Spielern erstellt. Falls n ungerade ist, muss in jeder Runde genau ein Spieler pausieren, andernfalls müssen alle Spieler in jeder Runde ein Spiel absolvieren. (Diese Bedingung garantiert die Abwicklung des Turniers in der minimal nötigen Anzahl von n-1 Runden, falls die Anzahl der Spieler gerade ist, bzw. n Runden sonst).  

Das einfachste Verfahren, um einen solchen Spielplan zu erstellen, geht folgendermaßen vor: 

Ist die Anzahl der Spieler ungerade, so wird ein zusätzlicher 'virtueller' Spieler eingeführt. Jener Spieler, der in einer Runde gegen diesen virtuellen Spieler antreten müsste, ist derjenige, der in der entsprechenden Runde aussetzen muss. Die Spieler werden in zwei Gruppen aufgeteilt, die untereinander notiert werden.  

Zum Beispiel für 7 Spieler: 

1 2 3 4
8 7 6 5 
8 ist hier der zusätzliche virtuelle Spieler. Die Paarungen der ersten Runde ergeben sich aus den untereinander stehenden Spielern. 
Also in unserem Beispiel 2-7, 3-6 und 4-5. Spieler 1 pausiert. 

Für die nächste Runde werden alle Einträge außer dem ersten zyklisch rotiert. Es ergibt sich die nächste Aufstellung: 

1 3 4 5
2 8 7 6 
Ergibt die Paarungen 1-2, 4-7 und 5-6. Spieler 3 pausiert. 

Der Schritt wird wiederholt, bis n-1 Runden festgelegt sind: 

1 4 5 6
3 2 8 7 
Paarungen 1-3, 4-2, 6-7. Spieler 5 pausiert. 

1 5 6 7
4 3 2 8 
Paarungen 1-4, 5-3, 6-2. Spieler 7 pausiert. 

1 6 7 8
5 4 3 2 
Paarungen 1-5, 6-4, 7-3. Spieler 2 pausiert. 

1 7 8 2
6 5 4 3 
Paarungen 1-6, 7-5, 2-3. Spieler 4 pausiert. 

1 8 2 3
7 6 5 4 
Paarungen 1-7, 2-5, 3-4. Spieler 6 pausiert. 

Das Verfahren ist zu Ende, da bereits 7 Runden festgelegt wurden. (Die nächste zyklische Verschiebung würde wieder den Ausgangszustand herstellen.) 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.3 *
Schreiben Sie ein Programm, das eine von Ihnen ausgedachte, natürliche Zahl im Bereich von 1 bis 100 errät. Das Programm versucht die Zahl zu raten. Stimmt die geratene Zahl mit Ihrer überein, so ist das Spiel beendet. Andernfalls teilen Sie dem Programm mit, ob die geratene Zahl größer oder kleiner als die ausgedachte Zahl ist. Das Programm führt einen neuen Rateversuch durch usw. 

Überlegen Sie sich eine Ratestrategie, mit der das Programm möglichst wenige Versuche braucht, um die Zahl zu erraten. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.4 *
(*) Schreiben Sie ein Programm, das Paare von befreundeten Zahlen bestimmt. Befreundete Zahlen (amicable numbers) sind solche, für die die Summe der echten Teiler der ersten Zahl die zweite Zahl ergibt und vice versa. (Ein echter Teiler einer Zahl ist ein Teiler, der kleiner als die Zahl selbst ist.) 

Beispiel: 
12 hat 1,2,3,4 und 6 als echte Teiler. Die Summe ist 16. Die Teiler von 16 sind 1,2,4,8. Die Summe ist 15. Also sind 12 und 16 nicht befreundet. 

5020=2^2*5*251 hat die Teiler 1,2,4,5,10,20,251,502,1004,1255,2510 und 5564=2^2*13*107 hat die Teiler 1,2,4,13,26,52,107,214,428,1391,2782. Also bilden 5020 und 5564 ein befreundetes Paar. 

Anmerkung: Es ist nicht bekannt, ob unendlich viele Paare von befreundeten Zahlen existieren. Ihr Programm wird in jedem Fall nicht alle Paare bestimmen können. Überlegen Sie sich ein geeignetes Kriterium, um in Ihrem Programm die Suche abzubrechen. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.5 *
Schreiben Sie ein Programm, das Primzahlenpaare bestimmt. Ein Primzahlenpaar besteht aus zwei natürlichen Zahlen n und n+2, die beide Primzahlen sind. Zum Beispiel 5 und 7 oder 11 und 13. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.6 *
Schreiben Sie ein Programm, das eine Nullstelle eines Polynoms vom (maximalen) Grad 4 bestimmt. Die Benutzerin gibt die 5 Koeffizienten ein und ein Intervall, in dem eine Nullstelle gesucht werden soll. Die Intervallgrenzen müssen von der Benutzerin so vorgegeben werden, dass der Wert des Polynoms an einer Grenze positiv und an der anderen Grenze negativ ist. Andernfalls wird vom Programm eine Fehlermeldung ausgegeben. 

Zur Bestimmung der Nullstelle soll das Programm den einfachen Algorithmus der Bisektion verwenden. Das heißt, das Intervall wird in der Mitte geteilt. Der Wert des Polynoms in der Intervallmitte wird berechnet. Ist dieser Wert hinreichend genau bei 0 (bei Berechnungen mit double Werten ist aufgrund der zu erwartenden Rechenfehler das exakte Ergebnis 0 nicht zu erwarten), dann kann der Intervallmittelpunkt als Lösung ausgegeben werden. Andernfalls bildet der Intervallmittelpunkt mit jener Intervallgrenze, an der der Wert des Polynoms ein anderes Vorzeichen hat, ein neues Intervall, für welches der Vorgang wiederholt werden kann.  

Um pathologische Fälle auszuschließen, empfiehlt es sich, das Programm auch zu beenden, wenn das Intervall eine bestimmte Minimallänge unterschreitet. In diesem Fall kann das Programm ausgeben, dass keine Lösung ermittelt werden konnte. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.7 *
Die Mandelbrot-Menge (deren graphische Darstellung auch unter der Bezeichnung 'Apfelmännchen' sehr populär wurde) ist definiert als jene Menge von komplexen Zahlen c, für die die Folge xn+1=xn2+c mit Startwert x0=0 beschränkt bleibt (das heißt, für alle Werte von n immer einen endlichen Wert ergibt). 

Schreiben Sie ein Programm, das komplexe Zahlen einliest und bestimmt, ob sie zur Mandelbrot-Menge gehören. Verwenden Sie dazu die bekannte Tatsache, dass die Folge divergiert (also nicht beschränkt ist), sobald der Absolutbetrag eines Folgegliedes den Wert 2 überschreitet. Sobald dieser Fall eintritt, gehört also der entsprechende Wert c nicht zur Mandelbrot Menge. Umgekehrt kann es sein, dass die Folge erst sehr spät über alle Schranken wächst, das Programm kann aber nicht alle möglichen (unendlich vielen) Folgeglieder prüfen. Sie dürfen daher eine Zahl c bereits als zur Mandelbrot-Menge gehörig betrachten, wenn die ersten 100.000 Iterationen der Folge keinen Wert mit einem Absolutbetrag größer 2 ergeben. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.8 *
]Schreiben Sie ein Programm, das Würfe beim Würfelpoker bewertet. Das Programm simuliert einen Wurf mit fünf Würfeln und zeigt die Würfelwerte am Bildschirm an. Außerdem ermittelt es, ob die geworfene Kombination eine der vier möglichen Figuren (Straße, Full House, Poker und Grande) ist und gibt das gegebenenfalls aus. 

Beispiel für eine mögliche Programmausgabe (Benutzereingaben sind mit <> markiert): 

1. Wurf:

König Bube Neun As 10

Wollen Sie nochmals werfen? <j>

2. Wurf:

Dame Bub Dame Dame Bub  Full House!

Wollen Sie nochmals Werfen? <n> 
Um die geworfenen Würfelwerte zufällig zu ermitteln, können Sie die Funktion int rand() verwenden, die eine ganze Zahl im Intervall [0,RAND_MAX] definiert, wobei RAND_MAX eine im System vordefinierte Größe ist, die Sie in Ihrem Programm verwenden können. Wird rand() öfters aufgerufen, so erhält man eine Folge von Zahlen, die in dem Intervall gleichverteilt sind. Allerdings wird mit jedem Start Ihres Programms immer wieder die gleiche Folge von Zahlen erzeugt. Um eine andere Zahlenfolge zu erreichen, kann vor dem ersten Aufruf ein Startwert mit Hilfe der Funktion void srand(unsigned int seed) festgelegt werden. srand() erwartet eine positive ganze Zahl als Parameter, die einen Startwert für die Folge (und damit die gesamte Folge), die von rand() erzeugt wird, festlegt. Will man von Programmlauf zu Programmlauf unterschiedliche Folgen verwenden, dann darf srand() daher nicht mit einem konstanten Wert aufgerufen werden. Man kann nun entweder den Benutzer am Anfang einen beliebigen Wert eingeben lassen, oder man verwendet z.B. die Systemzeit als Parameter, die von Programmaufruf zu Programmaufruf unterschiedlich sein sollte. Der Aufruf srand(time(0)) liefert das Gewünschte. (Die Funktion time retourniert zwar keinen int Wert, sondern einen Wert vom Datentyp time_t, dieser ist aber in praktisch allen C++ Implementierungen mit int verträglich, so dass es zu keinen Problemen kommt.) 

Der Programmteil zur Generierung eines zufälligen Würfelwerts könnte also so aussehen: 

main() {
  srand(time(0);

  //Erzeugen eines zufälligen Würfelwerts im Intervall [1,6]
  int wert;
  do {
    wert=int(rand()/double(RAND_MAX)*6+1);
  } while (wert>=7);
} 
Weitere Informationen zu den Funktionen rand, srand und time können Sie mit Hilfe des man Befehls (man rand, man srand, man -s2 time) erhalten. Für Informationen zur Funktion time ist die zusätzliche Option -s2 nötig, da es mehrere verschiedene time Befehle gibt und -s2 die hier verwendete Funktion auswählt. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.9 *
Zur (annähernden) Bestimmung von Pi kann man folgendes statistische Verfahren verwenden (Monte Carlo Methode):  
Man wählt zufällig Punkte im zweidimensionalen Raum, deren x und y Koordinaten jeweils im Intervall [-1,+1] liegen, also Punkte innerhalb eines Quadrats mit Seitenlänge 2 mit dem Ursprung als Mittelpunkt. Für jeden Punkt ermittelt man, ob dieser auch im Einheitskreis um den Ursprung liegt. Dies ist der Fall, wenn x2+y2<=1 gilt. Der Quotient aus der Anzahl der Punkte, die im Kreis liegen durch die Anzahl aller generierten Punkte sollte nun für eine große Anzahl von betrachteten Punkten das Verhältnis der beiden Flächen widerspiegeln. Da die Fläche des Quadrats vier Flächeneinheiten beträgt, und die Fläche des Kreises r2*Pi=Pi Flächeneinheiten, sollte sich der betrachtete Quotient an Pi/4 annähern. 

Schreiben Sie ein Programm, das auf diese Weise den Wert von Pi mit 100000 zufällig gewählten Punkten approximiert. Für Erläuterungen zur Erzeugung von zufälligen Zahlen lesen Sie bitte die Beschreibung der Funktionen rand() und srand() in Aufgabe 8. Um den von rand() gelieferten Wert im Intervall [0,RAND_MAX] auf das gewünschte Intervall [-1,+1] abzubilden, kann folgender Ausdruck verwendet werden: 

rand()/double(RAND_MAX)*2-1;(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.10 *
In der Schule wurde vor der allgemeinen Verfügbarkeit von Taschenrechnern folgender Algorithmus zur Bestimmung der Quadratwurzel einer Zahl unterrichtet: 

Die Zahl, deren Quadratwurzel ermittelt werden soll, wird vom Kommapunkt ausgehend nach links (Vorkommabereich) und rechts (Nachkommabereich) in Zweiergruppen aufgeteilt (eventuell muss mit führenden bzw. nachfolgenden Nullen aufgefüllt werden). 

Danach wird die größte (einstellige) Zahl gesucht, deren Quadrat noch kleiner als das am weitesten links stehende (erste) Paar ist. Diese Zahl ist die erste Ziffer der Lösung. Das Quadrat dieser ersten Ziffer wird vom ersten Paar subtrahiert und das zweite Paar an das Ergebnis der Subtraktion gehängt. Diese Operation ergibt den aktuellen Rest. Die nächste Ziffer der gesuchten Wurzel ist die größte Zahl, für die die Ungleichung (20*bisher ermittelter Wert+nächste Ziffer)*nächste Ziffer <= Rest erfüllt ist. Sobald diese Ziffer bestimmt ist, kann der nächste Rest durch die Subtraktion der linken Seite der Ungleichung von der rechten Seite und das Anhängen der nächsten Zweiergruppe gefunden werden. Das Verfahren endet, wenn der Rest 0 bzw. die erforderliche Rechengenauigkeit (gewünschte Anzahl der Nachkommastellen) erreicht ist. 

Der Dezimalpunkt ist in der erhaltenen Ziffernfolge so zu setzen, dass das Ergebnis genau halb so viele (aufgerundet) Vorkommastellen hat, wie die ursprüngliche Zahl. 

Beispiel: 

123.4

Einteilung in Zweiergruppen:

01¦23.40     größter möglicher Wert, sodass x*x kleiner als 01 ist, ist 1. Damit ist die erste Ziffer des Resultats 1.

-1           Quadrat der ersten Ziffer abziehen
___
0 23         Das nächste Paar wird an 0 angehängt. Suche nach maximalem x, so dass (20*1+x)*x<23 ergibt x=1  als zweite Ziffer.
  -21         (20*1+1)*1 abziehen
____
   2 40	     Suche nach maximalem x, so dass (20*11+x)*x<240 ergibt x=1 als dritte Ziffer
  -221
_______
    19 00    Suche nach maximalem x, so dass (20*111+x)*x<1900 ergibt x=0 als vierte Ziffer
    19 00 00 Suche nach maximalem x, so dass (20*1110+x)*x<190000 ergibt x=8 als fünfte Ziffer

Wir erhalten also als Ergebnis 11.108 (auf drei Dezimalstellen genau) 
Schreiben Sie ein Programm, das eine positive reelle Zahl einliest und mittels des oben beschriebenen Algorithmus die positive Quadratwurzel dieser Zahl auf zwei Dezimalstellen genau ermittelt und ausgibt. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.11 *
Berechnung der Wurzel einer Zahl x nach der Methode von Heron. 

Es wird zunächst eine Lösung l0 geraten. (Diese kann recht ungenau sein, so dass man zum Beispiel einfach x/2 verwenden kann.) Danach werden nach der Formel ln+1=1/2*(ln+x/ln) schrittweise immer bessere Lösungen li berechnet, bis die gewünschte Genauigkeit erreicht ist. 

Schreiben Sie ein Programm, das mit diesem Algorithmus die positive Quadratwurzel einer eingelesenen positiven reellen Zahl ermittelt und ausgibt. 

(Anmerkung: Diese Methode ergibt sich auch aus dem Newtonschen Näherungsverfahren zur Bestimmung von Nullstellen beliebiger (differenzierbarer) Funktionen als Sonderfall, wurde aber schon lange vor Newtons Lebzeiten eingesetzt.) 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.12 *
Als Wechselquersumme einer Zahl bezeichnet man den Wert, den man erhält, wenn man die Ziffern der Zahl abwechselnd addiert und subtrahiert. (Dabei ist es egal, von welcher Seite man ausgeht, das Ergebnis kann sich höchstens im Vorzeichen unterscheiden). 

zum Beispiel:  
1234 Wechselquersumme ist 4-3+2-1 = 2 (bzw. -2, falls von der anderen Seite begonnen wird). 
Als Segment einer Zahl bezeichnen wir eine beliebige zusammenhängende Teilfolge der Ziffern der Zahl. 

zum Beispiel:  
123 hat die Segmente 123, 12, 23, 1, 2 und 3. 
Erstellen Sie ein Programm, das ein Segment einer eingegebenen Zahl n ermittelt, dessen Wechselquersumme (verglichen mit den Wechselquersummen aller anderen möglichen Segmente der Zahl) minimal ist. 

zum Beispiel:  
die Wechselquersummen der Segmente von 123 sind 2 1 1 1 2 3. 
Mögliche Ergebnisse des Programms wären also 12, 23 und 1.  
(Das Programm braucht nur eines der Segmente mit minimaler Wechselquersumme zu finden. Es ist nicht nötig, alle in Frage kommenden Segmente zu ermitteln!) 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.13 *
Bildet man für eine natürliche Zahl n das Produkt ihrer Ziffern und führt die gleiche Operation wiederholt immer wieder auf das letzte Resultat aus, bis man eine einstellige Zahl erhält, so bezeichnet man die Anzahl der notwendigen Schritte als die 'multiplikative Beharrlichkeit' der Ausgangszahl n. 

Beispiel: 
27 ? 14 ? 4 ergibt die multiplikative Beharrlichkeit 2 für den Wert 27. 

Schreiben Sie ein Programm, das die Gültigkeit des folgenden Satzes prüft, indem einfach alle möglichen Werte durchprobiert werden: 
Es gibt keine Zahl kleiner als 1050, deren multiplikative Beharrlichkeit größer als 11 ist. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.14 *
Schreiben Sie ein Programm, das es zwei Personen ermöglicht, das Spiel 'Hangman' zu spielen. Die erste Person gibt ein geheimes Wort mit höchstens 79 Zeichen ein, das vom Computer gespeichert wird (um den Inhalt des Bildschirms nach der Eingabe zu löschen, so dass die zweite Person das eingegebene Wort nicht lesen kann, können Sie den Befehl system("clear") innerhalb Ihres Programms verwenden. Die Alternative, die eingegebenen Buchstaben, ähnlich wie bei der Eingabe eines Passworts, erst gar nicht am Bildschirm anzuzeigen, ist mit den C++ Standardroutinen zur Ein- und Ausgabe nicht möglich und würde zusätzlichen Programmieraufwand benötigen.) 

Dann erhält die zweite Person die Gelegenheit, einen Buchstaben zu wählen. Das Programm zeigt die korrekt getroffenen Buchstaben an und lässt dem Spieler zwei Versuche, das Wort zu erraten. Danach kann wieder ein Buchstabe gewählt werden usw. 

Mögliche Ausgabe des Programms (Benutzereingaben sind mit <> markiert) 

Bitte geben Sie ein geheimes Wort ein: <lehen>  //Hier sollte der Bildschirminhalt jetzt gelöscht werden

Bitte wählen Sie einen Buchstaben: <e>

-e-e-

1. Versuch: <lesen>         falsch
2. Versuch: <leben>         falsch

Bitte wählen Sie einen Buchstaben: <l>

le-e-

1. Versuch: <leser>          falsch
2. Versuch: <lehen>          korrekt 
Anmerkung: Dieses Beispiel ist mit einem Stern gekennzeichnet, weil zur Lösung Kenntnisse über Felder (Arrays) nötig sind, die in der Vorlesung bisher noch nicht vermittelt wurden. 
(erlaubt: *.C,*.cc,*.cpp) 
*Aufgabe 3a.15 *
(*) Wie Aufgabe 2, allerdings soll das Programm für ein Fußballturnier verwendet werden. Die Namen der Teams werden am Beginn eingegeben und sollen im Spielplan anstatt der Nummern verwendet werden. Nach Ende jeder Runde werden die Spielergebnisse eingelesen und am Ende des Turniers soll eine Reihung der Teams ausgegeben werden. Dabei ist das übliche System zu verwenden, in welchem ein Sieg mit 2 Punkten belohnt wird, ein Unentschieden mit einem Punkt. Bei Punktegleichstand soll das Team mit der besseren Tordifferenz vorgereiht werden. Ist auch die Tordifferenz gleich, so entscheidet das Ergebnis der direkten Begegnung. Wurde diese Begegnung unentschieden ausgetragen, so belegen beide Teams den gleichen Platz. 

Anmerkung: Dieses Beispiel ist mit einem Stern gekennzeichnet, weil zur Lösung Kenntnisse über Felder (Arrays) nötig sind, die in der Vorlesung bisher noch nicht vermittelt wurden. 
(erlaubt: *.C,*.cc,*.cpp)


----------



## MiMi (30. Oktober 2007)

Ja ich wuerd sagen fang oben an, und schreib uns mal was du schon versuchst hast, und wo du net weiterkommst. Weil ohne initiative wird dir hier wohl kaum einer helfen.


----------



## zerix (30. Oktober 2007)

Hallo,

also ich Helfe eigentlich gerne, aber ich finde es etwas dreist, wenn man einfach mal alle Aufgaben postet und auf Hilfe hofft, ohne mal selbst Initiative zu zeigen.

Ich würde vorschlagen, dass du mal anfängst und wenn du dann bei einer Aufgaben Probleme hast, dass du dich dann nochmal meldest.

MFG

zEriX


----------



## Teambeta (30. Oktober 2007)

zerix hat gesagt.:


> Hallo,
> 
> also ich Helfe eigentlich gerne, aber ich finde es etwas dreist, wenn man einfach mal alle Aufgaben postet und auf Hilfe hofft, ohne mal selbst Initiative zu zeigen.
> 
> ...



Empfinde ich genauso.

Es bringt dir nichts, wenn wir dir deine Aufgaben, auch noch in Rohform, lösen.


----------



## nekyl (31. Oktober 2007)

Hallo Leute! habe versucht die Aufgabe3a.3 zu lösen und zwar ein Programm geschrieben. Das sollte man unten sehen. Aber da tritt ein Problem auf. Wenn der Anwender falsche Angaben macht also, lügt, soll das Programm auf dem Boldschirm erscheinen lassen"Sie lügen!" . aber es tut nix. Also wenn ich falsche Antwort gebe, fragt es einfach weiter die selbe Frage! Wo liegt das Problem, Mensch?! 

Code:

#include <iostream>
using namespace std;

int main(){

  int min, max;
  int x=195;
  int n=80;
  int count=0;
  char janein;
  bool erraten = false;
   cout << "Wo beginnt die Zahlenreihe?: ";
   cin >> min;
   cout << "Wo endet die Zahlenreihe?: ";
   cin >> max;
  while (erraten == false) {
    count++;
    x=(min+max)/2;

    cout << "Hast du an die Zahl " << x << " gedacht? (j/n) : ";
    cin >> janein;
    if(janein == 'j') erraten = true;
    else {

      cout<< "Ist die Zahl kleiner als " << x << "? (j/n) : ";
      cin >> janein;
      if(janein == 'j') {
        max=x;
      } else {
        min=x;

	    if(min+1 >= max){
            cout << "Du lügst!\n";
            break;
        }
      }
    }
  }
  cout<< "Die Zahl ist " << x << "\n";
  cout<< "Es wurden " << count << " Versuche gebraucht, um die Zahl zu erraten \n";
}


----------



## Siri_ (1. November 2007)

_
Schöne Angaben.. Uni Wien lässt grüßen, hm, nekyl? ; )
_


----------



## deepthroat (1. November 2007)

Hi.





nekyl hat gesagt.:


> ```
> cout<< "Ist die Zahl kleiner als " << x << "? (j/n) : ";
> cin >> janein;
> if(janein == 'j') {
> ...


Du testest hier nur ob es eine Lüge ist, wenn die Frage mit nein beantwortet wurde. Du solltest immer prüfen ob min <= max ist.

Gruß

PS: Bitte verwende für Quellcode die entsprechenden Code Tags!


----------



## nekyl (1. November 2007)

deepthroat hat gesagt.:


> Hi.
> Du testest hier nur ob es eine Lüge ist, wenn die Frage mit nein beantwortet wurde. Du solltest immer prüfen ob min <= max ist.
> 
> Gruß
> ...


Danke für den Tip. Aber die Frage ist wie verwende ich die entsprechende Code Tags?!  ich habe heute ganzen tag versucht, es zu korrigieren, kommt nix raus. bin jetzt nur noch mehr verwirrter geworden.


----------

