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.