271
Turbo Pascal
-
#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". -
#270 Itt láthattok az előző hozzászólásomban említett hardverre egy példát. -
#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ő? -
#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. -
#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
-
#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? -
#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). -
#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 :) -
#258 Első programozásbeli sikerem :o) -
RYO21 #257 Működik thx! Kicsit átírtam 97+25-re hogy kis betűk legyenek. -
#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. -
#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;
-
#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. -
#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? -
#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!" -
#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. -
#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. -
#242 melyik számrendszerek között? -
#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. -
#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. -
#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 :) -
#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 -
#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 :-)