2D4112 Datalogi I, grundkurs med Java, 2003 2004. Labkurs 1. Godkänd Labkurs 1 ger 2p (högskolepoäng) av kursens totalt 10p



Relevanta dokument
UNIX. 2D1339 Programkonstruktion Hösten 2001 Datorintroduktion Laboration 1. Mål. Vad laborationen går ut på. Redovisning

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

Introduktion till datormiljön och Python

DD1311 Programmeringsteknik för CL1 Laborationer läsåret

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

Editering, Kompilering och Exekvering av Javaprogram

DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015

Objektorienterad programmering D2

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Objektorienterad programmering i Java

Kort-kort om utdelade användarkonton och datormiljön på NADA

Laboration 10 - NetBeans

Föreläsning 1 & 2 INTRODUKTION

SMD 134 Objektorienterad programmering

Tentamen OOP

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Lab5 för prgmedcl04 Grafik

Chapter 3: Using Classes and Objects

Applets med komponenter

Installationsanvisning för kursens programvara på egen dator

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Programmeringsteknik med C och Matlab

2D1339 Programkonstruktion för F1, ht 2004

Föreläsning 6: Introduktion av listor

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

Övningar Dag 2 En första klass

8-1 Formler och uttryck. Namn:.

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

kommando -fl argument

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet.

Tips och tricks 1 Cadcorp SIS

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

Använda Python Laboration 1 GruDat, DD1344

Grundläggande programmering med C# 7,5 högskolepoäng

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Björn Abelli Programmeringens grunder med exempel i C#

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02)

Att använda Java SE JDK 6

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

Tentaupplägg denna gång

Laboration 1: Linser

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Att använda pekare i. C-kod

LÄSLANDET - BOKSTÄVER OCH ORD

Kort-kort om utdelade användarkonton och datormiljön på NADA

Tentaupplägg denna gång

Laboration 1: Linser

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt.

Lumbago - Förord. Välkommen till Journalprogrammet Lumbago.

Laboration 1: Linser

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Programkonstruktion för F, 2D1342, Laboration 0: Kom igång med Java-programmering - förberedande uppgifter

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

2D1339 Programkonstruktion för F1, ht 2003

19. Skriva ut statistik

8-4 Ekvationer. Namn:..

Tentamen i Objektorienterad programmering

MMA132: Laboration 1 Introduktion till MATLAB

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Datorintroduktion 2009 Föreläsning 1. Dieter Larsen (IT-chef Matematiska vetenskaper)

5 Grundläggande in- och utmatning

Datalogi I, grundkurs med Java 10p, 2D4112, Tentamen 29 november 2003, svar och lösningar

Föreläsning 4: Poster

Redovisning av inlämningsuppgifter

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

SMD 134 Objektorienterad programmering

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Programmeringsuppgifter 1

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, Raphael Corsoski, Erik Eliasson, Christian von Schultz, 2008.

CdsComXL. Excel-tillägg för hantering och analys av CDS-data. ComXL-020/S, Stråk Stråk Stråk Stråk

CSN-rapportering, gymnasiet

Laboration 1: Linser

Händelsestyrda program

Laboration 1 Introduktion till Visual Basic 6.0

Referens till. WeavePoint 6 Mini

OBS! Snabbinsatt Matlab-intro vissa fönsterhanteringsdetaljer kan vara fel men gör gärna Matlab-uppgifterna. DN1240, Numeriska metoder för OPEN1.

TENTA: TDDD11 & TDDC68. Tillåtna hjälpmedel. Starta Emacs, terminal och tentakommunikationsfönster. Skicka in frågor och uppgifter

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

2D1310 Programmeringsteknik för CL1 Laborationer läsåret 2004/2005

2D1311 L1 och Bio2 2001/ Laboration 1: Introduktion till Nadas datormiljö och Java Nyckelord: katalog, fil, källkod, kompilera, avlusa, program,

DN1212, Numeriska metoder & grundläggande programmering. Laboration 1 del 1-3 (frivilliga delar) Del 1-3 (dvs upg ) behöver inte redovisas

Kurvlängd och geometri på en sfärisk yta

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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

Datorintro för elektro på Solaris

Objektsamlingar i Java

DD1342 Programkonstruktion för F1, ht 2007

Catharina Wramfors BFC Tekniksektionen Lund. Vid problem med KundRad kontakta RSIT tel:

F4. programmeringsteknik och Matlab

Grunderna i stegkodsprogrammering

Frågebanker, frågeuppsättningar och slumpvisa block

Matematik 2 Digitala övningar med TI-82 Stats, TI-84 Plus och TI-Nspire CAS

Programmeringsolympiaden 2012 Kvalificering

Transkript:

2D4112 Datalogi I, grundkurs med Java, 2003 2004 Labkurs 1 Godkänd Labkurs 1 ger 2p (högskolepoäng) av kursens totalt 10p Denna labkurs omfattar 7 olika moment, där moment 3 7 skall redovisas. Tag med denna sida till varje redovisning och se till att du får kvittens från din lärare. För din egen skull, spara sidan tills du sett att dina resultat är inrapporterade till Ladok! Namn... Personnr... Laborationer Moment 3Godkänt den... Kvitteras... Moment 4 Godkänt den... Kvitteras... Moment 5 Godkänt den... Kvitteras... Moment 6 Godkänt den... Kvitteras... Moment 7 Godkänt den... Kvitteras... 1

En tom sida! 2

Moment 1: Unix och Emacs Obs! Moment 1 är inte obligatoriskt och behöver inte redovisas. Momentet skall ge de mest grundläggande kunskaperna som behövs för att kunna arbeta i Nadas datorsalar och de som tänker göra sina programmeringslaborationer på Nadas datorer bör göra dessa uppgifter. De studenter som programmerar på annat håll förväntas lära sig datormiljön där på egen hand. De som inte har egen bärbar dator får dock redovisa på Nadas datorer och måste därför känna till det viktigaste om dessa. Incheckning/registrering på kursen (andra punkten i avsnitt 3) måste göras av alla någon gång för att vi ska kunna bokföra resultaten. 1 Målsättning Syftet med denna laboration är att ni ska bekanta er med den datormiljö som används under den här kursen och i de flesta av de kurser ni kommer att läsa på Nada. Målsättningen med labben är att lära sig följande: logga in och logga ut utföra de vanligaste operationerna på filer förstå hur filsystemet är uppbyggt hitta hjälpinformation på systemet starta och använda texteditorn Emacs använda häftet Unixanvändning på Nada Det är bra om ni hinner läsa igenom labblydelsen samt de avsnitt i häftet Unixanvändning på Nada som labblydelsen hänvisar till i förväg. Hinner ni inte så läs när ni sitter vid datorn! Tag med Unix-häftet till labben! Allt som står i Unix-häftet är användbar kunskap men vi hinner inte öva på allt under labben. Experimentera gärna själva med det vi inte tar upp här, t.ex avsnitten 7.3.9 7.3.12, 8, 9.5 9.9, 10 och 11. Unix-häftet finns även tillgängligt från Nadas hemsida för datoranvändning för studenter: http://www.nada.kth.se/student/datoranv./ 2 Inloggning, fönster, lösenord Läs igenom avsnitten 1 6 i Unix-häftet. Logga in enligt anvisningarna i avsnitt 5. När inloggningen är klar hamnar ni i ett fönstersystem. Prova att flytta och ändra storlek på fönster enligt beskrivningen i avsnitt 6.2. Byt lösenord till något du kan komma ihåg! Detta gör man genom att välja terminalfönstret och ge kommandot passwd Följ instruktionerna. Byte av lösenord beskrivs i Unix-häftet, avsnitt 7.2. 3

3 Installation av kursanpassningar, utloggning Anpassningarna innebär bl.a. att man automatiskt får information om kursen, tillgång till specialkommandon och direktlänk till kursens hemsida. Anpassningarna ska göras för varje persons konto. Välj kursomgång Den omgång av kursen Datalogi I, gk med Java som börjar år 2003kallar vi fovgrund03. Välj terminalfönstret genom att klicka i det och skriv course join fovgrund03 Checka in i res Vi har ett särskilt progam som heter res för att hålla ordning på vilka delresultat varje student har. Ni måste checka in i res. Detta sker genom att ni ger kommandot: res checkin fovgrund03 Ni får då ett antal frågor (namn, personnummer o.dyl.) om uppgifter vi måste känna till för att kunna registrera era resultat. En fråga gäller övningsgrupp. Vi har bara en grupp, svara helst 1, men andra svar är OK. En annan fråga avser studiestatus. Om detta är din första kurs på KTH så är din studiestatus FV-03, annars har du en studiestatus sedan tidigare, skriv den! Den som jobbar ensam går nu vidare till avsnitt 4. De som jobbar i par fortsätter med instruktionerna nedan. Skapa en gemensam filkatalog När två personer jobbar tillsammans behövs en gemensam filkatalog. Denna tillverkar man enklast med hjälp av course-kommandot. Ge kommandot: course labdir fovgrund03 kompis där kompis är användarnamnet för din labb kompis. Den gemensamma katalogen kommer att heta fovgrund03och ligga under hemkatalogen. Logga ut! (Avsnitt 6.3.7 i Unix-häftet) Anpassningarna ni just installerat utförs vid varje kommande inloggning. Låt nu labb kompisen logga in på sitt konto, byta lösenord och upprepa alla stegen ovan på detta konto också. Det är viktigt att ni båda checkar in på kursen och att båda era konton blir riktigt anpassade för kursen. Dessa två åtgärder behöver bara göras en gång, vid kursens början. Om ni vill byta labb-kompis eller får problem så be en lärare om hjälp. När ni båda är klara med detta kan ni enkelt gå till er gemensamma katalog genom cd fovgrund03 Det är meningen att ni ska lägga alla filer som har med labbarna på kursen att göra under denna gemensamma katalog. I katalogen fovgrund03 bör ni så småningom skapa lämpliga underkataloger, förslagsvis en för varje labb eller programmeringsprojekt. En katalog skapas med det vanliga Unix-kommandot mkdir ( make directory ). Mer övning på kataloger kommer. 4

