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

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

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

BRP Kursusintroduktion og Java-oversigt

Løsning af møntproblemet

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

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

Kursus navn: Indledende programmering Kursus nr

Virkefeltsregler i Java

Test af It-komponent

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

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

Programmering I Java/C#

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

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.

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

Undtagelseshåndtering i C#

Tredjepart webservices

Introduktion til ActionScript

Noter til C# Programmering Iteration

Algoritmer og invarianter

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

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

DANMARKS TEKNISKE UNIVERSITET

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

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

02101 Indledende Programmering Introduktion til Eclipse

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

DRONNINGER (QUEENS) Opgave 1

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

Databaseadgang fra Java

DM507 Algoritmer og datastrukturer

Objektorienteret Programmering

Skriftlig eksamen i Datalogi

A Profile for Safety Critical Java

Hashing og hashtabeller

Lær Python dag 1 - modul 1

Hvad er Objekter - Programmering

Kursusarbejde 2 Grundlæggende Programmering

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Rekursion og dynamisk programmering

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?!?