Stránka 1 z 2

Pascal-problem s prikladom

Napsal: stř 5. led 2005, 18:32
od kolo
Ani zaboha nemozem prist nato ako napisat v Pascale tento priklad:
Napíšte program, ktorý vypočíta uhol medzi hodinovou a minútovou ručičkou, ak na vstupe
zadáte čas v hodinách a minútach.

Piplem sa s tym 1h a nic :x

Napsal: stř 5. led 2005, 18:44
od zombux
no rozdělil bych to na dvě části, jednak potřebuješ spočítat úhel hodinový a jednak minutový, to budeš počítat od jedný čáry, třeba od polohy "12 hodin". no a pak si řekneš že hodinová i minutová ručička má 60 možných poloh (pokud se hodinová posouvá každou minutu, sekundy neřešíme). vypočítáš o jaký procento se pohne za minutu (360° / 60 minutama = 6), tj u každý minuty se pohne o 6 stupňů. a to je celý - vynásobíš hodiny a minuty 6ti a pak zjistíš jakej je mezi nima rozdíl

Napsal: stř 5. led 2005, 19:36
od kolo
Ako to mam presne zapisat??
Hodiny budu premena a
Minuty budu premenna b
Hovoris ze to treba dat krat 6
IF a*6 Then Write ...............TOTO MI ROBI PROBLEM,LEBO NEVIEM AKO DALEJ POD then by malo byt ELSE ale co tam mam dat?
Skus to napisat presne staci IF..............

Napsal: stř 5. led 2005, 19:42
od kolo
mOZE TO BYT TAK???
uhol bude ako U
U:=(a*6-b*6)

Napsal: stř 5. led 2005, 19:51
od zombux
kolo píše:mOZE TO BYT TAK???
uhol bude ako U
U:=(a*6-b*6)
hm nějak mi to nemyslí :oops: ale myslim že takhle by to mohlo fungovat. ještě musíš vymyslet jednu věc - když bude úhel větší než 180° tak zase počítáš zpátky, takže if U>180 then U:=U-(U-180) nebo tak něco.

//edit: jednodušší by bylo

IF a>b THEN U:=(a*6-b*6) ELSE U:=(b*6-a*6)

Napsal: stř 5. led 2005, 20:24
od zombux
ne to je blbost. princip je správnej, ale ty hodiny jsou špatně, prvně musíš převést 24hodinovej systém na 12h (IF a>23 then a:=a-24), a pak přepočítáš stupně. každá hodina má 30°. vzorec pak bude

IF a*30>b*6 THEN U:=(a*30)-(b*6) ELSE U:=(b*6)-(a*30);
IF U>180 then U:=U-(U-180)

Napsal: stř 5. led 2005, 20:27
od kolo
kEBY SOM DAVAL HODINY OD 0=12...............11,TAK BY TO BOLO
(a*30)-(b*6)...................
Ked je vacsi ako 180 stupnov tak 360-(a*30)-(b*6)...................
Asi to nepochopis :oops: ,DIK ZA RADU,dost mi pomohla!!!!!!!!

Napsal: stř 5. led 2005, 20:40
od TomV
Takže, já to trochu shrnu. Bez ohledu na to, co tu zatím padlo, takhle jsem to vymyslel já a celkem mi to dává smysl. Zkusím ten "algoritmus" rozepsat v krocích...


1) Uvažujme čas 12:00 jako úhel 0° pro obě ručičky. Převedeme 24 hodinový čas na 12ti hodinový.

2) Spočítáme úhel minutové ručičky. To je to snažší : 360°/60 = 6° jedna minuta, tzn. úhel minutovky = minuty * 6.

3) Spočítáme hodinovku. Ta už je těžší, protože nemá jenom dvanáct poloh (po 30°), ale ještě se pohybuje mezi nimi v závislosti na minutovce.

A teď ten fígl - minutovka má 60 poloh. Za předpokladu, že největší přesnost tohoto programu je 1 minuta, můžeme rozdělit těch 30° (část mezi celými hodinami) na 60 dílů - tj. 60 * 0,5°.

Takže úhel hodinovky = počet hodin * 30° + počet minut * 0,5°.

4) Spočítáme rozdíl mezi úhly a máme výsledek... :-)


A já ti dík za tohle zadání, protože už vím, co napíšu jako zápočtovku z Pascalu... :-)

Napsal: stř 5. led 2005, 21:01
od zombux
Tom má pravdu, k hodinám se musí přičíst i minuty. jj. kecám :)

