Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2018-09-06 Mål Uttryck, satser och strömhantering I denna laboration ska du lära dig Formaterad inläsning och utskrift Vanliga repetitions- och villkorssatser Enkla artimetiska uttryck Uppgift 0.1 Skriv ett program som hämtar data från tangentbordet och skriver ut det enligt körexemplen på kommande sidor. Det som syns på skärmen när man kör programmet ska överensstämma till fullo med givna exempel. Det gäller även antal blanktecken mellan ord och tal. Ett tips är att du gör en liten del i taget och ser att den fungerar för det första körexemplet och sedan går vidare med nästa problem. Detta för att slippa många fel på slutet av uppgiften. När ni känner er klara med en del kan du kommentera bort den för att slippa göra samma inmatning igen. OBS! Ditt program ska fungera för båda körexemplen, dock behöver du inte klara av alla möjliga varianter av indata då detta är i princip omöjligt i detta läge. KRAV: Du får endast använda en variabel av respektive datatyp (totalt fyra)!
Programkörningar uppgift 0.1 Programmet ska ge resultat enligt följande exempel vid olika körningar. Användarens indata markeras här med kursiverad stil. Observera att eventuella inmatningar som kommer efter begärd inmatning skall ignoreras. Körexempel 1 Skriv in ett heltal: 10 Du skrev in talet: 10 Skriv in fem heltal: 12 30 27 13 11 Du skrev in talen: 12 30 27 13 11 Skriv in ett heltal och ett flyttal: 67 3.141592 Du skrev in heltalet: 67 Du skrev in flyttalet: 3.1416 Skriv in ett flyttal och ett heltal: 3.141592 67 Du skrev in heltalet:---------67 Du skrev in flyttalet:----3.1416 Skriv in ett tecken: T Du skrev in tecknet: T Skriv in ett ord: Kalle Du skrev in ordet: Kalle Skriv in ett heltal och ett ord: -5 Nisse Du skrev in talet -5 och ordet Nisse. Skriv in ett tecken och ett ord: A Ria Du skrev in "Ria" och 'A'. Skriv in en rad text: Hej världen Du skrev in: "Hej världen" Skriv in en till rad text: Hej igen världen Du skrev in: "Hej igen världen" Skriv in tre ord: Testar ett program Du skrev in: "Testar", "ett" och "program"
Körexempel 2 Skriv in ett heltal: 10.3 Du skrev in talet: 10 Skriv in fem heltal: -12 10330 27 13 11 fem Du skrev in talen: -12 10330 27 13 11 Skriv in ett heltal och ett flyttal: 3267 Du skrev in heltalet: 3267 Du skrev in flyttalet: 3.1416 3.141592 d Skriv in ett flyttal och ett heltal: 67 3.141592 Du skrev in heltalet:----------3 Du skrev in flyttalet:---67.0000 Skriv in ett tecken: Tomas Du skrev in tecknet: T Skriv in ett ord: 123Kalle Du skrev in ordet: 123Kalle Skriv in ett heltal och ett ord: 12är det lunch Du skrev in talet 12 och ordet är. Skriv in ett tecken och ett ord: oklart Du skrev in "klart" och 'o'. Skriv in en rad text: här skriver vi lite mer Du skrev in: " här skriver vi lite mer" Skriv in en till rad text: lite mera text här Du skrev in: "lite mera text här" Skriv in tre ord: Testar ett program Du skrev in: "Testar", "ett" och "program"
Uppgift 0.2 - Temperaturtabell Du ska skriva ett program som ska skriva ut en tabell med temperaturer i grader Celsius, Kelvin, Fahrenheit och Réaumur. Användaren ska få mata in startvärde och slutvärde för tabellen i Celcius. Rimlighetskontroll på indata ska utföras. Följande formler för omvandling från Celsius ( C) till Kelvin (K), Fahrenheit ( F) resp. Réaumur ( R) gäller: kelvin = celcius + 273.15 farenheit = celcius * 9/5 + 32 (testa noga!) réaumur = celcius * 4/5 Körexempel 3 Ange startvärde: 0 Ange slutvärde: -20 Felaktigt intervall! Ange slutvärde: 20 Celsius Kelvin Farenheit Réaumur ---------------------------------------- 0 273.15 32.00 0.00 1 274.15 33.80 0.80 2 275.15 35.60 1.60 <flera utelämnade rader av utrymmesmässiga skäl> 19 292.15 66.20 15.20 20 293.15 68.00 16.00 Uppgift 0.3 - Ordbehandling Du ska skriva ett program som läser en text som användaren matar in varefter programmet ska beräkna lite statistik för texten. Det som ska beräknas är totala antalet ord och medellängden för orden i texten. Programmet ska även skriva ut det kortaste respektive längsta ordet som matades in. Finns flera kortaste ord skrivs det första av dem ut, och finns flera längsta ord skrivs det sista av dem ut. Texten ska läsas från standard inmatningsström (cin) till filslut. Om inga ord har lästs in ska en varning skrivas ut. Programmet behöver bara fungera korrekt för engelska alfabetet. Antag att ett ord definieras som en sammanhängande sekvens synliga tecken. Om du vill får du gå lite utanför vad som krävs genom att bara räkna ordens bokstäver. För detta behöver du fundera på hur du kan skilja ut bokstäverna från tecken.
Körexempel 4 Texten innehöll 4711 ord. Det kortaste ordet var "nu" med 2 tecken. Det längsta ordet var "kompilatorkonstruktion!" med 23 tecken. Medelordlängden var 5 tecken. Om standard inmatningsström I beskrivningen ovan står det dels att inläsningen ska ske från standard inmatningsström (cin). Som standard motsvarar detta att läsa från tangentbordet. Men det står även att texten ska läsas till filslut. Detta kan verka konstigt, men faktiskt är det helt rätt. Det programmet får från cin är en sekvens med tecken som kommer in på rad i en viss ordning, dvs en fil med tecken (jämför en fil för och med bilar). När filen är slut kallas det filslut. Ordet fil avser i C++-terminologi alltså en rad tecken och inte bara en lagrad datafil. Notera dock att även en lagrad datafil på disk är en rad med tecken i en viss ordning, dvs en fil. Hur skrivs nu ett filslut på tangentbordet? I Linux-terminalen finns en tangentbordskombination för detta: tryck Ctrl-D (håll ned Control, tryck D) på en tom rad. Det går i Linux-terminalen att ändra på vad ett program ska se som standard inmatningsström. Det kan vara allt som kan ses som en fil (sekvens av tecken i viss ordning). Ett sätt att åstadkomma det är med ett mindre än (<) tecken efter programnamnet följt av namnet på en datafil. Till exempel kommer a.out < text.txt göra att datafilen text.txt anses vara standard inmatningsström. Detta kallas omdirigering och är praktiskt när du vill köra ditt program många gånger med samma indata. Med omdirigering dyker filslutet upp automatiskt när datafilen är slut, du behöver alltså inte lagra Ctrl-D sist i datafilen. Ett mer avancerat sätt att ändra standard inmatningsström är med vidarebefordran. Då används det som skrivs ut från ett annat program som standard inmatningsström till ditt program. Detta skrivs med ett vertikalstreck. Till exempel gör cat text.txt a.out att utdata från kommandot cat text.txt skickas in till a.out. I detta fall skriver första kommando ut hela filen text.txt, så resultatet blir detsamma som a.out < text.txt ovan.