Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet under eftermiddagen.

Relevanta dokument
Namn:... Klass:... Pnr:... Omtentamen i Programmeringsmetodik, 5p, D1 och E1,

Lämna in ifylld kursvärdering tillsammans med tentamen! Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

Tentamen i Programmeringsmetodik, 5p, Au2, D1 och E1,

3 Listor. 3.1 Envägslistor

Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet idag kl 13.

Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 19.

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

5 Sökträd och söktabeller

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13. Omtentamen i Programmering C, 5p, A1, D1, PA1, Fri,

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Inlämningsuppgift 1, Digsim

2 Pekare och dynamiska variabler.

Lämna in en ifylld kursvärdering tillsammans med tentan! Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Övning från förra gången: readword

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 19.

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Tentamen *:58/ID100V Programmering i C Exempel 3

tentaplugg.nu av studenter för studenter

1 Modulär programutveckling.

Tentamen i Programmering grundkurs och Programmering C

Symboliska konstanter const

#include <stdio.h> #include <string.h>

Enkla datatyper minne

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

Abstrakta datastrukturer

Pekare och arrayer. Indexering och avreferering

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Tentamen i Programmering grundkurs och Programmering C

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012

Exempel ( )

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

Tentamen ges för: Tentamensdatum: Tid:

6 Lågnivåprogrammering

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Uppgifter till praktiska tentan, del A. (7 / 27)

TDDC74 Programmering, abstraktion och modellering. Tentamen

4 Sammansatta datatyper

TDIU01 - Programmering i C++, grundkurs

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i Programmering grundkurs och Programmering C

Programmeringsteknik med C och Matlab

7 Programmeringsteknik

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Tentamen i. Programmering i språket C

HI1024 Programmering, grundkurs TEN

Tentamen i Programmering grundkurs och Programmering C

Arduinokurs. Kurstillfälle 4

Tentamen, Algoritmer och datastrukturer

Tentamen i. Programmering i språket C

Tentamen i Programmering grundkurs och Programmering C

4 Sammansatta datatyper

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Tentamen i Programmering grundkurs och Programmering C

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Exempeltenta GruDat 2002/2003

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Exempelsamling Assemblerprogrammering

kl Tentaupplägg

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

Pekare ( )

Loopar och datatyper. Föreläsning 3

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Variabler använder man sig av för att under programkörningen spara data eller information i primärminnet. En variabel har typ, namn och värde.

Föreläsning 13. In- och utmatning

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

HI1024 Programmering, grundkurs TEN

Tentamen i Introduktion till programmering

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

För alla uppgifter på tentan gäller: Man får använda både standard-c++ (som till exempel har pekare som anges med * och objekt som skapas med new) och

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Tentamen TEN1 HI

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

tentamensdags och lab 3

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Kompilatorer och interpretatorer

C++ Slumptalsfunktioner + switch-satsen

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

maxlist-1. Indexerad lista Länkad lista

Transkript:

1 (12) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet under eftermiddagen. Omtentamen i Programmeringsmetodik, 5p (1ED030, TDD122), 2007-08-30. [D1, E1, A2, Pr1, SDU2, TDVB] Hjälpmedel : Inga Tid : 08:00-13:00 Ansvarig lärare : Christer Lindkvist 303393, 070-3273393 Svar till samtliga uppgifter 1-15 ska skrivas på utdelat extra papper. Använd ett papper till uppgifterna 1-5, två papper till uppgifterna 6-10 och ett papper per uppgift till uppgifterna 11-15 Skriv din tentamenskod på varje inlämnat extra papper. Den maximala poängen för respektive uppgift står angiven i högermarginalen. Totalt kan 40 poäng erhållas. För betyget 3 krävs ca 20, för betyget 4 ca 28 och för betyget 5 ca 34 poäng. Om inget speciellt anges gäller frågorna Visual C++. Detta häfte ska du behålla. Lycka till!

2 (12) 1) Antag att du har en pekare cp som pekar på ett minnesutrymme som innehåller ett ASCII-tecken. Skriv en sats som byter tecknet mot nästa tecken i ASCII-tabellen. (1p) 2) Stoppa in länken som tp pekar på efter länken som lp pekar på. Stega därefter fram pekaren lp så att den pekar på nästa länk i den länkade strukturen nedan. Inga extra pekare får definieras. Den sista structens nextpekare ska alltid peka på den första länken. (1p) data next data next lp data next tp 3) Antag att du har en 8 bitars unsigned char definierad enligt: (1p) unsigned char uch = 0x45; Ange värdet decimalt av uch efter satsen: uch &= 45; 4) Ange hur du, med hjälp av funktionerna i Twolist.h (se uppgift 15), tar bort och avallokerar länken före (till vänster om) lp i nedanstående tvåvägslista. lp (1p) data data befo next befo next befo next 5) Skriv de satser som nollställer alla datavärden i nedanstående länkade struktur. (1p) lista data next data next data next data next 11 22 33..... 99 NULL tp

