Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
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.

Bowling-Simulation

Diskussion: Bowling-Simulation im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Eine Programmieraufgabe von LordCyrix: Es ist ein Programm zu schreiben dass ein Bowlingturnier simuliert. Dabei sollen maximal 100 Spieler ...

Antwort
Alt 21.05.04, 22:27   #1 (permalink)
Member of Honour
 
Registriert seit: 02.10.01
Indi Leistung: Z3
Likes: 0
Standard Bowling-Simulation

Anzeige

Eine Programmieraufgabe von LordCyrix:

Es ist ein Programm zu schreiben dass ein Bowlingturnier simuliert. Dabei sollen maximal 100 Spieler teilnehmen können. Jeder Spieler hat 10 Würfe am Stück. Wirft ein Spieler alle 10 Kegel um, dann hat er einen Strike und darf noch einmal. Maximal wären also pro Spieler 20 Würfe möglich. Es soll immer erst ein Spieler komplett seine Würfe fertig spielen. Anschliessend soll eine Bestenliste mit dem Spielernamen und der Punktzahl erscheinen. Die Bestenliste soll bis zum Ende des Programms im Speicher bleiben. Die Anzahl der teilnehmenden Spieler ist beim Start des Programms durch den User einzugeben und anschliessend die Namen der einzelnen Spieler. Die Würfe selbst sollen per Zufallsgenerator erzeugt werden.

Als Zusatzaufgabe könnte man die Bestenliste noch in einer Textdatei ausgeben lassen.

Indi ist offline   Mit Zitat antworten
Alt 22.05.04, 01:18   #2 (permalink)
 
Registriert seit: 21.05.04
darkdieter Leistung: Facit NTK
Likes: 0
Standard

Hiho Freaks

Damit es nicht zu C und Perl-lastig wird, hier mal eine zwar schnell zusammengetippte
aber wie ich finde recht elegante Loesung (wollte schon immer mal das Comparator
Interface benutzen)... also hier die "Insel" Version

Bowling.java:
Code:
import java.util.Arrays;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Bowling
{
  private final static int maxPlayers = 100;

  public static void main(String[] args)
  {
    int playerCount;
    Player[] players;
    
    playerCount = getInteger("Anzahl der Mitspieler eingeben (1-100): ");
  
    if (playerCount<1 || playerCount>maxPlayers) return;
    
    players = new Player[playerCount];
    
    for (int i=0;i<playerCount;i++)
    {
      players[i] = new Player(getString("Namen fuer Spieler "+(i+1)+":"));
      players[i].play();
    }
    
    Arrays.sort(players,new PlayerComparator());
    
    for (int i=0;i<playerCount;i++)
      System.out.println(players[i].getName()+" Punkte: "+players[i].getPoints());
        
  }
  
  public static String getString(String prompt)
  {
    BufferedReader reader;
    String input;
      
    try
    {
      reader = new BufferedReader(new InputStreamReader(System.in));
      System.out.print(prompt);
      input = reader.readLine();
    }
    catch (IOException ioEx)
    {
      ioEx.printStackTrace();
      return "";
    }
    
    return input;
  }
  
  public static int getInteger(String pr)
  {
    boolean okflag = false;
    int result = 0;
    
    do
    {  
      try
      {
        result = Integer.parseInt(getString(pr));
        okflag = true;
      }
      catch (NumberFormatException nfEx)
      {
      }
    }
    while(!okflag);
    
    return result;
  }
  
}
Player.java:
Code:
public class Player 
{
  private int points;
  private String name;
  
  public Player(String name)
  {
    this.name = name;
    points = 0;
  }
  
  public void play()
  {
    int thisRound;
    
    for (int i=0;i<10;i++)
    {
      thisRound = (int)(Math.random()*11);
      points+=thisRound;
      if (thisRound==10) points+=(int)(Math.random()*11);
    }
  }
  
  public int getPoints()
  {
    return points;
  }
  
  public String getName()
  {
    return name;
  }
  
}
PlayerComparator.java:
Code:
import java.util.Comparator;

public class PlayerComparator implements Comparator
{
  public int compare(Object a, Object b)
  {
    return ((Player)b).getPoints() - ((Player)a).getPoints();
  }
}
darkdieter ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 22.05.04, 12:02   #3 (permalink)
 
