Hirdetés
- IFA 2025: Meglepetések helyett Galaxy S25 FE
- Samsung Galaxy S22 és S22+ - a kis vagány meg a bátyja
- iPhone topik
- Samsung Galaxy S25 - végre van kicsi!
- Google Pixel topik
- Előfizetés mögé zárta a Sony az Xperia egyik húzófunkcióját
- Az iPhone a mobilpiac katalizátora
- MIUI / HyperOS topik
- Nincs megállás akkuméretben
- Samsung Galaxy Watch8 - Classic - Ultra 2025
Új hozzászólás Aktív témák
-
alitak
senior tag
Néztem a progit, de semmi más hibajelentés nem jött.
Az esc-re itt vár a progi:
jel:=#0;
while keypressed do readkey;
jel:=readkey;
if jel=#0 then jel:=readkey;
if jel=#80 then o:=o+1;{fel}
if jel=#72 then o:=o-1;{le}
if jel=#27 then exit; {esc}
Sajnos nem tudom, hogy itt hol olvas be szöveget a fájlból.
Ha megoldaható vegyél fel MSN-re, lenne még pár kérdésem, meg problémám. De télleg csak ha nem zaklatlak ezzel a szarral. Előre is -
QuarK
senior tag
Na kapcsold csak be szépen a Options -> Compiler panelen az összes range chechkinget, és sasold meg, hány helyen történnek turpisságok. Sok helyen 0-ból is kivonsz nullát, és csak utána ellenőrzöl; holot azelőtt kéne, mielőtt elvégzed a műveletet; és az ominózus ESC lenyomásakor szám helyett szöveget olvas be a fájlból; nagyon, de nagyon kusza cuccost sikerült összekotyvasztanod.
Talán ki tudnám halászni, mi miért és hol romlik el, de annyira ne tudom átlátni a stílusodat; meg megérteni a megoldási módszereid, hogy ebbe most nem fognék bele. Amit tudok javasolni; hogy szépen step-by-step menj végig minden kódsoron; és azokat az ellenőrzéseket tartsd bekapcsolva, és akkor minden bibinél runtime error-t fog dobni, aztán filózhatsz, hogy az vajon miért történt. -
rii
nagyúr
if jel:=#0
1. itt a feltételben kinulláztad jelet
2. ha nem nullűzod ki,a kkor azt néezd meg, hogy #0 van -e benne ... #0 -t akkor szokott visszaadni ,ha vezértlőkaraktert (jobbra-barla-le-föl nyíl, F1-F12 stb), nyomsz le, ez esetben két értékkel tér vissza a readkey (vagy mi) , elősször a #0-val, majd másodjára egy normál értékkel ....
pld. a jobbra nyil az a (#0, #220) (most csak írtam valamit) értékkel tér vissza
szóval én csak azt nem értem, miért a #0 visszatérését vizsgálod ..... de este van, és nem néztem meg az előzményeket ... úgyhogy ki-ki nyugalomba
----------------- ---------------------- -------------------------- ----------------------------- -------------------
szerk.: pedig most látom, kellett volna, mert már kitárgyalták előttem .....
[Szerkesztve] -
Gyuri16
senior tag
válasz
Rover623 #1276 üzenetére
veletlenul ezekhez nincs valami programod amibol megnezhetnem hogyan mukodik. Gondolok konkretan foleg az elso pontra, mert at sikerult kapcsolnom masik ablakba, de az valahogyan eltolta az elsot (nem tudom ertelmesen elmondani, kaptam egy mask ablakot, de az elso reszei valahogy benne voltak, csak eltolva), es nem igazan tudtam vele semmit se kezdeni.
-
alitak
senior tag
Egyébként lefuttattad a programot?
Mert amikor kiírja a fejezet szövegét, akkor ugye lehet lépegetni a lehetőségek közt. Oda kéne az ESC, hogy a menübe ki tuggyak lépni. De ha ott ESC-t nyomsz, akkor újra elindítja a lehetmenu procedúrát, amit szintén nem értek. Erre 5let? -
QuarK
senior tag
Tuti, hogy trash-eled a memóriát, kiírsz az egyik tömbödből. Minden tömbbe író utasítás elé biggyessz be egy ellenőrzést.
pl.:
if ( x > tomb_meret) then begin writeln( 'itt a baj (1)'); end;
tomb[x] := blah;
if ( x + 1 > tomb_meret_2) then begin writeln( 'itt a baj (2)'); end;
tomb[x + 1] := bleh;
stb.
Ezzel jól meg fogsz most szenvedni -
alitak
senior tag
Hát én itt már semmit sem értek. Mielőtt beolvassa a jelet, kinulláztatom, utána while keypressed do readkey; jel:=readkey; if jel:=#0 then jel:=readkey;
Elindítom, előtte nem nyomok entert, bejön a szöveg, ESC, kidob, és a jelben #13 van -
QuarK
senior tag
válasz
VladimirR #1290 üzenetére
Jelen esetben nem láttam indokoltnak, hogy erre is figyeljek; de igazad van.
Én így különböztetem meg őket:
repeat
ch := #0;
if keypressed then
begin
ch := readkey;
if ( ch = #0) then
begin
altchar := true;
ch := readkey;
end
else
altchar := false
end;
...
until ch = #27;
Az altchar jelzi, ha specialis karakterről van szó; és így nem kell külön kecmec.
Lefele gomb = ( altchar and ( ch = #80))
Fel gomb = ( altchar and ( ch = #72))
Jobbra gomb = ( altchar and ( ch = #77))
Balra gomb = ( altchar and ( ch = #75))
Delete = ( altchar and ( ch = #83))
Home = ( altchar and ( ch = #71))
End = ( altchar and ( ch = #79))
Tab = ( ch = #9)
Shift+Tab = ( altchar and ( ch = #15))
Enter = ( ch = #13)
Backspace = ( ch = #8)
Stb.
[Szerkesztve] -
VladimirR
nagyúr
ezzel pont az a baj, hogy igy nem fogod tudni megkulomboztetni a felfele nyilat a mittudomen melyik betutol
en ezt hasznalnam
ch:=readkey;
if ch=#0 then begin
ch2:=readkey;
if ch2=#59 then {akarmi};
if ch2=#60 then {akarmi};
if ch2=#68 then {akarmi};
end;
if ch=#8 then begin
gotoxy(wherex-1,wherey);
write(' ');
gotoxy(wherex-1,wherey);
end;
if ch=#27 then begin
{esc, kilepes}
end;
if ch>=#32 then {magjelenitheto karakter}
-ahol {akarmi} van, ott lusta voltam megnezni, hogy mi is az adott billentyu
-a backspace pontatlan, csak akkor jo, ha nem log at a kurzor uj sorba (csak kimasoltam, es megritkitottam a kodot, most lusta vagyok pontosabbat adni)
ezzel mar egyertelmuen meg lehet kulonboztetni az egy, es a ket byte kodu karaktereket egymastol, s mindkettohoz rendelhetoek muveletek, eljarasok, fuggvenyek
[Szerkesztve] -
QuarK
senior tag
válasz
Lortech #1287 üzenetére
Igen, ez a másik; hogy valamivel teleszemetelhette a memóriát, és akkor történnek hasonló turpisságok. Plusz, nekem néha a sima read() a readln() helyett okozott fejfájást, ha jól rémlik, mindig továbbvitte többszörösen az enter jelet, de úgy, hogy a keypressed flag false volt...
-
N!tRo
tag
hmm, csak egy kis ötletem támadt, hogy hogyan valósítsad ezt meg:
van ez a ''buffer törlő'' megoldás by VladimirR
while keypressed do readkey;
aztán én a fel-le-jobbra-balra gombokkal valósítanám meg a választást, amit így tudsz beolvasni:
jel:=readkey;
jel:=readkey; {azért kell kétszer mert a speciális karakterek egy readkey-nel #0-t adnak vissza}
BAL #75 ; JOBB #77 ; FEL #72 ; LE #80
Szerintem... -
alitak
senior tag
Beírtam azt a részt, amit javasoltál, de a problémát nem oldotta meg. Az ESC lenyomása után ismét a #13 került a változóba.
Steppel azért nem tudtam megnézni, mert az egész alprogramban van, és nem tudom, hogy ott hogyan lehet step-pelni.
A programot feltettem, de még nincs kész! Az említett rész a ''lehetmenu'' procedurában van.
Program: [link]
Hozzá a szöveg fájl: [link] -
QuarK
senior tag
Az még hagyján, amiket előttem elmondtak; de van más is. Ugyanis imho ha ESC-et ütsz le, vagy fel-le gombot (legalábbis feltételezem, hogy nem P és H gombokat vársz); akkor egy vezérlőkaraktert (#0) fogsz elcspíni legelőször (Tehát fel esetén: #0+#80)
Tehát a javaslatom:
while ( keypressed) do readkey;
jel := readkey;
if ( jel = #0) then jel := readkey;
...
Így tuti nem fogsz kósza karaktereket kapni a pufferben, és érzékelni fogja a speciális billentyűleütéseket, amik két karaktert dobnak (#0 és egy másik). -
VladimirR
nagyúr
mint Gyuri16 is irta, lehet, hogy bennmaradt a buffer-ben egy enter meg korabbrol
en ezt a kovetkezokeppen szoktam kikuszobolni
while keypressed do readkey;
es ezt a readkey ele jel := readkey ele tennem be
ez annyit csinal, hogfy barmit, ami a buffer-ben van, ksizedi onnan, es eldobja (pontosabban tarolas nelkul kiolvassa), s csak ezutan kezdi figyelni, hogy kerul-e valami (pl az altalad vart esc) a buffer-be
[Szerkesztve] -
Gyuri16
senior tag
szerintem elotte rontod el a jel valtozot. Ha megprobalod, es irsz egy kis programot, amiben csak jel:=readkey van, akkor benne lesz a #27. szvsz 13 csak akkor lehet benne ha valahonnan bennemaradt, ahhoz meg az egesz programot kellene latni. szerintem F8 al nezd vegig, hogy hol valtozik a valtozod erteke...
-
alitak
senior tag
A programomban van egy parancs, amivel a jel nevű char típusú változóba egy gombot vára progi. Ugy az ESC kódja 27, de mikor megnyomom, és utólag megnézem, akkor a jel-be 13-as kerül, holott entert nem is nyomok sehol.
Ez az a rész:
jel:=readkey;
if jel=#80 then o:=o+1;{fel}
if jel=#72 then o:=o-1;{le}
if jel=#27 then begin szoveg:='';exit;end; {esc}
Miután lenyomom az ECS-pet, akkor nem kilép a procedúrából, hanem újra elindul. 5lete vkinek? -
Gyuri16
senior tag
válasz
Rover623 #1276 üzenetére
koszi, probalom a setviewportot, de nem teljesen megy. Graphresultba 11 es hibakodot kapok (Graphics error). Tudod mit jelenthet ez?
amit akarok csinalni: rajzolo program: font es lent menu, paletta stb.. azt akarom, hogy ha kort huzok, akkor az semmikepp se logjon bele. -
Gyuri16
senior tag
lenne par kerdesem:
1, hogyan lehet graf modba olyat, hogy amig rajzolodik valami a kepernyore, addig egy masik feluletet mutasson, es ha kesz van, akkor villantsa be az eredetit?
2, szinten graf modba olyat szeretnek hogy egy kepernyoreszbol (teglalap) ne nyuljanak ki abrak (kor, negyzet stb).. Foleg kornel nehez, hogy ha beleutkozik a hatarba, akkor oda mar ne rajzoljon. Valami hasonlo jo lenne mint text modba a window.
koszi a segitseget elore is. -
Tangerine
senior tag
{$N+} {8086-os numerikus tarsprocesszor bekapcsolasa}
program hazifeladat;
uses crt;
const
enter: char = #13;
esc : char = #27;
var
c: char;
k: array[1..60] of char;
aa, bb, error: integer;
kod10, szorzo:string;
function fval(ss:string):integer;
var
er, hiba:integer;
begin
val(ss,er,hiba);
fval := er;
end;
function fstr(ii: integer):string;
var
er:string;
begin
str(ii,er);
fstr := er;
end;
function max(x, y: string):integer;
begin
if length(x) > length(y) then
max := length(x)
else
max := length(y);
end;
function osszead(x,y:string):string;
var
sossz:string;
ossz,resz,mar,ii,hh:integer;
begin
sossz:='';
ossz := 0;
resz := 0;
mar := 0;
hh := max(x,y) + 1;
while length(x) < hh do x:= '0' + x;
while length(y) < hh do y:= '0' + y;
for ii := hh downto 1 do
begin
ossz := fval(x[ii]) + fval(y[ii]) + mar;
mar := ossz div 10 ;
sossz:= fstr(ossz mod 10) + sossz;
end;
while (sossz[1] = '0') and (sossz <> '0') do delete(sossz,1,1);
osszead := sossz;
end;
function szoroz(x,y:string):string;
var
cc,er:string;
begin
er := '0';
cc := '0';
if (x='0') or (y='0') then
szoroz := '0'
else
repeat
cc := osszead(cc,'1');
er := osszead(er,x);
until cc = y;
szoroz := er;
end;
begin
clrscr;
writeln('Kerem a 6-os szamrendszerbeli szamot, max 60 karakter!');
aa := 0;
szorzo :='1';
repeat
repeat
c:=readkey;
until c in ['0'..'5',enter];
if c <> enter then
begin
write(c);
inc(aa);
k[aa] := c ;
end;
until (c = enter) or (aa = 60);
kod10 := '0';
for bb := aa downto 1 do
begin
kod10 := osszead(kod10 ,szoroz(szorzo,k[bb]));
szorzo := szoroz(szorzo,'6');
end;
writeln;
writeln(kod10);
writeln;
writeln('Kilepes: ESC');
repeat
c := readkey;
until c = esc;
end. -
Tangerine
senior tag
6 hatványaiból elég csak az aktuálisat tárolni.
Na az embernek mindig a legkézenfekvőbb m.o. nem jut eszébe.
Asszem megcsináltam, csak még tesztelem.
555555555555555555555555555555555555555555555555555555555555 (6-osban) = 48873677980689257489322752273774603865660850175 (a 10-esben) -
cucka
addikt
válasz
Tangerine #1268 üzenetére
szorzás függvényed finoman szólva érdekes
működni nyilván működik, de ez inkább csak számjeggyel való szorzásra alkalmas.
ezekkel a függvényekkel egyébként elég egyszerű megírni a számrendszer átalakítást.
a,e,h:string; {a:6os számrendszerbeli szám, e:eredmény, h:6 aktuális hatványa }
i:integer;
h:='1';e:='0';
for i:=length(a) downto 1 do
begin
e:=osszead(e, szoroz(h, a[ i ]));
h:=szoroz(h,6);
end;
[Szerkesztve] -
cucka
addikt
válasz
Tangerine #1268 üzenetére
6 hatványaiból elég csak az aktuálisat tárolni.
kezdetben ugye 6^0=1-el szorzunk. utána 6^1=6-al utána 36, 216, stb.
legyen egy változód (szintén nagyszám típusú), kezdőértéke legyen 1. minden egyes lépés után szorozd meg 6-al, így mindig meglesz az aktuális művelethez szükséges 6^x érték. kódodat hamarosan megnézem. -
Tangerine
senior tag
Ez így elméletben szép, de nekem nem jött össze. Pont ilyesmivel próbálkoztam tegnap.
A szorzás összeadás még működget, de ugyebár 6 hatványait kell a végeredményhez adni, ami kissé sokáig tartana szorzásokra bontani egy 60 jegyű számnál.
function fval(ss:string):integer;
var
er,hiba:integer;
begin
val(ss,er,hiba);
fval:=er;
end;
function fstr(ii:integer):string;
var
er:string;
begin
str(ii,er);
fstr:=er;
end;
function max(x,y:string):integer;
begin
if length(x) > length(y) then
max := length(x)
else
max := length(y);
end;
function osszead(x,y:string):string;
var
sossz:string;
hh,ii,aa,bb,ossz,mar:integer;
begin
sossz:='';
ossz := 0;
mar := 0;
hh := max(x,y) + 1;
while length(x) < hh do x:='0' + x;
while length(y) < hh do y:='0' + y;
for ii := hh downto 1 do
begin
ossz := fval(x[ii])+fval(y[ii])+mar;
mar := ossz div 10 ;
sossz:=fstr(ossz mod 10) + sossz;
end;
while sossz[1] = '0' do delete(sossz,1,1);
osszead := sossz;
end;
function szoroz(x,y:string):string;
var ii:integer;
er:string;
begin
er := '0';
if (x='0') or (y='0') then
szoroz := '0'
else
begin
for ii := 1 to fval(y) do
er := osszead(er,x);
end;
szoroz := er;
end; -
cucka
addikt
válasz
Tangerine #1266 üzenetére
a legkézenfekvőbb, nem túl elegáns viszont újrafelhasználható kódot produkáló elgondolás:
a számrendszerek közötti átváltáshoz összeadásra és szorzásra van szükség. a szorzás visszavezethető összeadásra és számjeggyel való szorzásra.
először is: ajánlom, hogy tömb helyett string-ben tárold a hosszú számaidat, ott ugyanis a string[ 0 ] jelöli a hosszát, könnyebben tudsz számolni vele. (ha jól emlékszem, tömbnél nincs ilyen)
tehát ami kell:
- függvény ami megszoroz egy számot egy számjeggyel. a szám természetesen string/tömb, ezért számjegyenként kell megszorozni, tárolva azt a számjegyet, amit átviszünk.
- függvény ami összead két nagy számot - szintén számjegyenként, tárolva a számjegyet amit átviszünk. ügyelni kell arra, hogy ugyanolyan hosszúak legyenek, tehát a rövidebben ki kell egészíteni balról 0 számjegyekkel.
- függvény ami hozzáilleszt néhány nullát egy nagy számhoz (átírja a string hosszát, 0-kat pakol a végére) - ez a szorzáshoz kell.
a szorzás pl. valami hasonló lesz (ez nem feltétlenül helyes pascal kód, inkább csak szemléltetés)
a, b, eredmeny:nagyszam;
eredmeny:=''0'';
for pos:=length(b) downto 1 do
begin
eredmeny:=osszead(hozzair(szamj_szoroz(a,b[ pos ])),length(b)-pos);
end;
pos jelöli, b végétől számítva hanyadik számjegynél tartunk
vagyis megszorozzuk a-t b aktuális, pos által jelölt számjegyével, az eredményhez jobbról hozzáírunk annyi nullát, ahányadik karakternél tartunk éppen (length(b)-pos) és az egészet hozzáadjuk az eredményhez (ami ugye kezdetben nulla).
a többi függvény megírása ennél egyszerűbb szerintem, azt rád bízom. -
cucka
addikt
válasz
Tangerine #1255 üzenetére
ha a feladatban külön említik, hogy 60 jegyű számokra is kell működjön, akkor azt azért teszik, hogy ne lebegőpontosan tárold a számokat, hanem tömbben. az eredeti számot és az eredményt (ami olyan 30-40 számjegy lehet max.) is.
a tömb i-ik elemét (ami ugye karakter típusú) így alakíthatod számmá:
szam:=ord(tomb[ i ])-ord('0')
így ki lehet kerülni a körülményes és lassú strtoint (?) függvényt.
8 éve nem láttam pascal-t, remélem azért jól emlékszem
[Szerkesztve] -
alitak
senior tag
Hi!
Van egy fájl, amiből beolvas a program string formátumba szöveget. Kérdés az, hogyha beolvas egy ilyen sort: f133, akkor azt hogyan tudom megoldani, hogy levágja az elejéről az ''f'' betűt, és a tömbbe csak a 133 kerüljön.
Egy kicsit egyszerűbben: hogyan lehet a string első betűjét levágni? -
Lortech
addikt
-
#72042496
törölt tag
Nagyon köszönjük srácok!
Sajnos, az illető nem merte beadni, mert a repeat until keypressed utasítást nem tanultuk (bár elmagyaráztuk Neki, hogy mit jelent) s a tanár állítólag hihetetlen vaskalapos. A másik sarkalatos pont az inc operátor (?) volt:
Ezzel mi sem találkoztunk, de ha jól értelmezem annyit csinál, hogy az argumentumában lévő értéket 1-el (vagy szintaxistól függően, bizonyos értékkel) növeli.
Mindazonáltal nem tudtuk rábeszélni, hogy legalább vigye el a progit, hátha kap haladékot, s pár nap múlva be tudná mutatni a teljes, kiválóan működő változatot.
Ha lesz időm, mindenképpen áttanulmányozom a megoldásokat, ill. megoldásrészleteket, legalább felfrissítem Pascal-os ismereteimet, az ilyesmi sosem árt.
Még egyszer köszönjük mindenkinek a segítséget! -
Tangerine
senior tag
Kicsit átalakítottam:
{$N+} {8086-os numerikus tarsprocesszor bekapcsolasa}
program hazifeladat;
uses crt;
const
enter: char = #13;
esc : char = #27;
var
c: char;
k: array [1..60] of char;
a, b, s, error: integer;
kod10:double;
begin
clrscr;
writeln('Kerem a 6-os szamrendszerbeli szamot, max 60 karakter!');
a:=0;
repeat
repeat
c:=readkey;
until c in ['0'..'5',enter];
if c <> enter then
begin
write(c);
inc(a);
k[a] := c ;
end;
until (c = enter) or (a = 60);
writeln;
kod10:=0;
for b:= 1 to a do
begin
val(k,s,error);
kod10 := kod10 + s * (exp(ln(6)*(a-b)));
end;
writeln(kod10:0:0);
writeln;
writeln('Kilepes: ESC');
repeat
c := readkey;
until c = esc;
end. -
Tangerine
senior tag
Nem szóltam.
Úgy néz ki a double sokkal nagyobb, mint gondoltam volna. (5.0 x 10^-324 .. 1.7 x 10^308)
Akkor mégis csak egyszerű a feladat.
[Szerkesztve] -
Lortech
addikt
Szerintem azért lett kihangsúlyozva a karaktertömb, hogy rávezessen a readkeyre.. Mellyel - ahogy VladimirR megoldásában láthattad- még bekérés közben megakadályozhatod, hogy a számrendszer számjegyein kívül bármi mást bevihess. Én is szinte ugyanúgy oldottam meg, ahogy VladimirR, teljesen függetlenül az ő megoldásától (külön érdekesség, hogy én is gondolkodás nélkül belevettem a 6-os számjegyet
).
if kod6 in[ '0','1','2','3','4','5' ] then else hiba:=true; {a not in muveletet nemtom megcsinalni}
Ez a sor hogy is van? kod6-ot charnak kéne deklarálnod, hogy ez működjön szerintem, nekem nem fordul le. Meg a not in műveletet miért nem tudod megcsinálni?
not (kod6 in [ '0','1','2','3','4','5' ]) - ezt akartad? -
N!tRo
tag
válasz
#72042496 #1243 üzenetére
Háj
na én ezt most úgy értelmezem, hogy egy progi, ami 6os számrendszerből 10es számrendszerbe (továbbá szr) alakít, a 6os szrbeli szám max 60 karakter lehet, és egy tömbbe tárolja a számjegyeket (ami sztem felesleges)
én megcsináltam azt, hogy átalakítsa egyik szrből a másikba
{$N+} {8086-os numerikus tarsprocesszor bekapcsolasa}
program hazifeladat;
uses crt;
var k: array[1..60] of char;
kod6: string;
hiba: boolean;
i,s,error: integer;
kod10:double;
begin
clrscr;
repeat
hiba:=false;
writeln('K‚rem a 6-os szamrendszerbeli szamot, max 60 karakter!');
readln(kod6);
if length(kod6) > 60 then hiba:=true else
for i:= 1 to length(kod6) do
if kod6 in['0','1','2','3','4','5'then else hiba:=true; {a not in muveletet nemtom megcsinalni}
if hiba=true then writeln('Hibas formatum!');
until hiba=false;
{ Berakja a szamokat egyesevel egy tombbe, sztem felesleges }
{ for i:= 1 to length(kod6) do k:=kod6; }
kod10:=0;
for i:= 1 to length(kod6) do begin
val(kod6,s,error);
kod10:=kod10+s*(exp(ln(6)* (length(kod6)-i) ));
end;
writeln(kod10:20:2);
readln;
end.
Nyilván ez nem teljes program, kedved szerint alakítod.
[Szerkesztve] -
VladimirR
nagyúr
lof*szt a s*ggedbe
[Szerkesztve] -
VladimirR
nagyúr
-
Tangerine
senior tag
válasz
VladimirR #1246 üzenetére
if ( ch >= '0' ) and ( ch <= '6' ) then begin
Kmm... 6-os számrendszerben nincs 6-os.
Egyszerű lenne az egész - csak végig kéne szorozni a számjegyeket 6 egyre növekvő hatványaival -, de elképzelésem sincs hogyan lehetne ekkora óriási számot (6^60 - 1)tárolni. Valami trükköt be kell vetni, de nem jövök rá, hogy mit. -
VladimirR
nagyúr
válasz
#72042496 #1245 üzenetére
extended is csak 19-20 szamjegyig pontos
10-esbo, hatosba nem lenne gaz, ott nem kell tarolni az eredmenyt, de visszafele alakitashoz (asszem) letre kell hoznod egy masik tombot a 10-es szamrendszer beli eredmeny szamara, amin tudsz sorzast, es osszeadast vegezni
beolvasas:
uses
crt;
var
i : byte;
ch : char;
darabszam : byte;
szamjegyek : array[1..60] of byte;
begin
darabszam := 0;
clrscr;
writeln( 'kerem a szamot: ' );
while keypressed do readkey;
repeat
ch := readkey;
if ( ch >= '0' ) and ( ch <= '6' ) then begin
inc( darabszam );
write( ch );
szamjegyek[darabszam] := ord( ch ) - 48;
end;
until ( ch = #27 ) or ( ch = #13 ) or ( darabszam = 60 );
writeln;
for i := 1 to darabszam do
write( szamjegyek );
end.
Bovebben: [link]
ez csak annyit csinal, hogy beolvas egy 60 jegyu 6-ois szamrendszer beli szamot
addig olvas, amig esc-et, vagy enter-t nem utsz, vagy a szamjegyek szama el nem eri a 60-at
[Szerkesztve] -
#72042496
törölt tag
válasz
Lortech #1244 üzenetére
Igen, ez az eredeti szöveg...nem tudom, mi alapján generálják, de néha hihetetlen az eredmény. Van, akinek mértani sort kellett számolnia, nekem szöveget kellett bevinni: A programnak pedig táblázatos formában ki kellett írni, hogy hány kisbetű, hány nagybetű és hány ékezetes karakter volt a szövegben - soronkénti bontásban, ill. összesen!
Sűrű anyázások közepette megcsináltam, csak sajnos ez két éve történt, azóta szinte mindent elfelejtettem.
Most pedig ez...
A feladat az, amit Te is írtál: Be kell olvastatni egy max. 60 katakteres (6-os számrendszerbeli) számot, amit a program átszámol 10-es számrendszerbe.
Első körben gondoltam olyat, hogy bekér a program egy longint változót, amit egy for ciklussal végégosztunk i:=7-től (10^7 nagyságrendet kezel a longint) 0-ig 10^i-vel, az eredmény egészrészét pedig 6^i-vel szorozzuk, s összeadjuk a kapott értékeket. De ebben nics tömb, ill. a hatványozásra is függvényt kell írni, ha jól tudom...
A másik a tömbös megoldás. Azt még mindig nem tudom, hogy a jó égbe fog 60 jegyű számokat kezelni a Pascal...esetleg az extended típusú változóval meg lehetne oldani, de ezt nem használhatjuk.Tehát ettől mondjuk eltekintünk, ebből biztos nem lesz baj.
A másik, hogy karakter típusú tömbből hogyan lehet számokat kiolvasni? Vagy egyáltalán: Ha tömböt használunk, akkor minden egyes karakter bevitele után kell egy Enter, ez pedig nem jó...
Talán még azt lehetne, hogy az előző módszer for ciklusának 10^i-vel való osztás utáni eredményeit beírni egy (integer) tömbbe, s utána hatványozni? De ez nagyon körülményes lenne, olyan, mintha a várost megkerülve mennék át a szomszédba. -
Lortech
addikt
válasz
#72042496 #1243 üzenetére
És hol akadtatok el?
Ez az eredeti szöveg? Mert elég érdekes. ''átalakítani valós értéké'', vagyis decimális számrendszerbe, vagy mi akar ez lenni?
''A program a standard inputról olvassa be a számjegyeket
tartalmazó karaktertömböt'' tehát egy karaktertömböt olvasunk be, ami _már tartalmazza_ a számjegyeket?
hm..
Szóval egy max 60 jegyű 6-os számrendszerbeli számot olvasunk be billentyűzetről egy karakter típusú tömbbe, illetve előtte a számjegyek számát, aztán decimális számrendszerre hozzuk (és mondjuk kiiratjuk)?
[Szerkesztve] -
#72042496
törölt tag
Sziasztok!
Az a helyzet, hogy haversrác kapott egy feladatot infóból, amit holnapra be kéne adni, s sajnos nem tudunk elindulni vele...
Akinek van valami ötlete, legyen szíves ossza meg velünk!
Bevezetés az informatikába I. házi feladat
Írjon PASCAL programot, amely egy maximum 60 jegyű 6-os számrendszerű számot
átalakítja valós értéké! A program a standard inputról olvassa be a számjegyeket
tartalmazó karaktertömböt és a számjegyek tényleges számát. Amennyiben a szám
rövidebb 60 karakternél, úgy a tömb az 1. indextől az N. indexig tartalmazza a
számjegyeket. A legmagasabb helyiérték mindig az 1. helyen van.
Eredményes feladatmegoldást!
HF Generátor BME-IIT
Előre is köszönjük a segítséget! -
QuarK
senior tag
Loading constant values into segment registers
Performing arithmetic operations on segment registers of selectors
Using segment registers for temporary storage
Writing to code segments
Accessing memory beyond the local address space given to your application
Derefencing nil pointers
Leginkább arra tudok gondolni, hogy az egyik tömbödből kiírtál, és teleszemetelted a memóriát. Pl.: egy 10 elemű tömb esetén ez történt: tomb[99] := blabla...
(Lassú vagyok)
[Szerkesztve] -
Lortech
addikt
┌───────────────────────────┐
│ General Protection fault │
└───────────────────────────┘
This error results if you try to access memory
that is not legal for your application to
access. The operating system halts your
application and tells you that a general
protection (GP) fault occurred, but your
system does not crash.
The following practices cause GP faults:
■ Loading constant values into segment registers
■ Performing arithmetic operations on segment registers of selectors
■ Using segment registers for temporary storage
■ Writing to code segments
■ Accessing memory beyond the local address space given to your application
■ Derefencing nil pointers
szerk: bocs Quark
[Szerkesztve] -
Tottu
senior tag
A 216-os hibakód mit jelent?
-
Tangerine
senior tag
válasz
VladimirR #1237 üzenetére
Ja. Valószínűleg nem teljesen egyforma. Ha parancssoros progit akarok írni, akkor delphi console app.
Sok hasonlóság a pascalhoz. Több függvény esetleg kicsit másnéven. Vagy ami a Pascalban még eljárás a Delphiben már függvény pl. (Str vs. IntToStr)
Vagy pl. UpperCase(s: string) az előző problémára. -
Tangerine
senior tag
-
VladimirR
nagyúr
válasz
Tangerine #1233 üzenetére
ha megnezed, az ups-nek nem adtam kezdoerteet, igy az elvileg (gyakorlatilag nem mindig) ures string-kenbt kezd, s hiaba toltod bele a karaktereket, a string hossza marad 0
ha a sztring-edet a hagyomanyos uton (tehat pl sztringosszefuzessel), nem pedig karakterenkent rakod ossze, akkor erre nincs szukseg, a string hossza (elso byte-ja) amutomatikusan megvaltozik
probald ki a fenti kodot az emlitett sor nelkul
(egyebkent ez az oka a string 255 karakteres hosszkorlatozasanak: egy byte-on nem tudsz nagyobb hosszt megadni
c-ben ezzel szemben ilyen korlat nincs, hisz ott nem tarolod a string hosszat a veget egy null ( \0 ) karakter jelzi
[Szerkesztve] -
VladimirR
nagyúr
válasz
norbiphu #1232 üzenetére
egen, rajottem, ezert irtam, hogy ''eldoltek a betuid'', csak elsore nem tunt fel
az meg, hogy mit raksz a vegere, nekem edesmindegy, csak mivel szoba kerult (kerdesre valaszoltam) megemlitettem (mint mas is), hogy a readln kivaltasara valo
hatranya viszont, hogy emiatt be kell include-olnod a crt unit-ot, ami egyreszt megnoveli a binaris meretet, masreszt (en szoptam ezzel anno) regi programok eseteben uj gepen fordithattad ujra es/vagy pecselhetted meg a progikat a crt unit hibaja miatt
szoval az en maganvelemenyem az, hogy ha csak ennyire (meg kepernyotorlesre, ami itt szinten nem szukseges) hasznalnad, akkor hasznalata kerulendo -
norbiphu
őstag
válasz
VladimirR #1224 üzenetére
[ i ]-t átkonvertálta az a probl
egyébként meg nem tök8 mit raksz a végére?
nekem suliban a repeat until keypressed-et oktatták, de megkérdeztem (talán ebben a topikban), hogy mit használjak helyette. ezt mondták ez maradt meg, de a readln is ugyanolyan helyes
crt meg includolva van képernyőtörlés miatt általában nálam
[Szerkesztve] -
VladimirR
nagyúr
válasz
Tangerine #1227 üzenetére
behuzas: karakterekkel toltom fel a sor elejet (a nem torheto szokoz html kodja)
[i]-k: a szogletes zarojelen belulre valahova teszek egy [b][/b] kodot (itt is van mindkettoben, csak nem latszik), igy a forummotor nem alakitja at
aztan az egeszet jol letesztelem ezzel, hogy biztos jo legyen => Bovebben: [link] (hsz vege - ez itt a reklam helye)
#1227: jo a readkey is (csak foloslegesen csak emiatt be kell include-olni a crt egyseget) -
VladimirR
nagyúr
válasz
Tangerine #1225 üzenetére
de, mukodne igy is
az ups[0] := s[0] pedig azert kell, mert mivel uj valtozot hasznalok, be kell allitani annak hosszat
pascalban a c-vel ellentetben nem nullterminated stringek vannak, hanem a string elso byte-ja (0. index) tartalmazza annak hosszat
enelkul az ups hiaba tartalmazna a megfelelo karaktereket, ures stringet kapnank vissza, mivel a hosszat nem allitottuk be (esetleg a kivant string elejet, vagy az egeszet valami szemettel megtoldva, amennyiben a valtozot nem inicializaltuk, s az altala hasznalt memoriateruleten volt mar korabban adat, ekkor ugyanis a string hossza a 0. indexen levo karakterbol adodik, amihez ugye mi nem nyultunk hozza)
[Szerkesztve] -
KMan
őstag
válasz
VladimirR #1222 üzenetére
kozben meg is irtam a fuggvenyt es mar teszteltem is.
(masik gepen dolgozok, es ott nincs net. egy masik asztalnal van). Na mind1 a function muxik, de meg mindig nem ertem minek a vegere a readkey. Kiprobaltam mindket fele keppen hogy van/nincs es nem latok kulonbseget.
Ugyan meg kezdo vagyok, de a pl: readkey(char) az nem arra jo hogy eltarulja a bufferbe a a bill. kodjat, majd megjeliniti?pl. a readkey-el lehet vakon gepelni nem? ha onmagaban van az utasitas a fuggveny vegen, azzal mit erek el?
-
VladimirR
nagyúr
gondolom azert a readkey, hogy lassa a program kimenetet
egyebkent irhatsz raja fuggvenyt, vagy eljarast
function strtoupper( s : string ) : string;
var
ups : string;
i : byte;
begin
for i := 1 to length( s ) do
ups[i] := upcase( s[i] );
ups[0] := s[0];
strtoupper := ups;
end;
[Szerkesztve] -
norbiphu
őstag
egyesével lehet csak. írtam egy példát ebből, látszik hogy, hogyan kell.
program nagyb;
uses crt;
var szoveg:string;
i:byte;
begin
clrscr;
write ('Szöveg: '); readln(szoveg);
for i:=1 to length(szoveg) do
szoveg:=upcase(szoveg);
writeln ('Nagybetűs szöveg: ',szoveg);
readkey;
end.
readkey azért hogy lásd az eredményt és ne lépjen ki (én ezt használom te rakhatsz mást is)
[Szerkesztve] -
KMan
őstag
Az UpCase eljárással csak char-t lehet negybetusse konvertalni? String-et hogy eleht? Vagy a String-et at kene egyesével char-e konvertalni mint amikor String-bol csinalalunk Integer-t a Val-lal?
-
KMan
őstag
Tangerine neked ezuton egy hatalmas koszonet megegyszer!
most ertem haza a sulibol, mar probalom is a cuccot, megnezzuk fordul-e. Ugyan off, de ez a topic remek, tenyleg nagyon segitokesz mindenki. Ezert is szeretem a PH!-t. HAJRA!
PH! 4Ever
-
alitak
senior tag
ESC-nek mi az ASCII kódja?
-
Lortech
addikt
válasz
Tangerine #1202 üzenetére
Persze, fájlból, de attól függetlenül az adatfolyamot ugyanúgy dolgozza fel a read. Nekem is furcsa volt, és nem hittem volna, míg ki nem próbáltam. Viszont miután saját szememmel láthattam működni, kénytelen voltam elhinni, és kicsit átgondolva már tök logikus.
Tyreal: nem így gondoltam, nem kell csekkolnia az időt, hanem mivel a nop is órajelbe kerül, ezért ki lehet számítani mennyi időhöz mennyi kell. Ebből volt a gubanc a delay-jel, hogy az új gyors gépeken hibásan működött. Az architektúrák tanárom jól el tudná mondani, én már nem emlékszem rá annyira, hogy belemenjek. Hátha Rover623 kolléga bevállalja.
[Szerkesztve]
Új hozzászólás Aktív témák
- GYÖNYÖRŰ iPhone 13 mini 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3060, 94% Akkumulátor
- Bomba ár! HP ProBook 430 G7 - i5-10GEN I 16GB I 256SSD I HDMI I 13,3" FHD I Cam I W11 I Gar
- ÁRGARANCIA!Épített KomPhone i5 10400F 16/32GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- Lenovo ThinkPad X13 Gen 1 i5-10310U 16GB 256GB 1 év garancia
- QNAP TS-870U-RP 8 lemezes Rack NAS
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest