• No results found

Inlämningsuppgift 1 Programmeringsteknik MN1 vt02

N/A
N/A
Protected

Academic year: 2022

Share "Inlämningsuppgift 1 Programmeringsteknik MN1 vt02"

Copied!
10
0
0

Loading.... (view fulltext now)

Full text

(1)

Inl¨ amningsuppgift 1

Programmeringsteknik MN1 vt02

Denna uppgift skall l¨osas individuellt och redovisas muntligt vid dator f¨or l¨araren senast 2002-02-10.

1 Introduktionslaboration

Uppgiftens syfte ¨ar att bekanta sig med systemet och att kunna skapa, kom- pilera och k¨ora n˚agra enkla Java-program. Det ¨ar inte avsikten att du ska f¨orst˚a alla detaljer i de program som du skapar nedan, det ¨ar en expose av olika m¨ojligheter som vi ska diskutera mera under kursens g˚ang.

B¨orja med att logga in p˚a ditt datorkonto. Se till att du befinner dig i din huvudkatalog. Det g¨or du automatiskt om du inte g¨or n˚agot s¨arskilt.

B¨orja med att starta programmet netscape. Det g¨or du med kommandot netscape &

Sudda bort det som st˚ar i netscapes adressf¨alt (location) och skriv dit adres- sen f¨or kursens hemsida:

http://www.tdb.uu.se/edu/course/homepage/progMN1/

Titta p˚a sidan och se vad som finns d¨ar och l¨ar dig hitta d¨ar. Du kommer antagligen att anv¨anda den en hel del under kursen. En del saker ¨ar ganska tomma i b¨orjan och kommer att fyllas p˚a under kursen. N¨ar du tittat klart kan du avsluta netscape.

Skapa nu en arbetskatalog f¨or Java, den kan t. ex. heta java. Skapa den med kommandot

mkdir java

Se sedan till att arbetskatalogen blir din aktuella katalog.

(2)

cd java

Alla Javaprogram du skriver under kursen l¨agger du f¨or enkelhets skull i denna katalog.

Kursboken anv¨ander en del hj¨alpprogram som vi kommer att beh¨ova under kursen, till exempel funktioner f¨or att l¨asa och skriva flyttal. F¨orst av allt ska du kopiera dessa hj¨alpprogram till din arbetskatalog. Det g¨or du med kom- mandot (se till att du skriver exakt som det st˚ar med alla tecken, inklusive mellanrum och den avslutande punkten)

cp -r /it/kurs/progMN1/java/extra .

Om du nu beg¨ar en lista av filer (ls kommandot) i din katalog ska du se en ny katalog med namnet extra. Du kan ocks˚a titta i denna katalog (utan att byta aktuell katalog). Som du ser finns d¨ar ett antal filer. Du beh¨over ha dessa filer f¨or att kunna anv¨anda bokens exempel men du beh¨over inte r¨ora filerna p˚a n˚at s¨att.

Vi ska nu skriva in ett antal enkla Javaprogram och testk¨ora dem. F¨or att kunna g¨ora detta m˚aste du kunna anv¨anda en texteditor f¨or att skriva in programmet. Under introduktionskursen har du anv¨ant programmet emacs.

Du ska nu skriva ett Javaprogram med namnet Example1.java. Starta emacs p˚a f¨oljande s¨att:

emacs Example1.java &

Du f˚ar nu ett tomt f¨onster d¨ar du kan skriva in text. Se till att detta ¨ar ditt aktiva f¨onster. Skriv in f¨oljande lilla program, exakt som det st˚ar:

public class Example1 {

public static void main(String[] arg) {

System.out.println("V¨alkommen till Java");

} }

F¨or att indentera (formatera) k¨allkoden kan man trycka ’tab’. Emacs kommer d˚a att automatiskt att g¨ora detta p˚a den rad mark¨oren st˚ar.

Man kan ¨aven f˚a emacs att f¨args¨atta k¨allkoden, detta g¨or ingenting f¨or pro-

(3)

grammets funktion, men m˚anga upplever k¨allkoden som l¨attare att l¨asa d˚a.

Om du vill prova detta, g˚a in i menyn Help och sedan undermenyn Options, v¨alj d¨ar slutligen Global Font Lock.

N¨ar du skrivit in programmet, se till att du sparar det i emacs, men av- sluta inte emacs. F¨or att kunna k¨ora programmet m˚aste du nu kompilera programmet, dvs ¨overs¨atta det till n˚agot som maskinen f¨orst˚ar. Det g¨or du med kommandot ( i kommandof¨onstret, inte i emacsf¨onstret):

