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

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.

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

3 Listor. 3.1 Envägslistor

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

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

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

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,

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 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 tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

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,

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

Inlämningsuppgift 1, Digsim

2 Pekare och dynamiska variabler.

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

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

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

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

tentaplugg.nu av studenter för studenter

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

Tentamen *:58/ID100V Programmering i C Exempel 3

4 Sammansatta datatyper

Symboliska konstanter const

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

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

HI1024 Programmering, grundkurs TEN

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

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

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

Enkla datatyper minne

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

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

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

Tentamen ges för: Tentamensdatum: Tid:

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

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

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

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

Pekare och arrayer. Indexering och avreferering

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

Tentamen i. Programmering i språket C

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

1 Modulär programutveckling.

7 Programmeringsteknik

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

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

Föreläsning 13. In- och utmatning

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

Poster ( structar ) Postdeklarationer

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

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

5 Sökträd och söktabeller

TDIU01 - Programmering i C++, grundkurs

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

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

6 Lågnivåprogrammering

Abstrakta datastrukturer

Arduinokurs. Kurstillfälle 4

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

F5: Högnivåprogrammering

F5: Högnivåprogrammering

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

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

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

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Exempelsamling Assemblerprogrammering

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Tecken & Strängar. Kapitel 7

HI1024 Programmering, grundkurs TEN

En kort text om programmering i C.

Föreläsning 10. Pekare (Pointers)

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. Programmering i språket C

Tillämpad Programmering (ID1218) :00-13:00

Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001)

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

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

TDDC76 - Programmering och Datastrukturer

Tentamen TEN1 HI

4 Sammansatta datatyper

Tentamen, Algoritmer och datastrukturer

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

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

Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1. Fredagen den 11 mars 2011,

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

3 Styrning av programflöde. Här exekveras satserna enligt först sats1 sedan sats2 och sist sats3.

Grundläggande programmering med C# 7,5 högskolepoäng

Föreläsning 11. Strängar

TDIU01 Programmering i C++

Planering Programmering grundkurs HI1024 HT TIDAA

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.

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Transkript:

1(13) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet idag kl 13. Denna tenta kommer att vara färdigrättad On 27/8 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, 030822. Hjälpmedel : Inga Tid : 08 13 Ansvarig lärare : Gunnar Joki 303317, 274825(hem) 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) Definiera en reell variabel och ge den ett värde. Definiera sedan en pekare som du sätter att peka på den reella variabeln. Använd sedan pekaren till att skriva ut värdet av den reella variabeln. 2)(1p) Skapa dynamiskt en ny länk av linktyp och stoppa in den sist (längst till höger) i den länkade strukturen nedan. Den nya länkens next pekare ska sättas till NULL. lp data next data next NULL 3) (1p) Antag att du har en 8 bitars unsigned char definierad enligt: unsigned char uch = 0xf; Ange värdet av uch efter satsen: uch &= 3; 4) (1p) Skriv de satser som tar bort och avallokerar den sista (längst till höger) länken i en lista av nedanstående typ. Länken med data 33 ska ha next lika med NULL. lista data next data next data next data next next 11 next 22 33 next 44 NULL tp 5 )(1p) Ange hur du ställer om pekarna nedan så att länken temp instoppas efter (till höger om) länken lp i nedanstående tvåvägslista. Inga extra pekare får definieras och listan ska hänga ihop efteråt. lp data data befo next befo next befo next temp befo next

3(13) 6)(2p) En likströmstvåpol kan avbildas som en abstrakt datatyp med tomgångsspänning (ut) och inre resistans (ri) enligt: /* Tvapol.h */ typedef struct float ut; /* Tomgångsspänning i volt */ float ri; /* Inre resistans i ohm */ tvapol; void las_tvapol(tvapol *tvp); /* Läser in ut och ri för tvåpolen */ void skriv_tvapol(tvapol tv); /* Skriver ut tvåpolens tomgångsspänning och inre resistans */ float kortslut_tvapol(tvapol tv); /* Returnerar kortslutningsströmmen som ut/ri */ float belasta_tvapol(tvapol tv, float rb); /* Returnerar belastningsströmmen som ut/(ri+rb) där rb är belastningsresistansen */ float maxuteffekt_tvapol(tvapol tv); /* Returnerar största möjliga uteffekt från tvåpolen som fås vid anpassning då ri är lika med rb och uteffekten ut*ut/(4*ri) */ int mindre_tvapol(tvapol tv1, tvapol tv2); /* Returnerar sant(1) om den maximala uteffekten från tv1 är mindre än den från tv2, annars falskt(0) */ Implementera funktionen las_tvapol. 7)(2p) Implementera funktionen skriv_tvapol ovan. 8)(2p) Skriv funktionen ettor så att den returnerar antalet ettställda bitar i heltalet tal som består av 32 bitar. Funktionsprototyp enligt: int ettor(int tal); 9)(2p) Antag att du har en envägslista, där länkarna är av samma typ, linktyp, som i uppgift 2 ovan med data i form av namn med max 20 tecken, enligt: start stopp

