Læringsmål:
- Betingelser
- For-løkker
- While-løkker
- Filbehandling
Pensum:
- 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
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()
>> 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 N
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.
>> 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.
>> primeNumN(10001) ans = 104743
d) (Frivillig) (Denne oppgaven har fått to stjerner da den inneholder filbehandling som egentlig ikke er pensum før øving 9)
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 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.