3 (12) 6) Ett tentamensresultat kan avbildas enligt: /* Specifikation av tentamensresultat - tentres.h */ typedef struct char namn[20]; /* Namnet på den som tentat */ int poang; /* Antal erhållna poäng */ tentres; void las_tentres(tentres *trp); /* Läser in namn och poäng från tangentbordet. */ void skriv_tentres(tentres tr); /* Skriver ut namn och poäng på skärmen. */ int jfr_tentres(tentres tr1, tentres tr2); /* Returnerar sant om tr1 har lägre poäng än tr2. */ char satt_betyg(tentres tr, int gr3, int gr4, int gr5); /* Returnerar betygen U, 3, 4, 5 utgående */ /* ifrån poänggränserna gr3, gr4 och gr5 */ Implementera funktionerna las_tentres och skriv_tentres enl. ovan. (2p) 7) Implementera funktionerna jfr_tentres och satt_betyg i uppgift 6 ovan. (2p) 8) Fullborda funktionen antal_noll som ska returnera antalet nollställda bitar i uch. Är exempelvis uch A med ASCII-koden 01000001 ska funktionen returnera 6. int antal_noll(unsigned char uch) (2p) 9) Antag att du har en envägslista, där länkarna är av samma typ som i uppgift 2 ovan med data i form av reella tal, enligt: 5.3 3.4 7.8 9.1 6.7 3.2 start stopp Fullborda den iterativa funktionen antal_lankar_iter nedan, så att den returnerar antalet länkar mellan start och stopp. int antal_lankar_iter(linktyp *start, linktyp *stopp) (2p) 10) Fullborda den rekursiva funktionen antal_lankar_rek nedan, så att den returnerar antalet länkar mellan start och stopp i uppgift 9 ovan. Funktionshuvud enligt: int antal_lankar_rek(linktyp *start, linktyp *stopp) (2p)

4 (12) 11) Skriv ett program som först läser in antalet element och dynamiskt skapar en vektor med detta antal element av den abstrakta datatypen tentres enligt uppgift 6 ovan. Programmet ska fortsätta med att läsa in alla tentamensresultat och sedan skriva ut dessa på skärmen. Avslutningsvis ska vektorn avallokeras. (5p) 12) I textfilen postal.txt finns ett antal positiva heltal mellan 0 och 1000, ett tal per rad. Skriv ett program som läser alla tal från filen och skriver ut talen och deras binärkod enligt exempelvis: (5p) 5 = 00000101 65 = 01000001 300 = 0000000100101100 7 = 00000111 512 = 0000001000000000 1000 = 0000001111101000 96 = 01100000 För tal som är mindre än 256 ska binärkoden bestå av 8 bitar och för alla andra tal 16 bitar. För omvandlingen av tal till binära strängar ska du anropa den givna funktionen: void tal_str(int tal, char *binstr, int nrbits); 13) Skriv funktionen reverse, som tar en reell vektor och antalet element i vektorn som parametrar och som med hjälp av en LIFO-lista vänder på vektorn. Skriv därefter ett litet huvudprogram som skapar en vektor och skriver ut den både före och efter anrop av reverse. (5p) För hantering av LIFO-listan ska du använda /* Specifikation av LIFO-lista -- lifo.h */ typedef double datatyp; /* Exempelvis */ typedef struct link datatyp data; struct link *next; linktyp; void push(linktyp **lpp, datatyp d); /* Stoppar in d i LIFO-listan */ datatyp pop(linktyp **lpp); /* Tar bort data från LIFO-listan */

5 (12) 14) Binärfilen Bilar.dat innehåller ett antal bilar av den abstrakta datatypen bil nedan. Skriv ett program som läser alla bilar från binärfilen och placerar dessa i en hashtabell med länkade listor. Därefter ska en söknyckel i form av en bil läsas in. Efter sökning i hashtabellen ska sökresultatet skrivas ut. För att hantera hashtabellen skall du endast använda den abstrakta datatypen linkhash nedan och för att hantera bilar ska du endast använda den abstrakta datatypen bil. (5p) /* Specifikation av bilar bil.h */ typedef struct bilpost char regnr[7]; char agare[40]; biltyp; void skapa_bil(biltyp *bp, char *regnr, char *agare); /* Skapar en bil utifrån medskickad data (se las_bil) */ int las_bil(biltyp *bp); /* Läser in data för en bil från tangentbordet. */ /* Returnerar 0 då endast RETURN ges som regnr, annars 1 */ /* Om endast RETURN anges som ägare blir ägaren "UNKNOWN" */ void skriv_bil(biltyp b); /* Skriver ut regnr och agare på skärmen */ int hashfunk_bil(biltyp b); /* Returnerar summan av ASCII-koderna för b.regnr */ int samma_bil(biltyp b1, biltyp b2); /* Returnerar 1 om b1 och b2 har samma regnr, annars 0 */ /* Specifikation av länkad hashtabell -- linkhash.h */ #include "bil.h" typedef biltyp datatyp; /* Exempelvis */ #define HASHTABSIZE 100 typedef struct link datatyp data; struct link *next; linktyp; void init_linkhash(linktyp *htab[]); /* NULL-ställer hashtabellen */ void into_linkhash(linktyp *htab[], datatyp d, int (*hashfunk)(datatyp)); /* Stoppar in d i hashtabell enligt hashfunk */ datatyp *search_linkhash(linktyp *htab[], datatyp nyckel, int (*hashfunk)(datatyp), int (*is_equal)(datatyp, datatyp)); /* Söker efter nyckel i hashtabell */

