Chyba v konstatě - Pascal Vyřešeno
Chyba v konstatě - Pascal
Zdravím, rád bych si dal do kódu nějaké konstanty. Když ji zapíšu jako třeba a=15.5; nebo pi=3.14; tak se to správně zkompiluje, ale pak ve vlastním programu mi to píše Run time error 106 na adrese xxxx:yyyy. Což prý znamená špatnou číselnou hodnotu. Někde jsem se dočetl, že se to dá vyřešit přes řetězce, poradil by mi prosím někdo jak? Děkuji.
Re: Chyba v konstatě - Pascal
Chyba 106 by měla znamenat že je to neplatný formát, jako třeba když zadáš z klávesnice číslo s desetinnou čárkou místo tečky. Mohl bys sem hodit kód který ti tu chybu způsobuje? A také přesně v čem to vytváříš a kompiluješ.
Obvykle se to dá vyřešit použitím readln() místo read().
Obvykle se to dá vyřešit použitím readln() místo read().
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Chyba v konstatě - Pascal
Vytvářím to v programu Pascal ED 1.02 (PasEd). A kód (v podstatě celý program) je následující:
Zkušené programátory asi klepne, ale já to jinak neumím. Ale když to číslo zadám ručně, tak to funguje, jen přes tu konstatu nee.
Kód: Vybrat vše
program Pauzy;
uses crt;
const a = 19.75;
var zacatek, konec, pauza: real;
begin
repeat
Textcolor(white);
Write ('Zadej konec: ');
ReadLn (konec);
Write ('Zadej zacatek: ');
ReadLn (zacatek);
pauza := zacatek - konec + 24;
WriteLn;
WriteLn ('Pauza je ',pauza:5:2,' hodin.');
WriteLn ('----------------------------');
Textcolor(132);
if pauza<9 then WriteLn ('Mala pauza!');
until konec=0;
end.
Zkušené programátory asi klepne, ale já to jinak neumím. Ale když to číslo zadám ručně, tak to funguje, jen přes tu konstatu nee.
- domitea
- Tvůrce článků
-
Level 4.5
- Příspěvky: 1971
- Registrován: červen 09
- Bydliště: Královehradecký kraj
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Chyba v konstatě - Pascal
Nemá tam být nahodou něco jako const real = 19.75? Pascal jsem měl naposledy v devítce 

Re: Chyba v konstatě - Pascal
V TurboPascalu mi to funguje bez problémů, akorát to počítá nějaké nesmysly, nemělo by v tom vzorci být ještě modulo? A navíc nemůžeš zadávat čas v šedesátkovém formátu, to načítání by chtělo vyřešit jinak. K čemu tam ta konstanta má být?
Nechceš zkusit spíš FreePascal?
Nechceš zkusit spíš FreePascal?
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Chyba v konstatě - Pascal
No, zkusím popsat, co bych vůbec od toho výtvoru očekával. Možná, že jsem se dal špatnou cestou a někdo poradí lepší způsob.
Snažím se dát do kupy pro svoji potřebu (v práci) jednoduchý program, který mi spočítá přestávku mezi směnami pro řidiče. Zadal bych konec směny, ale ve formátu čísla turnusu, ne času (tady je asi kámen úrazu, potřeboval bych napsat třeba konečnou směnu "2" a ono by to dosadilo 18.5 nebo 18 hod. 30 min.). Pak bych zadal začátek následující směny a program by spočetl přestávku. Ideální by bylo, kdybych jako číslo (název) směny mohl zadat stejné pro začátek i konec a ono by to samo vybralo správnou hodnotu z nějakého seznamu začátků a konců turnusů, ale nevadilo by, kdyby se muselo zadat k2 a z2 pro začátek a konec. V podstatě je mi jedno, jestli to bude v Excelu, PHP, nebo Pascalu, důležité je, aby to fungovalo.
A teď k tomu výplodu nahoře. Asi bude chyba v tom, že ta konstanta se dá dosadit do nějakého vzorce, kde se počítá třeba proměnná * 2 * konstanta (třeba pí). A já to vlastně přímo cpu do proměnné, protože když se mne to dotáže na začátek směny, tak já chci zadat "a" místo čísla. Aby se "a" samo převedlo na 19.75. A proto to háže chybný číselný formát. A to asi takhle nejde ...
Snažím se dát do kupy pro svoji potřebu (v práci) jednoduchý program, který mi spočítá přestávku mezi směnami pro řidiče. Zadal bych konec směny, ale ve formátu čísla turnusu, ne času (tady je asi kámen úrazu, potřeboval bych napsat třeba konečnou směnu "2" a ono by to dosadilo 18.5 nebo 18 hod. 30 min.). Pak bych zadal začátek následující směny a program by spočetl přestávku. Ideální by bylo, kdybych jako číslo (název) směny mohl zadat stejné pro začátek i konec a ono by to samo vybralo správnou hodnotu z nějakého seznamu začátků a konců turnusů, ale nevadilo by, kdyby se muselo zadat k2 a z2 pro začátek a konec. V podstatě je mi jedno, jestli to bude v Excelu, PHP, nebo Pascalu, důležité je, aby to fungovalo.
A teď k tomu výplodu nahoře. Asi bude chyba v tom, že ta konstanta se dá dosadit do nějakého vzorce, kde se počítá třeba proměnná * 2 * konstanta (třeba pí). A já to vlastně přímo cpu do proměnné, protože když se mne to dotáže na začátek směny, tak já chci zadat "a" místo čísla. Aby se "a" samo převedlo na 19.75. A proto to háže chybný číselný formát. A to asi takhle nejde ...
Re: Chyba v konstatě - Pascal
Tak takhle to v Pascalu opravdu nepůjde, tohle fungovalo akorát v Sinclair BASICu na historickém ZX Spectrum (jo, vzpomínky
). Ale můžeš si pro ten vstup napsat vlastní funkci, která bude takovéhle činnosti provádět přesně tak jak potřebuješ. Prostě načítej vstup znak po znaku a podle toho co načteš něco proveď.
Stejně tak si můžeš vytvořit funkci, která ti bude vypisovat dobu s šedesátkovými minutami, místo setin hodiny. O to jednodušší pak bude vlastní hlavní program:
To počítání by se dalo snadno udělat v Excelu, ale nevím jak tam provést tu záměnu "kódů" za časy. Napadají mě jen dost složité podmínky.

