Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Nummern-Ratespiel (Simulationen)

Schreiben Sie ein Programm, bei dem die Anwenderin (Spielerin) eine ganze Zahl zwischen 1 und 100 erraten muss. Dabei gibt das Programm immer nur aus, ob die gesuchte Zahl größer oder kleiner als der letzte Versuch ist. Schreiben Sie vorab ein Unterprogramm, das eine (Pseudo-)Zufallszahl zwischen 1 und 100 erzeugt (siehe Kongruenzmethode). Diese Zufallszahl darf der Spielerin natürlich während des Ratens nicht angezeigt werden.

Zusatzaufgabe: Schreiben Sie auch die Umkehrung. Das Programm soll diejenige Zahl raten, die Sie sich als Spielerin oder Spieler vorab gemerkt hatten.

2 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (2)

____ 12. Juni 2013 09:09   reply report
Zwischenzeitlich ist mir ein Kommentar aufgefallen

/* 8=======================D <- Penis :D */

können Sie mir diesen erklären?
mattias 11. Juni 2013 16:16   reply report
Kompliment!!
Extrem gute Lösung Herr Pliska! Sie haben wahrscheinlich einen IQ von mindestens 180 Punkten.

8 Lösung(en)

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int eingabe;
        int zufallszahl = (int) ( Math.random() * 100 + 1 );
        Scanner sc = new Scanner( System.in );

        do {
            System.out.print( "Ihr Tipp: " );
            eingabe = sc.nextInt();
          
            if ( eingabe > zufallszahl )
                System.out.println( "Zu gross" );
            else if ( eingabe < zufallszahl )
                System.out.println( "Zu klein" );
            else
                System.out.println( "Jawohl, " + zufallszahl + " !" );
        } while ( eingabe != zufallszahl );
    }
}

                
import static utility.Einlesen.*;
/*------------------------*/
/*      Zusatzaufgabe     */
/*------------------------*/


/* Kopieren != Kapieren */
public class Main {

	public static void main(String[] args) {
		new Main().top();

	}

	int oberezahl = 101;
	int unterezahl = 1;
	int mittelwert = 0;
	String antwort = "";
	int i = 0;

	void top() {

		while (!antwort.equals("ja")) {
			i++;
			zahlraten();
			System.out.println(mittelwert);
			pruefen();
			if (antwort.equals("nein")) {
				zahlen();
			}
		}
		if (i == 1) {
			System.out
					.println("Der Computer brauchte nur einen Versuch um deine Zahl zu erraten!");
		} else {
			System.out.println("Der Computer brauchte " + i
					+ " Versuche um deine Zahl zu erraten.");
		}
	}

	public void pruefen() {
		antwort = einlesenString("Ist die geratene Zahl richtig? [ja/nein]");
		if (!antwort.equals("ja") && !antwort.equals("nein")) {
			System.out.println("Nur 'ja' oder 'nein' eingeben!");
			pruefen();
		}
	}

	public void zahlraten() {
		if (i > 1) {
			mittelwert = (oberezahl + unterezahl) / 2;
		}
		if (i == 1) {
			mittelwert = (int) (Math.random() * 100 + 1);
		}
	}

	String hoehe;

	public void zahlen() {
		hoehe = einlesenString("Ist Ihre Zahl hoeher oder tiefer? [h/t]");
		if (!hoehe.equals("t") && !hoehe.equals("h")) {
			System.out.println("Nur 't' oder 'h' eingeben!");
			zahlen();
		}
		if (hoehe.equals("h")) {
			unterezahl = mittelwert;
		}
		if (hoehe.equals("t")) {
			oberezahl = mittelwert;
		}
	}
} 
                

Lösung von: Mattias Pliska (Credit Suisse)

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main()
{
	int iZahl;
	int iZufall;

	//Zufallszahl generieren
	srand(time(NULL));
	iZufall = rand() % 99 + 1;

	do {
		//Die Zahl abfragen
		system("cls");
		printf("Bitte geben sie eine Ratezahl ein: ");
		scanf("%i", &iZahl);
		fflush(stdin);

		//Prüfen ob die eingegebene Zahl kleiner oder grösser ist
		if(iZahl > iZufall) {
			system("cls");
			printf("Ihre Zahl ist groesser als die geheime Zahl!");

			getchar();
		} else if(iZahl < iZufall) {
			system("cls");
			printf("Ihre Zahl ist kleiner als die geheime Zahl!");

			getchar();
		}

		//Geht raus wenn die Zahlen gleich sind
	} while(iZahl != iZufall);

	system("cls");
	printf("Die Zahl %i ist richtig!", iZahl);

	getchar();
	return 0;
}

                

Lösung von: Elias Zech (Optics Balzers)

/*******************\
| BASIS-AUFGABE:    |
| userin errät zahl |
\*******************/

let
  // die zu erratende zahl
  solution = Math.floor(Math.random() * 101 + 1),
  // geratene zahl der userin
  guess = prompt('Gib eine Zahl zwischen 1 und 100 ein:');