javac Example1.java

Om allting ¨ar bra nu s˚a ska du efter en stund f˚a tillbaka kommandopromp- tern i datorns f¨onster, om du skrev fel s˚a har du antagligen f˚att ett antal felmeddelanden p˚a sk¨armen. Om du f˚att n˚agra fel m˚aste du r¨atta till dessa i emacs, spara och kompilera igen tills det blir r¨att.

I din javakatalog s˚a ska nu finnas tre filer, Example1.java, Example1.class samt katalogen extra. Kolla detta med ls!

F¨or att f˚a programmet utf¨ort m˚aste du starta en JVM (Java Virtual Machi- ne). Det g¨or du s˚a h¨ar:

java Example1 Vad h¨ande?

Andra nu lite grand i filen Example1.java (med hj¨¨ alp av emacs), ¨andra lite p˚a stavning eller l¨agg in n˚agra konstiga tecken. G¨or om kompileringen ovan och se vad som h¨ander. F¨orst˚ar du de utskrifter som du fick?

Som standard p˚a v˚art system k¨ors Java version 1.3. Du kan kolla om vilken version av Java du anv¨ander genom att skriva

java -version

F¨orhoppningsvis kommer du att f˚a en utskrift som ser ut som java version "1.3.1 02"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1 02-b02) Java HotSpot(TM) Client VM (build 1.3.1 02-b02, mixed mode)

(4)

Ta kontakt med l¨araren om du f˚ar n˚agot annat, eftersom delar av materialet i kursen bygger p˚a att Java-version 1.3 anv¨ands.

Skapa nu en ny fil Example2.java i emacs. Det kan du antingen g¨ora genom att trycka CTRL-X CTRL-F eller genom att v¨alja Open File i Files-menyn.

I b˚ada fallen f˚ar du sedan skriva filens namn (Example2.java) l¨angst ned i emacsf¨onstret. N¨ar du gjort detta ska du ha ett tomt emacsf¨onster framme.

Skriv nu in f¨oljande Javaprogram, precis som f¨orut m˚aste du skriva exakt r¨att.

import javax.swing.*;

public class Example2{

private String utdata;

public Example2(){

utdata = "V¨alkommen till Java";

JOptionPane.showMessageDialog(null,utdata);

System.exit(0);

}

public static void main(String[] arg){

Example2 e = new Example2();

} }

Spara, kompilera och k¨or detta program precis som du gjorde f¨orut. Vad h¨ander? F¨orhoppningsvis fick du en dialogruta med texten V¨alkommen till Java och en OK-knapp. St¨ang rutan genom att klicka p˚a OK eller genom peka p˚a den ¨ovre ramen och tryck ned h¨oger musknapp. Du f˚ar d˚a fram en meny, v¨alj Close i denna meny f¨or att avsluta programmet.

Vi ska nu forts¨atta med ytterligare ett exempel. Skapa filen Example3.java i emacs p˚a samma s¨att som tidigare. Skriv in f¨oljande program.

import java.awt.*;

import javax.swing.*;

(5)

