University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Relaterede dokumenter
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

DM502. Peter Schneider-Kamp

Eksempel: Skat i år 2000

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

BRP Kursusintroduktion og Java-oversigt

Løsning af møntproblemet

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 6

Noter og opgaver. Programmering A IMADA. Niels Kjeldsen & Jacob Aae Mikkelsen. Med grundig korrektur og rettelser af Edmund Christiansen

Ugeseddel 4 1. marts - 8. marts

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Programmering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft

Kursus navn: Indledende programmering Kursus nr

Forelæsning Uge 2 Torsdag

Virkefeltsregler i Java

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Test af It-komponent

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 13/ Side 1 af 7

Forelæsning Uge 4 Torsdag

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

Det er muligt at chekce følgende opg. i CodeJudge: og

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 10

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Programmering I Java/C#

Sammenlign og byt. Et eksempel på dokumentering af et program

Forelæsning Uge 4 Torsdag

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

Kursus 02199: Programmering. Lidt om forelæseren. Velkommen til. Praktisk information: kursusaktiviteter. Praktisk information: forelæsninger

Singleton pattern i Java

SWC eksamens-spørgsmål. Oversigt

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Anvendelse af metoder - Programmering

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

Indhold. Maskinstruktur Kapitel 1. Assemblersprog Indledning Hop-instruktioner Input og output...

Undtagelseshåndtering i C#

Forelæsning Uge 4 Torsdag

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Tredjepart webservices

Forelæsning Uge 5 Mandag

Introduktion til ActionScript

Der er fejl i programmer. Ikke-trivielle programmer er næsten altid fejlbehæftede.

Noter til C# Programmering Iteration

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Algoritmer og invarianter

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

Programmering i C. Lektion oktober 2008

Forelæsning Uge 3 Mandag

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Forelæsning Uge 2 Mandag

Offset til terminalskærm i Java

DANMARKS TEKNISKE UNIVERSITET

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

Forelæsning Uge 1 Torsdag

Programmering i C Intro og grundlæggende C 5. marts 2007

Forelæsning Uge 2 Torsdag

Sproget Rascal (v. 2)

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Tree klassen fra sidste forelæsning

Java Klasse nedarvninger

02101 Indledende Programmering Introduktion til Eclipse

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

DRONNINGER (QUEENS) Opgave 1

Selvstudium 1, Diskret matematik

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Databaseadgang fra Java

DM507 Algoritmer og datastrukturer

Datalogi OB, Efterår 2002 OH er, forelæsning 3/ forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

Objektorienteret Programmering

Skriftlig eksamen i Datalogi

A Profile for Safety Critical Java

Forelæsning Uge 3 Mandag

Aritmetiske Forelæsning Pr ogrammering operatorer tir 1999 sda præcedens september 1999 Logiske Sammenligningsoperatorer operatorer præcedens

Hashing og hashtabeller

Lær Python dag 1 - modul 1

DM507 Algoritmer og datastrukturer

Hvad er Objekter - Programmering

Kursusarbejde 2 Grundlæggende Programmering

Hanne Niels Edith Harald Carsten Jørgen Henrik.

Parallelle algoritmer

DM507 Algoritmer og datastrukturer

Programmering i C. Lektion september 2009

DM507 Algoritmer og datastrukturer

Videregående programmering i Java

Forelæsning Uge 3 Mandag

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, klasse dm032-1a

Rekursion og dynamisk programmering

Forelæsning Uge 1 Torsdag

Kapitel 4 Løkker i C#

Transkript:

DM502 Forelæsning 2

Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld {... } public static void main(string[] args) {... } System.out.println(...); Program = Variable + Instruktioner Algoritme = Tilstand + Opførsel

while / do-while while-konstruktionen (betinget gentagelse): while ( betingelse ) { kode der gentages sålænge betingelse er sand } do-while-konstruktionen (betinget gentagelse) do { kode der gentages sålænge betingelse er sand } while ( betingelse ) ; Hvad er forskellen?

Udvidet eksempel på programudvikling Opgave: Skriv et program der beregner middelværdien af en liste af heltal Specifikation: Inddata: a 1, a 2,..., a N heltal hvor N er ukendt N Uddata: = a i Antagelser: Indlæser tal fra tastaturet Analyse: 1 N i=1 Hvordan standser vi (stopbetingelse)? Inddata <= 0

Algoritme: Så længe der er tal: Læs nyt tal Adder nyt tal til sum Adder 1 til N Udregn og udskriv sum/n

