Gå til innhold

Anbefalte innlegg

PIA - Programmering for ingeniørmessige anvendelser

 

Task 1.

Write a recursive function pascal(n) that returns the nth row in Pascal's triangle as a list.

 

Task 2.

Write a non-recursive function factorial(n) that returns n! = n(n > 1)... 1, for integer n > 0 (use the definition 0! = 1).

 

Task 3.

Compare the running times of mergesort and list.sort() for integers.

(a) Write a function randintlist(a, b, n) that takes three integers as input, a > b, n > 1, and returns a list of n "random" integers xi such that a < xi < b for i = 1,..., n.

 

(b) Write a function compare(p, q, a, b) that measures the running times of mergesort and list.sort(). The function compare should measure the respective average times the two sorting functions take to sort some "random" lists of integers.

The input should be the following:

p - the number of random lists to sort, p > 1,

q - the length of the random lists to sort, q > 1,

a, b - every random list should have elements xi such that a < xi < b, where a and b are integers.

The output should be a list containing the two obtained average times.

 

( c) Write a Python program that uses the function compare(p, q, a, b) to compare mergesort and list.sort() for some different inputs. Is some time difference between the two sorting functions noticed? If so, what could be a possible reason?

 

(d) Modify compare(p, q, a, b) so that it compares the running times for already sorted lists. Name the new function comparesorted(p, q, a, b). Is some time different between the two sorting functions noticed? Is the result the same as in ©? Give a possible reason for the result.

 

Noen som er flink? Trenger hjelp!

Mvh

ikke-så-Python-nerd

Endret av spillgutten
Lenke til kommentar
Videoannonse
Annonse

Kan jo gi et eksempel på en (kjapt slengt sammen) pascal:

 

 1 def pascal( n ):
 2	 if n == 0:
 3		 return [ 1 ]
 4	 P, L = pascal( n - 1  ), [ 1 ]
 5	 [ L.append( P[ i ] + P[ i + 1 ] ) for i in xrange( len( P ) / 2 ) ]
 6	 if n % 2 == 0:
 7		 return L[:-1] + L[::-1]
 8	 return L + L[::-1]

 

Til forklaringene:

 

def pascal( n ): Dette er definisjonen av funksjonen. def navn( args ):

I python er det ikke tradisjonelle blokker med f.ex. {} eller begin/end, men heller implisitt gjennom innrykk.

 

P, L = pascal( n - 1), [ 1 ]

Dette er er deklarering av henholdsvis P og L (variabler) der P får verdien (listen) til det rekursive kallet og L blir listen [ 1 ], altså en liste med et element bestående av tallet 1

 

[ L.append( P[ i ] + P[ i + 1 ] ) for i in xrange( len( P ) / 2 ) ]

Dette er en noe som kalles list comprehension. Det er en (elegant) måte å iterere over og binde verdier til en liste på. En alternativ syntax er:

for i in xrange( len( P ) / 2 ):
  L.append( P[ i ] + P[ i + 1] )

Det ville gjort akkurat det samme. xrange er en såkalt generator som er nokså teknisk, men du kan anse det hele som en foreach-løkke. len( P ) er en funksjon som finner lengden av listen den får som argument.

 

 6	 if n % 2 == 0:
 7		 return L[:-1] + L[::-1]
 8	 return L + L[::-1]

Modulo-operatoren regner jeg med du har sett før. :)

L[:-1] er python for "returner listen fra første element til og med nest siste". L[::-1] er "returner den reverste listen". Om du vil vite hvorfor kan du bare spørre. :) + konkatenerer listene.

 

Edit: Såvidt jeg kan se inneholder denne posten alle tingene det kan være greit å ha for å løse de resterende oppgavene. Prøvd deg gjerne også fram med interpreteren direkte for å se hvordan ting fungerer.

Endret av Lycantrophe
  • Liker 2
Lenke til kommentar

Tror nok jeg går samme kurset som deg OP..

dette er første oppgaven vi har fått med en lab og 3 forelesninger, vanskelighetsgraden er høy for første innlevering syns jeg og mange andre. Men et tips er at du youtuber "python cource MIT" så går de igjennom basic ganske bra.

Lenke til kommentar

Har løst oppgave 1 og 2. Sitter på oppgave 3 nå selv

(a) Write a function randintlist(a, b, n) that takes three integers as input, a > b, n > 1, and returns a list of n "random" integers xi such that a < xi < b for i = 1,..., n.

 

def f (a, b, n) :

if a&--#60;b or a==b:

return ??

if n &--#62; 1 or n ==1:

return ??

 

Er jeg helt på jordet?

Endret av mrmrme
Lenke til kommentar

Ja, littegrann, men det er ikke python-spesifikt.

 

Det du ønsker er å generere en liste tilfeldige tall. Du skal ikke sjekke min/max-verdier, men anta at funksjonen får inn rett. Trikset er å, for hvert tilfeldige tall, sjekke om det er innenfor rekkevidden (domain på engelsk) chart?cht=tx&chl=a < x_{i} < b

 

Tips: sjekk ut python-modulen random.

 

Edit: Dokumentasjon på den finnes her: http://docs.python.org/library/random.html

Endret av Lycantrophe
Lenke til kommentar

PIA - Programmering for ingeniørmessige anvendelser

(...)

Noen som er flink? Trenger hjelp!

 

Kreativt. Får bidragsytere "bestått" da, eller skal dette tilfalle deg alene? Eller blir karakteren delt på antall bidragsytere?

 

Protip -- hva om du viser hva du forventer koden din skal gjøre, hva den gjør og hvordan disse to er forskjellige.

Endret av zotbar1234
Lenke til kommentar

Ja oppgaven er sikkert enkel for de som har kjennskap til programmering og bruk av Python. Jeg tror det vi sliter primært med at vi ikke helt skjønner hva Python er(bortsett fra at det er et programmeringsspråk), hvordan det er bygd opp og hvordan vi skal bruke det.

 

 

Lycanthrope : hva betyr i? (du skriver for "i in range..")

Endret av sheherezade
Lenke til kommentar

Tar samme kurs, men skjønner fint lite.

Problemet er vel det at vi ikke har noen tekstbok vi kan lese i, fått noen spesiell innføring i python ( eller programmering for den saks skyld), ikke fått noen gjennomgang av oppgavene etc.

 

Har aldri prøvd meg på noen form for programmering så er relativt blank.

Skjønner egentlig ikke helt oppgaveteksten.

 

Skjønner ikke helt hvor jeg skal begynne. (Fortvilt!!)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...