1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Zahlen hochzählen lassen per batch

Discussion in 'Programmieren' started by ov440815, Feb 19, 2013.

Thread Status:
Not open for further replies.
  1. kazhar

    kazhar Viertel Gigabyte

    hmm...

    erstmal den code in die zwischenablage kopieren

    fpc starten, file -> new; edit -> paste from windows
    dann sollte der text mal da stehen
    compile -> compile -> namen eingeben, ok drücken

    die .exe findest du dann im fpc\out ordner...
     
  2. ov440815

    ov440815 Byte

    so .... klappt. aber bis 99999999 zählen lassen is ja wahnsinnnnn. :)
     
  3. kazhar

    kazhar Viertel Gigabyte

    :grübel: das war doch deine beknacke idee?!?

    btw
    bin hat mir keine ruhe gelassen und bin bei 41 sekunden angekommen, was ca 25 sekunden schneller ist als roots c-code (kompiliert mit gcc) auf meiner maschine :D
    Code:
    Program Zahl;
    uses VPSyslow;
    
    var s, t: shortstring;
        lv, res: longint;
        md: byte;
        sl: byte absolute s;
        st: byte absolute t;
    begin
         t:='00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+
            '00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+                                                                        
            '00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+
            '00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+
            '00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+
            '00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+'00000000'+#13#10+
            '00000000'+#13#10;
         for lv:=0 to 99999999 do
         begin
              md:=lv mod 25;
              str(lv, s);
              move(s[1], t[md*10 + 9 - sl], sl);
              
              if md = 24 then
              begin
                   SysFileWrite(SysFileStdOut, t[1], st, res);
              end;          
         end;
         SysFileFlushBuffers(SysFileStdOut);
    end.
    
     
  4. root

    root Megabyte

    :eek:
    Und du hast es auch richtig ausgeführt? (programm > datei) Die Ausgabe auf der Konsole dauert nämlich um einiges länger als das Speichern in einer Datei.
    Hier ist eine Variante, die direkt in eine Datei speichert (benötigt hier ca. 27,5s):
    Code:
    #include <stdio.h>
    
    int main()
    {
      int i;
      FILE *out;
    
      out = fopen("output-99999999", "w");
      if (out != NULL)
        {
          for (i = 0; i < 100000000; i++)
            {
              fprintf(out, "%08i\n", i);
            }
          fclose(out);
        }
    }
    Ich wollte gerade dein Programm ausprobieren, aber mangels Unit VPSyslow lässt sich das nicht kompilieren (FreePascal unter Linux 64-bit).
     
  5. kazhar

    kazhar Viertel Gigabyte

    mein rechner hat halt schon den einen oder anderen tag am buckel ;)
    eventuell könnte ich auch mal versuchsweise boinc pausieren.

    kannst ja den string einfach per write(t); ausgeben. dauert eben etwas länger. weil 'ne schicht mehr am werkeln ist.

    außerdem bin ich auf einen interessanten effekt gestoßen:
    Code:
    Program Zahl2;
    uses VPSyslow;
    
    type tBuffer = array[0..0] of char;
         pBuffer = ^tBuffer;
    
    const Zero: pChar = '00000000'+#13#10;
    
    var lv: longint;
        Buffer: pBuffer;
        s: shortstring;
        sl: byte absolute s;
    begin
         getMem(Buffer, 1000000000);
    
         for lv:=0 to 99999999 do
         begin
              str(lv, s);
              move(Zero^, Buffer^[lv*10], 10);
              move(s[1], Buffer^[lv*10+8-sl], sl);
         end;
    
         SysFileWrite(SysFileStdOut, Buffer^, 1000000000, lv);
         SysFileFlushBuffers(SysFileStdOut);
    
         dispose(Buffer);
    end.
    
    gibt wunderbar per zahl2 > erg.txt aus, will aber nicht auf die konsole schreiben...
     
  6. root

    root Megabyte

    Nach kurzer Internetrecherche verstehe ich jetzt, warum dein Pascal-Programm mit VPSyslow schneller ist als mein C-Programm. Die Funktionen in der Unit rufen Assembler-Befehle auf. Damit ist mein Weltbild wiederhergestellt. Pascal schneller als C? Unmöglich. :D
     
  7. ov440815

    ov440815 Byte

    damit kann ich das free pascal füttern ja ¿
     
  8. ov440815

    ov440815 Byte

    gut. frage hat sich gerade erledigt. wo verdammt schreibt er mir denn die *.txt
    datei hin wo die zahlen drinnen stehen ?
     
  9. root

    root Megabyte

    Der Code aus Beitrag #19 funktioniert mit Free Pascal. Alle später geposteten benötigen die Unit VPSyslow, die Free Pascal nicht bereitstellt.

    EDIT: Das Programm muss über die Eingabeaufforderung mit folgendem Befehl aufgerufen werden:
    Code:
    programmname > datei.txt
    Die Zahlen sind dann in der Datei datei.txt.
     
  10. ov440815

    ov440815 Byte

    is das jetzt gut oder schlecht ......
     

    Attached Files:

  11. kazhar

    kazhar Viertel Gigabyte

    früher oder später kommt immer asm raus. mit text kommt die cpu nicht so richtig gut zurecht...
    vpsyslow stellt mehr oder weniger direkte schnittstellen zum dateisystem (bzw was das selbe ist: den io system) zur verfügung. merkt man unter anderem daran, dass man die länge des outbuffers angeben muss.

    @to, die meldung besagt, dass das programm ohne fehler durch gelaufen ist. du hast es halt falsch aufgerufen.
     
  12. ov440815

    ov440815 Byte

    wie rufe ich es denn richtig auf ?
    wenn ich auf run gehe kommt das cmd fenster für mh ca. 30sek.
    dann is wieder wech. genauso wenn ich die compelierte exe starte.
    nich das ich schon paar graue haare hätte. das lässt mir noch viel mehr wachsen. :)
     
  13. chipchap

    chipchap Ganzes Gigabyte

    Nochmal aus Neugier:
     
  14. ov440815

    ov440815 Byte

    das soll mir dazu dienen, wie lange ich brauche um mein wlan damit zu knacken.
    und dazu das ich wieder mal was neues gemacht habe. wenn ichs geschafft hab wird es wie sonst auch immer, schnell langweilig
     
  15. chipchap

    chipchap Ganzes Gigabyte

    Wenn was etwas dabei lernt, mag es gehen.
    Ansonsten wohl heiße Luft.
     
  16. kazhar

    kazhar Viertel Gigabyte

    dein wlan key wird sehr wahrscheinlich (bzw hoffentlich) auch buchstaben enthalten.

    das erhöht die anzahl der möglichen kombinationen um den faktor 20k. so eine große platte hast du garnicht :P
     
  17. ov440815

    ov440815 Byte

    ja hat er eigentlich auch. wollte es dennoch gerne testen. aber ohne die txt is das ein wenig schei......
    und der quellcode geht zwar aber ne txt erstellt er mir trozdem nicht.
    in excel dauerts zu lange die zahlen von 00000000-99999999 zu erstellen.
    mit batch dauerts auch ewig und ne woche.
     
  18. kazhar

    kazhar Viertel Gigabyte

    kopier dir doch einfach die exe datei nach c:\, mach eine konsole auf (<win><r> cmd <enter>) auf und gebe cd \ <enter> ein. dann tippst du dateiname.exe > text.txt <enter> ein und wartest etwas...
     
  19. PerryR

    PerryR Byte

    @chipchap : Glaubst du wirklich, dass er "mein" WLan meint ? Für mich geht das sehr in Richtung "hacken".
     
  20. ov440815

    ov440815 Byte

    ich habe doch gesagt das ich MEINS mit zahlen testen will.
    danke kazhar mit datei.exe > text.txt hata des nun gemacht
     
Thread Status:
Not open for further replies.

Share This Page