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

Relevanta dokument
*Pekarvärden *Pekarvariabler & *

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

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

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

2 Pekare och dynamiska variabler.

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

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

Föreläsning 10. Pekare (Pointers)

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

Funktioner och programstruktur. Föreläsning 5

Programmeringsteknik med C och Matlab

Funktioner och programstruktur. Föreläsning 5

Föreläsning 12. struct

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.

Typkonvertering. Java versus C

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

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

översiktskurs (5DV031)

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

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

TDDC76 - Programmering och Datastrukturer

Föreläsning 9. struct

TDIU01 - Programmering i C++, grundkurs

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

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

Föreläsning 6 pekare och pekare tillsammans med arrayer

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

Poster ( structar ) Postdeklarationer

TDDC76 - Programmering och Datastrukturer

4 Sammansatta datatyper

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

Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)

Skizz till en enkel databas

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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,

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Planering Programmering grundkurs HI1024 HT 2014

Föreläsning 6: Metoder och fält (arrays)

En kort text om programmering i C.

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

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

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

Funk%oner. Vad är det och hur definierar vi en Top- down- programmering lokala globala variabler void och flera inparametrar

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

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

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Att använda pekare i. C-kod

Programmering i C. Christer Sandberg, Gunilla Eken, Stefan Bygde Olof Andersson Linus Källberg Caroline Uppsäll Johan Hägg

TDIU01 - Programmering i C++, grundkurs

Föreläsning 13. In- och utmatning

Introduktion C-programmering

Föreläsning 2, vecka 8: Repetition

Pekare och arrayer. Indexering och avreferering

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Arrayer (fält)

Repetition C-programmering

Tentamen i Programmering grundkurs och Programmering C

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.

Innehåll. Pekare Exempel

Objektorienterad programmering i Java

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

C++ - En introduktion

Sätt att skriva ut binärträd

Tentamen *:58/ID100V Programmering i C Exempel 3

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

Tecken & Strängar. Kapitel 7

Programmering i C, 7,5 hp

Tentamen Grundläggande programmering

Filer och structer Del 2

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

Indexerade variabler

Minnestilldelning (allokering) och frigörande (avallokering) av minne

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

Innehåll. Pekare Exempel

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Switch, Array (fält) switch break, continue, goto (scary) Sammansatta tilldelningar Kommentarer Array Sortering

F5: Högnivåprogrammering

Arrayer. results

6.1 Kompilering och lite grundläggande information

F5: Högnivåprogrammering

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen

Metoder - en funktion: medel

Föreläsning 7 Strängar

Övningsuppgifter till föreläsning 2 Variabler och uttryck

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,

Uttryck och villkor. Föreläsning 2

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

Lektion 7. Datateknik A, Java I, 5 poäng

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

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

Transkript:

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

Vad är problemet? Att kunna lagra data som avser flera olika egenskaper för en typ av objekt. Man kan tänka sig att använda olika variabler: char brand[10]; int doors; char reg[7]; Inte så bra; dessa variabler kommer ligga i samma hög som andra variabler: int loop,doors, x; char str[99],brand[10],c,reg[7];

Vad är problemet? Om vi vill lagra många objekt av samma typ Parallella arrayer (gemensamt index) kaske? Ex: bil-register med 100 bilar: char brand[100][10]; int doors[100]; char reg[100][7]; Tilldelning av bil med index i: scanf( %s, brand[i]); scanf( %d, &doors[i]); scanf( %s, reg[i]);...ännu sämre

Vad är problemet? Om vi vill sortera listan av bilar? Sortering kräver att data kopieras från en plats till en annan på något sätt så att den rätta ordningen erhålls Varje gång data om en bil ska kopieras från en plats till en annan så måste en array i taget hanteras: strcpy(strbuf1, brand[i]); x = doors[i]; strcpy(strbuf2, reg[i]);... näst intill katastrof!

Vi behöver något nytt! Lösningen till problemet är just struct!

struct egendefinierad typ En struct innehåller valfritt många fält Fält kallas ibland komponent eller medlem Varje fält är av valfri typ ex: #include <stdio.h> struct CAR { char brand[10]; int doors; char reg[7]; int main(void) {...

struct egendefinierad typ En struct innehåller valfritt många fält Fält kallas ibland komponent eller medlem Varje fält är av valfri typ ex: #include <stdio.h> struct CAR { char brand[10]; int doors; char reg[7]; Ser ut som deklarationer av variabler men är inte det int main(void) {...

struct egendefinierad typ En struct innehåller valfritt många fält Fält kallas ibland komponent eller medlem Varje fält är av valfri typ ex: #include <stdio.h> struct CAR { char brand[10]; int doors; char reg[7]; Beskriver vilka delar som typen struct CAR består av int main(void) {...

struct egendefinierad typ En struct innehåller valfritt många fält Fält kallas ibland komponent eller medlem Varje fält är av valfri typ ex: #include <stdio.h> struct CAR { char brand[10]; int doors; char reg[7]; Hela detta är en definition av en ny typ! Namnet på den typen är struct CAR int main(void) {...

struct egendefinierad typ En struct innehåller valfritt många fält Fält kallas ibland komponent eller medlem Varje fält är av valfri typ ex: #include <stdio.h> struct CAR { char brand[10]; int doors; char reg[7]; Normalt vill man definiera en struct globalt (dvs utanför alla funktioner) int main(void) {...

Övning Definiera en struct som passar till att representera ett rationellt tal. Låt det också finnas en tom mainfunktion.

struct container (behållare) En egendefinierad typ kan ses som ett sätt att hålla samman data som avser ett och samma object - som en behållare

Deklaration av variabler #include <stdio.h> struct CAR { char brand[10]; int doors; char reg[7]; int main(void) { int array[20], i, n; struct CAR bil;... bil är nu en variabel som kan tilldelas data. Typen är struct CAR. Storleken är (minst) 23 bytes. Den kan innehålla de data som vi tyckte att en bil ska kunna innehålla: brand, doors och reg

Övning Deklarera tre rationella tal i main-funktionen.

Access av variabler #include <stdio.h> struct CAR { char brand[10]; int doors; char reg[7]; int main(void) { int array[20], i, n; struct CAR bil; i = 0; bil.doors = 4; n = 42; Fältet doors i variabeln bil tilldelas värdet 4. Övriga fälts värden är odefinierade.

Access av variabler struct CAR { char brand[10]; int doors; char reg[7]; int main(void) { int array[20], i, n; Då ett fält i en variabel väljs ut char buf[10]; (t.ex. bil.doors) så blir detta struct CAR bil; uttryck i alla delar likvärdigt i = 0; med en variabel av fältets typ bil.doors = 4; (t.ex. n i detta exempel). n = 42; strcpy(buf, Kalle ); strcpy(bil.brand, Volvo ); strcpy(bil.reg, ABC123 );...

Initiering i deklaration struct CAR { char brand[10]; int doors; char reg[7]; Påminner om arrayers initiering int main(void) { int array[20], i, n; char buf[10]; struct CAR bil = { Volvo, 4, ABC123...

Ett fält i taget För arrayer kan bara ett element i taget användas För structer är det på liknande sätt: ett element i taget struct CAR { char brand[10]; int doors; char reg[7]; int main(void) { struct CAR bil1, bil2, bil3; bil1 = bil2 + bil3; printf( %d\n, bil1); FEL!

Övning Tilldela ett rationellt tal något värde i deklarationen. Ge ett annat ett värde från användaren. Tilldela det tredje produkten av de två första.

...med ett undantag Tilldelning fungerar! struct CAR { char brand[10]; int doors; char reg[7]; int main(void) { struct CAR bil1={ Volvo, 4, ABC123 }, bil2; bil2 = bil1;

Funktioner och structer Precis som vanliga variabler Som inargument void addage(struct person employee, int age); Som returvärde struct person InitNewEmployee(void); En struct innehåller flera värden!!!!

Exempel struct + funktion #include <stdio.h> struct person { char namn[30]; int alder; int skostorlek; /* funktionsdeklaration */ struct person matainpers(void); int main(void) {... struct person p; /* funktionsanrop */ p = matainpers(); printf( %s,p.namn); struct person matainpers(void) { struct person a; char buf[100]; } gets(a.namn); gets(buf); a.alder=atoi(buf); gets(buf); a.skostorlek=atoi(buf); return a;

Övning Gör funktionen init_rational som tar två heltal som indata och som returnerar ett rationellt tal vars delar består av funktionens indata Gör funktionen mult_rational som tar två rationella tal och returnerar ett trejde som är produkten av de två parametrarna Gör funktionen print_rational som skriver ut ett rationellt tal

Arrayer av structer Definition struct verktygstyp { char sort[20]; int pris; char elektrisk; Deklaration struct verktygstyp verktyg[50]; Tilldelning strcpy(verktyg[5].sort, Borrmaskin ); verktyg[5].pris =399; verktyg[5].elektrisk = j ;

Pekare och structer struct meningtyp {... char str[100]; int antal_ord; struct meningtyp *mp, mening; mp = &mening; För att komma åt ett fält i en utpekad structvariabel måste pekaren avrefereras. Punktoperatorn har högre prioritet än avreferering så använd (): (*mp).antal_ord = 5; strcpy((*mp).str, Detta är en fin mening );

Alternativ syntax struct meningtyp {... char str[100]; int antal_ord; struct meningtyp *mp, mening; mp = &mening; Det finns en alternativ syntax som bara kan användas för kombinationen pekare och struct: mp >antal_ord = 5; strcpy(mp >str, Detta är en fin mening ); (*p).field betyder samma p >field

Exempel struct + funktion + pekare #include <stdio.h> struct person { char namn[30]; int alder; int skostorlek; /* funktionsdeklaration */ void matainpers(struct person *p); void main(void) { } struct person p; /* funktionsanrop */ matainpers( &p); printf( %s,p.namn); void matainpers(struct person *p) { char buf[100]; } gets(p->namn); gets(buf); p->alder=atoi(buf); gets(buf); p->skostorlek=atoi(buf);

Övning Skriv ytterligare en funktion i ditt struct-program : Funktionen ber användaren skriva in ett rationellt tal Parametern till funktionen är en pekare till ett rationellt tal Om du har tid över: En funktion som adderar två rationella tal, resultatet placeras i ett tredje. Alla tre talen accessas via pekare.