Gulv, tak og absoluttverdier

Her kan brukere av forum utfordre hverandre med morsomme oppgaver og nøtter man ønsker å dele med andre. Dette er altså ikke et sted for desperate skrik om hjelp, de kan man poste i de andre forumene, men et sted for problemløsing på tvers av trinn og fag.

Moderatorer: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

Svar
Nebuchadnezzar
Fibonacci
Fibonacci
Innlegg: 5648
Registrert: 24/05-2009 14:16
Sted: NTNU

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

Kode: Velg alt

def f(n) :
if n == 5:
   return 1
return 0 
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:

Kode: Velg alt

def f(n) :
if n < 10:
   return n
return 0 
Oppgave 1:

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
Oppgave 2:

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)
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:

Kode: Velg alt

def f(n):
   total = 0
  if n % 2 == 0 
      total += 2
  if n % 3 == 0
     total += 3
  return total
Oppgave 6:

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
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
Svar