class Example3 extends JFrame{

public Example3(){

JLabel l = new JLabel(’’Welcome to Java’’, JLabel.CENTER);

getContentPane().add(l);

l.setOpaque(true);

l.setBackground(Color.yellow);

l.setForeground(Color.blue);

l.setFont(new Font(’’SansSerif’’,Font.BOLD,24));

setSize(400,150);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public static void main(String[] arg){

Example3 d2 = new Example3();

} }

Spara, kompilera och k¨or precis som tidigare. Denna g˚ang f˚ar du ett f¨onster med en text i och inget mer. I det f¨orra exemplet d¨ok det ocks˚a upp en OK-knapp i f¨onstret tillsammans med texten som du lade in.

Som du s˚ag i det f¨orsta lilla programmet kan vi skriva ut saker i komman- dof¨onstret genom att anv¨anda System.out. Det finns ocks˚a en System.in f¨or att datorn ska kunna fr˚aga efter olika saker som du tillhandah˚aller. System.in

¨ar dock ganska korkad eftersom den bara kan ta emot text, inte tal (numeriska v¨arden).

F¨or att m¨ojligg¨ora detta m˚aste man skapa lite egna utbyggnader av Java.

Skansholm har i sitt extra-paket skapat tv˚a verktyg, Std.out och Std.in som ers¨atter System.out och System.in. Det ¨ar viktigt att komma ih˚ag att dessa inte ing˚ar i Javaspr˚aket, de ¨ar ett eget till¨agg. Dock kan man anv¨anda ex- trapaketet p˚a alla datorer, det ¨ar bara att sj¨alv l¨agga in det, s˚a det ¨ar inte ett s˚a stort problem. S˚a l¨ange man k¨anner till och dokumenterar att man anv¨ander paketet extra s˚a ¨ar detta inget stort problem.

Skriv in f¨oljande program, om du tycker det ¨ar f¨or mycket att skriva kan du kopiera det fr˚an /it/kurs/progMN1/java/AddSub.java.

(6)

import extra.*;

public class AddSub {

public static void main(String [] args) { double a,b;

// fr˚aga efter ett v¨arde p˚a a Std.out.print(’’Ge a’s v¨arde ’’);

a = Std.in.readDouble();

// fr˚aga efter ett v¨arde p˚a b Std.out.print(’’Ge b’s v¨arde ’’);

b = Std.in.readDouble();

// r¨akna ut summa och skillnad double sum,diff;

sum = a + b;

diff = a - b;

// skriv ut

Std.out.println(’’Summan blev ’’ + sum + ’’ skillnanden blev ’’ + diff);

// formatera

Std.out.println(’’Summan blev ’’ + ExtendedWriter.formatNum(sum,6,2) +

’’ skillnanden blev ’’ +

ExtendedWriter.formatNum(diff,6,2));

} }

Kompilera detta och k¨or det. Ge a v¨ardet 4.5 och b v¨ardet 3.47. Notera att du skriver decimalpunkt och inte decimalkomma. Du kan dock st¨alla in Java f¨or svensk standard om du vill, se kapitel 5 i kursboken f¨or detaljer.

Som du ser s˚a skriver programmet f¨orst ut summan och skillnaden med v¨aldigt m˚anga decimaler. Du ser ocks˚a att de sista decimalerna ¨ar fel. Det

(7)

ser ut som om datorn r¨aknar fel, kan den det? Ja alla r¨akningar med deci- maler ¨ar alltid lite (oftast f¨orsumbart) inexakt. D¨arefter skrivs samma sak ut med f¨arre decimaler, d˚a ser man inte att v¨ardena ¨ar lite felaktiga (fast det ¨ar de ju fortfarande, datorn har alla decimaler internt). Uttrycket Ex- tendedWriter.formatNum(sum,6,2) inneb¨ar att vi anv¨ander en formatterare fr˚an paketet extra (se kap 5 i boken) f¨or att formattera svaret p˚a ett annat s¨att ¨an standard. Vi vill ha 6 positioner, 2 decimaler.

JAVA ¨ar ett spr˚ak med ett litet antal spr˚akelement. Dessutom finns ett stort bibliotek med olika hj¨alpprogram. Eftersom dessa ¨ar mycket omfattande finns inte allting dokumenterat i kursboken eller i andra b¨ocker. F¨or att avhj¨alpa detta finns omfattande online-hj¨alp tillg¨anglig. Den generella javasiten ¨ar http://www.javasoft.com.

Starta netscape och surfa till ovanst˚aende adress och se vad som finns d¨ar.

Du kan hitta olika saker, t. ex. gratis kompilator och JVM f¨or Windows.

L¨ankar till detta finns ocks˚a p˚a kursens hemsida.

Dokumentationen f¨or Java 1.1 finns p˚a:

http://java.sun.com/products/jdk/1.1/docs/api/packages.html och f¨or Java2 (version 1.3) finns p˚a:

http://java.sun.com/products/jdk/1.3/docs/api/index.html

Starta netscape och surfa till dokumentationen f¨or java2 (det ¨ar den versionen vi anv¨ander). Leta upp dokumentation f¨or metoderna drawOval och drawArc i klassen Graphics. Detta hittar du i paketet java.awt, klassen Graphics. Utf¨or detta och l¨as hur man anv¨ander ovanst˚aende tv˚a metoder.

Java bygger p˚a sina bibliotek och det finns inga b¨ocker som dokumenterar allt detta. D¨arf¨or m˚aste man ofta sl˚a upp saker via internet p˚a detta s¨att.

Nu ska vi skapa ett sista exempel. Skapa en fil KattRitare.java. Den ska se ut som nedst˚aende. Om du tycker det verkar vara jobbigt att skriva s˚a mycket text kan du kopiera den fr˚an /it/kurs/progMN1/java/KattRitare.java, du beh¨over dessutom skapa och kopiera filen /it/kurs/progMN1/java/Katt.java.

import java.awt.*;

(8)

import javax.swing.*;

public class KattRitare extends JPanel {

Font f = new Font(Serif", Font.ITALIC, 18);

public KattRitare() {

setBackground(Color.white);

setPreferredSize(new Dimension(300,300) );

}

public void paintComponent(Graphics g) {

super.paintComponent(g);

g.setColor(Color.black);

g.drawRect(50, 50, 60, 60); // huvud g.drawRect(80, 225, 140, 5); // svans g.setColor(Color.white);

g.fillOval(20, 110, 120, 120); // vitt inne i kroppen g.setColor(Color.black);

g.fillOval(75, 75, 10, 10); // nos

g.drawOval(20, 110, 120, 120); // rita kropp, kontur g.fillOval(60, 60, 10, 10); // ¨ogon

g.fillOval(90, 60, 10, 10);

g.setColor(Color.black);

g.drawLine(50, 50, 60, 30); // ¨oron g.drawLine(60, 30, 70, 50);

g.drawLine(110, 50, 100, 30);

g.drawLine(100, 30, 90, 50);

g.setColor(Color.red);

g.drawArc(60, 80, 40, 20, 180, 180); // mun g.setColor(Color.black);

g.setFont(f);

g.drawString(Mjava", 200, 50);

} }

Du m˚aste ocks˚a skapa filen Katt.java som ser ut som

(9)

import java.awt.*;

import javax.swing.*;

public class Katt extends JFrame {

private KattRitare l;

public Katt(){

Container c = getContentPane();

l = new KattRitare();

c.setBackground(Color.white);

c.setLayout(new FlowLayout() );

setSize(300,300);

c.add(l);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public static void main(String[] arg){

Katt k1 = new Katt();

} }

Kompilera b˚ada filerna och k¨or detta Katt.

Efter att du f˚att den att fungera ska du modifera kattens utseende en smula.

I programmet ovan finns ett avsnitt (en metod) som heter paintComponent.

Den g¨or sj¨alva ritandet av katten. Katten ritas i en ruta som ¨ar 300 punkter bred och 300 punkter h¨og. Punkten i ¨ovre v¨anstra h¨ornet heter (1,1) och punkterna r¨aknas sedan upp ˚at h¨oger och ned˚at vilket betyder att det nedre h¨ogra h¨ornet heter (300,300). Med hj¨alp av denna information kan man lis- ta ut hur ritandet fungerar ovan. Din uppgift ¨ar nu att ¨andra ovanst˚aende program s˚a att

• Munnen blir gul

• ¨Ogonen blir gr¨ona

• ¨Oronen blir dubbelt s˚a l˚anga

• Svansen blir h¨alften s˚a l˚ang.

(10)

Kom ih˚ag att varje g˚ang du ¨andrat n˚agot i programmet m˚aste du spara det i emacs och kompilera det med javac innan du ser n˚agon skillnad vid testk¨orning.

References

Related documents

Datamaterialet i Tabell 2, som best˚ ar av 38 observationer, beskriver hur antal inkomna ordrar (ordrar ×1000) f¨ or postorderf¨ oretag beror av upplagan p˚ a katalogen (uppl ×1000)

(a) Ber¨ akna sannolikheten att ingen av dom uppt¨ acker defekten.. (1p) (b) Ber¨ akna sannolikheten att exakt en av dom uppt¨

Avvikelsen mellan hans faktiska vikt och den vikt som v˚ agen visar ¨ ar normalf¨ ordelad med v¨ antev¨ arde noll och standardavvikelse σ = 0.05 kg.. Svara med den nedre

Till exempel fick jag inte med n˚ agot Ljus- och Optikland i f¨ orsta f¨ ors¨ oket, och pilen mot Kosmologi, som ligger utanf¨ or den h¨ ar kartan, borde peka mer upp˚ at,

Om det inte finns n˚ agon konstruktor i en klass tillhandah˚ aller Java en sk standardkonstruktor, dvs en konstruktor som bara anv¨ands f¨or att skapa objekt av

Denna metod bygger p˚ a att vi k¨anner till hur det ligger till med den enda kritiska punkten (origo) hos ett icke-degenererat (inget egenv¨arde = 0 ) linj¨art system med

Rutinen som anv¨ands f¨ or att definiera operatorn, kan ha antingen ett eller tv˚ a argument, men eftersom funktionen normalt definieras i samma modul som inneh˚

Studier av eth i bananflugan kan d¨ arf¨ or leda till ¨ okad f¨ orst˚ aelse av ghrelin och ¨ ar ett potentiellt f¨ orsta steg i jakten p˚ a nya l¨ akemedel mot ¨ overvikt och