4 SimaManager - hjälpkö på din dator Under de schemalagda passen i datorsal finns lärare/handledare att tillgå. När ni behöver hjälp eller vill redovisa så kan ni ställa er i kö med hjälp av programmet SimaManager. Ge i terminalfönstret kommandona module add sima (behövs ej om man gjort course join fovgrund03) sm Då skapas, efter 30-60 sekunder, ett fönster för köhanteringen på er datorskärm. Där skall finnas en lista över kurser, välj fovgrund. Tryck sedan på knappen Login. Då listas den aktuella kön för kursen fovgrund i SimaManager-fönstret. Ovanstående görs endast en gång per labbpass. När ni vill ställa er i kö så trycker ni på knappen Queue Ett litet fönster kommer upp där man kan välja Hjälp eller Redovisning. Man bekräftar sitt val genom att klicka på Ok. Om man ångrat sig klickar man på Cancel. När man fått hjälp av en lärare ska man ta bort sig ur kön genom att trycka på knappen Remove. Mera information om SimaManager finns på http://www.simamanager.tk/ 5

5 Filträdet och filkommandon Läs i Unix-häftet avsnitt 7, sidorna 18 26 (t.o.m. 7.3.8). Läs också 9.1 9.4. Ha Unixhäftet uppslaget hela tiden och läs om kommandona parallellt med att ni provar! Logga in igen om ni är utloggade. Välj terminalfönstret. Skriv cd vilket betyder förflyttning till hemkatalogen. Skriv nu ls Datorn skriver ut AFS-README OldFiles Private Public README public_html fovgrund03 (eller något som är mycket likt ovanstående). Det ni har gjort är att fråga vad den aktuella filkatalogen innehåller. Svaret är en lista över katalogens innehåll. De första fem filerna i listan är sådant som alla hemkataloger innehåller från början. Den sista, fovgrund03, har ni själva skapat. Hemkatalogen innehåller också ett antal initieringsfiler vars namn inte skrivs ut. Prova kommandona cd, pwd och och mkdir genom att Ge kommandot pwd i hemkatalogen Gå till katalogen fovgrund03 Gör pwd igen (skillnad?) Gör ls Vad får ni veta? Skapa en katalog i katalogen fovgrund03. Användmkdir, välj själv namn på den nya katalogen eller kalla den intro. Gör ls igen. Gå tillbaka till hemkatalogen På katalogen /info/fovgrund03/labbar/intro/ finns filen Lasse.txt Den innehåller samma text som filen foo.txt som används i exemplen på sidorna 25 26. Prova kommandona cp, mv, cat, more och rm genom att utföra följande uppgifter: Kopiera Lasse.txt till hemkatalogen. Byt namn på kopian till något ni själva väljer Skriv filens innehåll i terminalfönstret Kopiera filen (inom hemkatalogen) så att ni har två filer med olika namn men med samma innehåll. Tag bort den ena kopian Flytta den återstående kopian till katalogen intro (eller motsvarande) som ni skapat för en stund sedan. 6

Gör ls minst en gång efter varje kommando för att kontrollera att katalogerna innehåller det ni tror. Tag reda på, med hjälp av innehållsförteckningen till Unix-häftet, hur man med ett enkelt kommando skriver ut en fil på papper, men skriv inte ut i onödan. Spara papper! 6 Symboliska länkar Läs avsnitt 7.3.8 i Unix-häftet. Ni har redan gjort en symbolisk länk, dock utan att själva ge kommanot ln. När ni gjorde course labdir... kördes ett s.k. skript, en samling kommandon. Kommandot ln ingår i detta skript. När person 1 i gruppen gjorde course labdir... skapades katalogen fovgrund03 i hemkatalogen hos person 1. När person 2 gjorde samma sak sattes en symbolisk länk med namnet fovgrund03 från dennes hemkatalog till katalogen fovgrund03 hos person 1. Läs noga igenom exemplet på sidorna 25-26 och försök förstå vad som händer. 7 Att få hjälp Läs avsnitt 16.1 i Unix-häftet. Prova man-kommandot i terminalfönstret för några av de kommandon ni använt under labben, t.ex. man ls De olika väljare som finns för ett kommando hittar man under rubriken OPTIONS i manbladet. Den information manbladen ger är svårtillgänglig. Det krävs en del träning för att kunna läsa dem med god behållning. 7

