abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | Nová verze

    Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

    Ladislav Hagara | Komentářů: 0
    dnes 04:11 | Nová verze

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    včera 23:22 | IT novinky

    Evropský parlament dnes přijal směrnici týkající se tzv. práva spotřebitele na opravu. Poslanci ji podpořili 584 hlasy (3 bylo proti a 14 se zdrželo hlasování). Směrnice ujasňuje povinnosti výrobců opravovat zboží a motivovat spotřebitele k tomu, aby si výrobky nechávali opravit a prodloužili tak jejich životnost.

    Ladislav Hagara | Komentářů: 1
    včera 16:11 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 4
    včera 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 16
    včera 13:33 | Komunita

    Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | Nová verze

    Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (10%)
     (2%)
     (17%)
    Celkem 699 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Přepis programu z turbo pascalu na céčko

    23.5.2011 18:02 --- | skóre: 13 | blog: LINUXDRAK
    Přepis programu z turbo pascalu na céčko
    Přečteno: 1007×
    Dobrý den, potřeboval bych pomoci s přepisem vlastní aplikace z turbopasclu na cécko. Zatím moc jsem nepochopil práci s poentry. Tak bych potřeboval drobet nakopnout.
    program vratnice;
    uses crt,graph,printer;
    const hlaska ='Stisknete libolny znak ...';
    const verze = '1.1.2 (BETA)';
     
    type vozidlo = record
    spz:string[8];
    ridic:string[19];
    poznamka:string[7];
    end;
     
    var
    vuz:vozidlo;
    f,g:file of vozidlo;
    i,vel,gd,gm:integer;
    odpoved:char;
    zadani:string[19];
    soubor:string;
    trideno:boolean;
    nalezeno:boolean;
     
    procedure iniciace;
    begin
    checkbreak:=false;
    clrscr;
    window(1,1,20,16);
    gd:=1;gm:=1;
    assign(f,'vratnice.data');
    {$I-}
    reset(f); {testuje zda soubor existuje}
    {$I+}
    if ioresult <> 0 then rewrite(f); { kdyz ne tak ho vytvori}
    close(f);
    end;
     
    procedure pozdrav;
    begin
    writeln('Vitejte ve vratnici');
    writeln('-------------------');
    writeln('Verze: ',verze);
    writeln('Autor: Jan Brunclik');
    writeln('Mobil: 775 384 910');
    writeln;
    writeln('Pokracujte stiskem libovolne klavesy ...');
    repeat until keypressed;
    end;
     
    procedure cekej;
    begin
    writeln;
    write(hlaska);
    repeat until keypressed;
    end;
     
    procedure trid; {tridi metodou BUBLE SORT}
    var
    a,b,p:vozidlo;
    prohoz:boolean;
    begin
    reset(f);
    vel:=filesize(f);
    close(f);
    repeat
    prohoz:=false;
    for i:=0 to (vel-2) do begin
    reset(f);
    seek(f,i);
    read(f,a);
    read(f,b);
    close(f);
    if a.spz>b.spz then begin
    p:=b;
    b:=a;
    a:=p;
    prohoz:=true;
    end;
    reset(f);
    seek(f,i);
    write(f,a);
    write(f,b);
    close(f);
    end;
    until prohoz=false;
    trideno:=true;
    end;
     
    procedure vypis; {vypis obsahu souboru}
    var
    vuz:vozidlo;
    begin
    clrscr;
    writeln('+----------------+');
    writeln('| Pocet vozidel  |');
    writeln('+----------------+');
    writeln;
    reset(f);
    writeln('Nalezeno : ',filesize(f),' vozidel.');
    close(f);
    cekej;
    end;
     
    procedure pridat; {prida zaznam na konec souboru}
    begin
    reset(f);
    seek(f,filesize(f)); {nastaveni ukazatele na konec souboru}
    repeat
    clrscr;
    writeln('+--------------+');
    writeln('| Pridani vozu |');
    writeln('+--------------+');
    writeln;
    with vuz do begin {nacteni dat}
    write('SPZ : ');
    readln(spz);
    write('Ridice : ');
    readln(ridic);
    write('Poznamku : ');
    readln(poznamka);
    end;
    write(f,vuz); {zapis do souboru}
    writeln;
    writeln('Vuz s "',vuz.spz,'" byl pridan.');
    writeln;
    writeln('Dalsi zaznam? A/N');
    until upcase(readkey)<>'A';
    close(f);
    trideno:=false;
    end;
     
    procedure vyhledat; {vyhleda podle spz vozidla}
    var
    nvuz:Array[1..9] of vozidlo;
    pocet:integer;
     
    begin
    clrscr;
    nalezeno:=false;
    writeln('+-------------+');
    writeln('| Hledani SPZ |');
    writeln('+-------------+');
    writeln;
    reset(f);
    write('SPZ : ');
    readln(zadani);
    clrscr;
    writeln('+------------------+');
    writeln('| Vysledek hledani |');
    writeln('+------------------+');
    writeln;
    for i:=1 to filesize(f) do begin
    read(f,vuz);
    if zadani=copy(vuz.spz,4,4) then
    begin
    nalezeno:=true;
    with vuz do begin
    writeln(spz);
    writeln(ridic);
    writeln(poznamka);
    end
    end;
    end;
    if not nalezeno then
    writeln('Vuz s "',zadani,'" nenalezen !');
    close(f);
    writeln;
    cekej;
    end;
     
    procedure odstranit; {odstrani zaznam ze souboru}
    begin
    clrscr;
    nalezeno:=false;
    assign(g,'tmp.data'); {pomocny soubor}
    writeln('+----------------+');
    writeln('| Odstraneni SPZ |');
    writeln('+----------------+');
    writeln;
    write('SPZ : ');
    readln(zadani);
    writeln;
    reset(f);
    rewrite(g);
    for i:=1 to filesize(f) do begin {do pomocneho souboru se prenesou}
    read(f,vuz);                     { vsechny zaznamy, krome toho    }
    if ((vuz.spz=zadani)or(length(vuz.spz)>=8)) then       { zadaneho }
    begin
    writeln('Vuz s "',vuz.spz,'" byl odstranen ze zaznamu.');
    nalezeno:=true;
    end
    else
    begin
    write(g,vuz);
    end;
    end;
    close(f);
    close(g);
    rewrite(f);
    reset(g);
    for i:=1 to filesize(g) do begin
    read(g,vuz); {zaznamy se prenesou zpet do hlavniho souboru}
    write(f,vuz);
    end;
    close(f);
    close(g);
    erase(g); {pomocny soubor se vymaze}
    if not nalezeno then
    writeln('Vuz s "',zadani,'" nebyl nalezen.');
    writeln;
    cekej;
    end;
     
    procedure tisk; {tisk vsech povolenek serazene podle SPZ}
    var ft:text;i:integer;
    begin
    clrscr;
    writeln('+--------------+');
    writeln('|Tisk povolenek|');
    writeln('+--------------+');
    writeln;
    write('Trideni ... ');trid;write('[ok]');
    writeln(lst,'Projekt Vratnice ');
    writeln(lst,'Jan Brunclik 2011');
    writeln(lst,'737 385 291');
    writeln(lst,'');
    writeln(lst,'+----------------+');
    writeln(lst,'| Tisk povolenek |');
    writeln(lst,'+----------------+');
    writeln(lst,'');
    reset(f);
    writeln('Tisknu celkem ',filesize(f),' povolenek');
    for i:=1 to filesize(f)-1 do begin
    seek(f,i);
    read(f,vuz);
    with vuz do begin
    writeln(lst,spz:8,ridic:20,poznamka:8);
    end
    end;
    close(f);
    cekej;
    end;
     
    procedure import;
    var
    fe: text;
    i : integer;
    radek : string;
    begin
    clrscr;
    writeln('+----------------+');
    writeln('|Import povolenek|');
    writeln('+----------------+');
    writeln;
    assign(fe,'vratnice.csv');
    rewrite(f);reset(fe);
    radek:='';
    while not eof(fe) do begin
    with vuz do begin
    readln(fe,radek);
    spz:=copy(radek,1,7);
    radek:=copy(radek,9,length(radek));
    ridic:=copy(radek,1,pos(',',radek)-1);
    poznamka:=copy(radek,pos(',',radek)+1,length(radek));
    end;
    write(f,vuz);
    end;
    close(f);close(fe);
    writeln('Hotovo');cekej;
    end;
     
    procedure export; {export aut do souboru vratnice.csv}
    var
    fe : text;
    i : integer;
    begin
    clrscr;
    writeln('+----------------+');
    writeln('|Export povolenek|');
    writeln('+----------------+');
    writeln;
    assign(fe,'vratnice.csv');
    reset(f);rewrite(fe);
    for i:=1 to filesize(f)-1 do begin
    seek(f,i);
    read(f,vuz);
    with vuz do begin
    writeln(fe,spz,',',ridic,',',poznamka);
    end
    end;
    writeln('Hotovo');
    close(fe);close(f);
    cekej;
    end;
     
    {definice jednotlivych funkcich}
    procedure hledat_spz;begin;end;
    procedure hledat_jmena;begin;end;
    procedure hledat_datum;begin;end;
     
    procedure evidence_hledat;begin;end;
    procedure evidence_pridat;begin;end;
    procedure evidence_editovat;begin;end;
    procedure evidence_smazat;begin;end;
    procedure evidence_opravit;begin;end;
    procedure evidence_import;begin;end;
    procedure evidence_export;begin;end;
     
    procedure kontrola_hledat;begin;end;
    procedure kontrola_pridat;begin;end;
    procedure kontrola_editovat;begin;end;
    procedure kontrola_smazat;begin;end;
    procedure kontrola_opravit;begin;end;
    procedure kontrola_import;begin;end;
    procedure kontrola_export;begin;end;
     
    procedure povolenky_hledat;begin;vyhledat;end;
    procedure povolenky_pridat;begin;pridat;end;
    procedure povolenky_editovat;begin;end;
    procedure povolenky_smazat;begin;odstranit;end;
    procedure povolenky_opravit;begin;end;
    procedure povolenky_import;begin;import;end;
    procedure povolenky_export;begin;export;end;
    procedure povolenky_vypsat;begin;end;
    procedure povolenky_tisk;begin;tisk;end;
     
    procedure obedy_hledat;begin;end;
    procedure obedy_pridat;begin;end;
    procedure obedy_editovat;begin;end;
    procedure obedy_smazat;begin;end;
    procedure obedy_opravit;begin;end;
    procedure obedy_import;begin;end;
    procedure obedy_export;begin;end;
     
    procedure smeny_hledat;begin;end;
    procedure smeny_pridat;begin;end;
    procedure smeny_editovat;begin;end;
    procedure smeny_smazat;begin;end;
    procedure smeny_opravit;begin;end;
    procedure smeny_import;begin;end;
    procedure smeny_export;begin;end;
     
    procedure klice_hledat;begin;end;
    procedure klice_pridat;begin;end;
    procedure klice_editovat;begin;end;
    procedure klice_smazat;begin;end;
    procedure klice_opravit;begin;end;
    procedure klice_import;begin;end;
    procedure klice_export;begin;end;
     
    {definice jednotlivych menu}
    procedure menu_hledat;begin;end;
    procedure menu_evidence;begin;end;
    procedure menu_kontrola;begin;end;
     
    procedure menu_povolenky;
    begin
    repeat
    clrscr;
    writeln('+--------------+');
    writeln('|   Povolenky  |');
    writeln('+--------------+');
    writeln('| 1 - Hledat   |');
    writeln('| 2 - Pridat   |');
    {writeln('| 3 - Editovat |');}
    {writeln('| 4 - Smazat   |');}
    {writeln('| 5 - Opravit  |');}
    writeln('| 6 - Import   |');
    writeln('| 7 - Export   |');
    {writeln('| 8 - Vypsat   |');}
    writeln('| 9 - Tisk     |');
    writeln('+--------------+');
    writeln('| 0 - Zpet     |');
    writeln('+--------------+');
    odpoved:=upcase(readkey);
    case odpoved of
    '1':povolenky_hledat;
    '2':povolenky_pridat;
    {'3':povolenky_editovat;}
    {'4':povolenky_smazat;}
    {'5':povolenky_opravit;}
    '6':povolenky_import;
    '7':povolenky_export;
    {'8':povolenky_vypsat;}
    '9':povolenky_tisk;
    end;
    until odpoved='0';
    end;
     
    procedure menu_obedy;begin;end;
    procedure menu_uzivatele;begin;end;
    procedure menu_smena;begin;end;
    procedure menu_klice;begin;end;
    procedure menu_nastaveni;begin;end;
     
    begin {hlavni menu}
    iniciace;
    trideno:=false;
    pozdrav;
    repeat
    clrscr;
    writeln('+--------------+');
    writeln('|  Hlavni menu |');
    writeln('+--------------+');
    {writeln('| 1 - Hledat   |');}
    {writeln('| 2 - Evidence |');}
    {writeln('| 3 - Kontrola |');}
    writeln('| 4 - Povolenky|');
    {writeln('| 5 - Obedy    |');}
    {writeln('| 6 - Uzivatele|');}
    {writeln('| 7 - Smeny    |');}
    {writeln('| 8 - Klice    |');}
    {writeln('| 9 - Nastaveni|');}
    writeln('| . - Pocet    |');
    writeln('+--------------+');
    writeln('| Q,0 - Konec  |');
    writeln('+--------------+');
    write('Volba :');
    odpoved:=upcase(readkey);
    case odpoved of
    '1':menu_hledat;
    '2':menu_evidence;
    '3':menu_kontrola;
    '4':menu_povolenky;
    '5':menu_obedy;
    '6':menu_uzivatele;
    '7':menu_smena;
    '8':menu_klice;
    'Q','0':odpoved:=chr(27);
    {'T':trid;}
    ',','.':vypis;
    end;
    until odpoved=chr(27);
    end.
    

    Řešení dotazu:


    Odpovědi

    AraxoN avatar 23.5.2011 19:29 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Ak ovládaš Pascal a chceš sa naučiť C, neexistuje lepšia kniha než Pavel Herout: Učebnice jazyka C - 1. díl.
    23.5.2011 23:01 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Ahoj, mám tuto knížku, ale nepochopil jsem jak pracovat s poentry. Zdá se mi to zatím složité.

    Cečko potřebuji do své malé linuxové distrubuce, která běží jen v ramdisku. A nechce se mi tam dávat dosbox, abych spoustíl hotovou binárku pro dos.
    23.5.2011 21:02 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Tenhle dotaz se sem propadl asi nějakou červí dírou z fidonetu...
    In Ada the typical infinite loop would normally be terminated by detonation.
    AraxoN avatar 24.5.2011 00:02 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    :-D
    24.5.2011 00:06 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Na co narážíš ?
    rADOn avatar 24.5.2011 16:49 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Blast from the past. Tady ve 21. století je Pascal pohřbený stejně hluboko jako fortran a cobol. A zaplaťknuth za to. To co jsi tu vytáhl na světlo není jen kostlivec, ale rovnou zkamenělina. :-)

    BTW nakolik je z toho kódu poznat účel a úmysl, dalo by se to přepsat do pár řádků v nějakém skriptovacím jazyce s jednoduchou databází. Ale jestli se chceš naučit C tak držím palce. A když tak koukám na to clrscr;… další věc kterou budeš hledat je knihovna curses.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    24.5.2011 17:46 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    fortran nastesti jeste pohrbeny neni... ;-)
    24.5.2011 18:30 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Ano vím, že je pascal už dost starý.

    Použít raději curses nebo ncurses ?

    Přemýšlel jsem že bych použil dialog --menu a další parametry.

    Sice to mohu nascriptovat, ale spíše bych to chtěl jako binárku, aby mi do toho BFU uživatel nelezl.
    rADOn avatar 25.5.2011 14:01 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Použít raději curses nebo ncurses ?
    Curses je název původní knihovny pro unixy, ncurses je GNU implementace. API je stejné a na linuxu afaik nic jiného než ncurses není, takže není co řešit :-)
    Přemýšlel jsem že bych použil dialog --menu a další parametry.
    Pokud vystačíš s něčím tak primitivním, tak opravdu binárku nepotřebuješ. Parsovat textový výstup z podprocesu se mi zdá víc práce než volat funkce v knihovně, dokonce i s tak hnusným API jako má curses.
    Sice to mohu nascriptovat, ale spíše bych to chtěl jako binárku, aby mi do toho BFU uživatel nelezl.
    Co myslíš tím "nelezl"? Zní to jako security through obscurity. Když už někdo umí skriptovací jazyk, tak už to u mě není BFU.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    31.10.2011 18:59 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Můžeš prosím uvést příklad ?
    24.5.2011 18:48 Matlák
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Blast from the past. Tady ve 21. století je Pascal pohřbený stejně hluboko jako fortran a cobol.

    ... a přesto je v v pascalu napsána spousta placených drahých aplikací, přesto je v něm napsaný hojně používaný totalcommander, pspad.. a další plno windows aplikací :-)
    24.5.2011 20:44 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Na pascalu se mi líbí práce s grafickými knihovnami.

    25.5.2011 00:15 l4m4
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Knihovnami? Jakými? Pokud si vzpomnám, tak v Pascalu jsme vždy zapisovali přímo do paměti grafické karty, pokud se mělo něco rozumného vykreslit...
    rADOn avatar 25.5.2011 14:05 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Soudě podle kódu má Drak asi na mysli nejzbytečnější knihovnu v historii informatiky: EGAVGA.BGI :-)
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    25.5.2011 14:59 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    No když to srovnám s DirectX…, tak nevím :-)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    26.5.2011 16:10 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Existuje něco podného pro cecko ? Myslím, když člověk má pustěný x server.
    rADOn avatar 26.5.2011 16:44 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Človíčku ty jsi sem fakt propadl z minulého století :-)

    Jestli chceš psát hry, hledáš nejspíš knihovnu SDL. Djgpp taky nebývala špatná a přenositelná na wydle. Jestli si chceš jen nakreslit nějaký graf nebo schéma, toolkity mívají nějaký prvek na který se dá kreslit. O komunikaci s X serverem se stará knihovna xlib nebo xcb ale to už je hodně low-level, nic pro obyčejné smrtelníky :-). OpenGL bych raději pro jednoduchost taky vynechal.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    24.5.2011 19:36 rastos | skóre: 62 | blog: rastos
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Tady ve 21. století je Pascal pohřbený stejně hluboko jako fortran a cobol.
    Priateľu, realita je taká, že Pascal (Delphi), Fortran aj Cobol sa majú čulo k svetu. Len je to (hlavne v prípade Fortranu a Cobolu) iná liga.
    24.5.2011 22:00 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Moje původní poznámka nenaráží na programovací jazyk, ale programovací techniku. A jen pro úplnost, Turbo Pascal a Delphi jsou dva dost odlišné světy.
    In Ada the typical infinite loop would normally be terminated by detonation.
    24.5.2011 20:31 JS
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Nekoho ty zkameneliny bavi.. JCL, to je teprve neco. ;-)
    25.5.2011 00:21 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Ony to nejsou az takovy zkameneliny jak by se nekomu nezasvecenymu mohlo zdat... ;-)

    Treba fortran se pouziva na vypocty a pouzivat se bude, protoze C a spol obsahuje urcity veci (napr. pointery) kvuli kterym je prakticky nemozny napsat rozumny optimalizator...
    rADOn avatar 25.5.2011 14:24 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    AFAIK optimalizátor C už existuje a jmenuje se kompiler :-) A ukazatele se moc neoptimalizují proto, že už jsou zoptimalizované až na kost. Co chceš optimalizovat na adrese v paměti?

    O přetrvávání fortranu jsem slyšel dost, ale spíše jako ukázku zatvrzelého konzervativismu :-) Chápu že přepisovat speciální knihovny na drcení čísel asi nemá moc smysl, ale pochybuju že by dnes někdo ve fortranu začal nový projekt. Dobře, není mrtvý, ale v zaslouženém důchodu.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    25.5.2011 14:48 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Adresu neni potreba optimalizovat. Problem je ze ta adresa muze ukazovat na cokoli, coz je sice super z pohledu programatora ale uz ne z pohledu optimalizatoru. Treba kdyz pres ukazatel nekam zapises tak je problem rozhodnout ktery promenny nacteny v registrech jsou porad platny a ktery se musi nacist znovu...

    C/C++ se tohle snazi castecne resit pomoci strict aliasing rule, nebo pomoci klicoveho slova __restrict, ale stejne to neni ono.

    Fortran prave proto ze mu chybi nektery bezny vlastnosti dnesnich jazyku, tak se da lip optimalizovat a programy ve fortranu jsou rychlejsi...
    rADOn avatar 25.5.2011 18:42 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Problem je ze ta adresa muze ukazovat na cokoli, coz je sice super z pohledu programatora ale uz ne z pohledu optimalizatoru. Treba kdyz pres ukazatel nekam zapises tak je problem rozhodnout ktery promenny nacteny v registrech jsou porad platny a ktery se musi nacist znovu...
    Pokud vyjdu z odvážného předpokladu, že většina programátorů dnes nepíše ovladače a nepotřebuje se hrabat v IO portech nebo jiné mapované paměti – čemu to vadí? Pokud bych vymyslel architekturu a kompiler který by něco takového umožňoval, byl by tedy mnohem rychlejší než "neoptimalizovaný" kód na takové architektuře. Jenže byl by taky rychlejší než klasické ukazatele, které jsou "optimální" v jiných ohledech? Například zapomenutí registru je na dnešním železe AFAIK menší problém protože máš slušnou šanci trefit interni cache. Ktera je účinná kromě jiného i proto že prosté adresy jsou jednoduche na, ehm, optimalizaci :-)

    Nebo na něco zapomínám?
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    25.5.2011 22:16 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko

    IMHO měl kolega na mysli spíš tohle:

    uint64_t data; uint64_t* p8 = &data; uint32_t* p4 = (uint32_t*) &data;

    Teď budete chvíli pracovat s p8, chvíli s p4… Překladač neví, jestli když něco zapíšete do *p8, očekáváte, že následně hodnota *p4 bude záviset na tom, co jste tam zapsal. Pro optimalizátor by bylo ideální, kdyby mohl předpokládat, že ne, ale řada programů spoléhá na to, že ano (a musejí se překládat s -fno-strict-aliasing).

    25.5.2011 22:19 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Omlouvám se za code místo pre, snad je to srozumitelné i takhle.
    rADOn avatar 26.5.2011 11:56 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    To je totéž v bledě modrém. Co zapíšu skrz jeden pointer by mělo uvíznout v cache procesoru a být čitelné skrz druhý. "Optimalizace" možná ušetří instrukci ale ne moc skutečného času protože L1 je rychlá. A naopak přidá indirekci která se na optimalizacích prováděných CPU může projevit negativně.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    26.5.2011 12:09 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Aha, takze precist to z pameti do registru a provest operaci bude nakonec rychlejsi nez primo provest operaci :-)

    I pokud by cteni z cache bylo stejne rychly jako provedeni operace, coz se obavam ze neni, tak ve vysledku to bude 2x pomalejsi... ;) A ted si predstav ze neco takovyho mas ve vnitrni smycce.

    btw. samozrejme se bavime o aplikacich ktery potrebuji hruby vypocetni vykon, ne o scriptech v bashi kde te par instrukci (milionu instrukci) nemusi zajimat...
    rADOn avatar 26.5.2011 13:20 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    I pokud by cteni z cache bylo stejne rychly jako provedeni operace, coz se obavam ze neni, tak ve vysledku to bude 2x pomalejsi... ;)
    Chyba, nejsi na PDP-10 :-) Čtení z paměti je na x86 mnohem pomalejší než samotná operace, čtení z cache je ve srovnání s tím zanedbatelné. Ergo pokud čekáš hromadu taktů na paměť, instrukce navíc není velký rozdíl. Všimni si že v kernel trafficu tady na abíčku se často zmiňuje že lidi od kernelu se nerozpakují přidat kód jen aby udrželi hardwarové cache pořádně nažhavené.

    Pokud by ta operace navíc musela (často) taky čekat na paměť, bylo by to samozřejmě o něčem jiném. Prostě tím že jsou věci jednoušší se ztížila práce kompileru, ale zase ulehčila CPU. A kompiler se taky nefláká, i když nemůže instrukce zahodit, může je řadit tak aby se cache co nejvíc využívaly. Nějaký rozdíl v tom bude, ale rozhodně to nebude 2x pomalejší.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    26.5.2011 12:28 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Jenže při troše štěstí se může stát, že se hodnota *p4 nakonec nikde v paměti neobjeví a celou dobu svého života může být jen v registru (a ten pointer bude jen fiktivní pointer kvůli předávání odkazem do nějaké inline funkce), zatímco *p8 bude regulérní 64-bitová hodnota v paměti a p8 regulérní pointer na ni. Bez strict aliasing rules takovou optimalizaci udělat nemůžete.
    23.5.2011 23:06 rastos | skóre: 62 | blog: rastos
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Zatím moc jsem nepochopil práci s poentry. Tak bych potřeboval drobet nakopnout.

    Po zbežnom prečítaní:

    A kde tam máš nejaké pointre? Tie budeš potrebovať akurát tak pri čítaní zo súboru. Napr namiesto

    read(f,vuz);

    budeš mať

    read(f,&vuz, sizeof(vuz));

    Čo ešte iné potrebuješ?
    24.5.2011 00:00 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Akorád stále přemýšlím, jak vytvořit a pracovat se strukturou.
    24.5.2011 00:01 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Viz řádek 6 až 20.
    24.5.2011 00:14 rastos | skóre: 62 | blog: rastos
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    type vozidlo = record
    spz:string[8];
    ridic:string[19];
    poznamka:string[7];
    end;
      
    var
    vuz:vozidlo;
    f,g:file of vozidlo;
    i,vel,gd,gm:integer;
    odpoved:char;
    zadani:string[19];
    soubor:string;
    trideno:boolean;
    nalezeno:boolean;
    typedef struct
    {
      char spz[9];
      char ridic[20];
      poznamka string[8];
    } vozidlo;
    
    vozidlo vuz;
    int f,g;
    int i,vel,gd,gm;
    char odpoved;
    char zadani[20];
    char *soubor; // ??
    int trideno;
    int nalezeno;
    24.5.2011 00:19 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Díky za postrčení.
    24.5.2011 20:35 Xerces
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    A co kdybys to nepřepisoval a normálně používal Free Pascal? Ten se dál vyvíjí myslím. A máš snad jedno jakej compiler máš nainstalovanej jestli gcc nebo tc.
    24.5.2011 21:45 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Sice by to šlo, ale chci to kompilovat tcc.

    Jen si nedokáži představit ten binární přístupu do souboru. Počítám, že si spočítám přes sizeof velikos struktury a vynásobím jí pozici a od toho místa načtu data ?
    26.5.2011 16:11 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Zatím jsem se všiml, že gcc vytváří větší binární soubor než tcc.
    26.5.2011 16:22 Radovan
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Tak zkus po kompilaci udělat strip zkompilovany_program aby se odstranilo všechno nepotřebné ;-)
    26.5.2011 17:10 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Zkusím , to mě nenapadlo.
    26.5.2011 17:12 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Drobet pomohlo ,jen o necelych 700B .
    27.5.2011 00:10 Radovan
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Tak nic, mě to obvykle skrouhne kolem 4 KB.
    27.5.2011 15:03 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Jesli chápu dobře, smaže to jen ladicí informace.
    27.5.2011 19:20 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Těch "jen" ladících informací může být i několikanásobek toho, co zbyde. Záleží na tom, co a jak překládáte.
    25.5.2011 06:51 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Nevím, co jsou poentry, ani Google nepomohl (did you mean poetry?), ale držím palce při studiu těch... věcí.
    25.5.2011 13:47 --- | skóre: 13 | blog: LINUXDRAK
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Vyjádřil jsem se špatně. Česky řečeno - ukazatele.
    25.5.2011 20:56 ext3fs
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko
    Pointer nebo-li ukazatel nebo-li smernik je vysvetlen v jakekoli ucebnici jazyka C.

    int i; /* je promenna typu int (vyhrazene misto v pameti vetsinou 4 byte pro celociselnou hodnotu)*/

    int *i; /*je ukazatel na typ int (ukazuje na adresu (relativni adresa), ktera ukazuje na misto vyhrazene v pameti (absolutni adresa) pro int...)*/

    To je podle mne cely zaklad vedy ukazatelu.
    Řešení 1× (mich)
    pepe_ avatar 31.10.2011 21:51 pepe_ | skóre: 48
    Rozbalit Rozbalit vše Re: Přepis programu z turbo pascalu na céčko

    Co to prepsat do bashe ?

    Bude to snad jen o malo delsi... (ale nevim jak se v nem tiskne) ...

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.