Gulv, tak og absoluttverdier
Lagt inn: 29/02-2016 14:22
Noe som kanskje er ukjent for mange er at løkker (if-else) i programmering kan simmuleres ved hjelp av gulv, og tak-funksjonene.
Disse runder henholdvis ned og opp til nærmeste heltall. Eksempelvis $\text{floor}( 3 / 8 ) = 0$, $\text{ceil}( 3/ 8) = 1$. Merk en kan og
bruke $\lfloor 3/ 8\rfloor = 0$ som alternativ notasjon.
Et veldig enkelt eksempel på hvordan en kan simulere løkker er vist under
Denne koden gir ut 1 om tallet er 5, ellers returnerer den 0. Følgende matematiske funksjon gjør akkuratt det samme
$
g(n) := \text{floor}( 5/n ) \cdot \text{floor}( n / 5)
$
Hvor en antar at $n$ er ulik null. Under er noen forholdsvis enkle funksjoner. Oppgavene går ut på å skrive om løkkene til matematiske funksjoner
ved å bruke floor, ceil, min, max og abs.
Oppgave 0:
Oppgave 1:
Skriv om følgende koder uten bruk av min / max.
Oppgave 2:
Definer modulo funksjonen ($3 \equiv 0 \pmod{12}$), ved å bruke en eller flere av ceil, floor, abs, min, max.
Ja, koden er skrevet inneffektivt med vilje. Bare for å ikke gi vekk løsningen for lett
Oppgave 3:
Ingen psudokode her. Lag en funksjon $RN(n, b)$ som tar inn et heltall, og runder $n$ ned til nærmeste multiplum av $b$. Klarer du å gjøre det uten Mod funksjonen?
For eksempel så er $RN( 11, 2) = 10$, $RN(1237, 10) = 1230$, $RN(1237, 100) = 1200$ osv.
Oppgave 4:
Lag en funksjon som runder til nærmeste heltall, og bruker følgende standard
https://en.wikipedia.org/wiki/Nearest_integer_function
Oppgave 5:
Oppgave 6:
Skuddår, gi ut 1 hvis året er skuddår. Gi ut 0 ellers.
Disse runder henholdvis ned og opp til nærmeste heltall. Eksempelvis $\text{floor}( 3 / 8 ) = 0$, $\text{ceil}( 3/ 8) = 1$. Merk en kan og
bruke $\lfloor 3/ 8\rfloor = 0$ som alternativ notasjon.
Et veldig enkelt eksempel på hvordan en kan simulere løkker er vist under
Kode: Velg alt
def f(n) :
if n == 5:
return 1
return 0
$
g(n) := \text{floor}( 5/n ) \cdot \text{floor}( n / 5)
$
Hvor en antar at $n$ er ulik null. Under er noen forholdsvis enkle funksjoner. Oppgavene går ut på å skrive om løkkene til matematiske funksjoner
ved å bruke floor, ceil, min, max og abs.
Oppgave 0:
Kode: Velg alt
def f(n) :
if n < 10:
return n
return 0
Skriv om følgende koder uten bruk av min / max.
Kode: Velg alt
Min(a,b):
if a > b
return b
return a
Kode: Velg alt
Max(a,b):
if a > b
return a
return a
Definer modulo funksjonen ($3 \equiv 0 \pmod{12}$), ved å bruke en eller flere av ceil, floor, abs, min, max.
Kode: Velg alt
def Modulo(a ,b):
c = 0
while c < a:
c = c + b
return b - (c - a)
Oppgave 3:
Ingen psudokode her. Lag en funksjon $RN(n, b)$ som tar inn et heltall, og runder $n$ ned til nærmeste multiplum av $b$. Klarer du å gjøre det uten Mod funksjonen?
For eksempel så er $RN( 11, 2) = 10$, $RN(1237, 10) = 1230$, $RN(1237, 100) = 1200$ osv.
Oppgave 4:
Lag en funksjon som runder til nærmeste heltall, og bruker følgende standard
https://en.wikipedia.org/wiki/Nearest_integer_function
Oppgave 5:
Kode: Velg alt
def f(n):
total = 0
if n % 2 == 0
total += 2
if n % 3 == 0
total += 3
return total
Skuddår, gi ut 1 hvis året er skuddår. Gi ut 0 ellers.
Kode: Velg alt
def IsLeapYear(year):
if year % 100 == 0:
if year % 400 == 0
return 0
else
return 1
elif year % 4 == 0
return 1
else:
return 0