8 Emacs Läs avsnitt 13i Unix-häftet. Här är det bäst att läsa och samtidigt prova de Emacskommandon som beskrivs i texten. Starta Emacs (GnuEmacs, inte XEmacs) genom att i terminalfönstret skriva emacs & Emacs kommer nu att startas i ett eget fönster på skärmen. Utan & tecknet kör Emacs i terminalfönstret och det går inte att ge kommandon där samtidigt som Emacs är igång. Det går även att starta Emacs på följande sätt: Med markören mot skärmens bakgrund (en pil), tryck ned högra musknappen. Då får man en meny där Emacs kan väljas. Välj Emacs-fönstret och välj ett filnamn att jobba med. Man kan ta en fil som redan existerar som man vill ändra i eller man kan välja att skapa en ny. Använd alternativ 1 eller 2 högst upp på sidan 44 i Unix-häftet. Prova gärna med både gammal och ny fil, men välj en ny fil innan ni går vidare. När man valt ett nytt filnamn är Emacs-fönstret tomt. Skriv in en text, minst 5 rader lång. Prova åtminstone alla kommandon som beskrivs i Unix-häftet på sidorna 44 45 fram till stycket som börjar ( Du kan ha flera filer... ). Om något kommando är svårt att förstå så be om hjälp! Prova också M < och M > som flyttar markören till början respektive slutet av texten. Emacs arbetar i en s.k. buffert i datorns minne, inte direkt med skivminnesfilen. För att spara det arbete man gjort i bufferten till skivminnet använder man något av Save-kommandona i Files-menyn eller så gör man C X C S. Provadetta genom att spara den nya text ni skrivit in och kontrollera med kommandot ls i terminalfönstret att filen verkligen skapats. Om ni hinner så prova ännu fler kommandon. Ett speciellt trevligt och användbart kommando är M % (query-replace). Det används för att byta ut en text mot en annan. Efter labben bör ni öva mer på Emacs på egen hand. Observera att Unixhäftets allra sista sida innehåller en Emacs-lathund. Tag med Unix-häftet till alla kursens labtillfällen! 8

9 Redovisning (frivillig) För er som vill kontrollera att ni lärt er det som avses. Besvara frågorna nedan och skriv svar i rutorna, visa för er lärare! Vilket kommando används för att få en lista på filer m.m. i den aktuella katalogen? Vilken flagga (väljare) ska man ge kommandot för att ur listan kunna utläsa vilka som är vanliga filer, underkataloger, symboliska länkar m.m.? Vilken flagga gör att man får se filens storlek, tidpunkt för när den skapades m.m.? Hur byter man namn på filen Annasfil till UnixRedovisning.txt? Studera igen exemplet på sidorna 25 26 i Unix-häftet. Rita en bild över den del av filträdet som exemplet berör. Katalogen /info/kdd-f97/exempel ska inte vara med utan låt den katalog som är ovanför den man står på när exemplet börjar vara rot i er trädbild. Symboliska länkar ska markeras på något sätt. Hur gör man enklast i Emacs för att sudda en (lång) rad? Prova att det fungerar innan ni skriver svaret! Beskriv hur man gör i Emacs för att hitta den sista förekomsten av ordet mobiltelefon i den text man jobbar med. Flera sätt finns. 9

Moment 2: Skriv och provkör en Java-applet Som allra första programmeringsövning ska ni få skriva (av) en enkel Java-applet som bara ritar en oval och ett streck på skärmen. Vi ska noga gå igenom hur man går tillväga för att köra programmet och bryr oss till att börja med inte om programmets innehåll. Därefter ska ni göra flera olika ändringar i programmet, köra det efter varje ändring och helst förstå vilken betydelse ändringarna har. Filer och kataloger Det första man bör göra när man ska skriva ett nytt program är att skapa en ny filkatalog. Alla filer som har att göra med programmet bör placeras i en egen filkatalog. Välj ett namn på katalogen som gör att du enkelt känner igen programmet, t.ex. flaggor Det första riktiga programmet ni ska skriva kommer att handla om flaggor och det går bra att använda detta första introduktionsprogram som ett skelett att bygga vidare på när ni ska skriva flaggprogrammet. I katalogen kommer vi så småningom att ha tre typer av filer:.java.class.html Detta är textfiler som innehåller java-program, eller delar av program. Du skapar själv dessa filer med hjälp av Emacs (textredigeraren) och skriver in programmen i textform. I denna laboration kommer du att ha en sådan fil: Flaggor.java. Detta är filer som innehåller en kodad form av programmet som används när programmet ska köras. Du behöver inte göra någonting med dessa filer (utom möjligen att städa bort dem när du är klar). I denna laboration kommer det så småningom att skapas en sådan fil: Flaggor.class. När programmet är en applet måste det startas från en WWW-sida. Denna fil innehåller en minimal WWW-sida som vi bara använder för att kunna provköra programmet. I vårt fall kommer denna fil att heta Flaggor.html. Lägg märke till att vi använder stor begynnelsebokstav i ordet Flaggor ifilnamnen. Detta beror på att Flaggor är namnet på en klass i programmet och man skriver alltid klassnamn med stor begynnelsebokstav. Skriv HTML-filen Skapa med hjälp av Emacs filen Flaggor.html med följande innehåll: <APPLET code="flaggor.class" width=300 height=350> </APPLET> Detta betyder att programmet Flaggor.class är en applet som ska synas i ett fönster som är 300 bildpunkter brett och 350 högt. 10

