C :: Aufgabe #14

3 Lösungen Lösungen öffentlich

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:

vote_ok
von devnull (8870 Punkte) - 07.12.2013 um 19:47 Uhr
Quellcode ausblenden C-Code
/* 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;
}
vote_ok
von kathleenw (3600 Punkte) - 09.07.2020 um 10:08 Uhr
Quellcode ausblenden C-Code
#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;
}
vote_ok
von psych0dad (260 Punkte) - 17.11.2020 um 20:07 Uhr
Quellcode ausblenden C-Code
/****************************************************************************
 *                                                                          *
 *   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;   
    
}