Registriert seit: 26.09.02
LordCyrix Leistung: Facit NTK
LordCyrix eine Nachricht über ICQ schicken
Likes: 0
Standard

Hier einmal mein Programm in der Sprache C++.
Das Programm wurde mit dem C++ Trainer 2.0 erstellt, welches den Borland C++ Compiler verwendet.

Code:
#include <iostream.h>
#include <conio.h>

int Bestenliste[100]; // globale Deklaration der Arrays
int Durchgang[20][100];

int Konfiguration(void); // Vorausdeklaration der Funktionen ...
void Bowlen(int);
void Bestenliste_sortieren(void);
void Bestenliste_ausgeben(void);

int main() { // Hauptfunktion

  int Spieler; // lokale Deklaration der Variablen Spieler -> gilt nur in main();
  
  Spieler=Konfiguration(); /* Aufruf der Funktion Konfiguration(); der Rückgabewert dieser
                              Funktion wird der Variablen Spieler übergeben */

  Bowlen(Spieler); /* Aufruf der Funktion Bowlen mit gleichzeitiger Übergabe der Variablen
                      Spieler */
  return 0;
  }
  
int Konfiguration() { // 1. Unterfunktion

  int Spieleranzahl=0;

  do { /* Eingabeabsicherung für Falscheingabe des Anwenders */
  
    clrscr();
    cout << "Spieleranzahl eingeben: ";
    cin >> Spieleranzahl;
    
    if(Spieleranzahl<0 || Spieleranzahl>100) {
    
      clrscr();
      cout << "Es muß ein Wert von 0 bis 100 eingegeben werden!";
      getchar();
      }
    }
    while(Spieleranzahl<0 || Spieleranzahl>100); /* wird solange wiederholt, bis für Spieleranzahl
                                                    ein Wert von 0 bis 100 eingegeben wurde */
  
  return Spieleranzahl; // gibt den Wert von Spieleranzahl an die aufrufende Funktion zurück
  }
  
void Bowlen(int Spieler) { // 2. Unterfunktion

  int Strikes; // Deklaration von Strikes

  clrscr();
  for(int j=0; j<Spieler; j++) {
  
    Strikes=0;
    
    for(int i=0; i<10+Strikes; i++) {
    
      Durchgang[i][j]=rand()%11; // Zufallswert von 0 bis 10
      
      if(Durchgang[i][j]==10 && Strikes<10) { /* wenn ein Strike geworfen wurde und ausserdem noch
                                                 weniger als 10 Strikes von diesem Spieler geworfen
                                                 wurden */
      
        Strikes++;
        } // begrenzt die Anzahl der Würfe pro Spieler auf 10 + max. 10 Strikes
        
      Bestenliste[j]+=Durchgang[i][j]; /* aktueller Punktwert wird zum aktuellen Eintrag in der
                                          Bestenliste des Spielers hinzu addiert */
      }

    Bestenliste_sortieren(); // sortiert die Einträge in der Bestenliste
    Bestenliste_ausgeben(); // gibt die Bestenliste sortiert aus
    }
  }
  
void Bestenliste_sortieren() { // 3. Unterfunktion

  int cache;

  for(int j=0; j<100; j++) { // Bubble-Sort Algorithmus
  
    for(int i=0; i<99; i++) {
  
      if(Bestenliste[i]<Bestenliste[i+1]) {
      
        cache=Bestenliste[i];
        Bestenliste[i]=Bestenliste[i+1];
        Bestenliste[i+1]=cache;
        }
      }
    }
  }
  
void Bestenliste_ausgeben() {

  clrscr();
  cout << "Aktuelle Bestenliste:\n\n";
  
  for(int i=0; i<9; i++) {
    
    cout << i+1 <<". Platz:  " << Bestenliste[i] << " Punkte \n";
    }
    
  cout << "10.Platz:  " << Bestenliste[9] << " Punkte \n";
  getchar();
  }
Vielleicht kann mir ja von euch noch jemand sagen wie ich das hinbekomme, dass ich bei der Bestenliste zusätzlich noch Namen mit sortieren lassen kann. In einem Array darf man ja immer nur Daten vom selben Datentyp verwenden. Mit einer Struktur müsste es vielleicht funktionieren, nur weiss ich nicht wie ich dort dann sortieren lassen soll.