Stejně tak si můžeš vytvořit funkci, která ti bude vypisovat dobu s šedesátkovými minutami, místo setin hodiny. O to jednodušší pak bude vlastní hlavní program:
Kód: Vybrat vše
begin
nacti(pocatek);
nacti(konec);
pauza=pocatek-konec+24;
zobraz(pauza)
end.
To počítání by se dalo snadno udělat v Excelu, ale nevím jak tam provést tu záměnu "kódů" za časy. Napadají mě jen dost složité podmínky.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- memphisto
- Guru Level 13
- Příspěvky: 21113
- Registrován: září 06
- Bydliště: Zlín - České Budějovice
- Pohlaví:
- Stav:
Offline
Re: Chyba v konstatě - Pascal
domitea píše:Nemá tam být nahodou něco jako const real = 19.75? Pascal jsem měl naposledy v devítce
Kód: Vybrat vše
var a, b, c, x1, x2: real;
PRAVIDLA PC-HELP.CZ, PRAVIDLA sekce HijackThis, HijackThis návod, Memtest, CCleaner
Logy z programu HijackThis neposílejte prosím přes SZ, ale vkládejte je do patřičné sekce. Děkuji
Logy z programu HijackThis neposílejte prosím přes SZ, ale vkládejte je do patřičné sekce. Děkuji
Re: Chyba v konstatě - Pascal Vyřešeno
Šlo by to provést takhle, s přímým zadáváním času (a zatím bez hrátek s barvičkami
):
Když dodáš tabulku těch turnusů, tak to do toho můžu zkusit vtlačit, aby se daly zadávat kódem.

Kód: Vybrat vše
program Pauzy;
uses crt;
var zacatek,konec,pauza: real;
i:integer;
function nacti(text:string):real;
var hod,min,n,x,ok:integer;
z:char;
begin
repeat begin
hod:=0;
min:=0;
n:=1;
x:=0;
ok:=1;
write(text);
repeat begin
read(z);
case z of
'0'..'9': begin
if x=0 then
hod:=hod*10+ord(z)-48
else
if x=1 then
min:=min*10+ord(z)-48;
inc(n)
end;
':',',','.',' ': inc(x)
end;
if (n=3) and (x=0) then
inc(x)
end until z=chr(10);
if hod>23 then
begin
writeln('Hodiny mohou být jen v rozmezí 0 až 23!');
ok:=0
end;
if min>59 then
begin
writeln('Minuty mohou být jen v rozmezí 0 až 59!');
ok:=0
end;
end until ok=1;
nacti:=hod+min/60
end;
procedure zobraz(cas:real);
var hod,min:integer;
begin
hod:=trunc(cas);
min:=trunc(frac(cas)*60+0.5);
write('Pauza byla ',hod,':');
if min<10 then
write('0');
writeln(min,' dlouha.');
if cas<9 then
writeln('Mene nez 9 hodin!!!')
end;
begin
repeat begin
writeln('Zadej konec predchozi a zacatek nove jizdy,');
writeln('napriklad 8:30 8,30 8.30 0830');
writeln('pro ukonceni zadej same nuly:');
konec:=nacti('Konec minule jizdy: ');
zacatek:=nacti('Zacatek dalsi jizdy: ');
if (zacatek<>0) and (konec<>0) then
begin
if zacatek<konec then
zacatek:=zacatek+24;
pauza:=zacatek-konec;
zobraz(pauza);
readln
end
end until (zacatek=0) and (konec=0)
end.
Když dodáš tabulku těch turnusů, tak to do toho můžu zkusit vtlačit, aby se daly zadávat kódem.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 16
- 7667
-
od petr22
Zobrazit poslední příspěvek
02 dub 2025 21:50
-
- 4
- 3267
-
od Steage7717
Zobrazit poslední příspěvek
12 lis 2024 18:49
-
- 4
- 1145
-
od zik9
Zobrazit poslední příspěvek
12 čer 2025 15:33
-
- 6
- 10182
-
od atari
Zobrazit poslední příspěvek
16 bře 2025 11:11
-
-
prohližeč událostí id 1796 chyba Příloha(y)
od walderan » 01 dub 2025 15:58 » v Problémy s hardwarem - 9
- 3946
-
od walderan
Zobrazit poslední příspěvek
04 dub 2025 15:42
-
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti