Commit a500642c authored by Geir Ola Lillestøl Tvinnereim's avatar Geir Ola Lillestøl Tvinnereim
Browse files

Oving2 lagt til

parent af0a5fcf
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"<nav class=\"navbar navbar-default\">\n",
" <div class=\"container-fluid\">\n",
" <div class=\"navbar-header\">\n",
" <a class=\"navbar-brand\" href=\"_Oving2.ipynb\">Øving 2</a>\n",
" </div>\n",
" <ul class=\"nav navbar-nav\">\n",
" <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
" <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
" <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
" <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
" <li class=\"active\"><a href=\"Aarstider.ipynb\">Årstider</a></li>\n",
" <li ><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
" <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
" <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
" <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
" <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
" <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
" </ul>\n",
" </div>\n",
"</nav>\n",
"\n",
"\n",
"# Årstider\n",
"\n",
"**Læringsmål:**\n",
"- Betingelser\n",
"- Logiske uttrykk\n",
"\n",
"**Starting Out with Python:**\n",
"- Kap. 3.3-3.5\n",
"\n",
"I denne oppgaven skal en bruker skrive inn dag og måned og få ut hvilken årstid datoen tilhører.\n",
"\n",
"Et år har (offisielt) fire årstider, og i denne oppgaven tar vi utgangspunkt i at årstidsskiftene følger tabellen nedenfor. **(Merk deg datoene)**\n",
"\n",
"\n",
"Årstid | Første dag\n",
"--- | ---\n",
"Vår | 20. mars\n",
"Sommer | 21. juni\n",
"Høst | 22. september\n",
"Vinter | 21. desember"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"**Oppgave:** Lag et program som tar inn en måned som en streng og en dag i denne måneden som et tall fra brukeren. Programmet skal så skrive ut årstiden assosiert med denne datoen.\n",
"\n",
"Du kan anta at inputen er en gyldig dato.\n",
"\n",
"**Eksempel på kjøring:**\n",
"```\n",
"Måned: mars\n",
"Dag: 20\n",
"Vår\n",
"``` \n",
" \n",
"```\n",
"Måned: mars\n",
"Dag: 19\n",
"Vinter\n",
"``` \n",
" \n",
"```\n",
"Måned: november\n",
"Dag: 20\n",
"Høst\n",
"```\n",
"\n",
"___Skriv din kode her:___"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false",
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"<nav class=\"navbar navbar-default\">\n",
" <div class=\"container-fluid\">\n",
" <div class=\"navbar-header\">\n",
" <a class=\"navbar-brand\" href=\"_Oving2.ipynb\">Øving 2</a>\n",
" </div>\n",
" <ul class=\"nav navbar-nav\">\n",
" <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
" <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
" <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
" <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
" <li><a href=\"Aarstider.ipynb\">Årstider</a></li>\n",
" <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
" <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
" <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
" <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
" <li class=\"active\"><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
" </ul>\n",
" </div>\n",
"</nav>\n",
"\n",
"# Andregradsligning\n",
"\n",
"**Læringsmål:**\n",
"- Betingelser\n",
"\n",
"**Starting Out with Python:**\n",
"- Kap. 3.4"
]
},
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false",
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"I denne oppgaven skal du lage et program som tar inn input fra brukeren om tallene i en andregradsligning, og returnerer hvorvidt ligningen har to reelle løsninger, to imaginære løsninger eller én reell dobbeltrot. I tillegg skal programmet returnere løsningene dersom de er reelle.\n",
"\n",
"Den generelle formen til en andregradsligning er \n",
"\n",
"\\begin{equation*}\n",
"ax^2 + bx + c = 0\n",
"\\end{equation*}\n",
"\n",
"For å finne ut hvor mange løsninger og hvilket løsningsområde en andregradsligning har, kan man bruke *diskriminanten*\n",
"\n",
"\\begin{equation*}\n",
"d = b^2 - 4ac\n",
"\\end{equation*}\n",
"\n",
"og tabellen:\n",
"\n",
"Tilfelle|Løsningsområde|Antall røtter\n",
"---|---|---\n",
"d < 0|Imaginær|2\n",
"d > 0|Reell|2\n",
"d = 0|Reell\t1|(dobbeltrot)"
]
},
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false",
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"## a) Finn riktig type løsning"
]
},
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false",
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"***Lag et program som ber om de tre verdiene a, b og c, regner ut d, og forteller brukeren om ligningen har to imaginære løsninger, to reelle løsninger, eller én reell dobbeltrot.***\n",
"\n",
"Sjekk for alle de tre mulige utfallene:\n",
"\n",
"- To imaginære løsninger\n",
" - f.eks.: a = 2, b = 4, c = 9\n",
"- To reelle løsninger\n",
" - f.eks.: a = 2, b = -5, c = 0\n",
"- Én reell dobbeltrot\n",
" - f.eks.: a = 2, b = 4, c = 2\n",
" \n",
"***Skriv koden under***"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"Collapsed": "false"
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false",
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"## b) Reelle løsninger"
]
},
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false",
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"***Utvid nå programmet i a) slik at bruker får vite løsningen(e) dersom de(n) er reell(e)***\n",
"\n",
"Andregradsformelen for å finne løsningen(e) er:\n",
"\n",
"\\begin{equation*}\n",
"x=\\frac{-b±\\sqrt{d}}{2a}\n",
"\\end{equation*}\n",
"\n",
"**Eksempel på kjøring av kode:**\n",
"\n",
"```python\n",
"#Eksempel 1: imaginære løsninger \n",
"a: 2 \n",
"b: 4 \n",
"c: 9 \n",
"Andregradsligningen 2.00*x^2 + 4.00*x + 9.00 har to imaginære løsninger\n",
"```\n",
"\n",
"```python\n",
"#Eksempel 2: reelle løsninger\n",
"a: 2\n",
"b: -5\n",
"c: 0\n",
"Andregradsligningen 2.00*x^2 -5.00*x + 0.00 har de to reelle løsningene 2.50 og 0.00\n",
"```\n",
"\n",
"```python\n",
"#Eksempel 3: reell dobbeltrot\n",
"a: 2\n",
"b: 4\n",
"c: 2\n",
"Andregradsligningen 2.00*x^2 + 4.00*x + 2.00 har en reell dobbeltrot -1.00\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false",
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"## C) (FRIVILLIG) Loss of significance"
]
},
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false"
},
"source": [
"Andregradsformelen kan i enkelte tilfeller gi feil svar. Et slikt tilfelle er når man bruker den på likningen $x^2+9^{12}x−3=0$ . Om man ønsker å finne røttene til denne likningen, gir standardformelen følgende resultat:\n",
"\n",
"```python\n",
"Andregradsligningen 1.00*x^2 + 282429536481.00*x -3.00 har de to reelle løsningene 0.000e+00 og -2.824e+11\n",
"```\n",
"\n",
"Her er bare den siste av røttene korrekt. Den første roten er ukorrekt blitt null pga. avrundingsfeil som følge av tap av presisjon i beregningen, korrekt svar ville ha vært:\n",
"\n",
"```python\n",
"Andregradsligningen 1.00*x^2 + 282429536481.00*x -3.00 har de to reelle løsningene 1.062e-11 og -2.824e+11\n",
"```\n",
"Hva kommer denne feilen av? ***Gjør om på programmet slik at det tar hensyn til slike tilfeller.***\n",
"\n",
"**Eksempel på kjøring**\n",
"```python\n",
"#a = 0.25, b = 18000, c = 1\n",
"#Gammel kode som gir feil svar:\n",
"Andregradsligningen 0.25*x^2 + 18000.00*x + 1.00 har de to reelle løsningene -0.00 og -72000.00\n",
"#Ny kode som gir korrekt svar:\n",
"Andregradsligningen 0.25*x^2 + 18000.00*x + 1.00 har de to reelle løsningene -5.556e-05 og -7.200e+04\n",
" \n",
"#a = 10, b = 25000, c = 0.015\n",
"#Gammel kode som gir feil svar:\n",
"Andregradsligningen 10.00*x^2 + 25000.00*x + 0.01 har de to reelle løsningene -0.00 og -2500.00\n",
"#Ny kode som gir korrekt svar:\n",
"Andregradsligningen 10.00*x^2 + 25000.00*x + 0.01 har de to reelle løsningene -6.000e-07 og -2.500e+03\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false",
"deletable": false,
"editable": false,
"heading_collapsed": true,
"run_control": {
"frozen": true
}
},
"source": [
"#### Hint"
]
},
{
"cell_type": "markdown",
"metadata": {
"Collapsed": "false",
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"Om du sliter, kan det være nyttig å lese dette:\n",
"\n",
"- [NumericallyStableSolutionForTheQuadraticEquations](http://www.solipsys.co.uk/cgi-bin/sews.py?NumericallyStableSolutionForTheQuadraticEquation)\n",
"- [Numerically Stable Method for Solving Quadratic Equations](https://people.csail.mit.edu/bkph/articles/Quadratics.pdf)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<nav class=\"navbar navbar-default\">\n",
" <div class=\"container-fluid\">\n",
" <div class=\"navbar-header\">\n",
" <a class=\"navbar-brand\" href=\"_Oving2.ipynb\">Øving 2</a>\n",
" </div>\n",
" <ul class=\"nav navbar-nav\">\n",
" <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
" <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
" <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
" <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
" <li><a href=\"Aarstider.ipynb\">Årstider</a></li>\n",
" <li ><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
" <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
" <li class=\"active\"><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
" <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
" <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
" <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
" </ul>\n",
" </div>\n",
"</nav>\n",
"\n",
"# Billettpriser og rabatter\n",
"\n",
"**Læringsmål:**\n",
"\n",
"* Betingelser\n",
"\n",
"**Starting Out with Python:**\n",
"\n",
"* Kap 3.1, 3.2, 3.4\n",
"\n",
"I denne oppgaven skal du bruke betingelser (if-elif-else) til å bestemme billettprisen til en bruker basert på input fra brukeren. \n",
"\n",
"Transportselskapet «TravelevatoR» tilbyr reiser fra Trondheim til Pythonville. Ved bestilling minst 14 dager før man skal reise, kan man få minipris 199. Normal billett koster 440. "
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"### a)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"Skriv et program med to mulige oppførsler som vist under:\n",
"\n",
" \n",
"```python\n",
"Dager til du skal reise? 15 \n",
"Du kan få minipris: 199,- \n",
">>> \n",
"Dager til du skal reise? 8 \n",
"For sent for minipris; fullpris 440,- \n",
"```\n",
"***Skriv koden din under***"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2019-07-02T08:22:50.607851Z",
"start_time": "2019-07-02T08:22:50.600802Z"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"### b)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"Det hender av og til at kunder ikke ønsker minipris, men heller vil ha fullprisbillett. Dette fordi minipris ikke kan refunderes / endres. Utvid derfor programmet så kunder spørres om de ønsker minipris – men kun der det er relevant. To eksempel på kjøring etter utvidelsen:\n",
"\n",
" \n",
"```python\n",
"Dager til du skal reise? 17\n",
"Minipris 199,- kan ikke refunderes/endres\n",
"Ønskes dette (J/N)? J\n",
"Takk for pengene, god reise!\n",
"```\n",
" \n",
"```python\n",
"Dager til du skal reise? 17\n",
"Minipris 199,- kan ikke refunderes/endres\n",
"Ønskes dette (J/N)? N\n",
"Da tilbyr vi fullpris: 440,-\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"### c)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"Det blir besluttet at barn under 16 gis 50% rabatt. Senior (60+), militær i uniform, og student gis 25% rabatt. Om man f.eks. både er 60+ og militær / student, får man likevel bare 25% rabatt. Alle disse rabattene gjelder kun i forhold til fullpris, for minipris gis ingen rabatter. Endre programmet så det spør kunden om alder, evt. også om student / militær, og regner ut riktig pris.\n",
"\n",
"**NB:** De nye spørsmålene skal ***kun*** stilles når de er relevante, da det er et mål at kunden skal måtte svare på så få spørsmål som mulig.\n",
"\n",
"Eksempel på kjøring av koden:\n",
"\n",
" \n",
"```python\n",
"Dager til du skal reise? 17\n",
"Minipris 199,- kan ikke refunderes/endres\n",
"Ønskes dette (J/N)? N\n",
"Skriv inn din alder: 15\n",
"Prisen på biletten blir: 220,-\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"### d) Valgfri oppgave"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
"source": [
"Du får godkjent oppgaven om du bare har klart a, b og delvis c, men prøv gjerne på denne litt vanskeligere d også.\n",
"\n",
"Etter lobbyvirksomhet fra studentorganisasjoner endres reglene på følgende måte: Studenter får også litt rabatt på miniprisbilletter (10%), samt at personer som både er studenter og militære / 60+, eller studenter og barn, får to rabatter, og dermed bare betaler 0,75 * 0,75 eller 0.75 * 0.5 av fullpris. Merk at personer som er 60+ og militære, men ikke studenter, eller barn og militære, men ikke studenter, ikke får noen slik multiplisert rabatt, de må fortsatt nøye seg med den ene rabatten de hadde før, og de vanlige 199 for minipris. Endre programmet så det fungerer korrekt i forhold til de nye reglene."
]
}