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
2012-10-07
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 är tal som har den egenskapen att de bara har tre primfaktorer: 2, 3 och 5. Alla fula tal (men inga
x
y
z
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.
Ge ett positivt heltal (avsluta med 0): 37
37 är inte ett fult tal.
Ge ett positivt heltal (avsluta med 0): 54
54 är ett fult tal.
54 = (2**1)*(3**3)*(5**0)
Ge ett positivt heltal (avsluta med 0): 16400
16400 är inte ett fult tal.
Ge ett positivt heltal (avsluta med 0): 16200
16200 är ett fult tal.
16200 = (2**3)*(3**4)*(5**2)
Ge ett positivt heltal (avsluta med 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
2012-10-07
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.3 Om det resulterande talet är större än 1
1.3.1 Skriv ut att talet inte är ett fult tal
1.4 Annars (om det resulterande talet inte är större än 1)
1.4.1 Skriv ut att talet är ett fult tal
1.4.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 ut enligt ovanstående exempel.
Kommandona goto och longjmp får ej användas.
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 12 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
2012-10-07
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.