Programmering C
för D1 m fl, även distanskursen
måndag 21 augusti 2006 kl 8:00 - 13:00 i L001
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 40.
För godkänt betyg (3 respektive G) krävs 20 poäng. |
Resultat och lösningar: | Meddelas på kursens hemsida senast måndag 28 augusti 2006. |
Visning och frågestund: |
Måndag 28 augusti 2006 kl 12:00-12:30 i mitt rum (T2220).
Efter visningen kan tentorna hämtas på expeditionen. |
Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 0707-347013. |
Prioritet | Kategori | Operator | Associativitet |
---|---|---|---|
Högsta | Unära postfixoperatorer | (), [], ->, ., ++, -- | vänster |
Unära prefixoperatorer | !, ++, +, -, *, &, sizeof, (typ) | höger | |
Multiplikation mm | *, /, % | vänster | |
Addition mm | +, - | vänster | |
Jämförelser | <, <=, >=, > | vänster | |
Likhetsjämförelser | ==, != | vänster | |
Logiskt OCH | && | vänster | |
Logiskt ELLER | || | vänster | |
Lägsta | Tilldelning | =, +=, -=, *=, /=, %= | höger |
a) 8 + 3 / 2 + 1
i = 8; while (i > 0) { if (i % 2) i /= 3; else i = i - 10; }
Vi arbetar bara med dagens TV-program, så det behövs inget datumfält.
Definiera posttypen. Den ska heta struct Program.
Så här ser funktionshuvudet ut:21:00 - 22:00 (Kanal 5): CSI
void visa_program(struct Program programmet)
Det räcker att de krockar alls, så två TV-program som sänds 21:00 - 21:30 och 21:29 - 21:40 krockar, men två TV-program som sänds 21:00 - 21:30 och 21:30 - 21:40 krockar inte.
Så här ser funktionshuvudet ut:
int krockar(struct Program program1, struct Program program2)
Skriv en funktion som heter fel, som jämför två TV-program, och som returnerar ett sant värde om de två TV-programmen både krockar och sänds i samma kanal. Annars ska funktionen returnera värdet 0. Anropa funktionen krockar från uppgift 7 för att avgöra om programmen krockar.
Så här ser funktionshuvudet ut:
int fel(struct Program program1, struct Program program2)
I den här och alla andra uppgifter på tentan gäller: Om du ska anropa en funktion från en tidigare uppgift, behöver du inte skriva koden för den funktionen på nytt. Du får också anropa funktionen även om du inte gjort uppgiften där man skulle skriva den. |
struct Program las_program()
eller så här:
void las_program(struct Program* p)
Faktaruta:
Man ska se upp när man låter ett C-program hantera svenska personnummer, för ett tiosiffrigt personnummer som 6312111658 går inte in i ett 32-bitars heltal, vilket är vad många datorer jobbar med. Men i den här uppgiften antar vi att vi har en 64-bitarsdator, och att vanliga heltal av typen int lagras med 64 bitar. Då går det bra att hantera så stora tal. |
Skriv en funktion som tar ett personnummer, lagrat som ett heltal, som argument, och som skriver ut det med ett streck i mitten, som man brukar skriva ut personnummer.
Om vi skickar heltalet 6312111658 till funktionen, ska det alltså skrivas ut som 631211-1658.
Exempel:
Om du vill kan du använda funktionen från uppgift 10 för att skriva ut personnumret, men det är inget krav.
Tips: Funktionen rand() ger ett slumpmässigt heltal, som är större än eller lika med 0, och som är mindre än någon ganska stor övre gräns.
Det går till så att programmet frågar efter bensinförbrukningen för en bil (mätt i liter per mil), bensinpris (mätt i kronor per liter), och sen efter längden på de sträckor man kört (mätt i kilometer). Man matar in de sträckor som man kört, och avslutar med att mata in en sträcka med längden 0. Då skrivs den sammanlagda bensinkostnaden ut.
Detta upprepas tills man matar in bensinförbrukningen 0.
(Vi antar alltså att bensinpriset inte ändras under perioden.)
Ett exempel (med användarens inmatning i kursiv stil):
Ange bensinförbrukningen för din bil (liter per mil, avsluta med 0): 1.0 Ange bensinpriset (kronor per liter): 10.00 Ange längden på en sträcka (kilometer, avsluta med 0): 100 Ange längden på en sträcka (kilometer, avsluta med 0): 100 Ange längden på en sträcka (kilometer, avsluta med 0): 0 Sammanlagd bensinkostnad: 200.00 Ange bensinförbrukningen för din bil (liter per mil, avsluta med 0): 0.67 Ange bensinpriset (kronor per liter): 12.90 Ange längden på en sträcka (kilometer, avsluta med 0): 14 Ange längden på en sträcka (kilometer, avsluta med 0): 24.4 Ange längden på en sträcka (kilometer, avsluta med 0): 13.1 Ange längden på en sträcka (kilometer, avsluta med 0): 0 Sammanlagd bensinkostnad: 44.51 Ange bensinförbrukningen för din bil (liter per mil, avsluta med 0): 0
C-programmet ska sedan anropa funktionen fel för att kontrollera om TV-programmen sänds samtidigt i samma kanal. I så fall ska ett felmeddelande skrivas ut, och C-programmet ska avslutas.
Om TV-programmen inte sänds samtidigt i samma kanal, ska funktionen krockar anropas för att avgöra om programmen krockar, och programmet ska skriva ut ifall det var en krock eller inte.
Välj själv vilket format textfilen ska ha, och beskriv hur det formatet ser ut.
Glöm inte att beskriva formatet som textfilen ska ha.
C-programmet behöver inte tala om vilka TV-program som krockar, eller hur många, utan bara att det finns minst en krock.