Ako použiť case v pascale ak mám intervaly ohraničené desat.číslom? – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ako použiť case v pascale ak mám intervaly ohraničené desat.číslom? – Pascal – Fórum – Programujte.comAko použiť case v pascale ak mám intervaly ohraničené desat.číslom? – Pascal – Fórum – Programujte.com

 

jjdan
~ Anonymní uživatel
7 příspěvků
23. 11. 2011   #1
-
0
-

#1 Student
zdravím,

môžte mi prosím poradiť?

1.úlohu riešiť pomocou case v pascale ak mám výraz real a hodnoty (intervaly ohraničené desatinným číslom)?

2. úloha, mám použiť case ak chcem aby mi po načítaní dátumu vypísalo aké som znamenie? teda aj deň aj mesiac rozhoduje.

ďakujem, už včera bolo neskoro

Nahlásit jako SPAM
IP: 87.197.23.–
KIIV
~ Moderátor
+43
God of flame
23. 11. 2011   #2
-
0
-

1) v case jde pouzit jen ordinalni typy - ne real neni ordinalni typ - nikdy nevis presne jaka je hodnota nasledovnika nebo predchudce (tj. neda se pouzit ani inc/dec)

2) na mesice klidne a dny se pak uz rozdeli pres if...  nebo prepocitat na pocet dni od zacatku roku a jen pres case

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
jjdan
~ Anonymní uživatel
7 příspěvků
23. 11. 2011   #3
-
0
-

#2 KIIV
Vďaka, viem, že real nemôžem použiť  v CASE...

a asi to budem musieť obíjsť... Chcela som cez case riešiť, aby sa vypísalo či mám normálnu váhu, nadvahu...a ďalej bla bla bla...ak vypočítam BMI index ako podiel hmotnosťi a druhej mocniny výšky v metroch... tie intervaly sú tam Od 18,5 do 30..a tak nejak... hm?

2. napadlo ma pole, ale to ešte nemôžem použiť... tak to skúsim poroešiť a môžem potom poslať zdriják? Na kontrolu efektívnosti, resp. ak nebudem vedieť zlepiť?

Vďaka veľká!!!

Nahlásit jako SPAM
IP: 87.197.23.–
KIIV
~ Moderátor
+43
God of flame
23. 11. 2011   #4
-
0
-

#3 jjdan
na bmi je snadnejsi pouzit nekolik ifu...  pokud je mensi nez normalni, pokud je vetsi nez normalni a jinak vypsat normalni

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
jjdan0
Duch
23. 11. 2011   #5
-
0
-

#4 KIIV
cez ify to mám vyriešené...beží to v pohode...

Nahlásit jako SPAM
IP: 87.197.23.–
Mircosoft+1
Věrný člen
24. 11. 2011   #6
-
0
-

Taky se dá použít technika "fixed point". To znamená, že si čísla interně vynásobíš třeba deseti a zaokrouhlíš. Takže třeba někdo zadá 18.31, ty si to přepočítáš na 183 a bereš to jako ordinální číslo. Když chceš přesnost na 2 desetinná místa, násobíš 100, na tři tisícem atd.

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
jjdan0
Duch
25. 11. 2011   #7
-
0
-

#6 Mircosoft
hm...takže sa to tak dá aj "oficiálne":-) teda volá sa to "fixed point"...budem si to pamatať...intuitívne som si myslela, či by som to akože tak "neoklamala", že by som to prehodila na integer a tie vyhodnotila...

ďakujem

ten druhý mi ale nebeži cez case...

takto to asi nepojde, že?

var den, mesiac: integer;
begin
writeln (' Zadaj den a mesiac narodenia ako cele cislo');
readln(den, mesiac);
case mesiac of
     1..2: begin
           If (den>=21 and den<=29) and (den >=1 and den <=19)
           then writeln (' si znamenie vodnar');
           end;
     2..3: begin
           If (den>=20 and den<=30) and (den >=1 and den <=20)
           then writeln (' si znamenie ryby');
           end;

end;


end.

Nahlásit jako SPAM
IP: 87.197.23.–
Mircosoft+1
Věrný člen
25. 11. 2011   #8
-
0
-

Když se jedno znamení táhne přes dva měsíce, nedá se číslo měsíce použít jako první rozlišovací podmínka. Resp. dá, ale musela bys potom v každé větvi toho case ještě přes if/else rozvětvit do dvou znamení podle dne a tím by se to celé zkomplikovalo.

Asi nejelegantnější by bylo převést si datum do juliánského formátu. To znamená, že se dny počítají na celý rok lineárně od 1 do 365 (přestupné roky se u znamení neřeší) a o měsíce se nestaráme. Pak by ti pro každé znamení stačil jednoduchý interval.

Nebo úplně nejpřímočařejší řešení by byla tabulka, do které by se kouklo na řádek odpovídající číslu měsíce a sloupec odpovídající dni a tam by se rovnou našlo znamení. To je sice rychlé a jednoduché, ale relativně náročné na paměť (372 B) a ruční datlování konstant a asi to není úplně přesně podle zadání :-).

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
jjdan0
Duch
25. 11. 2011   #9
-
0
-

#8 Mircosoft
hm, tiež ma to napadlo,tak som už začala..ale neviem, čo takto je to ok... a potom výpis? a ešte cez If ošetriť tie intervaly zverokruhu?

case mesiac of
    1: begin
            x:=31;
            pocet:=den+x;
       end;
    2: begin
            x:=31+28;
            pocet:=den+x;
       end;
    3: begin
            x:=2.31+28;
            pocet:=den+x;
       end;
    4:begin

Nahlásit jako SPAM
IP: 87.197.23.–
Mircosoft+1
Věrný člen
25. 11. 2011   #10
-
0
-

Základní myšlenka je dobře, ale máš tam pár chybiček. Řádek x:=2.31+28 je špatně - násobí se hvězdičkou (*), tečka funguje jako desetinná čárka. Potom pozor, že to máš o měsíc posunuté - počet dní v lednu musíš přičítat až k únoru, x pro leden je 0. Tu okliku přes x bych asi zrušil (tj. např. pocet:=31+28+den), ale chyba to není.

Pak už to bude jednoduché: case pocet of 100..129:znameni:='rak'; atd. (tohle jsem jen tak plácnul, intervaly si musíš spočítat).

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
jjdan0
Duch
25. 11. 2011   #11
-
0
-

#10 Mircosoft
oj, jasné, to som písala v textovom editore...násobenie hviezdička...

hm, asi je to X navyše...vďaka..

dopočítať to natvrdo, alebo je niečo krajšie?

d

Nahlásit jako SPAM
IP: 87.197.23.–
Mircosoft+1
Věrný člen
25. 11. 2011   #12
-
0
-

No, jediná trochu elegantnější možnost, co mě napadá, je vytvořit si jako konstantu pole dvanácti čísel s počty dnů v jednotlivých měsících a v nějakém dalším poli je pak nějakým cyklem vhodně posčítat.

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
jjdan0
Duch
25. 11. 2011   #13
-
0
-

#12 Mircosoft
hm..polia...tie sa ešte nebrali....

ale evidujem ako elegantnejšie riešenie tejto časti....

možno ak sa budú brať, tak sa to ukáže aj týmto spôsobom...

Nahlásit jako SPAM
IP: 87.197.23.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý