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

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í

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

,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

,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 :
Napsal: stř 5. led 2005, 21:54
od Dony
TomV v tom udelal jasno

, ale nemeli byste zapominat na matematiku a chudaky procesory, ktere delaji diky lenosti programatoru zbytecne vypocty...
Takze staci

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

, ale nemeli byste zapominat na matematiku a chudaky procesory, ktere delaji diky lenosti programatoru zbytecne vypocty...
Takze staci

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á...

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á...

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

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

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

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.............
