HILFE!! Hausaufgabe/ zahlenrate programm!!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Samstag 10. Januar 2009, 17:54

HWK hat geschrieben:So, ich habe mich einmal gequält: Hier befindet sich eine Version in 16-Bit-X86-Assembler. Turbo-Assembler erzeugt hieraus eine COM-Datei (d.h. für DOS) mit einer Länge von 281 Bytes. Wer keinen Assembler installiert hat, kann die fertige COM-Datei mit diesem Python-Script erstellen.
MfG
HWK


Schade, daß Dein Code so mies kommentiert ist.
BlackJack

Beitragvon BlackJack » Samstag 10. Januar 2009, 19:16

Wieso dass? Hat man die DOS-Aufrufe nicht im Kopf? :-)
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Samstag 10. Januar 2009, 19:24

Die Generierung von Zufallszahlen ist ohne Bibliotheken kein triviales Problem. Das ist das einzige was interessant wäre.
Dazu könnte/müßte man eigentlich mal einen separaten Thread aufmachen.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Samstag 10. Januar 2009, 19:31

Die Zufallszahl bestimme ich einfach aus der Systemuhr (int 1Ah) modulo 100 plus 1 (Programmteil von _start: bis next:). Übrigens: Der Code ist nicht mies kommentiert, sondern gar nicht.:lol:
MfG
HWK
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Samstag 10. Januar 2009, 19:38

Für 281 Bytes braucht es doch auch keinen Kommentar ...
BlackJack

Beitragvon BlackJack » Samstag 10. Januar 2009, 19:45

@hendrikS: Das kommt auf die Qualität der Zufallszahlen an. Für so einfache Spiele reicht auch ein einfacher Algorithmus.

Der vom cc65 C-Crosscompiler sieht nach Forth (16-Bit volksFORTH) portiert so aus:

Code: Alles auswählen

\ Random Numbers

\ The algorithm is ported from cc65.

| create seed 5 allot

: seed! ( n -- )
  seed 5 erase  seed 3+ ! ;

: seed@ ( -- n ) seed 3+ @ ;

: random ( -- n )
  seed 1+ 2@  seed 2@ d+
  $3.1415927 d+  seed 1+ 2!  seed 2+ @ ;

: randomize ( -- )
  $d012 c@ 256 *  $a0 c@ or  seed! ;

: randint ( max -- n ) random swap mod ;

1 seed!


`randomize` ist plattformspezifisch, das mixt auf dem C64 die aktuelle Rasterzeile, die der Videochip gerade aufbaut mit einem Softwaretimer.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Samstag 10. Januar 2009, 20:00

Ja, die Lösung ist auf jeden Fall ausreichend und eigentlich auch ganz pfiffig. Assembler ist halt trotzdem nicht so selbstredend wie Python. :)
BlackJack

Beitragvon BlackJack » Montag 12. Januar 2009, 13:57

Und noch mal in Ada:

Code: Alles auswählen

with Ada.Text_IO;
use  Ada.Text_IO;
with Ada.Numerics.Discrete_Random;

procedure GuessTheNumber is
   type SecretType is range 1 .. 100;

   package Tries_IO     is new Ada.Text_IO.Integer_IO (Positive);
   package Secret_IO    is new Ada.Text_IO.Integer_IO (SecretType);
   package RandomSecret is new Ada.Numerics.Discrete_Random (SecretType);

   Tries         : Positive := 1;
   Secret, Guess : SecretType;
   RandomState   : RandomSecret.Generator;

