C :: Aufgabe #14
3 Lösungen
Zahlen erraten lassen.
Anfänger - C
von zayc_
- 28.12.2012 um 14:08 Uhr
Programmiere ein Programm, welches eine vom User erdachte Zahl (Integer) in einem vom User angegebenen Bereich Erraten soll.
Konsolenausgabe:
Bitte Untergränze angeben: 0
Bitte Obergränze angeben: 100
Bitte geben sie nach jedem versuch R,G oder K an. je nachdem ob
R die Zahl richtig ist
G die gesuchte Zahl grösser ist
K die gesuchte Zahl kleiner ist
1. Versuch: 50.
k
2. Versuch: 25
g
3. Versuch: 37
g
4. versuch: 42
g
5. Versuch: 46
k
6. Versuch: 44
k
7. Versuch: 43
r
Die gesuchte Zahl war also die 43!
Lösungen:
/* guess2.c devnull,07-12-2013 */
#include <stdlib.h>
#include <stdio.h>
/* main */
int main()
{
int lower, upper;
int guess, cguess;
char answer[2];
printf("Bitte Untergrenze angeben: ");
scanf( "%d", &lower );
printf("Bitte Obergrenze angeben : ");
scanf( "%d", &upper );
if (lower >= upper) {
printf("Bereich ungültig!\n");
return 1;
}
printf("Bitte geben sie nach jedem versuch R,G oder K an. je nachdem ob\n" \
"R die Zahl richtig ist\n" \
"G die gesuchte Zahl grösser ist\n" \
"K die gesuchte Zahl kleiner ist\n");
for (cguess=1;;cguess++) {
guess = (upper + lower)/2;
printf("%3d. Versuch: %4d\n", cguess, guess);
scanf("%s", answer);
switch (answer[0]) {
case 'k':
case 'K':
upper = guess;
break;
case 'g':
case 'G':
lower = (upper-guess>1)?guess:guess+1;
break;
case 'r':
case 'R':
lower = upper = guess;
break;
}
if (lower == upper)
break;
}
printf("Die gesuchte Zahl war also die %d!\n", lower);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int berechne_zahl(int zahl1, int zahl2)
{
int ergebnis;
ergebnis = (zahl1+zahl2)/2;
return ergebnis;
}
int main(void)
{
int obergrenze, untergrenze, versuche, zahl;
char eingabe[100];
versuche = 1;
printf("\nBitte denke dir eine Zahl aus und der Computer probiert sie zu erraten.\n\n");
printf("Bitte Untergrenze angeben: ");
scanf("%d", &untergrenze);
fflush(stdin);
printf("Bitte Obergrenze angeben: ");
scanf("%d", &obergrenze);
fflush(stdin);
printf("\nBitte geben sie nach jedem Versuch folgendes ein:\n");
printf("r - die Zahl ist richtig.\n");
printf("g - die gesuchte Zahl ist größer.\n");
printf("k - die gesuchte Zahl ist kleiner.\n\n");
do {
zahl = berechne_zahl(untergrenze,obergrenze);
printf ("%d. Versuch: %d\n", versuche, zahl);
fgets(eingabe,obergrenze,stdin);
printf("Test: %c \n", eingabe[0]);
if (eingabe[0]=='r'){
printf("Die gesuchte Zahl war also die %d! Ich habe %d Versuche gebraucht.\n", zahl, versuche);
}
else if (eingabe[0]=='g'){
untergrenze = zahl;
}
else if (eingabe[0]=='k'){
obergrenze = zahl;
}
else {
printf("Sie haben ein falsches Zeichen eingegeben.\n");
break;
}
versuche++;
}while(eingabe[0]!='r');
return EXIT_SUCCESS;
}
/****************************************************************************
* *
* Linux GCC *
* Programmiere ein Programm, welches eine vom User erdachte Zahl (Integer) *
* in einem vom User angegebenen Bereich Erraten soll. *
* *
****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
/***** FEhler eingabe funktion *****/
void fehler(void){
printf("Eingabefehler!!! Versuchen sie es noch ein mal.\n");
}
int main(void){
int oberg, unterg, check1, check2, wieder=0;
char antwort;
do{
/****** Eingabe der Ober/Untergrenze *****/
do{
printf("Bitte Untergrenze eingeben: ");
do{
check1=scanf("%d", &unterg);
if(check1!=1){
fehler();
printf("Bitte Untergrenze eingeben: ");
}
} while(getchar()!='\n');
printf("Bitte Obergrenze eingeben: ");
do{
check2=scanf("%d", &oberg);
if(check2!=1){
fehler();
printf("Bitte Obergrenze eingeben: ");
}
} while(getchar()!='\n');
if(unterg>=oberg){
fehler();
printf("\n");
}
} while(unterg>=oberg);
/***** Ausdruck, Spielanleitung *****/
printf("\n\nBitte geben sie nach jedem Versuch R, G oder K. Je nachdem ob\n");
printf("R die Zahl richtig ist\n");
printf("G die Zahl Groesser ist\n");
printf("K die Zahl Kleiner ist\n\n");
int versuch=0, zahl=0, gewonnen=0;
do{
++versuch;
zahl=(unterg+oberg)/2;
printf("%d. Versuch: %d\n", versuch, zahl);
scanf("%c%*c", &antwort);
switch(antwort){
case 'G':
case 'g': unterg=zahl; break;
case 'K':
case 'k': oberg=zahl; break;
case 'J':
case 'j': printf("Erraten\n"); gewonnen=1; break;
default: printf("Bitte verwenden sie nur die Buchstaben R, G und J\n");
versuch--;
}
} while(gewonnen==0);
printf("Diene Nummer lautet: %d\n", zahl);
printf("Wollen sie noch ein Spiel? J(a)/N(ein): ");
scanf("%c%*c", &antwort);
if(antwort=='j'){
wieder=1;
printf("\n\n---NUE GAME---\n\n");
}
else if(antwort=='J'){
wieder=1;
printf("\n\n---NUE GAME---\n\n");
}
else
wieder=0;
} while(wieder==1);
printf("\n\n---GAME OVER---\n\n");
return EXIT_SUCCESS;
}
