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

Relevanta dokument
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.

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

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

3 Listor. 3.1 Envägslistor

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

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

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

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

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,

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,

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

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

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 idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

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,

2 Pekare och dynamiska variabler.

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

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

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

Inlämningsuppgift 1, Digsim

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

Tentamen *:58/ID100V Programmering i C Exempel 3

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

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

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

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

4 Sammansatta datatyper

1 Modulär programutveckling.

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

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

Enkla datatyper minne

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

Tentamen i Programmering grundkurs och Programmering C

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

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

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

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

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

tentaplugg.nu av studenter för studenter

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

Abstrakta datastrukturer

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

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

Symboliska konstanter const

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

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

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

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

7 Programmeringsteknik

5 Sökträd och söktabeller

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

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

Tentamen i. Programmering i språket C

Tentamen i Programmering grundkurs och Programmering C

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

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

Tentamen i Programmering grundkurs och Programmering C

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

6 Lågnivåprogrammering

Poster ( structar ) Postdeklarationer

HI1024 Programmering, grundkurs TEN

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Tentamen ges för: Tentamensdatum: Tid:

Föreläsning 13. In- och utmatning

Pekare och arrayer. Indexering och avreferering

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

Tentamen i Algoritmer & Datastrukturer i Java

Datastrukturer och algoritmer

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

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

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Datastrukturer och algoritmer

Tentamen i Programmering grundkurs och Programmering C

Tecken & Strängar. Kapitel 7

Programmeringsteknik med C och Matlab

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

Tentamen i. Programmering i språket C

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 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

En kort text om programmering i C.

*Pekarvärden *Pekarvariabler & *

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

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

Exempeltenta GruDat 2002/2003

4 Sammansatta datatyper

Exempel ( )

Tentamen i Programmering grundkurs och Programmering C

Exempelsamling Assemblerprogrammering

Tentamen i Algoritmer & Datastrukturer i Java

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

Repetition C-programmering

Loopar och datatyper. Föreläsning 3

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Värmedistribution i plåt

Introduktion C-programmering

C++ Lektion Tecken och teckenfält

Transkript:

1(13) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 19. Denna tenta kommer att vara färdigrättad Fr 21/1 05 och kan då hämtas på mitt tjänsterum T2221 mellan 13 och 15. Vid detta tillfälle har du också möjlighet att diskutera rättningen. Tentor som ej hämtats då placeras på studentexpedition. Omtentamen i Programmeringsmetodik, 5p, Au2, D1, E1, Pr1, 050114. Hjälpmedel : Inga Tid : 14 19 Ansvarig lärare : Gunnar Joki 303317, 274825(hem), 0705474825(mob) 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 efter uppgiftens nummer. 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 Borland C. Detta häfte ska du behålla. Lycka till!

2(13) 1) (1p) Anta att du har en pekare given enligt: char *cp; Visa hur du använder denna pekare till att dynamiskt allokera minne för ditt namn och sätta in ditt namn i detta minnesutrymme. 2)(1p) Stoppa in länken tp först i den länkade strukturen nedan. Inga extra pekare får definieras och lp ska peka på den just insatta första länken. data next data next lp NULL data next tp 3) (1p) Antag att du har en 8 bitars unsigned char definierad enligt: unsigned char uch = 0x0f; Ange värdet decimalt av uch efter satsen: uch &= 20; 4) (1p) Skriv de satser som tar bort och avallokerar den första länken (längst till vänster) nedan. Efter bortplockandet ska lista och tp peka på den andra länken hela listan ska hänga ihop. lista data next data next data next data next next 11 next 22 33 next 44 NULL tp 5 )(1p) Ange hur du genom att ställa om pekarna nedan plockar bort länken lp nedan så att listan hänger ihop efteråt.

3(13) lp data data befo next befo next befo next 6)(2p) En fastighet kan avbildas som en abstrakt datatyp med fastighetsbeteckning, taxeringsvärde och försäljningspris enligt: /* Fastighet.h */ typedef struct char bet[20]; /* Fastighetsbeteckning ex Lugnet 5*/ int tax; /* Taxeringsvärde i hela kr */ int pris; /* Försäljningspris i hela kr*/ fastighet; void las_fastighet(fastighet *fp); /* Läser in data med ledtexter */ void skriv_fastighet(fastighet f); /* Skriver ut data med ledtexter */ int jfr_fastigheter(fastighet f1, fastighet f2); /* Returnerar sant (1) om f1 har lägre försäljninspris än f2 */ float tax_i_procent_av_pris(fastighet f); /* Returnerar hur många procent tax utgör av pris */ Implementera funktionen las_fastighet. 7)(2p) Implementera funktionen skriv_fastighet, i uppgift 6 ovan. 8)(2p) Skriv ett huvudprogram som skapar två fastigheter, enligt uppgift 6 ovan, läser in värden till dessa och skriver ut dem i ordning med den fastighet som har det lägsta försäljningspriset först. Använd funktionerna för fastighet i uppgift 6 ovan. 9)(2p) Skriv en funktion, udda_paritet, som tar ett tecken som parametrar och som returnerar sant om antalet ettor i tecknets binära ASCII kod är udda annars falskt. Funktionsprototyp enligt: int udda_paritet(unsigned char uch ); 10)(2p)Antag att du har en given lista enligt uppgift 4 ovan med data i form av fastigheter enligt uppgift 6 ovan. Skriv ett program som skriver ut medelvärdet av förhållandet mellan taxeringsvärdet och försäljningspriset för fastigheterna i listan.