begin
   RandomSecret.Reset (RandomState);
   Secret := RandomSecret.Random (RandomState);

   loop
      begin
         Tries_IO.Put (Tries, 1);
         Put (". guess: ");
         Secret_IO.Get (Guess);

         exit when Guess = Secret;

         Put ("Your number is ");
         if Guess > Secret then
            Put_Line ("greater.");
         else
            Put_Line ("smaller.");
         end if;

         Tries := Tries + 1;
      exception
         when Data_Error =>
            Put ("Pleaser enter a number in range ");
            Secret_IO.Put (SecretType'First, 1);
            Put (" .. ");
            Secret_IO.Put (SecretType'Last, 1);
            Put_Line ("!");
            -- Skip input.  Neccessary if input was no valid number literal.
            declare
               Dummy : String (1 .. 80);
               Last  : Natural;
            begin
               Get_Line (Dummy, Last);
            end;
      end;
   end loop;

   Put ("Yeah!  You guessed correct in ");
   Tries_IO.Put (Tries, 1);
   Put_Line (" tries.");
end GuessTheNumber;
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Montag 12. Januar 2009, 15:35

Jetzt würde ich es gerne aber auch noch in Cobol sehen.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Montag 12. Januar 2009, 19:35

Reicht dir auch das neue Cobol?

Code: Alles auswählen

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;


class Guesser {
   
    private int currentGuess;
    private int secret;
    private int tries;
   
    public Guesser() {
        secret = new Random().nextInt(100) + 1;
    }
   
    public void tryGuess(int guess) {
        currentGuess = guess;
        tries++;
    }
   
    public int checkGuess() {
        if (currentGuess < secret) {
            return -1;
        } else if (currentGuess > secret) {
            return 1;
        } else {
            return 0;
        }
    }
   
    public boolean isRight() {
        return secret == currentGuess;
    }

    public int getTries() {
        return tries;
    }

}


public class Guess {
    static String ERROR = "Bitte gib eine Zahl zwischen 1 und 100 ein.";

    public static void main(String[] args) {
        InputStreamReader istream = new InputStreamReader(System.in) ;
        BufferedReader bufRead = new BufferedReader(istream) ;

        Guesser guess = new Guesser();
        int currentGuessing;
        String rawGuessed;
        do {
            System.out.println("Gib deine Vermutung ab:");
            try {
                rawGuessed = bufRead.readLine();
            } catch (IOException e) {
                System.out.println(ERROR);
                continue;
            }
            currentGuessing = Integer.parseInt(rawGuessed);
            if (currentGuessing == 0) {
                System.out.println(ERROR);
                continue;
            }
            guess.tryGuess(currentGuessing);
            switch (guess.checkGuess()) {
            case -1:
                System.out.println("Das war zu niedrig!");
                break;
            case 1:
                System.out.println("Das war zu hoch!");
                break;
            }
        } while (! guess.isRight());
        System.out.printf("Richtig! Du hast %d Versuche gebraucht!", guess.getTries());
    }

}

http://paste.pocoo.org/show/99308/

Ich fühl mich schmutzig :(
zero-one
User
Beiträge: 58
Registriert: Dienstag 20. Mai 2008, 20:52

Beitragvon zero-one » Montag 12. Januar 2009, 19:37

is das denn wirklich die minimalste Loesung in Java? Ist ja nen ganz schoener Klumpen fuer etwas so simples...
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Montag 12. Januar 2009, 19:40

zero-one hat geschrieben:is das denn wirklich die minimalste Loesung in Java? Ist ja nen ganz schoener Klumpen fuer etwas so simples...
Öhm, so programmiert in Java ._. So wirds einem zumindest beigebracht... Objektorientierung für die trivialsten Fälle, für die simple Eingabe 213142 Zeilen und sowas... Ich will jetzt nich java ganz dolle beleidigen und Leute wie sma (verzeih, du bist nunmal aus'n Java-Bereich...) verärgern, aber so wurde es mir beigebracht.

Die minimalste Lösung in Java würde so ähnlich aussehen wie die in Python... aber jeweils für die kleineren Aufgaben wie Eingabe einige Zeilen mehr, weil gezwungenes Abfangen von'n IOError und sowas.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Montag 12. Januar 2009, 19:51

audax hat geschrieben:Reicht dir auch das neue Cobol?


Das ist aber hart!
Also, wenn jemand das "echte" Cobol soweit beherrscht, dass er den Code mal zeigen könnte, wäre schon nett.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Montag 12. Januar 2009, 20:00

BlackVivi hat geschrieben:
zero-one hat geschrieben:is das denn wirklich die minimalste Loesung in Java? Ist ja nen ganz schoener Klumpen fuer etwas so simples...
Öhm, so programmiert in Java ._. So wirds einem zumindest beigebracht... Objektorientierung für die trivialsten Fälle, für die simple Eingabe 213142 Zeilen und sowas... Ich will jetzt nich java ganz dolle beleidigen und Leute wie sma (verzeih, du bist nunmal aus'n Java-Bereich...) verärgern, aber so wurde es mir beigebracht.

Die minimalste Lösung in Java würde so ähnlich aussehen wie die in Python... aber jeweils für die kleineren Aufgaben wie Eingabe einige Zeilen mehr, weil gezwungenes Abfangen von'n IOError und sowas.

Ungefähr das ist Enteprise Niveau:
http://paste.pocoo.org/show/99317/

Ist super erweiterbar ;)
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Montag 12. Januar 2009, 20:29

Ungefähr das ist Enteprise Niveau:
http://paste.pocoo.org/show/99317/

Das ist ja grauenhaft!
Da kann ich nur noch den armen Programmiersklaven dieser Welt mein Mitgefül aussprechen...

Wer ist online?

Mitglieder in diesem Forum: Yahoo [Bot]