Föreläsning 9. struct



Relevanta dokument
Föreläsning 12. struct

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

Föreläsning 13. In- och utmatning

Planering Programmering grundkurs HI1024 HT TIDAA

Planering Programmering grundkurs HI1024 HT data

Deklarera en struct som kan användas för att representera en rät linje

Föreläsning 11. Strängar

Planering Programmering grundkurs HI1024 HT 2014

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

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

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };

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

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

Föreläsning 10. Pekare (Pointers)

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

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

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

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

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

Funktioner och programstruktur. Föreläsning 5

2 Pekare och dynamiska variabler.

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

Poster ( structar ) Postdeklarationer

Att använda pekare i. C-kod

Abstrakta datastrukturer

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

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,

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

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

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

Funktioner och programstruktur. Föreläsning 5

*Pekarvärden *Pekarvariabler & *

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

TDIU01 - Programmering i C++, grundkurs

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

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

4 Sammansatta datatyper

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

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

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

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

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

Skizz till en enkel databas

Loopar och datatyper. Föreläsning 3

En kort text om programmering i C.

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,

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Programmeringsteknik med C och Matlab

HI1024 Programmering, grundkurs TEN

Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning

Indexerade variabler

TDIU01 - Programmering i C++, grundkurs

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

TDIU01 - Programmering i C++, grundkurs

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Introduktion C-programmering

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

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

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Funktionens deklaration

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Arrays (indicerade variabler) Föreläsning 4

Tentamen i Programmering grundkurs och Programmering C

Datastrukturer. Typdeklarationer. Ny datastruktur i C- struct. exempel. Ofta bra att kunna fšra ihop information av olika datatyper till en enhet.

Repetition C-programmering

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

Tecken & Strängar. Kapitel 7

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

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

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

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

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

Tentamen i Programmering grundkurs och Programmering C

Pekare och arrayer. Indexering och avreferering

Programmering i C, 7,5 hp

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,

Arrays (indicerade variabler) Föreläsning 6

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

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

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

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Föreläsning 9. Repetition och exempelproblem

TDIU01 Programmering i C++

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

(Lösningsförslag finns sist i denna fil.)

översiktskurs (5DV031)

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

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