4(13) Skriv funktionen search, så att den söker efter namn (key) och returnerar sant (1) om namnet finns i listan mellan start och stopp, annars falskt (0). Funktionsprototyp enligt: int search(linktyp *start, linktyp *stopp, char *key); 10)(2p)Skriv en rekursiv funktion som åstadkommer samma sak som funktionen search i uppgift 9 ovan. Funktionshuvud enligt: int rek_search(linktyp *start, linktyp *stopp, char *key); 11)(5p)Skriv ett fullständigt program som upprepat (avslut 0) frågar efter hur långt namn som ska läsas in, allokerar dynamiskt minne för namnet, så att det precis ryms och läser in namnet. Efter inläsning ska namnet vändas baklänges genom anrop av den givna funktionen bak_str och skrivas ut. Den givna funktionens prototyp enligt nedan. void bak_str(char *str); /* Vänder str bak och fram*/ 12)(5p)Fullborda huvudprogrammet nedan så att den stoppar in heltalen från den initierade vektorn i ett binärt träd och sedan frågar efter vilket tal som söks och skriver ut om talet finns i tabellen eller ej. Du ska anropa de givna funktionerna into_bintree och is_in_bintree med prototyper enligt nedan. void into_bintree(nodtyp **npp, int tal); /* Stoppar in tal i trädet */ int is_in_bintree(nodtyp *np, int key); /* Returnerar sant(1) om key finns i trädet annars falskt(0)*/ void main() int vek[5] = 657, 123, 786, 877, 697; nodtyp *tree; int i, finns, nyckel; /* NULL ställ trädet */ /* Stoppa in alla tal från vek in i trädet */ /* Läs in sökt nyckel */ /* Sök i trädet */ /* Skriv sökresultat */ 13)(5p)Implementera funktionerna kortslut_tvapol, belasta_tvapol och maxuteffekt_tvapol, enligt uppgift 6 ovan och skriv ett huvudprogram som läser in en tvåpol och skriver ut kortslutningsströmmen och den maximala effekten som kan tas ut från tvåpolen.

5(13) Programmet ska sedan fråga efter en belastningsresistans som ska anslutas till tvåpolen och skriva ut den ström som tas ut från tvåpolen vid denna belastning. 14)(5p)Skriv ett fullständigt program som läser alla personer med namn och lön i hela kronor från textfilen Loner.txt enligt: B.B 21400 G.G 23500...... och lägger dessa på en stack efter det att alla löner räknats upp med en inläst procentuell löneförhöjning, samma för alla. Programmet ska sedan tömma stacken och skriva ut personerna med namn och den nya lönen. För hantering av stacken ska du använda: /* Specifikation av LIFO lista lifo.h */ typedef struct person char namn[20]; int lon; datatyp; 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 */ 15)(5p)Skriv ett fullständigt program som läser alla tvåpoler, enligt uppgift 6 ovan från binärfilen Tvapol.dat till en tvåvägslista sorterad efter tvåpolernas maximala uteffekter enligt mindre_tvapol, som du också ska implementera. Programmet ska sedan fortsätta med att fråga efter önskad effekt för en tvåpol, leta efter den tvåpol i listan som har närmast högre maximal uteffekt och skriva ut denna tvåpol på skärmen. Saknas lämplig tvåpol skrivs detta ut i klartext. För hantering av tvåvägslistan ska du använda: /* Specifikation av tvåvägslista twolist.h */ #include Tvapol.h typedef tvapol datatyp; typedef struct twolink

6(13) 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 */ 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, 030822 1) float x = 2.3; float *xp = &x; printf( %f, *xp); 2) lp >next >next = malloc(sizeof(linktyp)); lp >next >next >next = NULL; 3) 3 4) while(tp >data!= 33) tp = tp_>next; free(tp >next); tp >next = NULL; 5) temp >befo = lp; temp >next = lp >next; lp >next >befo = temp; lp >next = temp; 6) #include "Tvapol.h" void las_tvapol(tvapol *tvp); printf("ge tomgångsspänning i volt : "); scanf("%f", &tvp >ut); printf("ge inre resistans i ohm: "); scanf("%f", &tvp >ri); 7) #include "Tvapol.h" void skriv_tvapol(tvapol tv); printf( Tomgångsspänning = %f\n, tv.ut); printf( Inre resistans = %f\n, tv.ri); 8) int ettor(int tal) int summa = 0, i; for (i = 0; i <= 31; i++) if ((tal & (1 << i))!= 0) summa++; return summa;