Skriv Java-filen Skapa filen Flaggor.java med följande innehåll: import java.awt.*; import java.applet.*; public class Flaggor extends Applet { } public void paint(graphics g) { g.drawline(100, 250, 200, 100); g.drawoval(100, 100, 100, 150); } Detta är ett litet Java-program som ritar en figur bestående av en linje och en oval. Kompilera och provkör programmet Innan du kan köra programmet du just skrivit måste det kompileras. Kompileringen innebär att programmet översätts till ett internformat (Java byte code) som snabbt kan tolkas när programmet kör. Kompileringen görs genom att man ger kommandot: javac Flaggor.java Om kompileringen lyckades så har du nu fått en fil med namnet Flaggor.class som innehåller programmet i det interna formatet. Vi är nu redo för att provköra programmet. Vårt program är en applet och vi kör det därför med hjälp av kommandot: appletviewer Flaggor.html Har du nu gjort allting rätt så ska det dyka upp ett nytt fönster med titeln AppletViewer: Flaggor.class på skärmen. Första gången du kör kan det tänkas att du får upp ett fönster med licensvillkoren för Java-systemet JDK (Java Development Kit). Du måste då bekräfta att du läst dessa innan du kan gå vidare. När din applet väl har startat ska linjen och ovalen synas i dess fönster. Det finns också en meny med namnet Applet som du framförallt använder för att avsluta provkörningen (menyalternativet Quit längst ned). 11

Ändra i programmet Prova att göra några enkla ändringar i programmet och kör den modifierade versionen. Ändra först parametrarna vid anropen av drawline och drawoval och se att figuren ändras så som ni tänkt er. Lägg gärna till fler anrop av metoderna för att göra en lite mer komplicerad figur. En annan bakgrundsfärg i appleten får man genom att anropa metoden setbackground(color.blue); före anropen av drawline och drawoval. På sidan 26 i JFS (boken Java for Students) kan du se vilka färger som finns tillgängliga. Med hjälp av metoden g.setcolor(color.white); ändrar man färg på pennan som används att rita och måla med. På sidorna 24 29 i JFS beskrivs fler enkla grafikmetoder att prova. Inför något fel i programmet för att se vad som händer. När får du motsvarande felmeddelande: när du skriver felet, sparar programtexten, kompilerar eller kör programmet? Förstår du vad felmeddelandet betyder? Prova gärna med några olika typer av fel, t.ex. felstavningar, konstiga tecken, fel ordning på rader. Öva på variabler och uttryck Låt programmet göra några enkla beräkningar, t.ex: Konstanterna (talen 100, 250,...) som används som parametrar till drawline och drawoval kan ersättas med beräkningsuttryck. Ersätt konstanterna med enkla uttryck som innehåller aritmetiska operationer (addition, subtraktion, o.s.v.). Använd din fantasi! Definiera en lokal variabel genom att lägga till raden: int k = 47; precis före raderna med drawline och drawoval. Du ska nu kunna använda namnet k i uttrycken också. Låt ovalen ha bredden k och höjden 2*k. Ersätt även talet 47 ovan med ett beräkningsuttryck. Mera fantasi... Parametrarna till drawline och drawoval måste vara heltal (typen int). De anger position på skärmen i antal pixels. Om beräkningsuttrycket t.ex. innehåller något decimaltal, t.ex. 3.14 får man ett felmeddelande. Prova! 12

Moment 3: Flaggor Detta moment skall ge fortsatt övning på att skriva och köra applets med enkel grafik. Ni skall också lära er hur man skriver egna metoder och anropar (använder) dem. Ni skall redovisa tre program, ett från vardera uppgifterna 2, 3och 4. Uppgift 1 Skriv en applet som ritar en flagga med ett kors mot en bakgrund, t.ex. den svenska, danska eller finska. Utgå från introduktionsprogrammet i moment 2 och ändra i paint-metoden så att en flagga ritas. Flaggan ritas enklast som tre stycken fyllda rektanglar, alltså tre anrop av metoden fillrect. Först ritas en stor rektangel med bottenfärgen och sedan två smala rektanglar ovanpå i korsets färg. Flaggan ska ha de proportioner som figuren på nästa sida visar men bör skalas upp så den blir större än 10 16 pixels. Programmet kompileras (med javac) och körs (med appletviewer) precis som i moment 1. Uppgift 2 Skriv en metod för att rita samma flagga som i uppgift 1 men flaggans position ska kunna varieras. Metodens huvud kan se ut så här: private void drawflag(graphics g, int xpos, int ypos) Låt nu programmet rita tre flaggor i olika positioner. Detta görs genom tre anrop av drawflag från paint-metoden. Uppgift 3 Tag en kopia av appleten i uppgift 2 och utvidga metoden drawflag så att även flaggans färger ges som parametrar: private void drawflag(graphics g, int xpos, int ypos, Color bgcolor, Color crosscolor) Nu kan metoden drawflag användas för att rita alla flaggor med detta mönster, den svenska, finska, och danska flaggan (och den skånska) eller fantasiflaggor. Flaggorna kan ges önskad position genom parametrarna xpos och ypos. Låt appleten rita minst tre olika flaggor! Uppgift 4 Skriv en annan metod (ändra inte drawflag) som ritar en flagga med tvåfärgat kors som den norska flaggan. Denna metod behöver tre färgparametrar. Flaggans position ska vara parametrar även här. Proportionerna hos den norska flaggan visas i figuren på nästa sida. Låt nu appleten rita de norska, isländska och färöiska flaggorna. Färgerna hos den norska är (utifrån och in) röd, vit, blå. Den isländska har blå, vit, röd och den färöiska har färgerna vit, grågrön och röd. Den grågröna färgen fås t.ex. genom new Color(80, 110, 135) Låt nu appleten skriva ut alla sex flaggorna: svenska, danska, finska, norska, isländska och färöiska. När du är klar hit, visa för en lärare och be om en signatur! 13

