Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

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

Funktionens deklaration

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

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

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

*Pekarvärden *Pekarvariabler & *

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

TDIU01 - Programmering i C++, grundkurs

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

F4. programmeringsteknik och Matlab

TDIU01 - Programmering i C++, grundkurs

Klassdeklaration. Metoddeklaration. Parameteröverföring

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

TDIU01 - Programmering i C++, grundkurs

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Introduktionsmöte Innehåll

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Programmering för språkteknologer II, HT2011. Rum

Enkla datatyper minne

Programmering, grundkurs

Programmering B med Visual C

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Det finns många flaggor till g++,

GRUNDKURS I C-PROGRAMMERING

Planering Programmering grundkurs HI1024 HT 2014

Programmering A. Johan Eliasson

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Facit Tentamen TDDC (7)

Föreläsning REPETITION & EXTENTA

729G06 Föreläsning 1 Objektorienterad programmering

Poäng. Start v. DV1: Datavetenskapens byggstenar 7.5. Antal registrerade (män/kvinnor) 38 (38/0)

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Introduktion C-programmering

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

1 Namnkontroll (NameControl)

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Föreläsning 5-6 Innehåll

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

Repetition C-programmering

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Programmeringsteknik II

Föreläsning 1 & 2 INTRODUKTION

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Föreläsning 3-4 Innehåll

Parameteröverföring. Exempel. Exempel. Metodkropp

Föreläsning 6: Introduktion av listor

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

Föreläsning 1 & 2 INTRODUKTION

Imperativ programmering. Föreläsning 2

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

EDAA01 Programmeringsteknik - fördjupningskurs

TDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Obligatorisk uppgift 5

Länkade strukturer, parametriserade typer och undantag

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Maskinorienterad programmering

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Föreläsning 10. Pekare (Pointers)

Objektorienterad programmering

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

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

En kort text om programmering i C.

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Föreläsning 2 Datastrukturer (DAT037)

Sökning och sortering

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

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

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Programmeringsteknik med C och Matlab

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Skizz till en enkel databas

TDIU01 Programmering i C++

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

DD1314 Programmeringsteknik

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Föreläsning 3: Booleans, if, switch

SMD 134 Objektorienterad programmering

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Försättsblad till skriftlig tentamen vid Linköpings Universitet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Exempel på ett litet Ada-program

Transkript:

Välkommen till Datastrukturer, algoritmer och programkonstruktion eller DOA

Jag: Christer Labbassar: Caroline: Johan:

Agenda, före lunch Inledning om DOA-kursen Backspegel Mål Syfte Examination Om lärande Ordning och reda i C Uttryck, satser, funktioner, moduler, mm Från C till program Projektstruktur

Förändringar (pga Bologna) Kursen anpassad till förändrade lärandemål: tydligare inslag av ADT:er. Tydligare koppling mellan lärandemål och examination. Labbarna är rätt mycket omarbetade följer av lärandemålens förändring

Förändringar (pga kursvärdering) Boken Problem: Många köpte den inte pga pris och tjocklek, några tyckte den var för ordrik Åtgärder: Ny bok, betydligt billigare, mindre text, mer exempel i C-kod, bättre anpassad till ADT-tänk i konkreta kod. Man får ta med boken på duggor och tenta. Labbar Problem: För mycket jobb med labbar på slutet. Några tyckte att de var otydliga. Åtgärder: Förtydligade En ambition att tidigarelägga labbarna Dock: Den stora programmeringsuppgiften bör av naturliga skäl komma in på slutet Det finns inga speciella datum inskrivna på labbuppgifterna...

(forts.) Övningar. Problem: Få gick på övningar. Några var inte nöjda. Åtgärd: Övningar integrerat med lektioner. Material. Problem: Några tyckte att det blev för mycket odokumenterat skrivande på tavlan Åtgärd: Allt väsentligt material kommer att finnas tillgängligt på hemsidan Kursplanering. Problem: Föreläsningar inte tillräckligt långt innan motsvarande labb. Åtgärd: Inget! Min kommentar: Labbar kan vara ett utmärkt sätt att introducera nya saker! Det är inte heller ett-till-ett mellan lektioner och labbar. En del saker får man helt enkelt klura ut själv på labbar (bok, hemsidan, wiki, google...).

Lärandemål Efter kursen ska du kunna... använda abstrakta datatyper i programmeringsuppgifter. definiera och implementera abstrakta datatyper. använda dynamisk minneshantering på ett korrekt sätt avseende allokering, friställande och access. i programmeringsuppgifter använda pekare på ett säkert sätt i olika sammanhang såsom: parametrar, i "structer" och i kommunikation med abstrakta datatyper. analysera enkel programkod avseende tids- och rums-komplexitet. förklara hur några sorterings- och sökalgoritmer arbetar.