9(13) 9) int search(linktyp *start, linktyp *stopp, char *key) while (start!= stopp) if (stricmp(start >data, key) == 0) return 1; start = start >next; return stricmp(stopp >data, key); 10) int rek_search(linktyp *start, linktyp *stopp, char *key) if (start == stopp) return stricmp(stopp >data, key) == 0; else if (stricmp(start >data, key) == 0) return 1; return rek_search(start >next, stopp, key); 11) #include <stdlib.h> void main() char *namn; int i, len; printf("ge längden av strängen (avslut 0) : "); scanf("%d", &len); while (len > 0) namn = calloc(len + 1, sizeof(char)); getchar(); printf("ge sträng : "); gets(namn); bak(namn); puts(namn); free(namn); printf("ge längden av strängen (avslut 0) : "); scanf("%d", &len);

10(13) 12) #include <conio.h> #include <stdlib.h> void into_bintree(nodtyp **npp, int tal); /* Stoppar in tal i trädet */ int is_in_bintree(nodtyp *np, int key); /* Returnerar sant(1) om key finns i trädet annars falskt(0)*/ void main() int vek[5] = 657, 123, 786, 877, 697; nodtyp *tree; int i, finns, nyckel; /* NULL ställ trädet */ tree = NULL; /* Stoppa in alla tal från vek in i trädet */ for (i = 0; i < 5; i++) into_bintree(&tree, vek[i]); /* Läs in sökt nyckel */ printf("ge sökt nyckel : "); scanf("%d", &nyckel); /* Sök i trädet */ finns = is_in_bintree(tree, nyckel); /* Skriv sökresultat */ if (finns) printf("nyckeln finns!"); else printf("nyckeln finns ej!"); getch(); 13) #include <conio.h> #include "Tvapol.h" float kortslut_tvapol(tvapol tv) return tv.ut / tv.ri; float belasta_tvapol(tvapol tv, float rb)

11(13) return tv.ut / (tv.ri + rb); float maxuteffekt_tvapol(tvapol tv) return tv.ut * tv.ut / (4 * tv.ri); void main() tvapol t; las_tvapol(&t); printf( Kortslutningsström = %f\n, kortslut_tvapol(t)); printf( Maxuteffekt = %f\n, maxuteffekt_tvapol(t)); printf( Ge belastningsresistans : ); scanf( %f, &r); printf( Belastningsström = %f\n, belasta_tvapol(t)); getch(); 14) #include <stdlib.h> #include <conio.h> #include "lifo.h" void main() linktyp *lp = NULL; FILE *tsin; datatyp pers; float proc; tsin = fopen("loner.txt", "rt"); printf("ge löneförhöjning i procent : "); scanf("%f", &proc); while (fscanf(tsin, "%s %d", pers.namn, &pers.lon)!= EOF) pers.lon = pers.lon*(1 + proc/100) + 0.5; push(&lp, pers); fclose(tsin); while (lp!= NULL) pers = pop(&lp); printf("% 10s%d\n", pers.namn, pers.lon); getch();

12(13) 15) #include <conio.h> #include "Twolist.h" int mindre_tvapol(tvapol tv1, tvapol tv2) return maxuteffekt_tvapol(tv1) < maxuteffekt_tvapol(tv2); void main() FILE *bsin; headtyp *hp; linktyp *lp; tvapol t; float effekt; int found = 0; newhead(&hp); bsin = fopen("tvapol.dat", "rb"); fread(&t, sizeof(tvapol), 1, bsin); while(!feof(bsin)) newlink(&lp); putlink(t, lp); insort(lp, hp, mindre_tvapol); fread(&t, sizeof(tvapol), 1, bsin); fclose(bsin); printf("vilken effekt vill du minst ha? "); scanf("%f", &effekt); lp = firstlink(hp); while (lp!= NULL &&!found) t = getlink(lp); if (effekt <= maxuteffekt_tvapol(t)) found = 1; else lp = succlink(lp); if (found) printf("lämplig tvåpol : \n"); skriv_tvapol(t); else printf("hittar ingen lämplig tvåpol!"); elimhead(&hp); getch();

13(13)