5 2 9 4 2 4 6 1 2 1 12 6 1 2 1 6 Figur 1: De angivna värdena är proportioner och inte absoluta pixelvärden. Multiplicera med något tal för att få lagom storlek! Frivillig uppgift Skriv ut landets namn under varje flagga. Använd metoden g.drawstring.kortast program får man om namnet också är parameter till flaggritarmetoderna. 14

Moment 4: Färgblandning Detta är det första programmet där ni själva ska programmera hur man tar hand om händelser (events). De händelser som är aktuella här är användarens inställningar av rullister (scrollbars). Uppgift 1 En godtycklig färg i java erhålls genom att man skapar ett objekt av typen Color med satsen new Color(r, g, b) där r, g, b är heltal mellan 0 och 255 som anger hur mycket rött, grönt resp. blått färgen ska innehålla. (0, 0, 0) betyder svart och (255, 255, 255) betyder vitt. Färgobjektet kan användas för att välja aktuell pennfärg när man ritar eller färglägger eller bakgrundsfärg hos en grafisk komponent. Skriv en applet där användaren kan ställa in mängderna rött, grönt och blått med tre stycken rullister och samtidigt se den aktuella färgen i en cirkel under. Färgen i cirkeln ska alltså variera när man ändrar inställningarna på rullisterna. De inställda värdena på r, g och b skall skrivas ut i appletfönstret (med g.drawstring) så att användaren kan se vilka värden han/hon ställt in. Programmet ska ha samma struktur som programmet FirstEvent på sidan 65 i Java for Students men det ska ha ytterligare några funktioner. Det ska finnas tre scrollbars med inställbara värden 0.. 255. De inställda värdena måste lagras i tre variabler. En cirkel med den inställda färgen ska ritas ut genom användning de tre variablerna. Programmet FirstEvent finns på kursbiblioteket i filen /info/fovgrund03/labbar/labkurs1/firstevent.java Kopior av boksidorna där programmet FirstEvent förklaras finns också tillgängliga hos kursledaren för dem som inte har boken Java for Students. Uppgift 2 Ge färgblandarappleten en snygg bakgrundsfärg samt sätt färgerna rött, grönt och blått på de tre rullisterna. När programmet fungerar och ser snyggt ut så visa för en lärare för att få det godkänt. Frivilliga uppgifter När appletens bakgrundsfärg ligger nära den inställda färgen så syns inte cirkeln. Åtgärda detta t.ex. genom att rita ut en kontur eller byta bakgrundsfärg då färgerna är nära varandra! För dem som kan en del Java redan: Scrollbar objekten är obekvämt små. Ändra på detta t.ex. genom använda klassen MyScrollbar som finns på kursbiblioteket /info/fovgrund03/myscrollbar.java 15

Moment 5: BMI I detta moment skall ni öva på att göra ett grafiskt användargränssnitt som byggs upp av komponenterna Label, TextField och Button. Indata till programmet skall ges via TextField och utdata skall också skrivas i en TextField. Ni skall också öva på if satser. Uppgift 1 Skriv ett program som låter användaren mata in sin vikt i kg och sin längd i centimeter och räknar ut det så kallad Body Mass Index, BMI. BMI definieras vikt BMI = längd*längd där vikten anges i kg och längden i meter (Obs!, inte centimeter). Indata skall läsas från två st TextFields och utdata (BMI) skall skrivas i en tredje TextField. För att användaren lätt ska förstå var vikten respektive längden ska skrivas in så skall det till vart och ett av inmatningsfälten höra en Label som tydligt beskriver fältet. Själva beräkningen av BMI skall göras då användaren trycker på en knapp (Button). Denna knapp är den enda kompent man behöver lyssna på i det här programmet. Jämför med Fahrenheit/Celsius programmet som vi har gått igenom på en lektion! Uppgift 2 Utvidga programmet så att det inte bara skriver ut värdet av BMI utan också ifall personen är underviktig, har normalvikt, övervikt eller extrem övervikt. BMI < 18.5 betraktas som undervikt 18.5 BMI < 25 är normalvikt 25 BMI < 30 är övervikt och BMI 30 är extrem övervikt Var noga med if-satserna så att de blir så rena och enkla som möjligt. Gör inga tester i onödan! Obs! Ni behöver inte ta hänsyn till att användaren kan ge indata på fel format, t.ex. skriver vikten med bokstäver i stället för siffror, eller trycker på knappen för BMI-beräkning utan att ha fyllt i längd och vikt. Det räcker att programmet fungerar om användaren skriver längd och vikt korrekt med siffor och sedan trycker på BMI-knappen. Frivilliga uppgifter Komplettera programmet så att om någon av längd- och vikt-rutorna är tomma då man begär BMI-beräkning så får man ett vänligt meddelande om detta och programmet försöker inte göra BMI-beräkningen. BMI värdet skrivs ut med onödigt många decimaler. En eller två decimaler är lagom. Använd klassen NumberFormat för att åstadkomma detta. Komplettera programmet så att man får ett meddelande om man skrivit ett tal på ett otillåtet format. Här måste man använda sig av begreppet Exception. 16