6 (12) 15) I binärfilen tentres.dat finns ett antal tentamensresultat av typen tentres enligt uppgift 6 ovan. Skriv ett program som läser hela filen och stoppar in resultaten sorterade efter poäng i en tvåvägslista. Efter instoppning ska listan genomlöpas och resultatet i form av tentres och betyg skrivas ut. Betyg sätts genom anrop av funktionen satt_betyg, där gränserna är 20, 28 och 34 poäng precis som på tentan som du skriver just nu. För hantering av tentamensresultat ska du endast använda den abstrakta datatypen tentres i uppgift 6 ovan och för hantering av tvåvägslistan ska du endast använda den abstrakta datatypen twolist nedan. /* Specifikation av tvåvägslista -- twolist.h */ #ifndef TWOLISTH #define TWOLISTH #include "tentres.h" typedef tentres datatyp; typedef struct twolink enum head, link kind; struct twolink *befo, *next; datatyp data; headtyp, linktyp; void newhead(headtyp **hpp); /* Skapar en ny tom lista */ void newlink(linktyp **lpp); /* Skapar en ny tom länk */ void putlink(datatyp d, linktyp *lp); /* Sätter in data i en länk */ datatyp getlink(linktyp *lp); /* Returnerar data från länk */ void inlast(linktyp *lp, headtyp *hp); /* Sätter in länken sist i listan */ void infirst(linktyp *lp, headtyp *hp); /* Sätter in länken först i listan */ void inpred(linktyp *lp, linktyp *ep); /* Sätter in första länken före den andra */ void insucc(linktyp *lp, linktyp *ep); /* Sätter in första länken efter den andra */ void insort(linktyp *lp, headtyp *hp, int (*is_less)(datatyp d1, datatyp d2)); /* Sätter in länken sorterad enligt is_less */ linktyp *firstlink(headtyp *hp); /* Returnerar pekare till första länken i listan */ linktyp *lastlink(headtyp *hp); /* Returnerar pekare till sista länken i listan */

7 (12) linktyp *predlink(linktyp *lp); /* Returnerar pekare till länken före */ linktyp *succlink(linktyp *lp); /* Returnerar pekare till länken efter */ int is_link(linktyp *lp); /* Returnerar 1 om länk annars 0 */ int empty(headtyp *hp); /* Returnerar 1 om listan tom annars 0 */ int nrlinks(headtyp *hp); /* Returnerar antalet länkar i listan */ void outlist(linktyp *lp); /* Tar bort länken från listan */ void elimlink(linktyp **lpp); /* Tar bort, avallokerar och NULL-ställer länken */ void clearhead(headtyp *hp); /* Tar bort alla länkar fr n listan */ void elimhead(headtyp **hpp); /* Eliminerar och NULL-ställer listan */ #endif

8 (12) Lösningar till tentamen i Programmeringsmetodik, 5p 2007-08-30 1) *cp = *cp + 1; Exempelvis *cp += 1; och (*cp)++; fungerar också. Det gör däremot inte *cp++; (pekaren uppräknas). 2) tp->next = lp->next; lp->next = tp; lp = lp->next; 3) 01000101 = 0x45 & 00101101 = 0x2D = 45 00000101 = 0x05 = 5 4) lp = predlink(lp); elimlink(&lp); 5) while (tp) tp->data = 0; tp = tp->next; 6) #include <stdio.h> #include "tentres.h" void las_tentres(tentres *trp) printf("namn: "); gets(trp->namn); printf("poäng: "); scanf("%d", &trp->poang); getchar(); void skriv_tentres(tentres tr) printf("namn : %s\n", tr.namn); printf("poäng : %d\n", tr.poang); 7) int jfr_tentres(tentres tr1, tentres tr2) return tr1.poang < tr2.poang; char satt_betyg(tentres tr, int gr3, int gr4, int gr5) if (tr.poang < gr3) return 'U'; else if (tr.poang < gr4) return '3'; else if (tr.poang < gr5) return '4'; else return '5';

