271
Turbo Pascal
  • Dj Faustus #271
    Elfogtam egy levelet:
    "Üdv. Köszönöm az eddigi segítségedet, de szeretném a segítséged kérni megint. Biztos furcsának fogod gondolni a kérdésem, meg hülyeségnek, de érdekel a dolog. Hisz hátha működik mivel ilyen egyszerű lenne. A lényeg, hogy ezeknél a rulett számítógépes játékoknál bizonyítottan, a számok nem véletlenül követik egymást. Meghatározott szisztémát követ az új szám, ami az előtte lévő 1.-2- számból kerül ki más alakban vagy valamilyen matematikai azonosságnak, műveletnek, kifejezésnek, stb köszönhetően. Nem igazán értek még sem a rulett programokhoz sem a programozáshoz, mind2-vel kapcsolatban kezdő vagyok. Arra gondoltam, hogy ha a rulett program álrandom számokat generál egy bizonyos kezdőértékből, ami az előtte lévő 1.-2. szám, akkor ha egy másik programban ezt a számot megadom kezdő értékként, és lefuttatok vele pár variációt(mondjuk 15öt) akkor a között a 15 random szám között amiknek ugyanaz volt a kezdőértékük ott kellene lennie nagy valószínűséggel annak a számnak amit majd a rulett program is "kitalálna", megjelenítene új számként. Szerinted ez mennyire butaság? Vagy más algoritmust használ mind2 program így lehetetlen lenne ezt meghatározni? Válaszod előre is köszönöm, remélem nem gondolsz hülyének :D"
    Nos, ha profi a program, akkor egyedi véletlenszám-generálást végez. Persze ennek működését (már ha a véletlenszám-generálást a gépen végzi) némi visszafejtegetéssel (lásd: #267-es hozzászólásom utolsó bekezdése) ki lehetne silabizálni.

    Ha ez valami online szolgáltatás, az is elképzelhető, hogy külső hardvert (lásd #270-es hozzászólásom) használnak, vagy valós eseményt (a valódi rulett-tárcsa alatt vannak érzékelők) közvetítenek. Persze ezekben is lehet némi szabályszerűség, de matematikus legyen a talpán, aki ezt "visszafejti".
  • Dj Faustus #270
    Itt láthattok az előző hozzászólásomban említett hardverre egy példát.
  • Dj Faustus #269
    Vegyük az alábbi egyszerű programkódot:
    program random;

    BEGIN
    writeln (randseed);
    randomize();
    writeln (randseed);
    END.


    Ennek a kimenete pár másodpercenkénti futtatás után (Free Pascal 2.4.0-ban fordítottam le, Linux alatt):
    # ./random
    0
    1323981023
    # ./random
    0
    1323981024
    # ./random
    0
    1323981025
    # ./random
    0
    1323981026

    Tehát a randomize az időből generálja le a randseed értékét, a random ezt az értéket használja fel a véletlenszám generálásánál.

    Ha neked ez nem tetszik, akkor neked kell megadnod a randseed értékét, amit generálhatsz bármiből. Akár az időből, egyedi algoritmus alapján; vagy mondjuk egy üres csatornára állított rádió kimenetét (ami fehérzajt fog szolgáltatni) kötöd rá analóg-digitál konverteren keresztül a párhuzamos portra és annak értékét olvasod le, stb...
  • Razputyn
    #268
    A randseed-el működik, köszönöm. Viszont azt, hogyan tudnám beállítani, hogy ugyanazzal a kezdőértékkel ne csak azt az 1 számot dobja ki folyamatos frissítésnél, hanem mondjuk 10szeres kiíratásnál másik számot is kiadjon? Az idő-vel kell valamit kezdeni vagy a válasz máshol keresendő?
  • Dj Faustus #267
    RYO21: Nem a Random fügvénnyel van Razputyn-nak baja, hanem a véletlengenerátor inicializálásával. Pascalban ezt a Randomize végzi, C-ben/C++-ban az srand.

    Razputyn: ha jól emlékszem, neked a RandSeed nevű változóra lesz szükséged.
    A Randomize az aktuális időből hozza létre a kezdőértéket - Itt láthatod visszafejtve, Assemblyben.
  • RYO21
    #266
    Read(x);
    y:=(Random(100)+x);
    Writeln(y);

    Lehet, hogy zárójel nem kell. Rég pascaloztam már, így nem nagyon emlékszem rá. Lehet, hogy nem is működik az, amit írtam.
  • Razputyn
    #265
    Sziasztok, szeretnék egy olyan programot készíteni a Turbo Pascallal, aminél megadok egy kezdőértéket, és az alapján ír ki random számokat. Olvastam, hogy a gép csak álvéletlen számokat tud generálni, a randomize parancs ad meg csak egy véletlen kezdőértéket ami alapján számolja a random parancs valamilyen algoritmus alapján a többi számot. Na most meglehetne azt oldani, hogy amit a randomize ad meg véletlen kezdőértéket, azt én adjam meg? Vagyis mondjuk randomnál beállítom, hogy 0-99-ig adhat random számot. A randomize generál egy számot ami alapján a random kiszámolja a "véletlen számot" na de hogy oldhatnám meg, hogy a randomize helyett én adjam meg azt a kezdőértéket. Remélem érthetően írtam, és tudtok segíteni. A lényeg, hogy, nekem 0 és 99 között kell, amihez a Random(100)-kell. Ezt értem, nekem az kellene, hogy a randomize helyett mást használjak. Mert ha nem használok randomizet akkor mindig ugyanazokat adja ki. Na de én úgy szeretném, hogy én adok meg a randomize helyett egy kezdőértéket ami alapján számolja ki a random számokat 0 és 99 között. Köszi előre is.
  • Looooser
    #264
    adott szöveget kell kiírni?
    write('-aposztrófok közé jön a szöveg a sima write az előző után azonos sorba fojtatólagosan írja ki a szöveget-');
    vagy
    writeln('-ez is az előző kiírás után írja a szöveget, csak új sorba kedi el-');

    ha egy változót is megszeretnél jeleníteni akkor
    a:=1
    write('szöveg ',a,' szöveg');

    program futtatásnál meg így néz ki:
    szöveg 1 szöveg
  • RYO21
    #263
    Üdv! Hogyan tudnám megoldani, hogy egy karakter vagy szám helyett több soros szöveget írjon ki a program?
  • Neoncsoves
    #262
    Üdv!

    segítséget szeretnék kérni, egy sorsoló programot szeretnék írni pascalban. Tehát tegyük fel beírok 4 szöveget/számot és akkor 2esével véletlenszerűen párosítja őket (csapatsorsoláshoz kéne).

    Pl. 1-2 , 4-6
  • bardocz
    #261
    valami:=kiir(szamol(a, r1), r2), ahol kiir egy procedura szamol meg egy függvény?

    Hogy tudnám ezt működőképesre megírni?
  • bardocz
    #260
    Mi ilyennel nem foglalkoztunk, rögtön szövegben lévő mással meg magánhangzók számolásával kezdtük illetve másodfokú megoldóképlettel:D Meg előtte átnéztünk különböző függvényeket(ord, succ, pred, anyámkínja).
  • kispeki
    #259
    nekem az első a Write("Hello Világ!"); volt :D aztán jöttek a további alapok, mint például számológép, stb és végül a nehezebb feladatok :)
  • bardocz
    #258
    Első programozásbeli sikerem :o)
  • RYO21
    #257
    Működik thx! Kicsit átírtam 97+25-re hogy kis betűk legyenek.
  • bardocz
    #256
    65-től 90-ig vannak a nagybetűk kódjai. chr(random(25)+65) így elvileg csak betűket adna.
  • petinho26
    #255
    Sziasztok engem egy feladat megoldása érdekelne: 1, Kétszínezés irányítatlan gráfban. Ezt onnan ismered fel, hogy a feladatod neve ketszin.x ahol x egy 1 és 20 közötti egész szám. Itt a megoldás egyrészt vagy a "kétszínezhető" vagy a "nem kétszínezhető" válaszból áll, másrészt az első esetben az 1-es csúccsal azonos színű csúcsok közül a 20-nál kisebb sorszámúak felsorolása, a második esetben pedig egy legfeljebb 15 hosszú páratlan kör csúcsainak kiíratása ciklikus sorrendben.
    Ehhez van egy bemeneti file. Ami egy gráf éllistával megadva.
    Valaki tud segíteni?
    Előre is köszönettel!
  • RYO21
    #254
    Üdv!

    Még nagyon kezdő vagyok, és lenne pár kérdésem.

    Lehet valahogy random betű generátort csinálni? Szóval hogy meghatározott karakterekből álljon A-tól Z-ig?
    Randomszámgenerátort tudok csinálni, sőt random karaktert is (chr(random(255));. Csak így mindenféle karakterek szerepelnek, nekem pedig csak az abc betűi kellenének.

    Illetve a másik kérdésem, hogy, hogy lehet azokat a spéci karaktereket legépelni (kiíratni)? Smiley és stb-re gondolok.
  • bardocz
    #253
    Lazarus totál meghalt... A tiéddel semmit sem csinál, az enyém viszont totál eltűnt. Kezd a tököm telelenni, nem elég, hogy én is béna vagyok, de erre még a program is rátesz egy lapáttal.
  • ba32107
    #252
    Jaj, az SG motor benyeli a tömbindexelést... na mindegy, itt a kód:
    katt
  • ba32107
    #251
    Nincs most időm ezeket átnézni, bocs... itt a két függvény, amit én írtam régen. 10-ből tetszőlegesbe, és tetszőlegesből 10-esbe (de 10-nél nagyobb sz.r-re nem működik):

    function ten_to_base(n:longint; base:byte):longint;
    var q,r:integer;
    num,szorzo:longint;
    begin
    num:=0;
    szorzo:=1;
    while n>0 do
    begin
    r:=n mod base;
    n:=n div base;
    num:=szorzo*r+num;
    szorzo:=szorzo*10;
    end;
    ten_to_base:=num;
    end;


    function base_to_ten(n:longint; base:byte):longint;
    var s:string;
    i,akt:byte;
    num:longint;
    code:integer;teszt:longint;
    begin
    num:=0;
    str(n,s);
    akt:=0;
    for i:=length(s) downto 1 do
    begin
    val(s[i],akt,code);
    num:=num+akt*pow(base,length(s)-i);
    end;
    base_to_ten:=num;
    end;
  • bardocz
    #250
    const aa : string[16] = '0123456789ABCDEF';

    function ten2x( x,i : integer) : string;
    var j : integer;
    begin
    Result := '0';
    if x=0 then exit;
    j := x mod i;
    if (x div i) > 0 then Result := ten2x((x div i), i) + aa[j+1]
    else Result := aa[j+1];
    end;

    function x2ten( const x : string ; i : integer) : integer;
    var j : integer;
    begin
    Result := 0;
    if x='' then exit;
    j := pos(uppercase(copy(x,length(x),1)),aa);
    if j<=0 then exit;
    if length(x)>1 then result := j-1 + i*x2ten(copy(x,1,length(x)-1),i)
    else result := j-1;

    end;


    Itt van még ez, na ezt még működésre sem tudom bírni. Totál hülye vagy én ehhez.
  • bardocz
    #249
    program konverter;
    uses crt;
    var be : real;
    bin : string;

    Function forgat(s : string):string;
    var i : longint;
    tar: string;
    begin
    tar:='';
    if length(s)>1 then
    begin
    for i:=0 to length(s)-1 do
    begin
    tar:=tar+copy(s,length(s)-i,1);
    end;
    end else tar:=s;
    forgat:=tar;
    end;

    function hatvanyoz(alap : longint; kitevo : longint):longint;
    var i: longint;
    szam : longint;
    begin
    if kitevo=0 then hatvanyoz:=1;
    if kitevo=1 then hatvanyoz:=alap;
    if kitevo>1 then
    begin
    szam:=alap;
    for i:=1 to kitevo-1 do
    begin
    szam:=szam*alap;
    end;
    hatvanyoz:=szam;
    end;
    end;

    function dec2bin(szam:real):string;
    var bintar : string;
    egesz : real;
    tizedes : real;
    begin
    bintar:='';
    szam:=int(szam);
    repeat
    egesz:=int(szam/2);
    tizedes:=frac(szam/2);
    if tizedes>0 then
    begin
    bintar:=bintar+'1';
    end else bintar:=bintar+'0';
    szam:=egesz;
    until egesz<1;
    //bintar:=bintar+'1';
    dec2bin:=forgat(bintar);
    end;

    function bin2dec(szam:string):longint;
    var i : longint;
    szamolt : longint;
    begin
    szamolt:=0;
    for i:=0 to length(szam)-1 do
    begin
    if copy(szam, length(szam)-i, 1)='1' then
    szamolt:=szamolt+hatvanyoz(2,i);
    end;
    bin2dec:=szamolt;
    end;

    begin
    clrscr;
    writeln('Kérek egy egész számot : ');
    readln(be);
    writeln(dec2bin(be));
    writeln('Kérek egy bináris számot : ');
    readln(bin);
    writeln(bin2dec(bin));
    end.


    Magamtól nem megy, de ezt találtam, és működőképesre átírtam. Így lazarus alatt működik. Mit kell átalakítani ahhoz, hogy delphiben is működjön?
  • bardocz
    #248
    Azt hiszem ezt értem, holnap nekiállok majd. Először megpróbálom a főprogamban, azt meg megcsinálni függvény ként.
  • ba32107
    #247
    Ami itt van, az tetszőlegesből tetszőlegesbe működik, viszont 10-esnél magasabbra nincs felkészítve (legalábbis ami programot én írtam). Ha csak 10-esből kettesbe kell, az tökegyszerű (megint csak másolgatok, nem én írtam):

    "2.) 10esbol pedig tetszolegesbe ugy kell, hogy ciklikusan osztogatod a forrasszamot a szamrendszer alapjaul szolgalo szammal, es a maradek adja a kiirando karaktert.Minden egyes lepes utan a forrasszamot fel kell cserelni
    a forrasszam (1/szamrendszer alapja szam) szeresevel!"
  • bardocz
    #246
    Tehát minden számjegy értékét egy ord függvénnyel kell megnéznem, ez szorzódik a helyiértékével(pl 16^3), és utána ezt leosztani mondjuk 2-vel? Azt viszont nem tudom, hogy hogyan tudok számjegyről számjegyre menni.
  • ba32107
    #245
    Ez most copy-paste lesz:

    "Az összes ilyen számrendszer átváltás logikája:

    A bemenő "számot" karaktersorozatnak veszed.

    Felveszed a számrendszer alapszámát (pl. nálad 9) (Pl. most "Alap"-ként jelölöm)
    Felveszed az 1-et. (pl. most "aktuális"-ként jelölöm)
    Felveszed a 0-t ("eredmény")


    Veszed a legkisebb helyiértéken lévő számot (legjobboldalibb számjegyet) ("szám")

    Cikluskezdet:
    A "Szám"-ot valódi számmá alakítod. (A 48-as kód, az ugyebár 0, de pl. egy 16-os számrendszernél a 65-ös kód ugyebár "A", tehát 10-es.)
    A kapott számot megszorzod az "Aktuális" értékéve, az eredményt hozzáadod az "eredmény"-hez
    Az "aktuális"-t szorzod az "alap"-al.
    Veszed a jobbról következő karakteres "számjegyet" -> Ez lesz az új "Szám"
    Visszamész a "cikluskezdet"-hez
    Ezt ismételgeted, amíg az összes számjegyen végig nem mentél.


    Ezzel a bekért számod számolható formában van.


    Most jön a másik számrendszerre váltás

    Van a számod ("eredmény")
    Felveszed a számrendszer alapszámát ("alap") ez most nálad a 15.


    Cikluskezdet:
    A számot ("eredmény") elosztod az "alap"-al. A maradékot átalakítod (0 érték -> 48-as kód, 10->A), és megjegyzed (tárolod) (jobbról ez lesz az 1., majd a következő a 2. ... jegy).
    Az osztás eredménye lesz az "eredmény"
    Ha az eredmény nem nulla, akkor vossza a ciklus cikluskezdethoz."

    Ha nem megy, segítek.
  • bardocz
    #244
    Tízesből kettesbe, meg 16osba első körben.
    Papíron annyira egyszerű, meg fejben, de gőzöm sincs, hogy hogyan tudnám ezt leprogramozni.
  • ba32107
    #243
    Holnap tudok ebben segíteni, ha ismét a saját gépemnél leszek. Megmutatom hogy kell csinálni, ha nagyon nem megy, megkapod a teljes progit :D Csak írj még a topikba reggelig, hogy ne felejtsem el.
  • kispeki
    #242
    melyik számrendszerek között?
  • bardocz
    #241
    Sziasztok, segítség kéne a házimhoz.
    Pascalban kéne írnom egy programot, amivel számrendszerek között tudok átváltani, de gőzöm sincs, hogy hogyan csináljam meg. Neten sem nagyon találtam semmit, vagy amit találtam, azt nem tudom használni.
  • Bolhás Böhöm
    #240
    Mutatsz egy kódot?
  • Dave8814
    #239
    Tudom, hogy ez nem Free Pascal fórum, de hátha tudtok seghíteni, mert olyan sehol nem találtam. Eredeti alapterv ilyen ősrégi ufó játékos korszakból jött, jobbról jönnek a ganék és ha veled egy oszlopba érnek game over némi nehezítés bele hogy ha egy sorban vagy velük és lenyomod a space-t akkor eltűnik jobb oldaról az "ufó"és még némi nehezítés bele (legalábbis a programíró részére) hogy véletlenszerűen dobálja jobbra az ufókatamik jelen esetben barna, sárga és egyéb színű karakterek lettek volna csak egy gondom van vele nem tudom megoldani hogy mindegyik karakter egyszerre mozogjon jobbról. Valaki tudna segíteni?
  • Bolhás Böhöm
    #238
    ...mármint úgy értem: mindent megvalósítottak, amit a Turbo Pascal tud, sőt többet, és nagyon jó dokumentáció van hozzá
  • Bolhás Böhöm
    #237
    A FreePascal is jo egyebkent, mert most mar mindent implementaltak, amit a Pascal.
    Sajnos bug-os a fejlesztokornyezet, neha nem forditja le a programot, akkor ujra kell inditani.
  • kispeki
    #236
    ment privi :)
  • ba32107
    #235
    Turbo Pascal 7. Keresd meg neten, ha nem találod, elküldöm. Felejtsd el a könyveket, teljesen feleslegesek, keress tutorialokat neten. A legfontosabb hogy gyakorolj, és tanulj meg algoritmikusan gondolkodni. Nyugodtan kérdezz itt amennyit akarsz, én mindig válaszolok, nagyon sokat programoztam pascalban.
  • kispeki
    #234
    Köszönöm, a prog-hu-s cikkek jók lesznek, plusz azóta én is keresgettem, és nagy nehezen találtam egy érthető e-könyvet... :) A fejlesztői környezetet nem tudom még, melyiket használjam, bár a freepascal-org-ra gondoltam, "Free Pascal Compiler" néven. Még azt kérdezném, hogy ez jó-e, vagy sem, és ha nem, akkor melyik lenne a legmegfelelőbb WinXP-n :)
  • Dj Faustus #233
    Ajánlom figyelmedbe az sg.hu könyvesboltját.
    Ott elérhető - többek között - egy kétkötetes mű - nekem ilyesmiből tanítottak anno (mondjuk addigra nagy részét már autodidakta módon elsajátítottam):
    Angster Erzsébet - Programozás tankönyv I.
    Angster Erzsébet - Programozás tankönyv II.

    Másrészt vannak cikksorozatok például a prog.hu oldalon, vagy a sajnos már megszűnt codexonline.
    Ott van a pascal.lap.hu.
    Ott a Google
  • kispeki
    #232
    Sziasztok! Nem ismerem még se a Pascal-t, se a Turbo Pascal-t, most akarok elkezdeni programozni, és sokan ajánlották a Pascal-t mint kezdő programozási nyelvet. (Későbbiekben C és C++-al szeretnék foglalkozni) Azonban sehol nem találok a neten e-könyv formájában letölthető anyagot a Pascal nyelvről. Ebben szeretném segítségeteket kérni, egy könyvet, vagy forrást szeretnék kérni, amiből a lehető legkönnyebben meg lehet tanulni a Pascal nyelvet. Előre is köszönöm :-)