Kleines selbstgeschriebenes Programm - Pascal - SciFi-Forum

Ankündigung

Einklappen
Keine Ankündigung bisher.

Kleines selbstgeschriebenes Programm - Pascal

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Kleines selbstgeschriebenes Programm - Pascal

    Hi,
    ich bastele im Moment aus Langeweile (hab ich im Informatikunterricht nebenher geschrieben ) an einem kleinem Programm, dass die Matrix (die aus dem Film) darstellt, d.h. das über den Bildschirm huschen der Zeichen (1 und 0 in dem Fall).
    Naja, die 1 und 0 huschen über den Bildschirm, allerdings on unten nach oben und in weiß/schwarz.
    Gibt es eine Möglichkeit, das ganze zu verlangsamen (im Moment lass ich nebenher CPU-Grab laufen), das es jeweils drei oder zwei Spalten nebeneinander sind?
    (Und, auch wenn das unwahrscheinlich ist, dass das ganze in grün auf schwarz dagestellt wird, auch wenn das eine Sache der Eigenschaften des Konsolenfensters ist, soweit es mir bekannt ist?).

    Code:
    program Matrix;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils;
    var
      n,c,d,f:integer;
    
    begin
    randomize;
    n:=1;
    for c:=1 to f do begin //Endlosschleife für Arme :D
    n:=random(2);
    d:=random(5)+1; //Abstand zwischen den Zahlen
    write(n:d);
    f:=f+1;
    end;
    readln;
    end.
    P.s.: Warum darf man eigentlich keine .exe-Dateien direkt hochladen, weil wegen Badwaregefahr?
    Angehängte Dateien
    68 61 62 61 64 61 2d 68 61 62 61 64 61


    #2
    Also eine Verzögerung als solche gibt es in Pascal nicht, da kann du nur eine Prozedur schreiben.
    Zweitens musst du aufpassen wegen der Variable F, denn in dieser Endlosschleife kommt irgendwann mit Sicherheit ein Stapelüberlauf und eine Index out of Bound.
    Textemitter, powered by C8H10N4O2

    It takes the Power of a Pentium to run Windows, but it took the Power of 3 C-64 to fly to the Moon!

    Kommentar


      #3
      Zitat von ayin Beitrag anzeigen
      Also eine Verzögerung als solche gibt es in Pascal nicht, da kann du nur eine Prozedur schreiben.
      Zweitens musst du aufpassen wegen der Variable F, denn in dieser Endlosschleife kommt irgendwann mit Sicherheit ein Stapelüberlauf und eine Index out of Bound.
      Ja, ich suche im Moment nach einer besseren Lösung, d.h. eine Schleife solange laufen lassen bis man [Esc] drückt.
      Mit dem Schulwissen sind wir noch nicht so weit .
      68 61 62 61 64 61 2d 68 61 62 61 64 61

      Kommentar


        #4
        Das geht einfach

        Repeat .... Until (keypressed=#27);

        #27 ist das Steuerzeichen für ESC.

        Falls das nicht direkt geht, musst halt im Falle von Keypressed ein Char mit Readkey auslesen und das ganze anders formulieren.

        Als Verzögerung fällt mir nochwas ein:

        Code:
        procedure Sleep(const millisec: Integer);
        Textemitter, powered by C8H10N4O2

        It takes the Power of a Pentium to run Windows, but it took the Power of 3 C-64 to fly to the Moon!

        Kommentar


          #5
          Zitat von ayin Beitrag anzeigen
          Also eine Verzögerung als solche gibt es in Pascal nicht, da kann du nur eine Prozedur schreiben.
          In Turbo Pascal gibt es noch die Delay() Anweisung, auch wenn sie mittlerweile als veraltet gilt, so ist sie dennoch vorhanden.


          @ Threadstarter
          Damit Code besser lesbar ist sollte man sich daran gewöhnen diesen einzurücken.
          Ein paar praktische Links:
          In Deutschland empfangbare FreeTV Programme und die jeweiligen Satellitenpositionen
          Aktuelles Satellitenbild
          Radioaktivitätsmessnetz des BfS

          Kommentar


            #6
            Wir haben hier schon einen entsprechenden Thread :
            "...To boldly go where no man has gone before."
            ...BASED UPON "STARTREK" CREATED BY GENE RODDENBERRY...

            Kommentar


              #7
              Ich brauche nochmal eure Hilfe, und zwar habe ich hier ein Programm, dass einfach eine Datei in ein anderes Verzeichniss kopieren soll, aber es kopiert nicht (D'OH):
              Code:
              program kopier;
              
              {$APPTYPE CONSOLE}
              
              uses
                Windows;
              
              begin
                CopyFile('C\Programme\Orbitron\Tle\stations.txt','C\LXSAT\', True);
              end.
              68 61 62 61 64 61 2d 68 61 62 61 64 61

              Kommentar


                #8
                ersetze mal
                CopyFile('C\Programme\Orbitron\Tle\stations.txt','C\LXSAT\', True);
                durch
                CopyFile('C:\Programme\Orbitron\Tle\stations.txt','C:\LXSAT\', True);
                "Wer Sicherheit der Freiheit vorzieht ist zu Recht ein Sklave"
                (Aristoteles 384 v.Chr. - 322 v.Chr.)

                Kommentar


                  #9
                  Danke, geht aber immer noch nicht.
                  Hab aber den Fehler gefunden :
                  Code:
                  program kopier;
                  
                  {$APPTYPE CONSOLE}
                  
                  uses
                    Windows;
                  
                  begin
                    deletefile('C:\LXSAT\stations.txt');
                    deletefile('C:\LXSAT\visual.txt');
                    CopyFile('C:\Programme\Orbitron\Tle\stations.txt','C:\LXSAT\stations.txt',true);
                    writeln('Stations.txt kopiert');
                    CopyFile('C:\Programme\Orbitron\Tle\visual.txt','C:\LXSAT\visual.txt',true);
                    writeln('Visual.txt kopiert');
                    readln;
                  end.
                  68 61 62 61 64 61 2d 68 61 62 61 64 61

                  Kommentar


                    #10
                    Ich hab noch eine Frage, und zwar, wie kann ich in Pascal (nicht Turbopascal) Punkte auf den Bildschirm ausgeben, wenn ich x und y kenne?
                    68 61 62 61 64 61 2d 68 61 62 61 64 61

                    Kommentar


                      #11
                      Im grafischen geht es mit PutPixel oder SetPixel, bin mir gerade nicht sicher. Oder meisnt du was anderes?

                      Code:
                      procedure PutPixel(x, y : Integer; Farbe : Word);
                      Textemitter, powered by C8H10N4O2

                      It takes the Power of a Pentium to run Windows, but it took the Power of 3 C-64 to fly to the Moon!

                      Kommentar


                        #12
                        Ok, danke, aber wie komme ich in den Graphikmodus?
                        Wir hatten noch nie die grafikbasierte Ausgabe im Unterricht, sondern nur Textausgabe.

                        Btw, was ich vorhabe ist ein Programm, dass die Umlaufbahn eines Planeten um die Sonne zeigt, die Berechnungen sind einfach, in Qbasic klappt es auch, allerdings kann ich da keine .exe kompilieren, und in Pascal kann ich auch noch was dazu lernen .
                        68 61 62 61 64 61 2d 68 61 62 61 64 61

                        Kommentar


                          #13
                          In Pascal musst du dazu die TPU Graph einbinden.

                          Den Rest machst du dann mit
                          Code:
                          var treiber, modus : integer; 
                          BEGIN 
                           treiber:=detect; 
                           initgraph(treiber,modus,''); 
                          END.
                          Textemitter, powered by C8H10N4O2

                          It takes the Power of a Pentium to run Windows, but it took the Power of 3 C-64 to fly to the Moon!

                          Kommentar


                            #14
                            Zitat von ayin Beitrag anzeigen
                            In Pascal musst du dazu die TPU Graph einbinden.

                            Den Rest machst du dann mit
                            Code:
                            var treiber, modus : integer; 
                            BEGIN 
                             treiber:=detect; 
                             initgraph(treiber,modus,''); 
                            END.
                            Ah, cool, danke.
                            Hab aber grad mal geguckt, das funktioniert nur bei Turbo-Pascal, ich hab aber nur Object-Pascal .
                            Naja, wenigstens weiß ich, in welcher Richtung ich suchen muss .


                            Edit:
                            Hmh, finde nichts passendes, vielleicht weiß jemand ja wies geht:
                            In der Mitte des Bildschirms soll die Sonne als gelber Kreis gezeichnet werden, die Planetenbahn soll dann anhand der x und y Koordinaten gezeichnet werden, wobei dann die Sonne der Ursprung ist, also (0|0).
                            Das Berechnen klappt, aber das Zeichnen nicht.
                            Zuletzt geändert von mattberg; 27.02.2009, 20:54.
                            68 61 62 61 64 61 2d 68 61 62 61 64 61

                            Kommentar


                              #15
                              wenn ich nocheinmal auf den Anfang zurückkommen darf, füge mal unter randomize; folgendes ein und schaue was passiert :

                              Code:
                              Textcolor(10);
                              Clrscr;
                              und um die Geschwindigkeit der Durchlaufenden Zeichen zu verlangsamen gibst du delay(s) ein, wobei du mein s duch die Zeitn ersetzt, um die es sich verzögert.
                              MfG

                              Edit: Ich empfehle dir DevPas (Developer Pascal heißt das glaube ich) Das ist das beste Pascal Programm dass ich kenne und auch Freeware.
                              Postedit: Ich habe das gerade ersteinmal selbst ausprobiert und fest gestellt, dass mein Tipp nur funktioniert wenn man crt statt sysutilis, ich glaube aber dann funktioniert dass mit dem randomize nichtmehr, also ist doch nicht so einfach wie ich dachte *schäm*

                              So 3. Edit:
                              Da es ja nicht ging, habe ich es nochmal komplett neu geschrieben, hoffe du bist mir nicht böse, aber ich will dir nur die Möglichkeiten aufzeigen:
                              Code:
                              program Matrix;
                              
                              uses
                                  crt;
                              var
                                 a: integer;
                              begin
                                   randomize;
                                   Textcolor(10);
                                   Clrscr;
                                   a:=1;
                                   repeat
                                         repeat
                                               write(random(9),'  ');
                                               a:=a+1
                                         until a = 40;
                                         writeln;
                                         delay(50);
                                         a:=1;
                                   until 0=1;
                              end.
                              Zuletzt geändert von Ptah; 02.03.2009, 21:39.
                              Sucht nicht das Böse in eurem Nachbarn, damit es nicht Einzug hällt in euer Haus!
                              -Quelle: Buch des Ursprungs-
                              Spielleiter beim Kampfstern Cygnus - RolePlayingGame . -+- . Co-Gamemaster beim SG1 - RolePlayingGame

                              Kommentar

                              Lädt...
                              X