Varför läsa DOA-kursen? De flesta kurser på ditt program har den som förkunskapskrav Du blir en bättre programmerare Det är roligt att programmera! Du tar ett steg närmare att bli en färdig ingenjör/datavetare

Examination I kursplanen: TEN1 och LAB1 Du är godkänd på TEN1 om du har klarat duggorna! Se vidare på hemsidan! Utförlig beskrivning av duggorna finns på hemsidan Ta med boken till duggorna! Labbarna (5 st) finns på hemsidan Länkar för ditt lärande finns på hemsidan Använd forum på Blackboard eller mail för riktade frågor

Om lärande Du har ansvar för ditt eget lärande: Du måste driva dig själv, vi kan handleda Jag erbjuder handledning på all icke schemalagd tid: mail, forum Du frågar - jag svarar DU MÅSTE JOBBA MASSOR UTANFÖR SCHEMALAGD TID!!!

Språkkonstruktioner i C Uttryck är något som kan beräknas till ett värde, ex x + y a < 42 b && c! ready Men också t.ex. 99 z Ett uttryck är (en rekursiv definition): En variabel eller konstant En binär operator mellan två uttryck En unär operator före ett uttryck

Mera språkkonstruktioner Satser: beräkningar kan utföras i ett eller flera uttryck som ingår som delar i satsen, ex: if (a < b) x = y + 1; Satser kan påverka exekveringsflödet, ex if (a < b) x = y; z = w; Sats är också en rekursiv konstruktion: Basfall: Tilldelningssats, anrop av void-funktion, varibeldekl. Rekursiva fall: if, while, for, switch, do-while, block.

...mera språkkonstruktioner Funktioner Deklaration = förvarna Definition = funktionen med kod och allt Anrop = användning av funktionen int square(int x); // Declaration int square(int x) { return x*x; } // Definition int main(void) { int x; x = square(42); // Function call return x; }

Övning Är detta giltig kod? int bar(int n){ return n+1; } int foo(int n){ return bar(bar(bar(10))); }

Studera funktionen: float foo(int a){ int i=a; float x; x = (float)i / 2; /* Är i en float eller int här? Vad innebär det att skriva (float)? */ return x; } Är koden nedan korrekt? Är den meningsfull? int foo(int n){ int i=0, x=1, done; do { i++; x = x*i; done = i > n; } while (!done); return x; }

Moduler? Moduler är ett begrepp som finns i flera språk Moduler finns dock inte i C Vi kan åstadkomma modularisering genom att använda filer Implementation i C-fil (körbar kod) Deklaration av exporterade funktioner i H-fil I filen square.h : int square(int x); I filen square.c : #include square.h int square(int x) { return x*x; } I filen arith.c : #include square.h int distance(int x, int y) { } return sqrt(square(x)+square(y);

Räckvidd Funktioner får globla namn (andra funktioner kan anropa dem) Global i hela programmet: extern (är default) Begränsning till filen: static Variabler har 3 nivåer av räckvidd Globala: deklarerade utanför alla funktioner Hela programmet: extern Begränsade till filen: static Lokala: deklarerade i funktionen Nya värden i varje anrop: auto (är default) Värdet ligger kvar till nästa anrop: static

Från C till program C-fil H-fil C-fil Std H-fil Ext. H-fil X X O-fil O-fil Ext. lib C-lib Program

Varför veta detta? För att förstå felmeddelanden För att förstå varför man ska följa konventioner För att förstå varför det inte fungerar

Övning Är detta giltig kod? int foo(int n){ n = 42 ;return n ;}

Projektstruktur Dela alltid upp din koden i flera filer. Huvudregel: Samla de som opererar på samma datatyp (dvs struct) i en C-fil. I H-filen som hör till C-filen skrivs deklarationer av de funktioner i C- filen som man vill ska exporteras I C-filen inkluderas H-filen Andra C-filer (som behöver anropa funktionerna) inkluderar också H- filen structer definieras i C-filen! Samma namn på C-fil och tillhörande H-fil Gör inte en H-fil för alla C-filerna!

H-filer Syftet är att exportera namn, dvs. göra funktionsnamn tillgängliga i andra C-filer så att man tillåts anropa funktionerna. Det är inte en plats att gömma undan krafs som står upptill Det blir en självtest genom att man inkluderar den egna H- filen i C-filen

Abstrakt Data Typ - ADT Kortfattat: Att hålla isär Interface (deklaration av funktioner i H-filer) Implementation (definition av funktioner i C-filer) Användning (algoritmerna som använder funktionerna finns i andra C-filer Syftet är att underlätta konstruktion, återanvändning, testning, felsökning, läsbarhet. Genom att på detta sätt kapsla in implementationsdetaljer kan man undvika onödiga bindningar. Underlättar modifiering och vidareutveckling. Jag återkommer senare med mer precis formulering och exempel