Übrigens @darkdieter:

Dein Programm hat einen logischen Fehler...
Sobald ein Spieler bei dir einen Strike wirft, darf er nochmal. Du hast dabei aber nicht bedacht, dass bei einem Strike ebenfalls nochmal eine 10 geworfen werden kann. Damit hast Du dann eine Endlosschleife, wenn der Spieler jedesmal eine 10 werfen sollte. Es sollte so sein, dass nach einem Standardwurf, maximal ein Strike geworfen werden darf. Also insgesamt maximal 20 Würfe pro Spieler.
LordCyrix ist offline   Mit Zitat antworten
Alt 22.05.04, 15:11   #4 (permalink)
 
Registriert seit: 21.05.04
darkdieter Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Dein Programm hat einen logischen Fehler...
Sobald ein Spieler bei dir einen Strike wirft, darf er nochmal. Du hast dabei aber nicht bedacht, dass bei einem Strike ebenfalls nochmal eine 10 geworfen werden kann. Damit hast Du dann eine Endlosschleife, wenn der Spieler jedesmal eine 10 werfen sollte. Es sollte so sein, dass nach einem Standardwurf, maximal ein Strike geworfen werden darf. Also insgesamt maximal 20 Würfe pro Spieler.
Hmmm aeh, oeh, noe? Die for-Schleife wird genau 10 mal durchlaufen und der Spieler darf nach einem Strike genau EINMAL nochmal werfen... das sollte schon stimmen.
darkdieter ist offline   Mit Zitat antworten
Alt 22.05.04, 15:53   #5 (permalink)
 
Registriert seit: 26.09.02
LordCyrix Leistung: Facit NTK
LordCyrix eine Nachricht über ICQ schicken
Likes: 0
Standard

Ahh stimmt, Du hast Recht.

Da Du ja den Wert direkt auf points zuaddierst und nur thisRound überprüfst funktioniert das.
Wirklich eine sehr schöne Lösung. Sollte ich auch nochmal in mein Programm mit aufnehmen.
LordCyrix ist offline   Mit Zitat antworten
Alt 22.05.04, 19:52   #6 (permalink)
 
Registriert seit: 12.04.04
zovax Leistung: Facit NTK
Likes: 0
Standard

Habe es in C# gemacht:

CHauptklasse:
Code:
using System;

namespace Bowlingturnier
{
	class CHauptklasse
	{
		internal static int anzahl;			//Anzahl der Spieler
		internal static Spieler[] spieler;	//Strukturarray referenzieren
		internal static Random zz = new Random();	// Um Zufallszahlen zu generieren

		static void Main()
		{
			
			do		// Schleife zur Abfrage der Spielteilnehmer
			{
				Console.WriteLine("\nBitte geben Sie die Spieleranzahl (1-100) ein: ");
				anzahl = Convert.ToInt32(Console.ReadLine());
				if (anzahl < 1 || anzahl > 100)
					Console.WriteLine("\nBitte geben sie eine gültige Spieleranzahl zwischen " +
						"1 und 100 ein.\n\n");
			}
				while(anzahl < 1 || anzahl > 100);

			spieler = new Spieler[anzahl];	//Strukturarray erzeugen

			CSpieler.namenDefinieren(ref spieler);	//Methode für Namensgebung aufrufen und
                                                                //den Array als Referenzparameter übergeben

			CSpieler.spielen(ref spieler);	       //Methode für Punktevergabe aufrufen und
                                                               //den Array als Referenzparameter übergeben
			
			CSpieler.bestenlisteAusgeben(spieler); //Methode für das Ausgeben der Bestenliste
                                                               //den Array als Parameter übergeben


		}
	}
}
CSpieler:
Code:
using System;

namespace Bowlingturnier
{
	public struct Spieler	// Struktur für die verschiedenen Spieler
	{
		public string name;
		public int punkte;
	}

	public class CSpieler
	{

		internal static void namenDefinieren(ref Spieler[] spieler)	//Methode zum Namen definieren
		{
			int i = 0;
			while (i != CHauptklasse.anzahl)
			{
				Console.Write("Bitte geben Sie den Namen für den {0}. Spieler ein: ", i+1);
				spieler[i].name = Convert.ToString(Console.ReadLine());
				i++;
			}
		}
		internal static void spielen(ref Spieler[] spieler) //Methode zum Punkte vergeben
		{
			int i = 0;
			int j = 0;
			int punkte = 0;
			while (i != CHauptklasse.anzahl)
			{
				while (j != 10)
				{
					punkte = CHauptklasse.zz.Next(11);	//Zufallszahl 1-10
					spieler[i].punkte += punkte;
					if (punkte == 10)	//Wenn Strike, dann nochmal werfen
					{
						punkte = CHauptklasse.zz.Next(11);
						spieler[i].punkte += punkte;
					}

					j++;
				}
				i++;
				j = 0;
			}
		}

		internal static void bestenlisteAusgeben(Spieler[] spieler) //Methode zum Ausgeben der Bestenliste
		{			
			int i = 0;
			string[] namen = new string[CHauptklasse.anzahl];
			while (i != CHauptklasse.anzahl)	//Strukturarray in Stringarray packen
			{
				namen[i] = Convert.ToString(spieler[i].punkte) + " Punkte    -> " + spieler[i].name;
				i++;
			}
			Array.Sort(namen);
			Array.Reverse(namen);	//Stringarray sortieren

			Console.WriteLine("\n\n ----BESTENLISTE----\n");
			foreach (string elem in namen)
				Console.WriteLine(elem);
			
			Console.ReadLine();
		} 



		}

	}
zovax ist offline   Mit Zitat antworten
Alt 22.05.04, 21:07   #7 (permalink)
 
Registriert seit: 21.05.04
darkdieter Leistung: Facit NTK
Likes: 0
Standard

zovax:

Seh ich das richtig das du einfach Punkte + Spielernamen in ein Stringarray packst und das dann sortieren laesst... sehr hinterlistig
darkdieter ist offline   Mit Zitat antworten
Alt 22.05.04, 21:43   #8 (permalink)
 
Registriert seit: 12.04.04
zovax Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von darkdieter
zovax:

Seh ich das richtig das du einfach Punkte + Spielernamen in ein Stringarray packst und das dann sortieren laesst... sehr hinterlistig :)
ja *schäm* :)
Wüsste auch keinen anderen Weg, wie man es in einem Strukturarray sonst sortieren könnte.
Wenn jemand dazu nen Vorschlag hat, her damit..
zovax ist offline   Mit Zitat antworten
Alt 14.09.04, 15:26   #9 (permalink)
 
Registriert seit: 02.10.01
Nornagest Leistung: Facit NTK
Likes: 0
Standard Bowling

Also ich hab beide Bowling-Threads mal zusammen gefügt

Als ich den zweiten erstellt hab war ich wohl etwas verpeilt

Norna
Nornagest ist offline   Mit Zitat antworten
Alt 17.09.04, 18:50   #10 (permalink)
 
Registriert seit: 12.04.04
zovax Leistung: Facit NTK
Likes: 0
Standard

Lösung in C# mit Datei-Bestenliste:

CMain.cs
Code:
using System;

namespace Bowlingsimulation
{
	class CMain
	{
		private static int auswahl;
		private static int anzahl;

		[STAThread]
		static void Main(string[] args)
		{

			Hauptmenu();


		}

		private static void Hauptmenu()
		{
			Console.WriteLine("Bowlingsimulation");
			Console.WriteLine("------------------------------");
			Console.WriteLine("(1) Neues Spiel beginnen");
			Console.WriteLine("(2) Bestenliste ausgeben");
			Console.WriteLine("(3) Spiel Beenden");
			Console.WriteLine("------------------------------");
			
			while(true)
			{
				Console.Write("Ihre Eingabe: ");
				
				try
				{
					auswahl = Convert.ToInt32(Console.ReadLine());
				}
				catch (Exception ex)
				{
					;
				}
			
				if(auswahl == 1)
				{
					auswahl = 0;
					NeuesSpiel();
					break;
				}
				else if(auswahl == 2)
				{
					auswahl = 0;
					BestenlisteLaden();
					break;
				}
				else if(auswahl == 3)
				{
					
					break;
				}
			}
		}
		
