Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Læringsmål:

  • Betingelser
  • For-løkker
  • While-løkker
  • Filbehandling (star)(star)
  • Strenger
  • I/O

Pensum:

  • Kap 7

DEL 1

a)

Et palindrom er et ord som staves likt begge veier (f.eks. 'abba' eller det finske ordet 'saippuakivikauppias'). Lag en funksjon som returnerer true om en streng er et palindrom; false ellers.

b)

Utvid funksjonalitetn slik at funksjonen kan ta in en setning og sjekke om den er et palindrom. Bruk "isstrprop(str,'alphanum'))".
Test med palindromet: Alle reisetrette skal ete laks etter te, sier Ella.

c)

Det ønskes å hente ut den lengste biten av et stykke DNA avgrenset av en bestemt start og stopp sekvens. Disse oppgis å være "ATG" (start) og "TAG" (stop). DNAet gis som en lang streng av bokstavene: A, T, G og C. Funksjonen skal starte tellingen på nytt hver gang startstrengen gjentas og tellingen skal avsluttes hver gang stopstrengen gjentas.
Lag en funksjon, sequenceFinder som tar inn tre strenger: sequence, start og stop. Den skal returnere den lengste strengen mellom start og stopp sekvensene.

Test programmet ditt med følgende streng: TATGCGCATGCATCAGTACCGATTACATAGCTACG, svaret skal da være CATCAGTACCGATTACA.

...

a) 

Skriv en funksjon som returnerer True om parameteren a er delelig med b. Hint: En modulo-operasjon (mod(a,b)) blir brukt i informatikk og i matematikk til å finne resten av et opprinnelig heltall etter en divisjon med et annet tall. Eks.: mod(5,2) = 1

b)

Lag funksjon med en for løkke som itererer fra b = 2,3,...,a-1 og bruker funksjonen fra forrige oppgave for å sjekke om a det er delelig med b. Om de er delelige avslutter du og returnerer 0. Ellers skal du returnere 1.

c)

 Algoritmen skal nå gjøres raskere ved hjelp av 2 små inngrep:

...

  • 3.7 User-Defined Functions That Return a Single Value
  • 4.1 The if statement
  • 4.2 The if-else statement
  • 4.3 Nested if-else statements
  • 5.1 The for loop
  • 5.2 Nested for loops
  • 5.3 While loops
  • 5.4 Loops With Vectors and Matrices: Vectorizing
  • 9.1 Lower Level File I/O Functions (star)(star)


a)    

        Lag funksjonen isPrime(N) som tar inn et heltall, N,  som parameter og tester om det er et primtall ved hjelp av en for-løkke. Funksjonen skal returnere true hvis tallet er et primtall og false hvis det ikke er det.

        Et primtall er et tall som kun er delelig med seg selv og 1, og er større enn 1. Du kan ikke bruke Matlabs innebygde isprime()

 

Code Block
languagehtml/xml
titleEksempel på kjøring:
>> isPrime(2003)
ans =
     1
>> isPrime(2001)
ans =
     0
>> isPrime(2)
ans =
     1



b) 

        Lag en ny funksjon, getPrimeList(N), som returnerer en liste over de første primtallene.

        Hint: For å skape en effektiv kode, kan du bruke de primtallene du allerede har funnet til å sjekke om et tall er et primtall. Den innebygde kommandoen break kan brukes til å hoppe ut av en enkelt for-løkke.  

Code Block
languagehtml/xml
titleEksempel på kjøring:
>> getPrimeList(8)
ans =
     2     3     5     7    11    13    17    19
>> getPrimeList(15)
ans =
     2     3     5     7    11    13    17    19    23    29    31    37    41    43    47

   

c)

        Ved å liste de første fem primtallene: 2, 3, 5, 7, 11, kan vi se at 11 er det femte primtallet. Lag en funksjon, primeNumN(N), som tar inn antallet primtall N og bruker getPrimeList(N) til å returnere det siste av de N
        primtallene.

Code Block
languagehtml/xml
titleEksempel på kjøring:
>> primeNumN(10001)
ans =
      104743

 

d)     (Frivillig) (star)(star) (Denne oppgaven har fått to stjerner da den inneholder filbehandling som egentlig ikke er pensum før øving 9)

...

d)

Det skal lages en ny primtallsfunksjon. Funksjonen begynner med en listen [2].  Den skal deretter iterere seg over oddetall fra 3 til N. Dersom tallet ikke er delelig med noen av tallene i listen skal det legges til listen. 

e) 

Primtallene skal lagres til en fil og det skal være mulig å la den nye primtallsfunksjonen fortsette på listen uten å regne ut listen fra starten av. Det kan være lurt å lage tre nye funksjoner for dette: mainPrime, loadPrimes, savePrimes.
mainPrime regner ut feks 100 primtall som lagres og spør brukeren om ytterligere 100 primtall skal finnes. Når brukeren avslutter, skal alle primtallene som har blitt funnet, lagres og returneres.