9 (12) 8) int antal_noll(unsigned char uch) int i, sum = 0; for (i = 0; i <= 7; i++) if ((uch & (1 << i)) == 0) sum++; return sum; 9) int antal_lankar_iter(linktyp *start, linktyp *stopp) linktyp *temp; int sum = 0; if (start!= stopp) temp = start->next; while (temp!= stopp) sum++; temp = temp->next; return sum; 10) int antal_lankar_rek(linktyp *start, linktyp *stopp) if (start == stopp) return 0; else if (start->next == stopp) return 0; else return 1 + antal_lankar_rek(start->next, stopp); 11) #include <stdlib.h> /* Huvudprogram -- tentamen.c */ #include <stdio.h> #include "tentres.h" void main() tentres *tv; int i, nr; /* Skapa en vektor med ett inläst antal tentamensresultat */ printf("antal studenter : "); scanf("%d", &nr); getchar(); tv = calloc(nr, sizeof(tentres)); /* Läs tentamensresultat till vektorn */ for (i = 0; i< nr; i++) las_tentres(&tv[i]); /* Visa tentamensresultat på skärmen */ for (i = 0; i < nr; i++) skriv_tentres(tv[i]); /* Frigör minne */ free(tv); tv = NULL;

10 (12) 12) /* Funktionen tal_str ingår ej i uppgiften! */ void tal_str(int tal, char *binstr, int nrbits) int i; binstr[nrbits] = '\0'; for (i = nrbits - 1; i >= 0; i--) binstr[i] = tal % 2 + '0'; tal /= 2; #include <stdio.h> void main() FILE *tsin; int nr; char bstr[20]; tsin = fopen("postal.txt", "r"); while (fscanf(tsin, "%d", &nr)!= EOF) if (nr <= 255) tal_str(nr, bstr, 8); else tal_str(nr, bstr, 16); printf("%d = %s\n", nr, bstr); fclose(tsin); 13) #include <stdio.h> #include "lifo.h" void reverse(double v[], int nr) linktyp *lp = NULL; int i; /* Stoppa vektorelementen på stacken */ for (i = 0; i < nr; i++) push(&lp, v[i]); /* Hämta från stacken tillbaka till vektorn */ for (i = 0; lp!= NULL; i++) v[i] = pop(&lp); void print_vek(char str[], double v[], int nr) int i; printf(str); for (i = 0; i < nr; i++) printf("%.1f ", v[i]); printf("\n");

11 (12) void main() double vek[] = 1.1, 2.2, 3.3, 4.4, 5.5; int size = sizeof(vek)/sizeof(double); print_vek("before: ", vek, size); reverse(vek, size); print_vek("after: ", vek, size); 14) #include <stdio.h> #include "bil.h" #include "linkhash.h" void main() FILE *bsin; biltyp bil, nyckel, *bp; linktyp *hashtab[hashtabsize]; /* NULL-ställ hashtab */ init_linkhash(hashtab); /* Stoppa in alla bilar från filen in i hashtab */ bsin = fopen("bilar.dat", "rb"); fread(&bil, sizeof(biltyp), 1, bsin); while(!feof(bsin)) into_linkhash(hashtab, bil, hashfunk_bil); fread(&bil, sizeof(biltyp), 1, bsin); fclose(bsin); /* Läs in sökt registreringsnummer */ printf("ge sökt regnr, ägaren kan lämnas blank!\n"); las_bil(&nyckel); /* Sök i hashtab och skriv ut resultat */ if (bp = search_linkhash(hashtab, nyckel, hashfunk_bil, samma_bil)) skriv_bil(*bp); else printf("bilen finns ej i registret!\n");

12 (12) 15) /* Huvudprogram -- betyg.c */ #include <stdio.h> #include "tentres.h" #include "twolist.h" void main() FILE *bsin; headtyp *hp; linktyp *lp; tentres tr; /* Läs data från fil till lista */ newhead(&hp); bsin = fopen("tentres.dat", "rb"); fread(&tr, sizeof(tentres), 1, bsin); while (!feof(bsin)) newlink(&lp); putlink(tr, lp); insort(lp, hp, jfr_tentres); fread(&tr, sizeof(tentres), 1, bsin); fclose(bsin); /* Skriv ut data och sätt betyg */ lp = firstlink(hp); while (lp!= NULL) tr = getlink(lp); skriv_tentres(tr); printf("betyg : %c\n\n", satt_betyg(tr, 20, 28, 34)); lp = succlink(lp); /* Frigör minne */ elimhead(&hp);