Programmering - maraton

Her kan du stille spørsmål vedrørende problemer og oppgaver i matematikk for videregående skole og oppover på høyskolenivå. Alle som føler trangen er velkommen til å svare.

Moderatorer: Aleks855, Gustav, Nebuchadnezzar, Janhaa, DennisChristensen, Emilga

Mattebruker
Weierstrass
Weierstrass
Innlegg: 458
Registrert: 26/02-2021 21:28

Den første programkoden min var sletta på trinket.io/python 3 , så eg måtte skrive inn alle kommandoane på nytt.
I realiteten trengde eg berre å endre på to - tre instuksjonar for å få med primtal som inneheld sifferet 1.
Her er i alle fall den oppdaterte lista:
Eksempel: Input N = 20 returnerer denne talrekkja: 11 - 19 - 29 - 41 - 61 - 89 - 101 - 109 - 149 - 181 - 191 - 199 - 211 - 229 - 241 - 269 - 281 - 401 - 409 - 419 ( sum = 3640 )
Gustav
Tyrann
Tyrann
Innlegg: 4555
Registrert: 12/12-2008 12:44

Du mangler fremdeles 2 i den rekka, men ellers ser det vel riktig ut. Post gjerne hele koden :)
Mattebruker
Weierstrass
Weierstrass
Innlegg: 458
Registrert: 26/02-2021 21:28

Takk for tilbakemelding. Ei heilt kurant sak å legge inn a[ 1 ] = 2. Vil gjerne legge ved heile programmet, men har problem med å kopiere "dokumentet" inn i
Mat.net . Eg har utklippsverktøy på PC-en. Kunne nokon der ute gjere vel å forklare/instruere framgangsmåten ?
Aleks855
Rasch
Rasch
Innlegg: 6855
Registrert: 19/03-2011 15:19
Sted: Trondheim
Kontakt:

Når du har skrevet ferdig programmet kan du markere all koden, kopiere den, og komme hit.

Trykk på knappen som ser slik ut over tekstfeltet:

Bilde

Den åpner kode-tags. Lim inn koden mellom der, så ser den

Kode: Velg alt

slik ut
og den bevarer blant annet indentering (som er veldig viktig når vi formidler Python).
Bilde
Mattebruker
Weierstrass
Weierstrass
Innlegg: 458
Registrert: 26/02-2021 21:28

Greier ikkje å finne knappen( </> ) du refererer til.
Aleks: Kan du gjere vel å vise prosedyren med eit konkret eksempel ( sjå nedanfor )

sum = 0
for i in range(1 , 11 ):
sum = sum + i
print(" Summen av alle heiltal f.o.m. 1 t.o.m. 10 = " , sum )
Mattebruker
Weierstrass
Weierstrass
Innlegg: 458
Registrert: 26/02-2021 21:28

Takk Aleks ! Greidde å "knekke koden" utan fleire instruksar. Eigentleg svært enkelt.

Kode: Velg alt

sum = 0
for i in range(1 , 11):
  i = i + 1
  sum = sum + i
print(" Summen av alle heiltal f.o.m. 1 t.o.m.10 = ", sum)
Mattebruker
Weierstrass
Weierstrass
Innlegg: 458
Registrert: 26/02-2021 21:28

Kode: Velg alt


# Primtal utan odde primtalsiffer ( 3 , 5 og 7)
from pylab import *
liste = [ 3 , 5 , 7]
N = int(input(" Oppgi eit heiltal > 1: "))
a = zeros(100)
nummer = 2 ; ptal = 11 ; sum = 13 ; a[1] = 2; a[2] = 11 
#
# Modul 1 : Plukkar ut neste primtal
#
while nummer < N:
  ptal = ptal + 2
  treff = True
  faktor = 3
  while (faktor < ptal/2) and (treff == True):
    if ( ptal/faktor) == floor(ptal/faktor):
      treff = False
    else:
      faktor = faktor + 2
#
# Modul 2: Testar om neste primtal inneheld primtalsiffer
#
  if treff == True:
    i = 0; m = floor(log10(ptal)); test = True
    while (i <= m) and (test == True):
      rest = floor(ptal/10**i)
      siffer = rest - floor(rest/10)*10
      if siffer in liste:
        test = False
      else:
        i = i + 1
#
# Modul 3: Legg inn neste primtal i tabell og oppdaterer sum
#
    if test == True:
       nummer = nummer + 1
       a[nummer] = ptal
       sum = sum + ptal
#
#  Modul 4: Presenterer utdata
#
for i in range(1 , N + 1): 
  print(round(a[i]))
print(" Summen av dei ", N , " første primtala, utan odde primtalsiffer,  = ", sum)  
      
      
        
    
Mattebruker
Weierstrass
Weierstrass
Innlegg: 458
Registrert: 26/02-2021 21:28

Kode: Velg alt

#                                          Primtal utan odde primsiffer
#
from pylab import *
liste = [3 , 5 , 7]
a = zeros(100)
a[1] = 2; a[2] = 11; sum = 13 ; ptal = 11; nummer = 2
#
N = int(input("Tast inn eit heiltal > 1 :"))
#
# Søkjer neste primtal( ptal )
while ( nummer < N):
  ptal = ptal + 2 
  treff = True
  faktor = 3
  while (treff == True) and ( faktor < ptal/2):
    if (ptal/faktor) == floor(ptal/faktor):
      treff = False
    else:
      faktor = faktor + 2