		private static void NeuesSpiel()
		{
			while(anzahl > 100 || anzahl < 1 || anzahl == 0)
			{
				Console.WriteLine();
				Console.Write("Bitte Spielerzahl zwischen 1 und 100 angeben: ");
				
				try
				{
					anzahl = Convert.ToInt32(Console.ReadLine());
				}
				catch (Exception ex)
				{
					continue;
				}
			}

			
			CSpieler[] Spieler = new CSpieler[anzahl];
			string spielername;

			for (int i = 0; i < anzahl; i++)
			{
				Console.WriteLine();
				Console.Write("Bitte Spielernamen für Spieler Nummer {0} eingeben: ",i+1);
				spielername = Console.ReadLine();
				Spieler[i] = new CSpieler(spielername);

				for (int j = 0; j < i; j++)
				{

					if (Spieler[j].Name == spielername)
					{
						Console.WriteLine("Der Name exisitiert schon");
						i--;
						break;
					}
				
				}
			}

			for (int i = 0; i < Spieler.Length; i++)
			{
				Spieler[i].Werfen();
				Console.WriteLine("{0} erzielte {1} Punkte",Spieler[i].Name, Spieler[i].Punkte);
				Bestenliste(Spieler);
				if(i != Spieler.Length - 1)
				{
					Console.WriteLine("Zum nächsten Spieler mit beliebiger Taste...");
					Console.ReadLine();
				}
			}
			
			
			while(true)
			{
				Console.WriteLine();
				Console.WriteLine("(1) Bestenliste Speichern                              (2) Hauptmenü");
			
				Console.Write("Ihre Eingabe: ");
				
				int eingabe = 0;

				try
				{
					eingabe = Convert.ToInt32(Console.ReadLine());
				}
				catch (Exception ex)
				{
					;
				}
			
				if (eingabe == 1)
				{
					Bestenlistespeichern(Spieler);
					break;
				}
				else if (eingabe == 2)
				{
					Console.WriteLine();
					Console.WriteLine();
					Hauptmenu();
					break;
				}
			}
		}

		private static void Bestenliste(CSpieler[] Spieler)
		{
			Console.WriteLine();
			Console.WriteLine("Die besten Spieler");
			Console.WriteLine("------------------------------");
			int platz;
			string[] Liste = new string[Spieler.Length];

			for (int i = 0; i < Spieler.Length; i++)
			{
				platz = Spieler.Length-1;

				for (int j = 0; j < Spieler.Length; j++)
				{
					if(Spieler[i].Punkte > Spieler[j].Punkte)
						platz -= 1;
				}
				
				while(Liste[platz] != null)
				{
					platz -= 1;
				}
				Liste[platz] = Spieler[i].Name + " -> " + Spieler[i].Punkte.ToString();
			}

			for (int i = 0; i < Liste.Length; i++)
			{
				Console.WriteLine(Liste[i]);

				if(i == 9)
				{
					break;
				}
			}
			Console.WriteLine();
		}

		private static void Bestenlistespeichern(CSpieler[] Liste)
		{
			System.IO.FileStream fs = System.IO.File.Create("Bestenliste.xml");
			fs.Close();

			System.Xml.XmlTextWriter x = new System.Xml.XmlTextWriter("Bestenliste.xml",System.Text.Encoding.UTF8);
			x.Formatting = System.Xml.Formatting.Indented;

			x.WriteStartDocument();

			x.WriteStartElement("Bestenliste");

			
			for (int i = 0; i < Liste.Length; i++)
			{

				x.WriteStartElement("Spieler");
				x.WriteStartElement("Name");
				x.WriteString(Liste[i].Name);
				x.WriteEndElement();
				x.WriteStartElement("Punkte");
				x.WriteString(Liste[i].Punkte.ToString());
				x.WriteEndElement();
				x.WriteEndElement();

			}

			x.WriteEndElement();
			x.Close();

			Console.WriteLine();
			Console.WriteLine("Bestenliste erfolgreich gespeichert!");
			Console.WriteLine();
			Console.WriteLine();
			Hauptmenu();
		}

