tentaplugg.nu av studenter för studenter Kurskod Kursnamn D0017E Inledande programmering för ingenjörer Datum 2014-10-31 Material Tentamen Kursexaminator Betygsgränser Tentamenspoäng 3 14; 4??; 5?? 25/25 (5a) Övrig kommentar
Luleå tekniska universitet TENTAMEN Kurskod: D0017E Kursnamn: Introduktion till programmering för ingenjörer Tentamensdatum: 2014-10-31 Skrivtid: 4 timmar Tillåtna hjälpmedel: ordbok för språköversättning Jourhavande lärare m fullständigt telefonnr: Jens Eliasson, 0920-492241 Jourhavande lärare m fullständigt telefonnr: Jourhavande lärare m fullständigt telefonnr: Jourhavande lärare m fullständigt telefonnr: Betygsgränser: Totalt antal uppgifter och poäng: Övriga upplysningar: 14 poäng krävs för ett godkänt betyg 5 uppgifter som ger maximalt 25 poäng V.v. observera ASCII-tabellen samt kursutvärderingen som är bifogade. Allmänna anvisningar Kontrollera att du fått samtliga uppgifter. Besvara endast en uppgift per lösningsblad. Skriv tydligt. Efter tentamen Tentamensresultatet syns Mina sidor på Studentwebben. Examinationsresultat ska meddelas inom 15 arbetsdagar efter. För kurser med fler än 60 examinerande samt för distansutbildningar får resultatet meddelas senast än 20 arbetsdagar efter. Uppgifter till tryckeriet för tentor campus Luleå Projektnummer SRT: 341980 Hur många sidor: 4 Hur många ex: 95 Dubbel eller enkelsidigt: Dubbel
Uppgift 1: a) Beskriv tre sorters iterativa block inom programmeringsspråket C och ge detaljerade exempel hur dessa kan användas. (1p) b) Vilka sorters fundamentala datatyper finns att tillgå i vanliga programmeringsspråk? Ange fyra olika datatyper i C samt ge korta exempel på hur man använder dessa. (2p) c) Vad är en rekursiv funktion? Förklara och ge ett kortfattat exempel på hur dessa kan användas? (2p) Uppgift 2: a) Ge exempel på två andra programmeringsspråk förutom C (1p) b) Vad kallas ett programfel, och vad kallas konsten att hitta och åtgärda dessa? (1p) c) Namnge de tre sorters programfel som man normalt talar om och förklara hur dessa manifesteras. (3p) Uppgift 3: a) Vad är det för skillnad mellan lokala och globala variabler? Var i datorns minne lagras de två olika sorterna? (2p) b) Vilka av följande funktioner är felaktigt implementerade? Motivera och föreslå kodändringar. (3p) // add two arrays a and b element-wise, store result in o void addfloatarrays(float *a, float *b, float *o, int len) { while(len) { o[i++] = a[i] = b[i]; } } // Prints an array of doubles to the screen void printdoublearray(double *data, unsigned int len) { while(len--) { printf( %g\n, *data); data++; } } /* Rescale all elements in array x with scalar s and store result in y */ void scalefloatarray(float *y, float *x, float s, int len) { int i; for(i=0; i < len; i++) { y[i] = s*x[i]; } } Uppgift 4: a) Skriv en funktion int substring(const char *source, int start, int count, char result[]) som plockar ut den del av source som startar på start och sträcker sig count tecken framåt (eller tills source tar slut). Om start > längden på source skall result bli en tom sträng. (3p) Ex: om substring( character, 4,3) anropas kommer result innehålla act b) Skriv en funktion int numbers(const char *text) som går igenom strängen text och skriver ut den på skärmen. Alla siffrar (0-9) skall dock skrivas ut som motsvarande text. numbers() skall returnera antalet siffra-till-text omvandlingar som utförts. (2p)
Ex: Om numbers( This is 1 text about 4 programmers ) anropas skall följande text skrivas ut på skärmen och talet 2 skall returneras: This is one text about four programmers Uppgift 5: a) Skriv en funktion int stringlength(const char *str) som returnerar längden på en sträng. (1p) b) Skriv en funktion void parselist(listentry *list) som går igenom en länkad lista och sätter elementet length till längden av text för varje element i listan med hjälp av stringlength(). (2p) struct ListEntry { char *text; unsigned int length; struct ListEntry *next; }; typedef struct ListEntry ListEntry; c) Skriv en funktion void printlist(listentry *list) som går igenom en länkad lista och skriver ut varje element i listan till skärmen med dess nummer i listan, stränglängd och sträng. (2p) void printlist(listentry *list); Exemplet nedan visar en lista med tre element: [0]: 10 bytes, abcdefgijk [1]: 6 bytes, 1b3e5 [2]: 0 bytes,
Exempel på minneslayout i dator (32-bit): Addr: 100 104 108