Side 2 av 6

Re: Programmering - maraton

Lagt inn: 28/07-2022 18:57
av Mattebruker
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 )

Re: Programmering - maraton

Lagt inn: 29/07-2022 17:32
av Gustav
Du mangler fremdeles 2 i den rekka, men ellers ser det vel riktig ut. Post gjerne hele koden :)

Re: Programmering - maraton

Lagt inn: 29/07-2022 19:05
av Mattebruker
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 ?

Re: Programmering - maraton

Lagt inn: 29/07-2022 22:56
av Aleks855
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).

Re: Programmering - maraton

Lagt inn: 30/07-2022 11:18
av Mattebruker
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 )

Re: Programmering - maraton

Lagt inn: 30/07-2022 16:42
av Mattebruker
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)

Re: Programmering - maraton

Lagt inn: 30/07-2022 20:15
av Mattebruker

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)  
      
      
        
    

Re: Programmering - maraton

Lagt inn: 31/07-2022 19:56
av Mattebruker

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 )

Re: Programmering - maraton

Lagt inn: 31/07-2022 20:24
av Aleks855
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.

Re: Programmering - maraton

Lagt inn: 03/08-2022 20:02
av Gustav
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?

Re: Programmering - maraton

Lagt inn: 03/08-2022 21:57
av Aleks855
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$.

Re: Programmering - maraton

Lagt inn: 05/08-2022 16:10
av Gustav
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)

Re: Programmering - maraton

Lagt inn: 05/08-2022 19:29
av Aleks855
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.

Re: Programmering - maraton

Lagt inn: 05/08-2022 21:55
av Gustav
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?

Re: Programmering - maraton

Lagt inn: 05/08-2022 22:36
av Aleks855
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.