		private static void BestenlisteLaden()
		{
			System.Xml.XmlDocument x = new System.Xml.XmlDocument();

			try
			{
				x.Load("Bestenliste.xml");
			}
			catch (Exception ex)
			{
				Console.WriteLine();
				Console.WriteLine("Keine Bestenliste gespeichert!");
				Console.WriteLine();
				Hauptmenu();
			}

			Console.WriteLine();
			Console.WriteLine("Die besten Spieler");
			Console.WriteLine("------------------------------");


			for (int i = 0; i < x["Bestenliste"].ChildNodes.Count; i++)
			{
				Console.WriteLine(x["Bestenliste"].ChildNodes[i]["Name"].InnerXml + " -> " + x["Bestenliste"].ChildNodes[i]["Punkte"].InnerXml);

				if(i == 9)
					break;
			}
			
			Console.WriteLine();
			Console.WriteLine("Mit beliebiger Taste zurück zum Hauptmenu...");
			Console.ReadLine();
			Hauptmenu();
		}

	}
}


CSpieler.cs
Code:
using System;

namespace Bowlingsimulation
{
	public class CSpieler
	{
		private string name;
		private int punkte;
		private System.Random z = new Random();

		public string Name
		{
			get
			{
				return name;
			}
			set
			{
				;
			}
		}

		public int Punkte
		{
			get
			{
				return punkte;
			}
			set
			{
				;
			}
		}

		public CSpieler(string name)
		{
			this.name = name;
			this.punkte = 0;
		}

		public void Werfen()
		{
			int wurfpunkte;
			int extra;

			for (int i = 0; i < 10; i++)
			{
				wurfpunkte = this.z.Next(11);
				Console.WriteLine(wurfpunkte + " Punkte!");
				
				if(wurfpunkte == 10)
				{
					extra = this.z.Next(11);
					Console.WriteLine("Durch Extrawurf {0} Punkte!",extra);
					wurfpunkte += extra;

				}

				this.punkte += wurfpunkte;
			}

			z = null;

		}

	}
}
Angehängte Dateien
Dateityp: zip Bowlingsimulation.zip (3,7 KB, 153x aufgerufen)
zovax ist offline   Mit Zitat antworten
Alt 17.09.04, 22:46   #11 (permalink)
Senior Member
 
Registriert seit: 27.01.02
Chris Leistung: Facit NTK
Likes: 1
Standard

Danke für die Aufgabe, habe nach einigen Monaten Codingabstinenz mal wieder den Compiler ausgegraben:

Programmiersprache: Pascal
Compiler: FreePascal 1.0.10 für Linux auf i386
Binary: Download (84 KB) (Linux i386)
Version: 0.1

Freu' mich schon auf die Kommentare...
Das mit der Bestenliste in Datei muss ich noch nachreichen... *g*


Code:
program Bowling;
uses crt;
var bl:array[0..100,0..1] of integer; { bl=Bestenliste 0=ID, 1=Pkte }
    anz_spieler:byte;
    i:integer;


function spielerzahl_ok(n:byte):boolean;
{ Prüft die Anzahl der Spieler auf 0 bis 100 }
begin
  spielerzahl_ok:=FALSE;
  if (n>0) and (n<101) then spielerzahl_ok:=TRUE;
end;


function amzug(spieler:integer):integer;
{ Führt die Züge aus }
var w,pts,pts_local:integer; { Wurf-Nummer, Punkte(spieler), Punkte(Wurf) }
begin
  w:=1;  pts:=0;
  repeat
    pts_local:=random(10);
    if pts_local=10 then pts:=pts+random(10);
    pts:=pts+pts_local;
    inc(w);
  until w=10;
  amzug:=pts;
end;


procedure display;
{ Gibt die sortierte Bestenliste aus }
var bl2:array[0..100,0..1] of integer;
    j,k,max,best:integer;
begin
  bl2:=bl;
  writeln('*** Bestenlise nach ',i:0,' Spielern: ***');
  for j:=1 to anz_spieler do
  begin
    max:=0;
    best:=0;
    for k:=1 to anz_spieler do
      begin
        if bl2[k,1]>max then 
           begin
		max:=bl2[k,1];
		best:=bl2[k,0];
           end;
      end;
    bl2[best,1]:=0;
    writeln('Platz ',j:2,': ',bl[best,0],' mit ',bl[best,1],' Punkten');
  end;
  writeln('(Enter druecken...');
end;



