Obligatorisk uppgift 1 Fula tal

Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmeringsteknik med C och Matlab, 7,5 hp
Programmering i C, 7,5 hp
Obligatorisk uppgift 1
Specifikation
2013-10-06
Sid 1 (3)
Obligatorisk uppgift 1
Fula tal
Introduktion
Alla positiva heltal kan skrivas som produkter av primtal (63 = 3 * 3 * 7, 31213 = 7 * 7 * 7 * 7 * 13 osv).
Att dela upp ett tal på detta sätt kallas primtalsfaktorisering. En sådan faktorisering är alltid unik, dvs inget
tal kan skrivas som produkter av två olika serier av primtal.
Fula tal (ugly numbers) är tal som har den egenskapen att de bara har tre primfaktorer: 2, 3 och 5. Alla fula
x
y
z
tal (men inga andra) kan skrivas som (2 ) * (3 ) * (5 ), där x, y och z är icke-negativa heltal. För att
undersöka om ett tal N är ett fult tal behöver du bara dividera det med talen 2, 3 och/eller 5 så långt det går.
Om du kommer ner till 1 är talet ett fult tal, annars inte. Talet 1 räknas som ett fult tal av konvention.
I denna laboration ska ett program implementeras som undersöker om ett positivt heltal är ett fult tal.
Laborationen ska lösas enskilt.
Syfte
Syftet med uppgiften är att träna på:
 Inläsning från tangentbord och utskrift till skärm
 Val av alternativ
 Repetitioner
 Aritmetik
Uppgift
Din uppgift är att skriva ett program som läser in positiva heltal från tangentbordet och talar om ifall de är
fula tal eller inte. Om talet är ett fult tal ska primtalsfaktoriseringen skrivas ut. Programmet ska avslutas när
användaren skriver in heltalet 0 eller ett negativt heltal.
Nedan visas hur interaktionen med användaren ska se ut. Notera att x**y är samma sak som xy.
Give a positive integer (finish with 0): 37
37 is not an ugly number.
Give a positive integer (finish with 0): 54
54 is an ugly number.
54 = (2**1)*(3**3)*(5**0)
Give a positive integer (finish with 0): 16400
16400 is not an ugly number.
Give a positive integer (finish with 0): 16200
16200 is an ugly number.
16200 = (2**3)*(3**4)*(5**2)
Give a positive integer (finish with 0): 0
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmeringsteknik med C och Matlab, 7,5 hp
Programmering i C, 7,5 hp
Obligatorisk uppgift 1
Specifikation
2013-10-06
Sid 2 (3)
Algoritm
Följande algoritm ska användas i programmet:
1.
2
Så länge användaren inte valt att avsluta programmet (med 0), upprepa följande:
1.1 Fråga efter ett positivt heltal och läs in det
1.2 Om talet är större än 0 (ett positivt heltal)
1.2.1 Så länge talet är jämnt delbart med 2, dela talet med 2 och spara hur många gånger
talet kunde delas med 2
1.2.2 Så länge talet är jämnt delbart med 3, dela talet med 3 och spara hur många gånger
talet kunde delas med 3
1.2.3 Så länge talet är jämnt delbart med 5, dela talet med 5 och spara hur många gånger
talet kunde delas med 5
1.2.4 Om det resulterande talet är större än 1
1.2.4.1
Skriv ut att talet inte är ett fult tal
1.2.5 Annars (om det resulterande talet inte är större än 1)
1.2.5.1
Skriv ut att talet är ett fult tal
1.2.5.2
Skriv ut talets primtalsfaktorisering
Avsluta programmet
Krav på lösningen
Här nedan finns det ett antal krav som programmet ska uppfylla:






Källkoden ska vara kommenterad. Kommentarerna ska utgöras av algoritm plus utökningar av
algoritmen. Det ska finnas beskrivande text som förklarar programmets syfte och funktion,
förväntad indata och utdata ska beskrivas. I den beskrivande texten ska du även skriva ditt namn och
din cs-användare.
Källkoden ska vara väl indenterad.
All utskrift på skärm ska se exakt ut som enligt ovanstående exempel.
Kommandona goto och longjmp får ej användas.
Källkodsfilen ska heta ou1.c.
Programmet ska kompileras med kompilatorn gcc med flaggorna –Wall och –std=c99.
Resurser
Till ert förfogande för att lösa uppgiften finns det ett antal datorer och ett antal handledningstillfällen i
laborationssal (tider framgår i respektive grupps schema). Det är tillåtet att lösa laborationen på annan plats,
till exempel hemma, men tänk på att programmet ska kompileras och vara körbart på institutionens
linuxdatorer.
Redovisning
Uppgiften redovisas genom att lämna in källkodsfilen via webbgränssnittet, se adress på kursens hemsida,
senast fredag den 11 oktober 17.00.
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmeringsteknik med C och Matlab, 7,5 hp
Programmering i C, 7,5 hp
Obligatorisk uppgift 1
Specifikation
2013-10-06
Sid 3 (3)
Tips
Här följer några tips som kan hjälpa till:





Börja med att förstå uppgiften, vad ska göras, vilka krav finns det, vad ska lämnas in, etc.
Skapa källkodsfilen och skriv in algoritmer och beskrivande text.
Utveckla programmet stegvis, ett förslag är att skriva interaktionsdelen först.
Försök att testa varje steg utförligt innan nästa steg tas och kom ihåg att testa att tidigare steg
fortfarande fungerar när nästa steg testas.
När du vill ha hjälp av handledare, var beredd på att först förklara vad du vill uppnå/göra och hur du
tänkt göra det i koden.