"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",
I denne oppgaven skal en bruker skrive inn dag og måned og få ut hvilken årstid datoen tilhører.
Et år har (offisielt) fire årstider, og i denne oppgaven tar vi utgangspunkt i at årstidsskiftene følger tabellen nedenfor. **(Merk deg datoene)**
Årstid | Første dag
--- | ---
Vår | 20. mars
Sommer | 21. juni
Høst | 22. september
Vinter | 21. desember
%% Cell type:markdown id: tags:
**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.
"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",
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.
Den generelle formen til en andregradsligning er
\begin{equation*}
ax^2 + bx + c = 0
\end{equation*}
For å finne ut hvor mange løsninger og hvilket løsningsområde en andregradsligning har, kan man bruke *diskriminanten*
\begin{equation*}
d = b^2 - 4ac
\end{equation*}
og tabellen:
Tilfelle|Løsningsområde|Antall røtter
---|---|---
d < 0|Imaginær|2
d > 0|Reell|2
d = 0|Reell 1|(dobbeltrot)
%% Cell type:markdown id: tags:
## a) Finn riktig type løsning
%% Cell type:markdown id: tags:
***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.***
Andregradsligningen 2.00*x^2 + 4.00*x + 9.00 har to imaginære løsninger
```
```python
#Eksempel 2: reelle løsninger
a: 2
b: -5
c: 0
Andregradsligningen 2.00*x^2 -5.00*x + 0.00 har de to reelle løsningene 2.50 og 0.00
```
```python
#Eksempel 3: reell dobbeltrot
a: 2
b: 4
c: 2
Andregradsligningen 2.00*x^2 + 4.00*x + 2.00 har en reell dobbeltrot -1.00
```
%% Cell type:markdown id: tags:
## C) (FRIVILLIG) Loss of significance
%% Cell type:markdown id: tags:
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:
```python
Andregradsligningen 1.00*x^2 + 282429536481.00*x -3.00 har de to reelle løsningene 0.000e+00 og -2.824e+11
```
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:
```python
Andregradsligningen 1.00*x^2 + 282429536481.00*x -3.00 har de to reelle løsningene 1.062e-11 og -2.824e+11
```
Hva kommer denne feilen av? ***Gjør om på programmet slik at det tar hensyn til slike tilfeller.***