Programmering – DVA117, VT2016­P3 Block 1 ‐ Laboration 4 Denna laboration är en del av Block 1. Hela Block 1, som består av laboration 1‐4, ska redovisas muntligt på redovisningstillfälle enligt schemat. På Blackboard kommer det anslås hur redovisningen går till. Läs uppgifterna noga! Lösningarna ska följa specifikationerna/kraven i uppgifterna för att bli godkända. Det är inte tillåtet att använda goto‐satsen, statiska eller globala variabler. Tänk på att välja bra förklarande namn på både funktioner och variabler. Kommentera om det behövs. Uppgift 1 – Serie av primtal Skriv ett program som låter användaren mata in en sekvens av positiva tal som sedan kontrolleras om de är primtal eller inte. Ett primtal är ett heltal som är större än 1 och bara är jämnt delbart med sig själv och siffran 1. Exempel: ● 5 är ett primtal eftersom det inte är jämnt delbart med 2,3 eller 4. ● 8 är inte ett primtal eftersom det är jämnt delbart med 2 och 4. Programmet ska minst innehålla en funktion keepPrimes() som tar en array av inmatade tal som parameter samt storleken på denna. Funktionen ska gå igenom arrayen och ta bort de tal som inte är primtal från arrayen (genom att ge dem t.ex värdet ‐1). Funktionens returvärde ska tala om hur många primtal som finns i arrayen. Om något av de inmatade talen är negativt ska returvärdet vara ‐1 som då fungerar som en felkod som talar om att något är fel med de tal som skickats in i funktionen. Exempelkörning Ange antal tal som ska matas in: 5 Mata in 5 positiva heltal Tal: 2 Tal: 4 Tal: 5 Tal: 10 Tal: 13 Du matade in följande tal: [2 4 5 10 13] 1(3) Akademin för Innovation, design och teknik Stefan Bygde Programmering – DVA117, VT2016­P3 Primtal (totalt 3 st): [2 5 13] Ska vi köra en omgång till (j/n)? _______________________________________________________________ Uppgift 2 – Frekvensanalys Låt användaren mata in ett valfritt antal heltal efter varandra. Talen ska ligga inom intervallet 0 – 1000 och max 100 tal får matas in. Inmatningen avslutas genom att mata in ett negativt tal. Funktionen i programmet ska beräkna vilket av de inmatade heltalen som förekommer flest gånger samt hur många gånger detta tal finns med i arrayen. Eftersom funktionen ska berkäkna två resultat så behöver variablerna där resultatet ska sparas skickas in som pekare till funktionen. Den kluriga delen är att komma på hur man håller reda på hur många gånger alla möjliga tal mellan 0 – 1000 förekommer. Exempelkörning Vänligen mata in tal mellan 0­1000 (max 100st). Avsluta med ett negativt tal. Tal: 1 Tal: 2 Tal: 3 Tal: 568 Tal: 2 Tal: 2 Tal: 3 Tal: ­1 Talet 2 förekommer flest gånger, totalt 3 gånger. Ska vi köra en omgång till (j/n)? j _______________________________________________________________________________________________________ Uppgift 3 – Leta ord Varje deluppgift är en funktion. Dessa hör ihop och ska ligga i samma fil och projekt. Uppgift 3.1 Skriv en funktion som tar en sträng som argument och skriver ut det första ordet av denna sträng på skärmen. Tänk på att ett ord kan avslutas på flera sätt: strängen kan ta slut (dvs ‘\0’), det kan komma ett mellanslag, eller något tecken som inte är en bokstav. Ett tips är att kolla upp funktionen isalpha() . Testa din funktion ordentligt genom att anropa den för några olika strängar från main() . 2(3) Akademin för Innovation, design och teknik Stefan Bygde Programmering – DVA117, VT2016­P3 Uppgift 3.2 Skriv en funktion getWord() som tar en sträng och ett heltal word som argument. Funktionen ska returnera en pekare till början av det ord som word refererar till. Om word är 0 ska en pekare till det första ordet i strängen returneras, om word är 1 ska en pekare till det andra ordet returneras osv. Om word är större eller lika med antal ord i strängen ska NULL returneras. Exempelkörning: ptr = getWord( “hej på dig” , 1); /* En pekare p:et i strängen returneras */ ptr2 = getWord( “en sträng” , 0); /* En pekare till början av strängen returneras */ ptr3 = getWord( “ett ord” , 2); /* NULL returneras */ Testa funktionen genom att anropa den för lite olika strängar och tal. Uppgift 3.3 Du ska nu använda funktionerna från 3.1 och 3.2 för att skapa en funktion printWord() som skriver ut ett valt ord i en sträng. Funktionen ska ta en sträng och ett heltal word som argument. Om word är större eller lika med antalet ord i den angivna strängen ska ett felmeddelande skrivas ut. Funktionen ska inte returnera något. Exempelkörning: printWord( “hej på dig” ,1); /* Skriver “på” på skärmen */ printWord( “en sträng” , 0); /* Skriver “en” på skärmen */ printWord( “ett ord” , 2); /* “ordet finns ej” (eller liknande) på skärmen */ Funktionen printWord() måste anropa båda funktionerna i 3.1 och 3.2 och använda dem i lösningen. Tips: tänk på att pekaren som returneras från getWord() kan ses som en sträng. Uppgift 3.4 När du skrivit dessa tre funktioner ska du skriva ett huvudprogram i main() som tar en godtycklig sträng från användaren samt ett tal och skriver ut rätt ord på skärmen. Programmet ska köras tills användaren väljer att avsluta. Exempelkörning (användarens input i fetstil ): Skriv en mening: hej på dig Vilket ord vill du skriva ut? 1 Ord 1 i hej på dig är: på Vill du köra igen j/n? j Skriv en mening: äntligen klar med lab 4 Vilket ord vill du skriva ut? 3 Ord 3 i äntligen klar med lab 4 är: med Vill du köra igen j/n? n 3(3) Akademin för Innovation, design och teknik Stefan Bygde