summaryrefslogtreecommitdiff
path: root/python/problems/introduction/ballistics/sl.py
blob: 15b02beb2477c173f2886d7d617d9e20bd59d670 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# coding=utf-8

id = 187
name = 'Topologija'
slug = 'Topologija'

description = '''\
<p>Napiši program za izračun dolžine strela s topom (ki brez trenja izstreljuje 
točkaste krogle v brezzračnem prostoru, a pustimo trivio). Program od uporabnika 
ali uporabnice zahteva, da vnese hitrost izstrelka (to je, omenjene točkaste krogle) 
in kot, pod katerim je izstreljen. Program naj izračuna in izpiše, kako daleč 
bo letela krogla.</p>
<p>Pomoč za fizično nebogljene: s=v<sup>2</sup>sin(2f)/g , kjer je s razdalja, 
v hitrost izstrelka, f je kot, g pa osma črka slovenske abecede.</p>
<p>Preveri tole: krogla leti najdalj, če jo izstrelimo pod kotom 45 stopinj. 
Poskusi, kako daleč gre pod kotom 45 in kako daleč pod 46 stopinj -- po 45 mora leteti dlje. 
Preveri tudi kot 50 stopinj: če pod tem kotom leti nazaj (razdalja je negativna), 
si ga gotovo nekje polomil.
'''

general_exception = {
    'error_head' : '''\
<p>Napaka:</p>
<pre>
[%=message%]
</pre>
''',

    'general': '''
    <p>Pri razumevanju napake sta pomembni dve vrstici. V predzadnji vrstici je napisana lokacija
    napake (line ...), v zadnji vrstici pa izvemo za kakšno napako gre.</p>
    ''',

    'name_error' : '''
    <p>Napaka <code>NameError</code> pomeni, da uporabljate nedefinirano vrednost:
    ali vrednost spremenljivke ni določena ali uporabljate funkcijo, ki ni uvožena.</p>
    ''',

    'type_error': '''
    <p>TypeError napaka pomeni, da želite izvesti operacijo na nedovoljenih tipih.
    Npr., če želite sešteti niz in število ali klicati funkcijo, čeprav tisto ni funkcija, itd. .</p>
    ''',

    'indentation_error': '''
    <p> Pomeni, da imate napačno število presledkov na začetku vrstice. Poskrbite, da so vse vrstice pravilno
poravnane. </p>'''

}

hint = {
    'plan': '''\
<p>Plan sledi že znani strategiji: preberi vrednosti – izračunaj – izpiši.</p>
''',
    
    'eval_expression': '''
<p>Izračunati morate pot po formuli: s=v<sup>2</sup>sin(2f)/g</p>
<p>Konstanta g je gravitacijski pospešek in ima vrednost približno 9.8 :) </p>
<p>Funkcijo <code>sin</code> dobite v modulu <code>math</code>, tako kot smo tam 
dobili funkcij <code>sqrt</code>. Na začetku programa  torej napišite:</p>
<pre>
from math import *
</pre>
<p>Če vam funkcija <code>sin</code> ne deluje pravilno, vam svetujemo, da si 
pogledate v dokumentacijo, kako funkcija deluje (še posebno bodite pozorni na 
razlago v oklepajih). Do dokumentacije dostopate z ukazom help:</p>
<pre>
help(sin)
</pre>
''',

    'printing': '''
<p> V Pythonu izpisujemo s funkcijo <code>print. Če želimo izpisati več elementov, 
jih ločimo z vejico.  Recimo, da imamo spremenljivko <code>ime</code>, 
ki vsebuje naše ime, potem lahko napišemo:
<pre>
print("Ime mi je", ime, ".")
</pre>''',

    'radians': ['''
<p>Vse triginometrične funkcije sprejemajo kot v radianih in ne v stopinjah.</p>''', 
''' <p>V stopinjah ima cel krog 360°, v radianih pa 2*pi. Zato je 360° ekvivalentno 2*pi.</p>''',
''' <p>Formula za pretvorbo med stopinjami in radiani je: </p>
kot_rad = kot * 2 * pi / 360'''],

    'betterg': '''Konstanta g naj ima vrednost 9.8''',

    'name_error' : [general_exception['error_head'], general_exception['general'],
    general_exception['name_error'], '''
    <p>Verjetno uporabljate spremenljivko, ki nima vrednosti. Ali v izrazu za izračun
     uporabljate napačno spremenljivko? Ali pri izpisu morda poskušate
     izpisati napačno spremenljivko?</p>'''],

    'sin_error' : [general_exception['error_head'], general_exception['general'],
    general_exception['name_error'], '''
    <p>Za uporabo funkcije <code>sin</code> je potrebno prej uvoziti modul <code>math</code>:
    <code>from math import *</code> ali <code>import math</code>. Če uporabljate slednji način,
    morate vedno uporabiti ime modula pri klicu funkcije: <code>math.sin(...)</code>.'''],

    'unsupported_operand' : [general_exception['error_head'], general_exception['general'],
    general_exception['type_error'], '''
<p>Verjetni razlog: funkcija <code>input</code> vrača vrednost tipa niz,
ki jo moramo najprej pretvoriti v tip <code>float</code>, če želimo z njo računati:</p>
<pre>
v = float(input(" ...
</pre>
'''],
    'type_error' : [general_exception['error_head'], general_exception['general'],
    general_exception['type_error'], '''
<p>Verjetni razlog: funkcija <code>input</code> vrača vrednost tipa niz,
ki jo moramo najprej pretvoriti v tip <code>float</code>, če želimo z njo računati:</p>
<pre>
v = float(input(" ...
</pre>
'''],

    'error' : [general_exception['error_head'], general_exception['general'],]
}