4(13) 11)(5p)Skriv ett fullständigt program som läser in två namn, byter värden mellan namnen och skriver ut de nya värdena. Bytet ska göras av en funktion med prototypen : void byt(char *asp, char *bsp); Du kan anta att namnen är maximalt 80 tecken långa. 12)(5p)Skriv ett fullständigt program som läser in alla reella mätvärden från textfilen Mess.txt till en dynamiskt allokerad vektor. Antalet mätvärden framgår av det första talet i textfilen. Efter läsning ska programmet normalisera mätvärdena i vektorn genom att dividera alla värden med det största mätvärdet och sedan skriva ut vektorn. Textfilen kan exempelvis se ut som : 34 5.45, 5.67, 5.34........... 13)(5p)Fullborda nedanstående program genom att i main programmet skriva koden som söker efter en inläst nyckelfastighet enligt kommentarerna. Programmet använder en hashtabell med stackar för kollisionshantering och du ska använda de givna funktionerna : #include Fastighet.h void into_linkhash(struct link *hashtab[], fastighet f); /* Stoppar in fastigheten f i hashtab */ struct link *search_linkhash(struct link *hashtab[], fastighet key); /* Om key finns i tabellen returneras en pekare till länken annars NULL */ fastighet fv[5] = Lugnet 5, 1230000, 1560000, Ladan 3, 1500000, 2000000, ; fastighet key; struct link fastighet data; struct link *next; ; struct link *hashtabell[10], *kp; /* Sätt alla element i hashtabell till NULL */ /* Stoppa in alla fastigheter från vektorn fv in i hashtabell */ /* Läs in key */ /* Sök efter key i hashtabell */ /* Skriv sökresultat */

5(13) 14)(5p)I textfilen Fastigheter.txt finns ett antal fastigheter radvis med fastighetsbeteckning, taxeringsvärde och försäljningspris enligt: Ladan5 1230000 1560000 Lugnet6 1456000 1870000.............. Skriv ett program som läser alla fastigheter i filen och stoppar dessa i en kö. Töm sedan kön och skriv ut alla fastigheter som har lägre än 75% förhållande mellan taxeringsvärde och försäljningspris. Du ska även implementera och använda funktionen float tax_i_procent_av_pris(fastighet f); i uppgift 6 ovan. För hantering av kön ska du använda: /* Specifikation av FIFO lista Fifo.h */ #include fastighet.h typedef fastighet datatyp; typedef struct link datatyp data; struct link *next; linktyp; void in_fifo(linktyp **fpp, datatyp d); /* Stoppar in d sist i kön */ datatyp ut_fifo(linktyp **fpp); /* Tar bort och returnerar data först i kön */ 15 )(5p)Binärfilen Fastigheter.dat innehåller ett antal fastigheter enligt uppgift 6 ovan. Skriv ett program som läser alla fastigheter från binärfilen och placerar dessa i en tvåvägslista sorterad efter försäljningspris. Använd jfr_fastigheter i uppgift 6 ovan, som du också ska implementera. Skriv sedan ut de fastigheter som ligger mellan två inlästa priser. För hantering av tvåvägslistan ska du använda: /* Specifikation av tvåvägslista twolist.h */ #include Fatighet.h typedef fastighet datatyp; typedef struct twolink enum head, link kind; struct twolink *befo, *next; datatyp data; headtyp, linktyp;

6(13) 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 */ 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 */

7(13)

8(13) Lösningar till tentamen i Programmeringsmetodik, 5p, 050114 1) sp = calloc(12, sizeof(char)); strcpy(sp, Gunnar Joki ); 2) tp >next = lp; lp = tp; 3) 4 4) tp = tp >next; free(lista); lista = tp; 5) lp >befo >next = lp >next; lp >next >befo = lp >befo; lp >befo = lp >next = NULL; 6) #include Fastighet.h #include <stdio.h> void las_fastighet(fastighet *fp) printf("ge fastighetsbeteckning : "); gets(fp >bat); printf("ge fastighets taxeringsvärde : "); scanf("%d", &fp >tax); printf("ge fastighetens försäljningspris : "); scanf("%d, &fp >pris); 7) #include "Fastighet.h" #include <stdio.h> void skriv_fastighet(fastighet f) printf( Beteckning : %s\n, f.bet); printf( Taxeringsvärde : %d\n, f.tax); printf( Försäljningspris : %d\n, f.pris); 8) #include Fastighet.h #include <conio.h> fastighet a, b; las_fastighet(&a); las_fastighet(&b); if (jfr_fastigheter(a, b)) skriv_fastighet(a); skriv_fastighet(b); else skriv_fastighet(b); skriv_fastighet(a);

