Föreläsning 12. struct

Relevanta dokument
Föreläsning 9. struct

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

Föreläsning 13. In- och utmatning

Föreläsning 11. Strängar

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,

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

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

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

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

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

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.

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

Poster ( structar ) Postdeklarationer

Föreläsning 10. Pekare (Pointers)

2 Pekare och dynamiska variabler.

Planering Programmering grundkurs HI1024 HT 2014

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.

4 Sammansatta datatyper

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,

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

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

Abstrakta datastrukturer

Funktioner och programstruktur. Föreläsning 5

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

TDIU01 - Programmering i C++, grundkurs

*Pekarvärden *Pekarvariabler & *

Planering Programmering grundkurs HI1024 HT data

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

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

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

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

Planering Programmering grundkurs HI1024 HT TIDAA

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

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

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

Programmeringsteknik med C och Matlab

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

Att använda pekare i. C-kod

Tecken & Strängar. Kapitel 7

Skizz till en enkel databas

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

TDIU01 - Programmering i C++, grundkurs

En kort text om programmering i C.

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

TDIU01 - Programmering i C++, grundkurs

Funktioner och programstruktur. Föreläsning 5

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

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,

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

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

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

HI1024 Programmering, grundkurs TEN

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

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.

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Introduktion C-programmering

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

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

Repetition C-programmering

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 26 februari 2011

Pekare och arrayer. Indexering och avreferering

Indexerade variabler

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

Avancerad SSL-programmering II

Arrays (indicerade variabler) Föreläsning 6

Tentamen i Programmering grundkurs och Programmering C

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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,

Loopar och datatyper. Föreläsning 3

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

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

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

6.1 Kompilering och lite grundläggande information

Funktionens deklaration

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

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

Assemblerprogrammering, ARM-Cortex M4 del 3

TDIU01 Programmering i C++

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Tentamen i Programmering grundkurs och Programmering C

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

Loopar och datatyper. Föreläsning 3

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

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

Arrays (indicerade variabler) Föreläsning 4

Programmering i C, 7,5 hp

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

Pekare ( )

Hantering av textsträngar och talsträngar. William Sandqvist

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

1 Modulär programutveckling.

Tentamen i Programmering grundkurs och Programmering C

Transkript:

Föreläsning 12 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.model,"volvo"); c1.year=1971; c1.milage=21000; printf("bil: %s, Arsmodell: %d, Mil: %d",c1.model,c1.year,c1.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);