Podmínka - delphi
Dobrý den, prosím o radu. Můj program počítá body na známky, podle procent, avšak pokud je procento s desetiným místem, podle téhle podmínky nevypíše co má :
x:= jeprocent;
if (x>=89) and (x<=100) then edit4.text:=('1');
if (x>=76) and (x<=88) then edit4.text:=('2');
if (x>=63) and (x<=75) then edit4.text:=('3');
if (x>=46) and (x<=62) then edit4.text:=('4');
if (x>=0) and (x<=45) then edit4.text:=('5');
X a jeprocent jsou Double;
Takže abych to shrnul, pokud je např 91% vypíše do edit4 známku 1, avšak pokud je procento 91,1%, nevypíše nic, jak na to? Děkuji za radu,:)
konkretne ten 91,1 neviem preco ti nezobrazi, ale vseobecne pri pouziti realnych cisel, by si mal v podmienke kontrolovat iba ><, nikdy nie =
myslim tym toto
ak mas if(x>=89), tak sa moze stat, ze ak x je 89, teda ta hranicna hodnota, tak podmienka bude vyhodnotena sko nesplnena - suvisi to s reprezentaciou realnych cisel v PC
cize prve dva riadky by som upravil asi takto
V knize Pascal pro zeneláče uvádí že mohu mít (x>=89)- a pokud je 89 vypíše to 1 bez problémů.
To je nesmysl. Proc by nemohl požít = ? Minimalne je to spatne napsane,
kazdopande souhlasim s tim, ze to co tam má nepokrývá všechny intervaly a proto některá čísla neprojdou sítem, wo tom žádná - nicméně matoucích je 91,1 to zrovna zafungovat má.
To zanfunguje, ale nevidim duvod proc by tam nemelo bajt <=100, pokud to ma dobre udelane a X se pohybuje od <0,100>
to iba pri realnych cislach a vo vseobecnosti, snad vies, ze realne cisla su v pocitaci reprezontovane ako zaklad a exponent.
Resp, realnych cisel je nekonecne vela, ale pocitac dokaze zobrazit iba obmedzenu mnozinu, takze ked das do podmienky = moze sa stat, ze akurat to tvoje cislo pocitac v ramci datoveho typu zobrazit nevie.
jenze = ma porad svoje upotrebeni, proto tam ma jafi jednou interval < a jedno >= s tim rovná se. Tech cisel je asi bzilion, presto porad eixstuje konkretni JEDNO v realnem svete i v rep. pocitacu ktere te podmince odpovida.
ano pouzitie >=, <= je OK, ale pouzit iba = pri porovnavani realnych cisel moze dat nepredvidany vysledok ;)
ano, muze, ale za to zodpovida programator, to znaminko ma sve pouziti ;)
navic round(number,2) // nevim uz jak se to pise v delphi, ale v Oracle to znamena zaokrouhleni na 2 des cisla s rovnase je realne cislo presto naprosto definovane pres rovnase ;)
Round() zaokrouhluje na cele, RoundTo(cislo, pocet_mist) stejne jak v Oracle
Keď si niekde vypíšeš hodnotu x, naozaj má hodnotu 91.1?
BTW, máš tam intervaly, ktoré nevyhodnocuješ (88;89), (75;76), (62;63) a (45;46).
Takže, nejprve program spočítá např 9 bodů z 10 = 90%, po kliknutí na button vyhodnotí výše uvedenou podminku. - Do editu vloží známku 1.
Pokud avšak zadam např. 4 body z 9 je to 44,444444444 % to už nevyhodnotí, nechápu proč.
Ps. intervaly (88;89), (75;76), (62;63) a (45;46) to vyhodnotí, schválně si to zkus :)
Nevyhodnoti, viz ja a ten predchozi - myslis ze se mejlime vsichni tri? Ale tech 44,44 to vyhodnotit ma stejnej jako 91,1 takze otazka je jeste jedna - nepricitas k tomu neco, nezaokrouhlujes to?
Vyhodnotí :D fakt, mi to funguje
viz. muj post ob losos
Tak potom bude chyba v kompilátore.
Skúšal si použiť debugger? Odkrokuj si to, pozri si hodnoty premenných a určite nájdeš chybu.
mimochodem vis jak se snaci intervaly, vid?
(88,89) je otevřený interval, a rozhodně to neni ekvivalenti tomuto uzavřenému intervalu <88,89>
Tzn čísla 88 a 89 Ti zafngujou, ale v tom intervalu co psal Los&Los NEJSOU, tzn nezafunguje to napriklad pro cislo 88.1564
hele losové, clovek si pak rika "safra" umi linux, delphi, mysql atd. Ale budme uprimni, jste na nas dva
Pokud vás to až tak zajímá, uploadnul jsem to sem : http://leteckaposta.cz/414020143[/url]
asi nekomu jinemu, muj linux (jak jsem ted zjistil a budu resit) rar archiv neumi a ani nevlastnim Delphi (uz nejakych par let)
Ach to je škoda
To je super program, kdyz k jednotlivym editum ani nenapises, co se tam ma zadavat a ani tlacitka jsi nepojmenoval
Jak mame vedet, co vyplnovat do jednotlivych editu?
Zkus popsat, co ma vlastne program delat a co mame zadat do jednotlivych editu, jestli jeste potrebujes pomoc
To vis ze potrebuji, program je teprve ve vyvoji, takze vim jen ja co kam zadat :D
Pozdeji to mam v planu doplnit
Takze :
Ve škole jsem z testu distal 5 bodů z 10
Edit1 : 5
Edit2 : 10
Klikneš na dlouhý button1 (procenta)
Program do editu 3 vypočítá kolik to je procent,
Kliknutím na button3(krátký procenta) spočítá známku podle podmínky kterou tu řešíme.
Tlačítkem Button4 přídá informace do Listboxů.
Buttonem5 maže z listboxu aktivní.
Butonem 6 počítá průměr procent z listboxů a vypisuje do edit8.
Ostatních si nevšímej :)
Jsi hodnej :)
Když jsem opravil to posledni proceduru, tak to normalne chodi.
Do editu zadam napr. 5 a 9, jako procenta se objevi 55,5555 a nasledna znamka pak 4
Takze podle mne je to podle tveho prvniho zadani v poradku
Zadej 5 z 8
62,5 % je to na hranici tam kde je
Tohle opravdu nejde, protoze mas blbe ty podminky
Zkus se nad tim chvilku zamyslet
a pak to uprav na:
Máš pravdu, děkuji za informace, a za čas který jste mi věnovali, snad někdy budu alespoň z poloviny dobrej jako ty.
Děkuji.
(programuji teprve týden)
Podminky by se daly prepsat i jako:
Děkuji, pokud máš ještě čas, zkus mi zodpovědět ještě jeden dotaz, co když dostanu 4,5(4.5) bodů z 10... ?
Pokud tam chces zadavat i desetinna cisla, zmenit prevod editu na cislo.
Obsah editu budes prevadet ne jako celociselne cislo, ale jako cislo s desetinnou carkou.
na prevody z retezce na cislo je vhodne pouzivat funkci StrToIntDef()
Pokud dojde k chybe pri prevodu, vysledkem prevodu bude cislo, definovane jako druhy parametr.
Mockrát děkuji ! :)
A pokud tu ještě jsi
proč to d na konci, musí být Integer? Jinak mě to nechce pustit dál :(
Protože to udává pozici v ListeBoxItems - to máš jako šachy - věž stojí na pozici jedna, kun na pozici dva, střelec na pozici tři. Žádná figura nikdy nemuže stát na pozici 5.13. Udává to pozici v nějakém listu a to jsou typicky celá čísla, tedy integer.
Hlavne, že mi kompilátor vyhodil 5 chýb !!! To som s Tvojim výtvorom nič nerobil...
Checking project dependencies...
Compiling Project1.dproj (Debug configuration)
[DCC Error] Unit1.pas(116): E2032 For loop control variable must have ordinal type
[DCC Error] Unit1.pas(119): E2010 Incompatible types: 'Integer' and 'Double'
[DCC Error] Unit1.pas(125): E2029 ';' expected but '.' found
[DCC Error] Unit1.pas(127): E2029 Declaration expected but end of file found
[DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'
Failed
Elapsed time: 00:00:00.5
Aký kompilátor používaš?
Nevím co teď máš namysli, jelikož se v tom zas tolik nevyznám.
Mám Portable Delphi 7. Win 7 64.
V programovacich jazycich se v cisle pouziva desetinna tecka, ne carka!
To vím, ale podmínku ve které by bylo desetiné místo jsem nikam nepsal.. Takže tím to nebude.
a delphi nezařve? To je ale škaredý jazyk.
Ale to vis, ze b yzarvalo, neslo by to zkompilovat, protoze podminka:
if s < 2,3 je nesmysl
Presne tak, máš pravdu!
Avšak aj to sa dá programovo upraviť:
DecimalSeparator:='.';
DecimalSeparator:=',';
Platí len počas spusteného programu, po ukončení programu nemá vplyv na miestne nastavenia v systéme...
ja si myslim taky, ze to rekl Honza dost tvrde - u Oracle to jde taky upravit (myslim i na ruzna zverstva :D) na ,
Tohle ma vliv pouze u konverze z retezce na cislo a naopak. Ale nema to vliv v podmince:
if x < 2,3