begin
  writeln('Bowling 0.1');

  { Anzahl der Spieler eingeben }
  repeat
    write('Anzahl der Spieler eingeben: ');  readln(anz_spieler);
  until spielerzahl_ok(anz_spieler)=TRUE;

  { Bestenliste belegen }
  for i:=1 to anz_spieler do
    begin
      bl[i,0]:=i;
      bl[i,1]:=0;
    end;

  randomize;

  { Wuerfe }
  for i:=1 to anz_spieler do 
    begin
      bl[i,1]:=bl[i,1]+amzug(i);
      display;
      readln;
    end;

end.
Chris ist offline   Mit Zitat antworten
Alt 18.09.04, 10:50   #12 (permalink)
Member of Honour
Themenstarter
 
Registriert seit: 02.10.01
Indi Leistung: Z3
Likes: 0
Standard

Hey Norna, freut mich ja, dass du mal wieder eine Programmieraufgabe gepostet hast, aber schau mal hier: Bowling-Simulation

man achte auf das Erstellungsdatum!?
Indi ist offline   Mit Zitat antworten
Alt 07.11.04, 21:07   #13 (permalink)
 
Registriert seit: 20.07.04
Phuket Leistung: Facit NTK
Likes: 0
Standard

Ist zwar schon lange nichts mehr drin gepostet worden aber ich stell mal meine Perl Lösung rein. Wie gesagt nutz ich die Aufgaben hier drinne zum Perl lernen also nichts großartiges Erwarten.
Momentan nur ne Ausgabe am Bildschirm aber in nem File ausgeben dürfte kein Problem sein.
Mein Lösungsweg ist etwas merkwürdig aber es funktioniert und Spielerzahlen über 100 sind auch kein Problem.

Code:
print 'Bitte Anzahl der Spieler eingeben:' ;
$player = <STDIN> ;
chomp $player ;

$count = 1;


while ($count <= $player) 
{
	
	print "\nSpieler $count ist dran...\n";
	$treffer = int(rand 10) + 1 ;
	print "Spieler $count hat $treffer Treffer erziehlt.\n"	;
	if ($treffer == '10') { 
		print "STRIKE!\n" ;
		$strike = int(rand 10) +1 ;
		$count++ ;
		$treffer = $treffer+ $strike ;
		print "Zusaetzliche $strike Treffer\n" ;
		}
	
	else { $count++ ; }
	$temp = $count-1 ;
	$Ergebnis{$treffer." Punkte: Spieler $temp\n"} = 1 ;
}




print reverse  sort {$a<=>$b}  keys %Ergebnis ;
Phuket ist offline   Mit Zitat antworten
Alt 14.04.05, 18:19   #14 (permalink)
 
Registriert seit: 13.04.05
sCuD Leistung: Facit NTK
sCuD eine Nachricht über ICQ schicken
Likes: 0
Standard

hi,
hab sehr oft probiert das programm mit objekten und klassen zusammen zu biegen. aber es funktioniert einfach nicht. hat einer von euch da einen lösungsansatz?
sCuD ist offline   Mit Zitat antworten
Alt 05.08.05, 17:15   #15 (permalink)
 
Registriert seit: 04.08.05
minzel Leistung: Facit NTK
minzel eine Nachricht über ICQ schicken
Likes: 0
Standard

dito, hier noch eine einfache lösung in java:

Code:
import java.util.Random;

public class Turnier {

	public static void main(String[] args) {

		Turnier t = new Turnier();
		int[][] turnier = new int[100][20];

		int i = 0;		// Laufvariable
		while ( i < 100 )
			turnier = t.play(turnier,i++);
		
		for ( int x=0 ; x < 100 ; x++ ) {
			System.out.print("\nPlayer " + x + ": ");
			for ( int y=0 ; y < 20 ; y++ ) {
				System.out.print(turnier[x][y]+" ");
			}
		}
	}
	
	public int[][] play( int[][] turnier , int player ) {
		Random r = new Random();
		int wurf = 0 , erlaubtWurf = 10, i = 0;
		
		while ( erlaubtWurf-- > 0 ) {
			if ( (wurf = r.nextInt(11)) == 10) {
				turnier[player][i++] = wurf;
				turnier[player][i++] = wurf = r.nextInt(11);
			} else {
				turnier[player][i++] = wurf;
			}
		}
		return turnier;
	}
}
minzel ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » Bowling-Simulation
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Physik Simulation Sven Applikationen 7 17.07.06 20:59


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61