while (guess != solution) {
  if (guess > solution) guess = prompt(`Meine Zahl ist kleiner als ${guess}`);
  else guess = prompt(`Meine Zahl ist größer als ${guess}`);
}

alert(`Jepp! Meine Zahl ist ${solution}.`);
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

/********************************\
| ZUSATZ-AUFGABE:                |
| computer errät zahl der userin |
\********************************/

let min = 1,
    max = 101,
    guess = 50;

// eingabemaske
document.write(`
    <div id="field">
      <p id="display">Denke dir eine Zahl zwischen 1 und 100.<br>Ist deine Zahl <b>${guess}</b>?</p>
      <button onclick="checkMyGuess(-1)">Kleiner.</button>
      <button onclick="checkMyGuess(1)">Größer.</button>
      <button onclick="checkMyGuess(0)">Ja, stimmt!</button>
    </div>
`);
let display = document.getElementById('display');

// im grunde eine binärsuche
function checkMyGuess(inp) {
  switch (inp) {
    case -1: max = guess; break;
    case 1:  min = guess; break;
    case 0:
      alert("Wusst ich's doch!");
      document.getElementById('field').remove();
  }
  guess = Math.floor(min + Math.ceil(max - min) / 2);
  display.innerHTML = (`Ist deine Zahl <b>${guess}</b>?`);
}
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

import java.util.Random;
import java.util.Scanner;

public class RateSpiel {

	public static void main(String[] args) {
		int min = 1;
		int max = 100;

		Random random = new Random();
		
		int value = random.nextInt(max + min) +min;
		
		System.out.println(value);
		
		int zahl;
		
		do {
		System.out.println("Gebe eine Zahl ein.");
        Scanner sc = new Scanner(System.in);
        zahl = sc.nextInt();
        System.out.println(zahl);
        
        if(zahl > value) {
        	System.out.println("Deine Zahl ist zu gross.");	
      
        } 
        else if (zahl < value) {
        	System.out.println("Deine Zahl ist zu klein.");
        }
        else {
        	System.out.println("Du hast die Zahl erraten.");
        }
        	
		} while (zahl != value);
      
	}

}

                

Lösung von: Name nicht veröffentlicht

// NET 6.x | C# 10.x | VS-2022
var min = 1;
var max = 100;
var maxAttempts = Math.Ceiling(Math.Log(max, 2));
Console.WriteLine($"Denke Dir eine Zahl zwischen {min} und {max}.");
Console.WriteLine($"Ich brauche maximal {maxAttempts} Versuche. :)");
var guess = 0;
var attempts = 1;
while(min <= max) {
    guess = (min + max) / 2;
    Console.WriteLine($"Ist es die Zahl {guess}?");
    Console.Write("(g)rößer/(k)leiner/(j)a: ");
    var read = (Console.ReadLine()??"").ToLower()[0];
    if (read == 'g') min = guess + 1;
    else if (read == 'k') max = guess - 1;
    else if (read == 'j') { Console.WriteLine($"Erraten! {attempts} Versuch(e)."); break; }
    else { Console.WriteLine("Falsche Eingabe! (g/k/j)"); continue; }
    attempts++;
}
if (min > max || attempts > maxAttempts) Console.WriteLine("Da hat wohl jemand geschummelt?!");
else Console.WriteLine($"Die gesuchte Zahl lautet: {guess}");
                

Lösung von: Jens Kelm (@JKooP)

// C11
#include <stdio.h>
#include <math.h>
#define MIN_NUM 1
#define MAX_NUM 100

int main(void) {
	const unsigned int MAX_ATTEMPTS = ceil(log2(MAX_NUM));
	printf("Denke Dir eine Zahl zwischen %u und %u.", MIN_NUM, MAX_NUM);
	printf("\nIch benoetige maximal %u Versuche. :)", MAX_ATTEMPTS);
	unsigned int guess, attempts = 1, min = MIN_NUM, max = MAX_NUM;
	char read;
	while (min <= max) {
		guess = (min + max) / 2;
		printf("\nIst es die Zahl %u?", guess);
		printf("\n(g)roeßer/(k)leiner/(j)a: ");
		fflush(stdout);
		scanf("%c%*c", &read);
		if (read == 'g') min = guess + 1;
		else if (read == 'k') max = guess - 1;
		else if (read == 'j') { printf("\nErraten! %u Versuch(e).", attempts); break; }
		else { printf("\nFalsche Eingabe! (g/k/j)\n"); continue; }
		attempts++;
	}
	if (min > max || attempts > MAX_ATTEMPTS)
		printf("\nDa hat wohl jemand geschummelt?!");
	else
		printf("\nDie gesuchte Zahl lautet: %u", guess);
}
                

Lösung von: Jens Kelm (@JKooP)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: k.A.
Webcode: 4i5d-58ws
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen