GPT- föreläsning 10. För en vecka sedan Problemlösning på lägre nivå kan sortera funktioner Förra gången

Relevanta dokument
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

Programmering i C, 7,5 hp

TDIU01 - Programmering i C++, grundkurs

Programmeringsteknik med C och Matlab

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Enkla datatyper minne

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

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

F4. programmeringsteknik och Matlab

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

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

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

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

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

Planering Programmering grundkurs HI1024 HT TIDAA

Lathund. C för inbyggda system

Introduktion till programmering och Python Grundkurs i programmering med Python

Lathund. Pacific C för MS-DOS

Planering Programmering grundkurs HI1024 HT 2014

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

En kort text om programmering i C.

Planering Programmering grundkurs HI1024 HT data

översiktskurs (5DV031)

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

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

Kompilatorer och interpretatorer

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

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

*Pekarvärden *Pekarvariabler & *

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

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

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

TDIU01 - Programmering i C++, grundkurs

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Datorteknik 2 (AVR 2)

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

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

Uttryck och villkor. Föreläsning 2

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

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

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Blandat. Föreläsning 5

Introduktion C-programmering

Data, typ, selektion, iteration

Några småsaker. switch break, continue, goto Kommentarer

Föreläsning 10. Pekare (Pointers)

Föreläsning 3. Programmering, C och programmeringsmiljö

C++ Slumptalsfunktioner + switch-satsen

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

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

Objektorienterad Programmering (TDDC77)

Repetition C-programmering

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

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Lathund. C för inbyggda system

Föreläsning 3. Programmering, C och programmeringsmiljö

Parameteröverföring. Exempel. Exempel. Metodkropp

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

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Objektorienterad programmering Föreläsning 2

Att komma igång. Föreläsning 1

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

Föreläsning 4: for, while, do-while

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Uttryck och villkor. Föreläsning 2

Föreläsning 1: Intro till kursen och programmering

Det finns många flaggor till g++,

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Arduinokurs. Kurstillfälle 4

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Föreläsning 1: Intro till kursen och programmering

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

Variabler och konstanter

Föreläsning 2. Operativsystem och programmering

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

Föreläsning 2: Avlusning och antilustekniker

Imperativ programmering. Föreläsning 2

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

kind spelling Scanning

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

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

Att använda pekare i. C-kod

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

JAVAUTVECKLING LEKTION 4

Tentamen *:58/ID100V Programmering i C Exempel 3

Kompilera och exekvera Javakod

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

6.1 Kompilering och lite grundläggande information

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

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

4 Sammansatta datatyper

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Transkript:

GPT- föreläsning 10 För en vecka sedan Problemlösning på lägre nivå kan sortera funktioner Förra gången poparoramometoterorövoverorfoförorinongog Denna gång Olika typer av fel Felsökning och felsökningsverktyg

Fel En grov förenkling är att säga att vi har tre olika typer av fel i våra program syntaxfel exekveringsfel logiska fel

Fel - syntax Syntaxen för ett språk är de ord som tillhör språket samt språkets grammatik I fallet med naturliga språk pratar vi också om språkets semantik (vad det betyder) och pragmatik (hur det används) Meningen Pelle kör ett tomt glass är (nästan) syntaktiskt korrekt, men semantiskt lite galen Meningen Är det inte mörkt här inne? Signalerar semantiskt att det handlar om en fråga om ljusnivå, men pragmatiskt handlar det om att uttrycka en önskan att tända ljuset

Fel - syntax I formella språk, som tex C, är syntax och semantik ytterst väldefinierade Detta för att man maskinellt skall kunna tolka språket utan ambiguiteter, dvs tvetydigheter Programspråket C definieras i standard ANSI C (de första utkasten från 1983) Nuvarande standard är från 2000 och heter följaktligen C99

Fel - syntax I C finns det reserverade ord ord som har speciell betydelse och som inte får användas till annat än vad standarden säger Exempel på reserverade ord är for, while, do if, else, switch, case, default break, continue, goto, return int, char, float, void, short, unsigned, sizeof include, define =, +, -, *, /, %, ++, -= Vi har dessutom olika satser som bygger på de reserverade orden tilldelning if-else satsen for-satsen while-satsen do-satsen switch-satsen break-satsen Satser avslutas med ;

Fel - syntax En sats kan dessutom bestå av uttryck Olika satser kan kombineras i olika block Och block kan grupperas i funktioner Poängen är att hela språket definieras med tydliga regler, en så kallad grammatik

Fel - syntax När kompilator skall översätta C- kod (som människor förstår) till maskinkod (som datorer förstår) börjar den med att parsa programmet En parsning innebär att tecknen grupperas i meningsfulla enheter utifrån språkets grammatik En sådan meningsfull enhet kallas token Parsningen utförs av en lexikalanalysator Tokens organiseras i parseträd svarande mot grammatiken i språket

Fel - syntax Redan vid parsningen kan lexikalanalysatorn konstatera vissa fel Det kan tex vara Tecknen som analysatorn hittar i källkoden matchar inte definitionerna av något token Det går inte att översätta samlingen av tokens till ett träd Kompilatorn konstaterar att vi fått ett syntaxfel 12 + 3*x 12 + x*3 + 3(12+3*x)

Fel - syntax Kompilatorn kan alltså själv hitta syntaxfel Kompilatorn markerar var i koden felet upptäcks Detta behöver inte nödvändigtvis vara exakt där felet finns Vid felsökning av syntaxfel börja alltid uppifrån i filen rätta till fel och kompilera om innan du fortsätter leta Många syntaxfel ger mängder av följdfel eftersom kompilatorn helt enkelt har tappat tråden #include<stdio.h> int main(void){ printf("hello World") } Syntax error before '}' token

Kom ihåg: bara för att koden går genom kompilatorn utan varningar betyder inte att den är felfri!

Fel - exekveringsfel Exekveringstiden för ett program definieras som tiden från det att operativsystemet lämnar över kontrollen till mainfunktionen tills det att main-funktionen returnerar Fel som får programmet att avsluta utan normal retur till operativsystemet kallas exekveringsfel Exekveringsfel beror oftast på att programmet nyttjar systemresurser felaktigt Exempel på systemresurser är minnet olika IO-enheter filer Det är operativsystemet som ansvarar för den interna säkerheten på datorn

Fel - exekveringsfel En variant av exekveringsfel är om programmet går in i en oändlig loop Detta beror i princip uteslutande på att slutvillkor i en iterationssats (for eller while) är fel basfallet saknas eller missas i rekursion Vid iterationer och rekursioner skall man alltid kontrollera att det finns ett stoppvillkor/basfall som inte kan missas att varje iteration tar oss ett steg närmare stoppvillkoret Dubbelkolla att > och < används rätt att loopvariabeln uppdateras

Fel - exekveringsfel Minnesfel är kanske de vanligaste exekveringsfelen vi stöter på Minnesfel beror på att vi försöker läsa eller skriva till minne som vi inte har tillträde till Exekveringsfel resulterar i meddelanden av typen segmentation fault

Fel - exekveringsfel Vanligaste orsakerna är att vi indexerar oss utanför arrayer att vi glömmer adressoperatorn (&) att minnesallokering inte lyckats att vi indexerar pekare som inte allokerats #define N 532476523234 int a[n]; int *a; a[10]=1; int a; scanf( %d,a); int i,j,n=100,a[n]; for (i=0;j<n;i++) a[i]=i;

Fel - exekveringsfel Exekveringsfel kan vara svåra att hitta eftersom vi oftast bara får reda på att nått är fel, inte var Felsökningsstrategin blir i det här fallet att börja från början av main och lägga in utskrift/stop vid varje funktionsanrop och se vilken funktion det är som kraschar Gå sedan till början den funktionen och upprepa samma procedur Kontrollera speciellt de fyra orsakerna på förra sliden