Design: Initialisere sum = 0, antal = 0 Nyt tal = læs første tal Så længe nyt tal > 0: sum = sum + nyt tal antal = antal + 1 nyt tal = læs næste tal Beregn og udskriv middelværdi (sum/antal)

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) {

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) {

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur;

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur;

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur; antal = 0; sum = 0; tastatur = new Scanner( System.in );

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur; antal = 0; sum = 0; tastatur = new Scanner( System.in );

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur; antal = 0; sum = 0; tastatur = new Scanner( System.in ); System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint();

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur; antal = 0; sum = 0; tastatur = new Scanner( System.in ); System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint();

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur; antal = 0; sum = 0; tastatur = new Scanner( System.in ); System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint(); Slå op i Java s API

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur; antal = 0; sum = 0; tastatur = new Scanner( System.in ); System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint(); while( tal > 0 ) { sum = sum + tal; antal = antal + 1; System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint(); }

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur; antal = 0; sum = 0; tastatur = new Scanner( System.in ); System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint(); while( tal > 0 ) { sum = sum + tal; antal = antal + 1; System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint(); }

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur; antal = 0; sum = 0; tastatur = new Scanner( System.in ); System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint(); while( tal > 0 ) { sum = sum + tal; antal = antal + 1; System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint(); } } } resultat = sum / antal; System.out.println( "Middelvaerdi: " + resultat );

import java.util.scanner; public class Middelvaerdi1 { public static void main( String[] args ) { int antal, tal, sum; double resultat; Scanner tastatur; antal = 0; sum = 0; tastatur = new Scanner( System.in ); System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint(); while( tal > 0 ) { sum = sum + tal; antal = antal + 1; System.out.print( "Indtast et nyt tal: " ); tal = tastatur.nextint(); } } } resultat = sum / antal; System.out.println( "Middelvaerdi: " + resultat );

Oversættelse og udførsel Fejl og mangler?!? Test!

Test Hvordan tester man? Test med korrekt input Test med ukorrekt/problematisk input Test med korrekt input Opfører programmet sig korrekt (korrekt output) Korrekt input for -programmet? Test med ukorrekt/problematisk input Opfører programmet sig fornuftigt? Fejlmeddelser (går det ned?) Problematisk input for -programmet?

Test med korrekt input Eksempel 1: Input: 4, 5, 6, 0 Forventet output: 5 Faktisk output: 5.0 Konklusion: Testen forløb som forventet

Test med korrekt input Eksempel 2 Input: 1, 2, 3, 4, 0 Forventet output: 2.5 Faktisk output: 2.0 Konklusion: Testen forløb ikke som forventet Forklaring: resultat = sum / antal; er to heltal der divideres, derfor bliver resultatet et heltal, som derefter konverteres til double.

Test med problematisk input Eksempel 1 Input: 0 Forventet output:? (middelværdien ikke defineret) Faktisk output: Exception in thread "main" java.lang.arithmeticexception: / by zero at Middelvaerdi.main(Middelvaerdi1.java:22) Konklusion: Programmet går ned med en fejl. Burde have givet en fornuftig fejlmeddelse i stedet ( en er ikke defineret )

Test med problematisk input Eksempel 2 Input: CTRL-C Forventet output: Programmet stopper uden output Faktisk output: Programmet stoppede uden output Konklusion: Programmet opfører sig korrekt

Fejlretning Beregning af den korrekte værdi Problem: Division af to heltal bliver igen et heltal Løsning Konvertering af int til double (casting) Division mellem int og double bliver double resultat = sum / antal; Skal læses som: resultat = (double) sum / antal; resultat = ((double) sum) / antal;

Fejlretning Nedbrud hvis der ikke indtastes nogen tal > 0 Problem: Division med antal, selv hvis antal = 0 Løsning: Kun udfør division hvis antal > 0 eller udskriv en er udefineret. resultat = (double) sum / antal; System.out.println( "Middelvaerdi: " + resultat ); if( antal > 0 ) { resultat = (double) sum / antal; System.out.println( "Middelvaerdi: " + resultat ); } else { System.out.println( "Middelvaerdien er udefineret." ); }

if-konstruktionen (betinget udførsel): Netop den ene af de to dele udføres Det er muligt at udelade else-delen: if if( betingelse ) { kode der udføres hvis betingelse er sand } else { kode der udføres hvis betingelse er falsk } if( betingelse ) { kode der udføres hvis betingelse er sand } Kan betragtes som en while-løkke der kun udføres én gang

import java.util.scanner; public class Middelvaerdi {! public static void main( String[] args ) {!! int antal, tal, sum;!! double resultat;!! Scanner tastatur;!! antal = 0;!! sum = 0;!! tastatur = new Scanner( System.in );!! System.out.print( "Indtast et nyt tal: " );!! tal = tastatur.nextint();!! while( tal > 0 ) {!!! sum = sum + tal;!!! antal = antal + 1;!!! System.out.print( "Indtast et nyt tal: " );!!! tal = tastatur.nextint();!! }!! if( antal > 0 ) {!!! resultat = (double) sum / antal;!!! System.out.println( "Middelvaerdi: " + resultat );!! } else {!!! System.out.println( "Middelvaerdien er udefineret." );!! }! } }

Oversættelse og kørsel Test Fejl og mangler?!?