Örebro universitet
Institutionen för teknik
Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se)







Tentamen i

Programmering grundkurs och Programmering C

för D1 m fl, även distanskursen

torsdag 21 augusti 2008 kl 08:00 - 13:00

Gäller som tentamen för:
DT1016 Datateknik A, Programmering grundkurs, provkod 0100
DT1007 Datateknik A, Tillämpad datavetenskap, provkod 0410
DT1006 Datateknik A, Programmering C, distans, provkod 0100
PRG045 Programmering C, provkod 0110 (och 0100, och 0101)
TDD121 Tillämpad datavetenskap A, provkod 0700 (och 0400)
TDP118 Programmering C, distans, provkod 0110 (och 0100)



Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 36.
För godkänt betyg (3 respektive G) krävs 18 poäng.
Resultat och lösningar: Meddelas via e-post eller på campuskursens hemsida, http://www.aass.oru.se/~tpy/c/2007-2008-p2/, senast torsdag 11 september 2008.
Återlämning av tentor: Efter att resultatet meddelats kan tentorna hämtas på institutionen. Man kan också få sin rättade tenta hemskickad.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-73 47 013.





LYCKA TILL!

Prioritet och associativitet hos operatorerna i C

De viktigaste operatorerna:

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

Uppgift 1 (1 p)

Vilka värden har följande uttryck?

a) 1 / 2 * 3 + 4

b) 1 / (2 * 3) + 4

c) 1.0 / 2 * 3 + 4

Uppgift 2 (1 p)

x, y och z är heltalsvariabler. Ange värdet på x, y och z då följande kod har körts.

    x = 1;
    y = 5;
    while (x < y) {
        ++x;
        y--;
        z = x + y;
    }

Uppgift 3 (1 p)

x och temp är variabler av typen float. Skriv de kodrader som behövs för att byta plats på innehållet i dessa två variabler.

Uppgift 4 (1 p)

Skriv en funktion som heter summa, som tar tre heltal som argument, och som returnerar deras summa.

Uppgift 5 (2 p)

Skriv en funktion som heter max, som tar tre heltal som argument, och som returnerar det största av de tre heltalen.

Uppgift 6 (1 p)

Kontrolltornet på Arlanda
Kontrolltornet på Arlanda

Vi vill hjälpa flygledarna i kontrolltornet att hålla reda på alla sina flygplan. Därför ska vi skapa en posttyp som heter struct Flygplan, och som innehåller data om ett flygplan.

Ett flygplan har ett nummer, som är ett heltal, och en position som består av tre koordinater: x, y och h (som betyder "höjd"). Koordinaterna är flyttal. Dessutom har flygplanet en beteckning, till exempel SE-SXN.

Definiera posttypen struct Flygplan.

Uppgift 7 (1 p)

Definiera en variabel av typen struct Flygplan och initiera den med data om flygplan nummer 193, som har beteckningen DK-KRX och som just nu befinner sig på 103 meters höjd över kartkoordinaterna x = 1525.33 och y = 5923.22.

Uppgift 8 (2 p)

Vi vill kunna visa flygplansposternas innehåll på skärmen. Skriv en funktion som heter visa_flygplan, som skriver ut ett flygplan. Funktionen ska ta flygplansposten som parameter. Exempel på hur en utskrift skulle kunna se ut:
Nummer: 193
Beteckning: DK-KRX
Position: x = 1525.33, y = 5923.22, h = 103.00

Uppgift 9 (3 p)

Skriv en funktion som heter las_flygplan, och som läser in data om ett flygplan. Funktionen ska skriva ut lämpliga ledtexter på standardutmatningen, och läsa in data från standardinmatningen (som normalt är kopplad till tangentbordet).

Du får själv välja om du vill att funktionshuvudet ska se ut så här:

struct Flygplan las_flygplan()

eller så här:

void las_flygplan(struct Flygplan *p)

Uppgift 10 (2 p)

Skriv en funktion som heter samma_flygplan, som tar två flygplan som argument, och som returnerar ett sant värde om de två flygplanen har samma beteckning.

Uppgift 11 (3 p)

Skriv en main-funktion som har två lokala variabler av typen struct Flygplan, och som läser in data om två flygplan till dessa variabler med hjälp av funktionen las_flygplan. Avslutningsvis ska den använda funktionen samma_flygplan för att avgöra om de två inmatade flygplanen egentligen beskriver samma flygplan, och skriva ut ett meddelande om ifall det var samma flygplan eller inte.

I den här och alla andra uppgifter på tentan gäller: Om du ska använda något från en tidigare uppgift eller deluppgift, till exempel anropa en funktion som skrevs i den tidigare uppgiften, så behöver du inte skriva samma kod igen. Du får också göra uppgiften även om du inte gjort den tidigare uppgiften.

Uppgift 12 (3 p)

Vi vill kunna beräkna avståndet mellan två flygplan. Skriv därför en funktion som heter avstand, som tar två flygplan som argument, och som returnerar avståndet i meter mellan de två flygplanen.

x-, y- och h-koordinaterna för flygplanen är uttryckta i meter, så om det ena flygplanet har koordinaterna x1, y1 och h1, och det andra flygplanet har koordinaterna x2, y2 och h2, anges avståndet mellan dem av den här formeln:

En formel

Uppgift 13 (5 p)

Skriv ett C-program som låter användaren mata in flygplan, och som sparar dem på en fil. Programmet ska anropa funktionen las_flygplan.

Välj själv om det ska vara en text- eller en binärfil, och hur inmatningen av flygplan ska avslutas. Tala i bägge fallen om vad du valde!

Uppgift 14 (6 p)

Skriv ett C-program som läser filen, och som talar om ifall några flygplan är för nära varandra!

Vi kan anta att det inte finns mer än 1000 flygplan på filen.

Programmet ska använda funktionen avstand för att beräkna avståndet mellan varje par av flygplan. För varje par av flygplan som är närmare varandra än 1000 meter, ska programmet skriva ut en varning. En sådan varning kan till exempel se ut så här:

Varning!
Dessa två flygplan befinner sig bara 118.66 meter från varandra:
Nummer: 193
Beteckning: DK-KRX
Position: x = 1525.33, y = 5923.22, h = 103.00
Nummer: 7929
Beteckning: SE-KRK
Position: x = 1582.39, y = 6001.09, h = 172.00

Tips 1: Läs först in alla flygplanen till en array ("vektor"). Beräkna sen, för vart och ett av flygplanen i arrayen, avståndet till vart och ett av de andra planen i arrayen.

Tips 2: Man kan anropa funktionen visa_flygplan för utskriften i varningen.

Uppgift 15 (4 p)

Skriv ett C-program som läser in tre rader med text, och sen skriver ut dem i omvänd ordning, dvs med den sist inmatade raden först. Vi kommer aldrig att mata in längre rader än 96 tecken (plus radslutstecknet).