Napsal: stř 5. led 2005, 21:02
od TomV
kolo píše:kEBY SOM DAVAL HODINY OD 0=12...............11,TAK BY TO BOLO
(a*30)-(b*6)...................
Ked je vacsi ako 180 stupnov tak 360-(a*30)-(b*6)...................
Asi to nepochopis :oops: ,DIK ZA RADU,dost mi pomohla!!!!!!!!
Máš to blbě. :) Nezapočítáváš do toho úhel hodinovky v závislosti na minutovce (hodinovka přece neskáče jenom po celých hodinách :-)). Takhle ti může vyjít hodinovka až o 29° míň, než by měla.

//Edit :

Kód: Vybrat vše

uhel := ((a*30)+(b*0.5)) - (b*6);

Napsal: stř 5. led 2005, 21:54
od Dony
TomV v tom udelal jasno :bigups: , ale nemeli byste zapominat na matematiku a chudaky procesory, ktere delaji diky lenosti programatoru zbytecne vypocty...
Takze staci

Kód: Vybrat vše

 uhel := a*30-5.5*b 
8-)

Napsal: stř 5. led 2005, 22:08
od kolo
CHCEM sa vam vsetkym podakovat,velmi ste mi pomohli :)
Bez Vas by som bol strateny..................

Pozrite sa na tento ak chcete,povedzte mi co robi...........

Co robi dany program? Svoje odpovede zdovodnite!

var m1,m2:integer;
begin
write('zadaj 2 cene cisla: ');
readln(m1,m2);
if m1<10 then write (m2*2);
if m1<>2*m2-m1 then write (m1 - sqrt(m2))
else write (m2 div 6);
end.

Napsal: stř 5. led 2005, 22:43
od Dony
readln(m1,m2); - nacteni hodnot dvou promennych
if m1<10 then write (m2*2); - kdyz m1<10, napise dvojnasobek m2
if m1<>2*m2-m1 then write (m1 - sqrt(m2))
else write (m2 div 6); - kdyz m1 se nerovna 2*m2-m1, napise m1-odmocnina m2, jinak napise celociselnou cast m2/6

co je na tom tak sloziteho?

Napsal: stř 5. led 2005, 23:29
od TomV
Dony píše:TomV v tom udelal jasno :bigups: , ale nemeli byste zapominat na matematiku a chudaky procesory, ktere delaji diky lenosti programatoru zbytecne vypocty...
Takze staci

Kód: Vybrat vše

 uhel := a*30-5.5*b 
8-)
Co dělá procesor navíc, když mu to prsknu do závorek ? :? Já být programátor - lama... :-) Z těch závorek je pěkně poznat, co se tam děje. Na ten tvůj zápis (ač matematicky elegantnější) bych už potřeboval ve zdrojáku komentář... :-)

2 kolo : Kterej dobytek vás učí používat proměnné a, b, U, m1, m2, atd... ? Vždyť se v tom zdrojáku pak ani prase nevyzná... :roll:

Napsal: čtv 6. led 2005, 10:22
od Dony
nejde ani o ty zavorky, ale o jedno nasobeni a scitani navic... komentar bys tam musel napsat i tak...

Napsal: čtv 6. led 2005, 16:39
od TomV
Dony píše:nejde ani o ty zavorky, ale o jedno nasobeni a scitani navic... komentar bys tam musel napsat i tak...
To je taky fakt... :)

Napsal: čtv 6. led 2005, 16:53
od pavel.minarik
TomV píše:2 kolo : Kterej dobytek vás učí používat proměnné a, b, U, m1, m2, atd... ? Vždyť se v tom zdrojáku pak ani prase nevyzná... :roll:
tohle se používá na školách záměrně v případě kdy máš za úkol napsat co dělá nějakej program aby Ti nenapověděli názvama proměnných :wink:

Napsal: stř 12. led 2005, 14:10
od kolo
Zistite,ci niektora cifra v 3-cifernom prirodzenom cisle je 5.
:sad:

Napsal: stř 12. led 2005, 18:03
od pavel.minarik
kolo píše:Zistite,ci niektora cifra v 3-cifernom prirodzenom cisle je 5.
:sad:
ach jo, takže:


function JeTam5(Cislo: Integer): Boolean;
begin
if (IntToStr(Cislo)[1]='5') or (IntToStr(Cislo)R[2]='5') or (IntToStr(Cislo)R[3]='5')
then Result:= True
else Result:= False;
end;

psáno v Delphi notaci, ale jistě je to čitelné
+ doporučuju ještě test, zda číslo je skutečně 3ciferné, jinak odkazování se na 3. prvek retězce (např.) může havarovat

Napsal: stř 12. led 2005, 20:16
od kolo
A v Pascale by si to nemohol napisat............. :oops: