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

Relevanta dokument
Föreläsning 9. struct

Föreläsning 12. struct

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

Planering Programmering grundkurs HI1024 HT data

Planering Programmering grundkurs HI1024 HT TIDAA

Föreläsning 13. In- och utmatning

Planering Programmering grundkurs HI1024 HT 2014

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

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

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

Föreläsning 11. Strängar

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

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

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

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

Att använda pekare i. C-kod

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.

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

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

2 Pekare och dynamiska variabler.

Föreläsning 10. Pekare (Pointers)

Funktioner och programstruktur. Föreläsning 5

HI1024 Programmering, grundkurs TEN

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

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

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

*Pekarvärden *Pekarvariabler & *

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

Poster ( structar ) Postdeklarationer

Abstrakta datastrukturer

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

Funktioner och programstruktur. Föreläsning 5

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

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

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

4 Sammansatta datatyper

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 13. Omtentamen i Programmering C, 5p, A1, D1, PA1, Fri,

Indexerade variabler

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

Skizz till en enkel databas

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

Loopar och datatyper. Föreläsning 3

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,

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

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

Assemblerprogrammering, ARM-Cortex M4 del 3

TDIU01 - Programmering i C++, grundkurs

Tecken & Strängar. Kapitel 7

En kort text om programmering i C.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

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

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Tentamen i Programmering grundkurs och Programmering C

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

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 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

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

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

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

TDIU01 - Programmering i C++, grundkurs

Programmeringsteknik med C och Matlab

Programmering i C, 7,5 hp

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

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

Introduktion C-programmering

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,

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

Pekare och arrayer. Indexering och avreferering

Funktionens deklaration

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

Repetition C-programmering

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

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

TDIU01 - Programmering i C++, grundkurs

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.

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

Tentamen i Programmering grundkurs och Programmering C

Arrays (indicerade variabler) Föreläsning 4

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:

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

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

6.1 Kompilering och lite grundläggande information

Indicerade variabler

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

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

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

Föreläsning 9. Repetition och exempelproblem

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Tentamen i. Programmering i språket C

Avancerad SSL-programmering II

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Tentamen i Programmering grundkurs och Programmering C

översiktskurs (5DV031)

Transkript:

#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);

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

En struct används för att definiera en ny sammansatt datatyp, en datastruktur. Tidigare har vi sett arrayer som samlar data. Structar skilljer 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

#include <stdio.h> #include <string.h> #define ORDLANGD 30 struct bil char marke[ordlangd]; int arsmodell; int mil; ; //OBS semikolon glömmer man alltid! Ger svårtolkade fel. int main() struct bil b1; //b1 är variabel av datatypen struct bil strcpy(b1.marke,"volvo"); b1.arsmodell=1971; b1.mil=21000; printf("bil: %s, Arsmodell: %d, Mil: %d",b1.marke,b1.arsmodell,b1.mil);

struct bil char marke[ordlangd]; int arsmodell; int mil; ; typedef struct bil Bil; //Definierar Bil att betyda struct bil. Använd stor bokstav int main() Bil b1; //Snyggare och enklare strcpy(b1.marke,"volvo"); b1.arsmodell=1971; b1.mil=21000; printf("bil: %s, Arsmodell: %d, Mil: %d",b1.marke,b1.arsmodell,b1.mil);

#include <stdio.h> #include <string.h> #define ORDLANGD 30 struct bil char marke[ordlangd]; int arsmodell; int mil; ; typedef struct bil Bil; int main() Bil b1="volvo",2013,2100,b2="saab",1992,23000,b3; b3=b2; //Fungerar! Även arrayen kopieras! == fungerar dock ej på structar b3.mil=b3.mil+1000; printf("bil: %s, Arsmodell: %d, Mil: %d",b3.marke,b3.arsmodell,b3.mil);

#include <stdio.h> #include <string.h> #define ORDLANGD 30 struct bil char marke[ordlangd]; int arsmodell; int mil; ; typedef struct bil Bil; 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 skrivbil(bil b) printf("bil: %s, Arsmodell: %d, Mil: %d\n",b.marke,b.arsmodell,b.mil); int main() Bil b1="volvo",2013,2100,b2="saab",1992,23000,b3; b3=b2; b3.mil=b3.mil+1000; skrivbil(b1); skrivbil(b2); skrivbil(b3);

void okamil(bil *b,int mil) (*b).mil=(*b).mil+mil; //Obs ()-behövs! int main() Bil b1="volvo",2013,2100,b2="saab",1992,23000,b3; b3=b2; okamil(&b3,1000); skrivbil(b1); skrivbil(b2); skrivbil(b3);

void okamil(bil *b,int mil) b->mil=b->mil+mil; //snabbare skrivsätt //betyder samma sak int main() Bil b1="volvo",2013,2100,b2="saab",1992,23000,b3; b3=b2; okamil(&b3,1000); skrivbil(b1); skrivbil(b2); skrivbil(b3);

Bil skapabil(char marke[],int arsmodell, int mil)//observera att vi kan ha samma namn! Bil b; strcpy(b.marke,marke); b.arsmodell=arsmodell; b.mil=mil; return b; //Äntligen kan vi returnera flera värden! int main() Bil b1,b2; b1=skapabil("volvo",2013,2100); b2=skapabil("saab",1993,17000); skrivbil(b1); skrivbil(b2);

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

void registrerabilar(bil reg[],int *antal) char fortsatt[ordlangd] = "ja", marke[ordlangd], tmp[ordlangd]; int arsmodell,mil; while(strcmp(fortsatt,"ja")==0) //#include <string.h> printf("ange marke:"); gets(marke); printf("ange arsmodell:"); gets(tmp); //scanf lämnar return-tecken som ställer till arsmodell=atoi(tmp); //#include <stdlib.h> printf("ange mil:"); gets(tmp); mil=atoi(tmp); reg[*antal]=skapabil(marke,arsmodell,mil); (*antal)++; printf("vill du fortsatta? (ja/nej)"); gets(fortsatt); int main() Bil bilregister[max]; int antal=0; registrerabilar(bilregister,&antal); skrivbil(bilregister[0]); //tillfällig test att det verkar funka

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 ORDLANGD 30 #define MAX 100 struct bil char marke[ordlangd]; int arsmodell; int mil; ; typedef struct bil Bil; void skrivbil(bil b) printf("bil: %s, Arsmodell: %d, Mil: %d\n",b.marke,b.arsmodell,b.mil); Bil skapabil(char marke[],int arsmodell, int mil) Bil b; strcpy(b.marke,marke); b.arsmodell=arsmodell; b.mil=mil; return b; void registrerabilar(bil reg[],int *antal) char fortsatt[ordlangd] = "ja",marke[ordlangd],tmp[ordlangd]; int arsmodell,mil; while(strcmp(fortsatt,"ja")==0) printf("ange marke:"); gets(marke); printf("ange arsmodell:"); gets(tmp); arsmodell=atoi(tmp); printf("ange mil:"); gets(tmp); mil=atoi(tmp); reg[*antal]=skapabil(marke,arsmodell,mil); (*antal)++; printf("vill du fortsatta? (ja/nej)"); gets(fortsatt); void skrivautregister(bil reg[],int antal)/*här ska koden in*/ int main() Bil bilregister[max]; int antal=0; registrerabilar(bilregister,&antal); skrivautregister(bilregister,antal);

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 han 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 fiatens mil 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