Moment 6: Trianglar Detta är en övning på logik och if.. else - satser som är lite svårare än den i moment 5. Uppgift Skriv ett program som låter användaren mata in tre heltal som motsvarar sidorna i en triangel. Programmet skall beräkna triangelns yta samt vilken typ triangeln är: Liksidig (alla tre sidorna lika), likbent (två sidor lika), rätvinklig eller sned. Programmet ska meddela ifall de tre inmatade värdena inte kan bilda någon triangel. Detta inträffar om ett eller flera värden är negativa, eller om summan av de två kortaste sidorna är mindre än den längsta, t.ex. för värdena 1, 1 och 5. Ni får anta att värdena ges i storleksordning med kortaste sidan först. Välj grafiskt eller textbaserat gränssnitt För att ni skall kunna koncentrera er på beräkningar och logik så får ni utgå ifrån ett programskelett där användargränssnittet är gjort. Här finns det flera olika att välja på: Det kortaste programmet får man om man väljer ett textbaserat gränssnitt där triangelsidorna ges som programparametrar. Ett sådant finns i filen /info/fovgrund03/labbar/labkurs1/tri1.java Det här programmet kompileras och körs sedan genom kommandot java Tri1 <programparametrar> t.ex. så här java Tri1 3 4 5 där talen 34 5 är de parametrar man ger som indata till programmet, i vårt fall är det förstås triangelsidorna. Med dessa indata bör vi få ut att ytan är 6 och att det är en rätvinklig triangel. Om vi istället skriver java Tri1 1 2 10 bör vi få ett meddelande om att värdena inte kan vara sidor i en triangel. Vårt andra alternativ är ett textbaserat gränssnitt där programmet frågar efter varje triangelsida. /info/fovgrund03/labbar/labkurs1/tri2.java Detta program startas med java Tri2 och man får därefter frågor om sidlängderna. 17

Det sista alternativet är det grafiska gränssnittet i form av en applet. /info/fovgrund03/labbar/labkurs1/trianglar.java /info/fovgrund03/labbar/labkurs1/trianglar.html I alla programskeletten används variablerna a, b och c för triangelsidorna och då är a b c!. Utnyttja detta för att få färre tester i programmet! Börja med att kopiera det skelett ni valt till er egen katalog. Provkör! Ni får gärna prova två av dem eller alla tre förstås! Studera programmet tills ni förstår det och fyll därefter i det som fattas för att lösa uppgiften. Programskeletten inns också på kommande sidor i labanvisnignen. För beräkning av triangelns yta kan följande formler användas: s = a + b + c 2 ytan = s(s a)(s b)(s c) Börja med att testa med en if-sats om det är en triangel eller ej. Vid ej triangel ger man användaren information om detta. Fallet är triangel får sedan delas upp i de fyra delfallen liksidig, likbent, rätvinklig och sned. En rad tester av detta slag blir enklast om man testar det mest speciella först, d.v.s. liksidigheten och sedan testar likbenthet och sist rätvinklighet. Rätvinklighet testas m.h.a. Pythagoras sats. De trianglar som inte tillhör något av specialfallen är sneda. Kom ihåg att utnyttja att a b c. Frivilliga uppgifter (Alla gränssnitt) Se till att programmet klarar av att de tre sidlängderna ges i godtycklig ordning. Detta kan lösas genom att man utvidgar några av testerna eller genom att man sorterar de inmatade värdena så att a b c. (Endast gränssnitt nr 2) Utvidga programmet så att man kan behandla flera trianglar i samma körning av programmet. Se till att kodsekvensen som frågar efter sidlängder och gör beräkningar och utskrifter upprepas. Upprepning kan ske antingen tills användaren avbryter programmet med Ctrl-C eller också kan programmet, efter varje triangel, fråga om användaren vill forsätta, läsa in ett svar och låta detta styra om programmet ska avslutas eller ej. (Endast grafiskt gränssnitt) Låt programmet rita en triangel med de sidlängder användaren matat in, förutsatt att de är positiva förstås. Sidlängder som inte kan bilda triangel som t.ex. 5, 1 och 1 kan ju ritas ut. Det är lätt att förstå att det inte fungerar när man ser det ritat! 18