Våra första felaktiga C-program Hitta felen i DEBUG1.c

Fel - logiska Logiska fel är när man tänkt/gjort fel som resulterar i kod som är syntaktiskt korrekt och inte resulterar i exekveringsfel Vi får med andra ord ingen varning vid kompilering, ingen segmentation fault, utan helt enkelt fel resultat De felaktiga resultaten kan vara predikterbara slumpmässiga Logiska fel kan i sin tur delas upp i olika fel Modellfel Slarvfel Fel kopplade till den ändliga aritmetiken i datorn, dvs avrundningsfel trunkeringsfel

Fel - logiska Modellfel är när vår modell av verkligheten inte stämmer överens med verkligheten Detta kan bero på att vi gjort medvetna förenklingar missförstått problemet Modellfel är svårt att felsöka bort i befintlig kod, utan vi måste börja om med en bättre ansats Exempel på modellfel Om vi antar att slumpmässig längd (i cm) på vuxna personer ges av L=rand()%50 +150; Om vi beräknar att jorden är ett klot med radien r och ytarean A=4*3.1415*r*r

Fel - logiska Under avdelningen slarvfel hittar vi saker som användning av tilldelning i stället för likhetstest felaktig evaluering av uttryck att returnera arrayer från funktioner att använda icke initierade variabler att placera avslutande } fel off-by one fel att inte hantera extremvärden av olika slag allt för smart pekararitmetik att vi antar att indata har visst format/egenskaper utan att kontrollera

Fel - logiska Slarvfel kan undvikas genom att vara noggrann med indentering undvika att använda allt för komplicerade one-liners uttryck kompilera med Wall flaggan satt dela upp komplexa uttryck i mindre delar alltid sätta parenteser och måsvingar i matchande par kontrollera att så fort en variabel finns på höger sida om = så skall den vara initierad dubbelkolla användning av == i villkor testa extremfallen, det är då off-by one felen tittar fram aldrig testa med likhet mot en float

Fel - logiska Vi har tidigare sett att all data som lagras i en dator har en ändlig representation Detta får till följd att vi inte kan lagra godtyckligt stora tal I exemplet med jodens ytarea A=4*3.141592654*r*r får den ändliga representationen följande fel: tal med godtycklig precision r är ett beräknat värde som innehåller fel av olika slag approximationen av π är ändlig de aritmetiska beräkningarna kommer att resultera i avrundningar

Fel - logiska Vissa effekter av den ändliga representationen blir tydliga först efter lång tid tex små, men systematiska fel, som avrundningsfel Ett exempel är börsen i Vancouver som 1982 räknade om sitt index till 1000.000 Efter varje transaktion uppdaterades index Efter 22 månader hade index fallit till 520 Det visade sig att istället för att avrunda värdena så trunkerades värdena efter varje transaktion I efterhand kunde man konstatera att index skulle vara 1098.892 med korrekta avrundningar

Fel - logiska Ett annat exempel var styrsystemen till amerikanska Patriot missiler under Gulfkriget 1991 En timer i missilen startade när styrdatorn slogs på Timern räknade upp med tiondels sekunder och måste multipliceras med 1/10 för att ge tiden i sekunder 1/10 decimalt motsvarar 0.0001100110011001100110011001100... binärt När det binära talet lagrades i ett 24 bitars register introducerades ett fel på 0.0000000000000000000000011001100... binärt (dvs ca 0.000000095 decimalt per 1/10 sekund) Efter 4 dygn i drift var felet 0.34 sekunder En Scudmissil har en hastighet av ca 1676 m/s vilket ger att tidsfelet motsvarar 569 meter

Sammanfattning Nyckelord: fel, felsökning, typer av fel, söka med printf, Sammanfattande mening: Du är fel och du skall bort! The computer says NO!