const och pekare Output: char *unsafe(char *s) { // Returnerar pekare till det andra tecknet i s printf("%s \n", s);

Loopar och datatyper. Föreläsning 3

C-programmering, föreläsning 2 Jesper Wilhelmsson

6.1 Kompilering och lite grundläggande information

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

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

Tentamen i. Programmering i språket C

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

Transkript:

Föreläsning 9 struct

Dagens kluring #include <stdio.h> #include <string.h> void fun(char s[]) int i=-1; while(s[++i]!=0) if('a'<=s[i]&& s[i]<='z') s[i]-='a'-'a'; int main() char s[] = "Hej pa dig"; fun(s); printf(s);

struct Vad är en struct? Deklarera och använda Initiera och kopiera Struct som parameter och returvärde till funktioner Arrayer av structar En databas

Vad är en struct? En struct används för att definiera en ny sammansatt datatyp, en datastruktur. Tidigare har vi sett arrayer som samlar data. Structar skiljer sig på två punkter: De olika medlemmarna i en struct behöver inte vara av samma datatyp Medlemmarna får ett namn och man väljer medlem mha namnet Precis som arrayer samlar data som hör ihop så samlar en struct data som hör ihop. I ett bilregister representerar vi en bil med en struct som innehåller bilmärke, årsmodell, antal körda mil I ett grafiskt program representerar vi en punkt med en struct som innehåller x och y koordinater I samma program representerar vi en cirkel med en struct som innehåller en punkt (mitten) och en radie

Deklarera och använda en struct 1 #include <stdio.h> #include <string.h> #define WORDLENGTH 30 struct car char model[wordlength]; int year; int milage; ; //OBS semikolon glömmer man alltid! Ger svårtolkade fel. int main() struct car c1; //c1 är variabel av datatypen struct car strcpy(c1.model,"volvo"); c1.year=1971; c1.milage=21000; printf("bil: %s, Arsmodell: %d, Mil: %d",c1.model,c1.year,c1.milage);

Deklarera och använda en struct 2 struct car char model[wordlength]; int year; int milage; ; typedef struct car Car; //Definierar Car att betyda struct car. OBS stor bokstav int main() Car c1; //Snyggare och enklare strcpy(c1.marke,"volvo"); c1.arsmodell=1971; c1.mil=21000; printf("bil: %s, Arsmodell: %d, Mil: %d",b1.model,b1.year,b1.milage);

Initialisering och kopiering #include <stdio.h> #include <string.h> #define WORDLENGTH 30 struct car char model[wordlength]; int year; int milage; ; typedef struct car Car; int main() Car c1="volvo",2013,2100,c2="saab",1992,23000,c3; c3=c2; //Fungerar! Även arrayen kopieras! == fungerar dock ej på structar c3.milage=c3.milage+1000; printf("bil: %s, Arsmodell: %d, Mil: %d",c3.model,c3.year,c3.milage);

Structar som parameter #include <stdio.h> #include <string.h> #define WORDLENGTH 30 struct car char model[wordlength]; int year; int milage; ; typedef struct car Car; Structar kopieras vid funktionsanrop (passed by value) och eftersom de kan vara stora skickar man ofta en pekare även om man inte ska ändra i structen void printcar(car c) printf("bil: %s, Arsmodell: %d, Mil: %d\n",c.model,c.year,c.milage); int main() Car c1="volvo",2013,2100,c2="saab",1992,23000,c3; c3=c2; c3.milage=c3.milage+1000; printcar (c1); printcar (c2); printcar (c3);

Pekare till struct som parameter 1 void increasemilage(car *pcar,int mile) (*pcar).milage=(*pcar).milage+mile; //Obs ()-behövs! int main() Car c1="volvo",2013,2100,c2="saab",1992,23000,c3; c3=c2; increasemilage(&c3,1000); printcar (c1); printcar (c2); printcar (c3);

Pekare till struct som parameter 2 void increasemilage(car *pcar,int mile) pcar->milage=pcar->milage+mile; //betyder exakt samma sak int main() Car c1="volvo",2013,2100,c2="saab",1992,23000,c3; c3=c2; increasemilage(&c3,1000); printcar (c1); printcar (c2); printcar (c3);

Struct som returvärde Car createcar(char model[],int year, int milage)//observera att vi kan ha samma namn! Car c; strcpy(c.model,model); c.year=year; c.milage=milage; return c; //Äntligen kan vi returnera flera värden! int main() Car c1, c2; c1=createcar("volvo",2013,2100); c2=createcar("saab",1992,23000); printcar (c1); printcar (c2);

Arrays och structar Som vi redan sett kan en struct ha en array som en medlem. Vi kan också ha arrayer där elementen är en struct Eller en struct som har en annan struct som medlem Och vi får nästla dem i flera lager. Ex: en array av structar som har en medlem som är en struct som består av arrayer där en av arrayerna består av en annan struct osv Vi kan till och med (och det används ofta) ha en struct där en av medlemmarna är en pekare till en struct av samma typ (rekursiv def) Vad vi ska fokusera på är en array av structar

En databas för bilar börjar ta form void regcars(car reg[],int *pnrofcars) char again[wordlength] = "ja", model[wordlength], tmp[wordlength]; int year,milage; while(strcmp(again,"ja")==0) //#include <string.h> printf("ange model:"); gets(model); printf("ange year:"); gets(tmp); //scanf lämnar return-tecken som ställer till year=atoi(tmp); //#include <stdlib.h> printf("ange milage:"); gets(tmp); milage=atoi(tmp); reg[*pnrofcars]=createcar(model,year,milage); (*pnrofcars)++; printf("vill du fortsatta? (ja/nej)"); gets(again); int main() Car carregister[max]; int nrofcars=0; regcars(carregister,&nrofcars); printcar(carregister[0]); //tillfällig test att det verkar funka

Skriva ut alla bilar i registret För att se att det funkar som det ska verkar det vara ett bra läge att skriva en funktion som skriver ut hela registret. Den kommer senare vara bra när man jobbar vidare med mer funktionalitet. Ni får anrop och funktionshuvud men sedan är det dags att börja jobba!

#include <stdio.h> #include <string.h> #include <stdlib.h> #define WORDLENGTH 30 #define MAX 100 struct car char model[wordlength]; int year; int milage; ; typedef struct car Car; void printcar(car c) printf("bil: %s, Arsmodell: %d, mil: %d\n",c.model,c.year,c.milage); Car createcar(char model[],int year, int milage) Car c; strcpy(c.model,model); c.year=year; c.milage=milage; return c; void regcars(car reg[],int *pnrofcars) char again[wordlength] = "ja", model[wordlength], tmp[wordlength]; int year,milage; while(strcmp(again,"ja")==0) printf("ange model:"); gets(model); printf("ange year:"); gets(tmp); year=atoi(tmp); printf("ange milage:"); gets(tmp); milage=atoi(tmp); reg[*pnrofcars]=createcar(model,year,milage); (*pnrofcars)++; printf("vill du fortsatta? (ja/nej)"); gets(again); void printregister(car reg[], int nrofcars) int main() Car carregister[max]; int nrofcars=0; regcars(carregister,&nrofcars); printregister(carregister, nrofcars);

Studieanvisningar F9 Läs igenom föreläsningen och programmera exemplen och experimentera Lägg till funktionen som skriver ut alla bilar i registret i vårt bilregisterprogram. Utskriften ska se ut enlig nedan: 1. Bil: Volvo, Årsmodell: 2011, Mil: 3000 2. Bil: Saab, Årsmodell: 2000, Mil: 5000 3. Bil: Fiat, Årsmodell: 1999, Mil: 40000 Ändra programmet så att det startar med en meny enligt nedan. Beroende vad man väljer anropas rätt funktion. Sedan får användaren en ny chans att välja ända tills hen väljer avsluta. 1. Registrera bilar 2. Skriv ut alla bilar 3. Avsluta Lägg till ett menyalternativ som är Öka mil där man ska kunna välja en bil genom att ange dess plats i registret och sedan kan öka antalet mil den har gått. Så för att öka mil för Fiat-bilen ovan anger man 3. Gör K16 E10 Skumma igenom 16.1 Läs 16.2-16.3 tom halva sid389 E-excercises, P-programming projects