I programmet nedan ges triangelsidorna som programparametrar. I programmet är de tillgängliga i String-vektorn args, första parametern är args[0], andra är args[1] o.s.v. String-värdena görs om till heltal m.h.a. metoden Integer.parseInt(..). public class Tri1 { public static void main (String[] args) { int a, b, c; String typemessage, areamessage; a = Integer.parseInt(args[0]); b = Integer.parseInt(args[1]); c = Integer.parseInt(args[2]); // Här ska ni lägga in alla tester och utskrifter. // Utskrifterna görs med System.out.println(..) // som ger utskrift av text i terminalfönstret. } } Här följer det program som ställer frågor efter indata: import java.io.*; public class Tri2 { public static void main (String[] args) throws IOException { int a, b, c; String typemessage, areamessage; BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Skriv den kortaste sidan: "); a = Integer.parseInt(keyboard.readLine()); System.out.print("Skriv den mellersta sidan: "); b = Integer.parseInt(keyboard.readLine()); System.out.print("Skriv den längsta sidan: "); c = Integer.parseInt(keyboard.readLine()); } } // Här ska ni lägga in alla tester och utskrifter. // Utskrifterna görs med System.out.println(..) // som ger utskrift av text i terminalfönstret. 19

import java.awt.*; import java.applet.*; import java.awt.event.*; public class Trianglar extends Applet implements ActionListener{ private TextField input1, input2, input3; // Fält för inmatning private TextField areafield, typefield; // Fält för utmatning private int a, b, c; // Triangelsidorna public void init () { setbackground(new Color(150, 200, 150)); add(new Label("Kortaste sidan")); input1 = new TextField(5); add(input1); input1.addactionlistener(this); // Lägg rubriken i fönstret // Skapa inmatningsfält // Lägg i appletfönstret // Koppla lyssnare } add(new Label("Mellansidan")); input2 = new TextField(5); add(input2); input2.addactionlistener(this); add(new Label("Längsta sidan")); input3 = new TextField(5); add(input3); input3.addactionlistener(this); areafield = new TextField(20); add(areafield); typefield = new TextField(30); add(typefield); // Skapa utmatningsfält // Lägg i appletfönstret // När användaren tryckt return eller enter i något av // inmatningsfälten anropas actionperformed public void actionperformed (ActionEvent e) { a = Integer.parseInt(input1.getText()); b = Integer.parseInt(input2.getText()); c = Integer.parseInt(input3.getText()); String areamessage = "ingen beräkning än"; String typemessage = "ingen beräkning än"; // Lägg in satser som beräknar ytan och "beräknar" vilken // av typerna liksidig, likbent, rätvinklig eller sned som // triangeln har. Svaren läggs i areamessage och typemessage. } } areafield.settext(areamessage); typefield.settext(typemessage); 20

y x screen x y screen Moment 7: Sinuskurva Här skall vi öva på att rita en matematisk funktion i ett appletfönster. Då är det lämpligt att använda for-satsen, men en while-sats går också bra. Det blir även mer övning på att ta hand om användarens knapptryckningar. Uppgift 1 En sinuskurva kan beskrivas av följande formel y = A sin ( 2π T x + γ) där A är kurvans amplitud, d.v.s. hur hög den är. T är perioden. Ett stort värde på T ger en långsamt varierande kurva och ett litet T ger en snabbt varierande. γ är fasvinkeln. Om γ = π 2 blir det en cos-funktion. Skriv en applet som ritar en sinuskurva. Definiera fönsterstorleken i.html-filen ganska stor, åtminstone 700 400. Kurvan ska ritas ungefär mitt i fönstret. Koordinataxlar ska ritas ut. Tänk på att origo för skärmkoordinatsystemet ligger i övre vänstra hörnet av fönstret och att skärmkoordinaterna anges i heltal. Origo i det koordinatsystem där sinuskurvan ritas kan ligga ungefär i den punkt som har skärmkoordinaterna (20, 200). Se figuren! Rita ut koordinataxlarna för detta system! Ni behöver dock inte rita pilar och inte heller skriva ut någon text. Två streck räcker. Definiera variabler för A, T och γ. Låtγ =0från början och prova ut (eller tänk ut) lämpliga värden för A och T så att kurvan blir lagom stor på skärmen och minst 3perioder syns. Det ska inte behövas så många programrader för att rita kurvan. Om programmet blir långt redan i Uppgift 1 så har ni krånglat till det! Titta gärna på exemplet med parabel ritning som vi gått igenom på en lektion. Det programmet finns också på kurshemsidan. Uppgift 2 Utvidga programmet med knappar eller scrollbars för att ändra kurvans utseende. Minst två av parametrarna A, T och γ skall kunna varieras. Väljer ni knappar så behövs det två stycken för varje parameter, en för att öka och en för att minska 21

parametern. Väljer ni scrollbars så måste (kanske) en omräkning ske mellan det avlästa heltalsvärdet och ändringen av parameterns flyttalsvärde. Man skall alltså kunna se hur kurvans utseende ändras när man trycker på knappar eller drar i rullister. Om A ändras så ska kurvan växa eller krympa i höjdled, om γ ändras så skall kurvan flytta sig i sidled och om T ändras så skall man se fler eller färre perioder utritade. Frivillig uppgift Ändra på funktionen lite, t.ex. genom att multiplicera med en dämpningsfunktion e αx2. Litet (positivt) α ger svag dämpning, stort α ger snabb dämpning. Negativt α ger ingen dämpning utan motsatsen, en ökning. Även α bör kunna varieras utifrån. En annan frivillig uppgift kan förstås vara att rita en helt annat funktion med intressanta parametrar att variera. 22