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

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

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

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

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

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

@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

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

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

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

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

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:

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

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

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

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...
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Ach, das ist doch von mir, das zählt gar nicht :D
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

HerrHagen hat geschrieben:Da kann ich nur noch den armen Programmiersklaven dieser Welt mein Mitgefül aussprechen...
Na dann siehst du auch was Informatikstudenten so sinnvolles lernen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Leonidas hat geschrieben:
HerrHagen hat geschrieben:Da kann ich nur noch den armen Programmiersklaven dieser Welt mein Mitgefül aussprechen...
Na dann siehst du auch was Informatikstudenten so sinnvolles lernen.
Ich wünschte du hättest meine Laboraufgabe in Informatik II gesehen...
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

BlackVivi hat geschrieben:
Leonidas hat geschrieben:
HerrHagen hat geschrieben:Da kann ich nur noch den armen Programmiersklaven dieser Welt mein Mitgefül aussprechen...
Na dann siehst du auch was Informatikstudenten so sinnvolles lernen.
Ich wünschte du hättest meine Laboraufgabe in Informatik II gesehen...
Machen wir nen Club auf? :D
Antworten