# 
#  Undersøk om funne primtal inneheld odde primsiffer
#
  if treff == True:
    i = 0; m = floor(log10(ptal))
    while ( treff == True) and ( i <= m):
      rest = floor(ptal/10**i)
      siffer = rest - floor(rest/10)*10
      if siffer in liste:
        treff = False
      else:
        i = i + 1
#
#  Legg inn gyldig primtal(ptal) i tabell og oppdaterer sum
#
    if treff == True:
      nummer = nummer + 1
      a[nummer] = ptal
      sum = sum + ptal
#
#  Presenterer utdata
#
for i in range(1 ,N + 1):
  print(round(a[i]))

print(" Summen av dei ", N ," første primtala, utan odde primsiffer, =", sum)
Har laga ein ny og ( forhåpentlegvis ) meir oversiktleg( strukturert ) versjon av det programmet eg presenterte i mitt forrige innlegg( sjå vedlagt kode )
Aleks855
Rasch
Rasch
Innlegg: 6855
Registrert: 19/03-2011 15:19
Sted: Trondheim
Kontakt:

Hva er outputen?

Jeg tror maratonet fungerer best dersom spørsmålene har et entydig svar (f. eks. et tall, eller ja/nei), og at den som avgir et svar oppgir svaret, og har med koden ved siden av.

På den måten slipper andre å kjøre koden selv for å verifisere at den gir riktig svar.
Bilde
Gustav
Tyrann
Tyrann
Innlegg: 4555
Registrert: 12/12-2008 12:44

Aleks855 skrev: 31/07-2022 20:24 Hva er outputen?

Jeg tror maratonet fungerer best dersom spørsmålene har et entydig svar (f. eks. et tall, eller ja/nei), og at den som avgir et svar oppgir svaret, og har med koden ved siden av.

På den måten slipper andre å kjøre koden selv for å verifisere at den gir riktig svar.
Enig. Har noen en oppfølger?
Aleks855
Rasch
Rasch
Innlegg: 6855
Registrert: 19/03-2011 15:19
Sted: Trondheim
Kontakt:

Jeg synes denne er fin, men litt vanskeligere enn de foregående.

I den ene hånden har du ni pyramideformede terninger med fire sider.

I den andre hånden har du seks vanlige terninger med seks sider.

Du kaster begge terninggruppene.

Hva er sannsynligheten for at pyramidene får høyere totalsum enn kubene?

Oppgi svaret på desimalform avrundet til 7 siffer etter desimaltegnet. Eks: $0.1234567$.
Bilde
Gustav
Tyrann
Tyrann
Innlegg: 4555
Registrert: 12/12-2008 12:44

Jeg får 0.5731441. Stemmer dette?

Kode: Velg alt

import operator as op
import math
from functools import reduce

def ncr(n, r): # binomialkoeffisienten
    r = min(r, n-r)
    numer = reduce(op.mul, range(n, n-r, -1), 1)
    denom = reduce(op.mul, range(1, r+1), 1)
    return numer / denom  

def nuofways(p,n,k): #ways to obtain p from n dice each with k sides
    t=0
    for j in range(0,int(math.floor((p-n)/k))+1): t+=((-1)**j)*ncr(n,j)*ncr(p-k*j-1,n-1)
    return t
	
s=0

for n in range(9,37):
    for m in range(6,37):
        if n>m: s += nuofways(n,9,4)*nuofways(m,6,6)

print s / (4.**9*6**6)
Aleks855
Rasch
Rasch
Innlegg: 6855
Registrert: 19/03-2011 15:19
Sted: Trondheim
Kontakt:

Det er helt korrekt! Fin abstraksjon av terninggruppene også! Binomialkoeffisienter var ukjent for meg da jeg løste den, så jeg måtte hardkode en tabell av antall måter å få de ulike summene av med de to terninggruppene.
Bilde
Gustav
Tyrann
Tyrann
Innlegg: 4555
Registrert: 12/12-2008 12:44

Aleks855 skrev: 05/08-2022 19:29 Det er helt korrekt! Fin abstraksjon av terninggruppene også! Binomialkoeffisienter var ukjent for meg da jeg løste den, så jeg måtte hardkode en tabell av antall måter å få de ulike summene av med de to terninggruppene.
Er ingen programmerer, så koden min er nok langt ifra noe prakteksemplar (i tillegg svært rusten i programmering). Kan sikkert gjøres bedre av noen proffe. Hadde vært interessant å sett koden til Aleks, som faktisk er utdannet innen data (right?).

PS: Har du forresten drevet noe med Project Euler, Aleks?
Aleks855
Rasch
Rasch
Innlegg: 6855
Registrert: 19/03-2011 15:19
Sted: Trondheim
Kontakt:

Ja, oppgaven der er faktisk fra Project Euler. Spesifikt problem nummer 205.

Jeg syntes den oppgaven var ekstra fin fordi den krevde litt problemløsing på papir før man begynner å kode (i alle fall for min egen del).
Hadde vært interessant å sett koden til Aleks, som faktisk er utdannet innen data (right?).
Jeg er usikker på om koden fins enda. Jeg var veldig ivrig på Euler da jeg først begynte å studere som dataingeniør, så koden var neppe god eller ryddig.
Bilde
Svar