| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: Bowling-Simulation im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Da ich ja auch schon die Aufgabe mit den Tagen gelöst habe, wollte ich gleich noch eine Lösen. Macht ...
![]() |
| | #16 (permalink) |
| Registriert seit: 01.12.03 ![]() Likes: 0 | Anzeige Da ich ja auch schon die Aufgabe mit den Tagen gelöst habe, wollte ich gleich noch eine Lösen. Macht eigentlich richtig Spass... ![]() Verbesserungsvorschläge sind immer willkommen. Code: import java.io.*;
import java.util.Random;
public class bowl {
static int num_players = 0;
static String player[] = new String[100];
static int highscore[] = new int[100];
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) {
num_players = getPlayerCount();
for(int i = 0; i < num_players; i++){
player[i] = getPlayerName(i);
}
for(int i = 0; i < num_players; i++){
makeThrows(i);
}
showHighScore();
writeHigh();
}
public static int getPlayerCount(){
int count = 0;
System.out.print("Bitte Anzahl der Spieler eingeben: ");
try{
count = Integer.valueOf(in.readLine()).intValue();
} catch (Exception e){
System.out.println("Fehler bei der Eingabe");
}
return count;
}
public static String getPlayerName( int i ){
String name = null;
System.out.print("Bitte Spielername fuer Spieler " + (i+1) + " eingeben: ");
try{
name = in.readLine();
} catch (Exception e){
System.out.println("Fehler bei der Eingabe");
}
return name;
}
public static void makeThrows( int i ){
Random gen = new Random();
int score = 0;
int cur=0;
for(int j = 1; j <= 10; j++){
cur = gen.nextInt(11);
score += cur;
if(cur==10){
score += gen.nextInt(11);
}
}
highscore[i] = score;
}
public static void showHighScore(){
System.out.println("\n------------------- HighScore ------------------------------");
for(int i = 0; i < num_players; i++){
System.out.println(player[i] + " - " + highscore[i]);
}
}
public static void writeHigh(){
try{
File file = new File("highscore.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(int i = 0; i < num_players; i++){
bw.write(player[i] + " -" + highscore[i]);
bw.newLine();
}
bw.close();
} catch (Exception e ){
System.out.println("Fehler beim Schreiben des Highscores!");
}
}
} Code: #include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Player
{
public:
void setName(string s);
void setPoints(int i);
string getName();
int getPoints();
private:
string name;
int points;
};
void Player::setName(string s)
{
name = s;
}
string Player::getName()
{
return name;
}
void Player::setPoints(int i)
{
points = i;
}
int Player::getPoints()
{
return points;
}
int main(void)
{
int numplayer;
cout << "Please enter the number of players: ";
cin >> numplayer;
Player p[numplayer];
for(int i = 0; i < numplayer; i++)
{
string tmp;
cout << "Please enter name of player " << i+1 << ": ";
cin >> tmp;
p[i].setName(tmp);
}
for(int i = 0; i < numplayer; i++)
{
int points = 0;
int cur = 0;
for(int j = 0; j < 10; j++)
{
cur = rand()%11;
if(cur == 10)
{
cur = cur + (int)rand()%11;
}
points = cur + points;
}
p[i].setPoints(points);
cout << p[i].getName() << " hat " << p[i].getPoints() << " Punkte gemacht!" << endl;
}
ofstream fp;
fp.open("highscore.txt",ios::trunc);
fp << "this is the highscore list\n" << endl;
for(int i = 0; i <numplayer; i++)
{
fp << p[i].getName() << " - " << p[i].getPoints() << endl;
}
fp.close();
return 0;
} |
| | |
| | #17 (permalink) |
| Hab hier ma ne Lösung mit VB 6 erstellt. Man braucht n Textfeld mit dem Namen txtAnzahl und nen Commandbutton mit dem Namen cmdGo. Der Code sieht dann so aus: Code: Option Explicit
Private A As Integer
Private Spielerzahl As Integer
Private Punkte As Integer
Private EingegebenerName As String
Private GesamtePunkte As Integer
Private Counter As Integer
Private AltePunkte As Integer
Private Spielernummer As Integer
Private AusgabeRangliste As String
Private Namen() As String
Private Rang() As Integer
Private Spielerpunkte() As Integer
Private Sub cmdGo_Click()
'Spielerzahl bestimmen
Spielerzahl = txtAnzahl.Text
'Überprüfung auf gültigen Wert
If IsNumeric(Spielerzahl) = True Then
If Spielerzahl < 101 Then
'Arraysgröße einstellen
ReDim Namen(1 To Spielerzahl)
ReDim Rang(1 To Spielerzahl)
ReDim Spielerpunkte(1 To Spielerzahl)
'Namen eingeben
A = 1
Do Until A = Spielerzahl + 1
Namenseingabe:
EingegebenerName = InputBox("Bitte Namen für Spieler " & A & " eingeben.", "Spieler" & A)
If EingegebenerName = "" Then
MsgBox ("Bitte gültigen Spielername eingeben")
GoTo Namenseingabe
Else
Namen(A) = EingegebenerName
End If
A = A + 1
Loop
'Eigentliche Simulation/Würfe der Spieler
A = 0
'Zufallszahlengenerator initialisieren
Randomize Timer
Do Until A = Spielerzahl
'Anzahl der Würfe und Punkte des Spielers zurücksetzen
GesamtePunkte = 0
Counter = 0
'Würfe des Spielers
Do Until Counter = 10
Kegeln:
Punkte = 0
'Zufallszahl zwischen 1 und 10 generieren
Punkte = Int((10 - 1 + 1) * Rnd + 1)
'Runden der Zahl da Zufallszahlen Kommastellen enthalten können
Punkte = Round(Punkte)
GesamtePunkte = GesamtePunkte + Punkte
'Bei Strike nochmal
If Punkte = 10 Then
GoTo Kegeln
End If
Counter = Counter + 1
Loop
Spielerpunkte(A + 1) = GesamtePunkte
Call Rangliste
A = A + 1
Loop
A = 1
'Ausgabe der Rangliste
AusgabeRangliste = ""
Do Until A = Spielerzahl + 1
If A < 10 Then
AusgabeRangliste = AusgabeRangliste & " " & A & ". Platz: " & Spielerpunkte(Rang(A)) & " Punkte " & Namen(Rang(A)) & Chr(13) & Chr(10)
Else
AusgabeRangliste = AusgabeRangliste & A & ". Platz: " & Spielerpunkte(Rang(A)) & " Punkte " & Namen(Rang(A)) & Chr(13) & Chr(10)
End If
A = A + 1
Loop
Dim AusgabeDialog
AusgabeDialog = MsgBox(AusgabeRangliste, , "Rangliste")
Else
MsgBox ("Die eingegebene Anzahl an Spielern ist keine gültige Zahl.")
End If
Else
MsgBox ("Die eingegebene Anzahl an Spielern ist keine gültige Zahl.")
End If
End Sub
Private Sub Rangliste()
Dim SpielerMitRang As Integer
Dim B
B = 1
'Anmerkung: B entspricht dem Rang; A der Anzahl der bereits plazierten Spieler
' Spielernummer ist die Nummer des Spielers der jetzt an der Reihe ist.
Spielernummer = A + 1
Do Until B = A + 2
Select Case A
Case 0:
Rang(1) = 1
Spielernummer = A + 1
GoTo Plaziert
Case B:
SpielerMitRang = A
'Tritt ein wenn der Spieler als Vorletzter plaziert wird
If GesamtePunkte > Spielerpunkte(Rang(B)) Then
Rang(B + 1) = Rang(B)
Rang(B) = Spielernummer
GoTo Plaziert
End If
Case B - 1:
Rang(B) = Spielernummer
GoTo Plaziert
Case Else:
'Tritt ein wenn der Spieler irgendwo zwischen den anderen eingefügt wird
SpielerMitRang = A
If GesamtePunkte > Spielerpunkte(Rang(B)) Then
Do Until SpielerMitRang = B - 1
Rang(SpielerMitRang + 1) = Rang(SpielerMitRang)
SpielerMitRang = SpielerMitRang - 1
Loop
Rang(B) = Spielernummer
GoTo Plaziert
End If
End Select
B = B + 1
Loop
Plaziert:
End Sub Manuel | |
| | |
| | #18 (permalink) |
| Registriert seit: 12.01.07 ![]() Likes: 0 | Hier eine quick & dirty Variante in Groovy. Ist prozedural, einzige Datenstruktur ist ein Array für die Punkte. Finde aber den Ansatz mit der Player-Klasse deutlich besser. Code: rand = new Random()
players = 5
points = new int[players]
println "*** Turnier startet ***"
players.times { player ->
print " Spieler ${player}: "
10.times {
hits = bowle(player)
if (hits == 10)
bowle(player)
}
println ""
}
def bowle(player) {
hits = rand.nextInt(10) + 1
print "${hits}, "
points[player] += hits
return hits
}
println "*** Punkte ***"
println points Code: *** Turnier startet *** Spieler 0: 6, 10, 10, 8, 1, 10, 10, 9, 1, 2, 3, 7, Spieler 1: 7, 3, 7, 8, 8, 6, 3, 6, 9, 1, Spieler 2: 3, 6, 6, 2, 10, 2, 8, 5, 3, 8, 6, Spieler 3: 2, 6, 9, 3, 3, 10, 8, 8, 7, 6, 5, Spieler 4: 5, 10, 5, 3, 9, 2, 5, 9, 3, 8, 3, *** Punkte *** [77, 58, 59, 67, 62] Code: class Player
{
static Random rand = new Random()
String name
Integer points = 0
void play() {
print " ${name}: "
10.times {
int hits = bowle()
if (hits == 10)
bowle()
}
println ""
}
int bowle() {
int hits = rand.nextInt(11) // [0..10]
print "${hits}, "
points += hits
return hits
}
String toString() {
return "${name}: ${points}"
}
}
println "*** Spieler werden erzeugt ***"
players = []
5.times { players.add(new Player(name:"Spieler ${it}")) }
println "*** Turnier startet ***"
players.each { it.play() }
println "*** Punkte ***"
comparator = { p0, p1 -> (p1.points - p0.points) }
players.sort(comparator).each { println it } |
| | |
| | #19 (permalink) |
| Registriert seit: 31.01.08 ![]() Likes: 0 | Habe das auch mal Versucht ^^ Ist meine erste Programmieraufgabe, die ich löse ![]() Hier die gannnnnz grobe Lösung in C++: Bowling-Simulation PS: Wie gesagt, ist das grobste und da ist auch ein Fehler drin, aber ich weiß nicht wo der Fehler ist... Es kommen immer die gleichen Ergebnisse raus und bei Summe[0] kommt 4470149 ! raus. Wenn jemand den Fehler kennt, auf eine Antwort würde ich mich freuen :] |
| | |
| | #20 (permalink) |
| Registriert seit: 14.04.06 ![]() Likes: 4 | Du hast auf jeden Fall vergessen, dein Array "Summe" zu initalisieren, d.h. am Anfang alle Werte auf 0 zu setzen. Vielleicht funktioniert es dann. |
| | |
| | #21 (permalink) |
| Registriert seit: 31.01.08 ![]() Likes: 0 | jup, hab vergessen zu initialisieren ![]() THX für die Hilfe |
| | |
| | #22 (permalink) |
| Registriert seit: 21.04.08 ![]() Likes: 0 | Hallo! Meine Java Lösung BowlingMain.java Code: public class BowlingMain {
public static void main(String[] args) {
System.out.println("*** Bowling-Turnier ***\n");
System.out.print("Wie viele Spieler spielen mit? ");
Tourney tourney = new Tourney(Integer.parseInt(readValue()));
for(int i=0; i<tourney.getPlayerCount(); i++) {
System.out.print("Name von Spieler "+ (i+1) +": ");
tourney.initPlayer(i, readValue());
}
tourney.startTourney();
System.out.println("\nErgebnisse:\n"+ tourney.getResults());
}
public static String readValue() {
try { return new BufferedReader(new InputStreamReader(System.in)).readLine(); }
catch(IOException ex) { return "-1"; }
}
} Code: public class Tourney {
private Player[] players = null;
private int playerCount = 0;
public Tourney(int playerCount) {
this.players = new Player[playerCount];
this.playerCount = playerCount;
}
public int getPlayerCount() {
return playerCount;
}
public void initPlayer(int idx, String name) {
players[idx] = new Player(name);
}
public void startTourney() {
for(int i=0; i<players.length; i++)
players[i].playTourney();
}
public String getResults() {
String results = "";
for(int i=0; i<players.length; i++)
results += players[i].getPlayerResult() +"\n";
return results.substring(0, results.length()-2);
}
} Code: public class Player {
static Random random = new Random();
private String name;
private int pointsResult;
private int[] pointsRounds;
public Player(String name) {
this.name = name;
this.pointsResult = 0;
this.pointsRounds = new int[20];
}
public void playTourney() {
int rounds = 10;
for(int i=0; i<rounds; i++) {
int hits = Player.random.nextInt(10) + 1;
if(hits == 10)
rounds++;
pointsResult += hits;
pointsRounds[i] = hits;
}
}
public String getPlayerResult() {
String player = "*** "+ name +" ***\n";
for(int i=0; i<pointsRounds.length; i++)
if(pointsRounds[i] > 0)
player += (i+1) +") Runde: "+ ((pointsRounds[i] == 10) ? "STRIKE " : pointsRounds[i]) +"\n";
player += "Ergebnis: "+ pointsResult;
return player + "\n";
}
} Felix |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Physik Simulation | Sven | Applikationen | 7 | 17.07.06 20:59 |