9(13) getch(); 9) int udda_paritet(unsigned char uch ) int i, sum = 0; for (i = 0; i < 8; i++) if (uch & (1 << i)!= 0) sum++; return (sum % 2) 10) #include <conio.h> #include Fasighet.h struct link fastighet data; struct link *next; *tp; float sum = 0.0; int antal = 0; tp = lista; while(tp!= NULL) sum += (float)tp >data.tax / tp >data.pris * 100; antal++; tp = tp >next; printf( Medelvärdet för förhållandet mellan taxeringsvärde och försäljningspris = %.1f \n, sum/antal); 11) #include <stdio.h> #include <conio.h> #include <string.h> void byt(char *astr, char *bstr) char temp[81]; strcpy(temp, astr); strcpy(astr, bstr); strcpy(bstr, temp); char anamn[81], bnamn[81]; printf("ge första namnet : "); gets(anamn); printf("ge andra namnet : ");

10(13) gets(bnamn); byt(anamn, bnamn); printf("första namnet är efter bytet : %s\n", anamn); printf("andra namnet är efter bytet : %s\n", bnamn); getch(); 12) #include <stdio.h> #include <stdlib.h> #include <conio.h> float *mv, max; FILE *tsin; int i, antal; tsin = fopen("mess.txt", "rt"); fscanf(tsin, "%d", &antal); mv = calloc(antal, sizeof(float)); for (i = 0; i < antal; i++) fscanf(tsin, "%f", &mv[i]); fclose(tsin); max = mv[0]; for (i = 1; i < antal; i++) if (mv[i] > max) max = mv[i]; for (i = 0; i < antal; i++) mv[i] /= max; for (i = 0; i < antal; i++) printf("%.2f ", mv[i]); free(mv); getch(); 13) #include <stdio.h> #include <conio.h> fastighet fv[5] = Lugnet 5, 1230000, 1560000, Ladan 3, 1500000, 2000000, ; fastighet key, *kp; struct link fastighet data; struct link *next; ;

11(13) struct link *hashtabell[10]; /* Sätt hashtabellens alla element till NULL */ for (i=0; i < 10; i++) hashtabell[i]= NULL; /* Stoppa in alla fastigheter från vektorn fv i hashtabellen */ for (i=0; i < 5; i++) into_linkhash(hashtabell, fv[i]); /* Läs in key */ printf( Vilken beteckning har sökt fastighet? ); gets(key.bet); /* Sök i hashtabellen efter key */ kp = search_linkhash(hashtabell, key); /* Skriv sökresultat */ if (kp == NULLL) printf( Fastigheten finns ej! ); else skriv_fastighet(*kp); getch(); 14) #include "Fastighet.h" float tax_i_procent_av_pris(fastighet f) return (float)f.tax / f.pris * 100; #include <stdio.h> #include <conio.h> #include "Fifo.h" FILE *tsin; linktyp *fp = NULL; fastighet f; tsin = fopen("fastigheter.txt","rt"); while (fscanf(tsin, "%s%d%d", f.bet, &f.tax, &f.pris)!= EOF) in_fifo(&fp, f); fclose(tsin); while(fp!= NULL) f = ut_fifo(&fp); if(tax_i_procent_av_pris(f) < 75) skriv_fastighet(f); printf("förhållandet = %.1f\n", tax_i_procent_av_pris(f));

12(13) getch(); 15) #include <stdio.h> #include <conio.h> #include "Twolist.h" int jfr_fastigheter(fastighet f1, fastighet f2) return f1.pris < f2.pris; FILE *tsin, *bsin, *bsut; headtyp *hp; linktyp *lp; fastighet f; int minpris, maxpris; newhead(&hp); bsin = fopen("fastigheter.dat", "rb"); bsut = fopen("fastigheter.dat", "wb"); tsin = fopen("fastigheter.txt", "rt"); while (fscanf(tsin, "%s%d%d", f.bet, &f.tax, &f.pris)!= EOF) fwrite(&f, sizeof(fastighet), 1, bsut); fclose(tsin); fclose(bsut); fread(&f, sizeof(fastighet), 1, bsin); while(!feof(bsin)) newlink(&lp); putlink(f, lp); insort(lp, hp, jfr_fastigheter); fread(&f, sizeof(fastighet), 1, bsin); fclose(bsin); printf("ge lägsta försäljningspris : "); scanf("%d", &minpris); printf("ge högsta försäljningspris : "); scanf("%d", &maxpris); lp = firstlink(hp); while (lp!= NULL) f = getlink(lp); if (f.pris >= minpris && f.pris <= maxpris) skriv_fastighet(f);

13(13) lp = succlink(lp); elimhead(&hp); getch();