Program brusautomat Eksempel på en tilstandsmaskin



Like dokumenter
Tilstandsmaskiner kalles på engelsk for Finite State Machines.

Løsning av temperatur- regulering med USB Lager et C#-program for å teste. Se prosjekt NI_DAQ_Control_1

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Program delegate. Lage et nytt prosjekt i Visual Studio

OPPGAVE 5b og 8b Java Kode

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden

INF Seminaroppgaver til uke 3

Socket og ServerSocket

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

Kontinuasjonseksamen

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

Repetisjon. INF gruppe 13

INF1000 Metoder. Marit Nybakken 16. februar 2004

E K S A M E N. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst.

Kontinuasjonseksamen

Løse reelle problemer

Kapittel 7: Mer om arv

GJØVIK INGENIØRHØGSKOLE

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Program socket server

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

7-Segment Display Nybegynner Arduino Lærerveiledning

import java.util.arraylist;

Utførelse av programmer, metoder og synlighet av variabler i JSP

Grafisk Brukergrensesnitt

Kontinuasjonseksamen

INF1010 Arv. Marit Nybakken 2. februar 2004

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

7-Segment Display. Introduksjon. Steg 1: Finn frem utstyr. Til denne oppgaven trenger du. Skrevet av: Martin Ertsås & Morten Minde Neergaard

1. Programmeringsmiljøet. Grunnleggende syntaks

Klasser. Webprogrammering høsten Objekter. Eksempelklasser og -objekter. 2 of :56. 1 of :56

Eksamen i Internetteknologi Fagkode: ITE1526

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Om Windows programmering

INF1010 Binære søketrær ++

Spesifikasjon av Lag emne

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Kontinuasjonseksamen

Console::Write("Velg en prosess ved å trykke et nummer"); Console::Write("1. Start Kalkulatoren"); Console::Write("2.

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

KONTINUASJONSEKSAMEN

Kapittel 5: Objektkommunikasjon

UNIVERSITETET I OSLO

LO191D/LC191D Videregående programmering

Introduksjon til objektorientert programmering

Løse reelle problemer

INF1010 MVC i tekstbaserte programmer

Løsningsforslag for eksamensoppgave, våren 2004

Sortering med tråder - Quicksort

2 Grafisk grensesnitt 1

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

1. NetBeans IDE: Lage en enkel mobilapplikasjon

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

INF 1010, vår 2005 Løsningsforslag uke 11

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

GUI («Graphical User Interface») del 2

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

UNIVERSITETET I OSLO

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

INF2100. Oppgaver 23. og 24. september 2010

INF1400. Tilstandsmaskin

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

BOKMÅL Side 1 av 12. Fakultet for informasjonsteknologi,

Kapittel 6: Arv. Redigert av: Khalid Azim Mughal

Videregående programmering 6

(MVC - Model, View, Control)

IN1010 våren Repetisjon av tråder. 15. mai 2018

GUI 3 JavaFX. Mer interaksjon Hvordan gi input :l programmet. INF1010 Stein Michael Storleer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

En klasse er noe - en metode gjør noe (! / # <= (! * +!! ",-' %. "- -/ %.!#) )! " 0'%! * *$! "1-)) '' % '. 22!'( 7/ /! * 2 2! "*"% 8"%% 9 - -!

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

Programinnstillinger. KAPITTEL 5 Innstillinger

HØGSKOLEN I SØR-TRØNDELAG

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

INF1010. Grensesnittet Comparable<T>

Kontinuasjonseksamen

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

2. ØVING I WINDOWS FRA CHRISTIAN ANDOLO

For å bruke NILS-Mobil trenger man følgende utstyr og tilkoblinger.

Transkript:

Program brusautomat Eksempel på en tilstandsmaskin Dette er et programeksempel i C# som gir et eksempel på en tilstandsmaskin. Programmet simulerer en brusautomat hvor man kan kjøpe to typer brus. Man kan legges på 5 kr og 10 kr. Det er også mulig å angre etter at det er lagt på penger. Brukergrensesnittet til programmet Om programmet Programmet er laget slik at hver tilstand har en egen metode. I hver tilstandmetode er det en switch som skiller mellom mulige hendelser. Tilstandmetodene kalles av events dvs. når man trykker på knappene på formen. For å holde orden på tilstander og hendelser brukes enumerasjon (enum class). enum knytter tallverdier til tekst og man kan arbeide med tekst liksom med tallverdier. Noen objekter i programmet textbox_meldinger textbox_kr button_fem_kr button_ti_kr button_angre radiobutton1 radiobutton2 En tekstboks nederst for meldinger til bruker En tekstboks hvor antall kroner lagt på skrives ut En knapp man trykker på for å putte på 5 kr En knapp man trykker på for å putte på 10 kr En knapp man trykker på for å få pengene igjen En radioknapp for å velge Coca Cola En radioknapp for å velge Fanta

Koden i programmet using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Brusautomat public partial class Form1 : Form public Form1() InitializeComponent(); initialiser(); enum HENDELSER Ingen, Kr5, Kr10, Angre; enum TILSTANDER Klar, Kr5, Kr10; enum AKSJONER Ingen, LeverBrus, LeverBrusOg5kr, PengerTilbake; HENDELSER Hendelse; TILSTANDER Tilstand; AKSJONER Aksjon; void initialiser() // Kalles i konstruktøren Form1 Hendelse = HENDELSER.Ingen; void tilstand_klar() // Ingen penger er lagt på // Denne skriver metodenavnet i Output Window (hvis Debug) System.Diagnostics.Trace.WriteLine("tilstand_Klar()"); Tilstand = TILSTANDER.Kr5; this.textbox_kr.text = "5 kr"; Tilstand = TILSTANDER.Kr10; this.textbox_kr.text = "10 kr";

// Ikke noe er lagt på void tilstand_kr5() // 5 kr er lagt på fra før Tilstand = TILSTANDER.Kr10; this.textbox_kr.text = "10 kr"; Aksjon = AKSJONER.LeverBrus; // Har nå betalt 15 kr Aksjon = AKSJONER.PengerTilbake; void tilstand_kr10() // 10 kr er lagt på fra før Aksjon = AKSJONER.LeverBrus; // Har nå betalt 15 kr Aksjon = AKSJONER.LeverBrusOg5kr;// Har nå betalt 20 kr Aksjon = AKSJONER.PengerTilbake;

void nytilstand() // Denne metoden kaller rett tilstandsmetode switch (Tilstand) case TILSTANDER.Klar: tilstand_klar(); case TILSTANDER.Kr5: tilstand_kr5(); case TILSTANDER.Kr10: tilstand_kr10(); void utfoer_aksjon() // Denne metoden utfører en aksjon switch (Aksjon) case AKSJONER.Ingen: return; case AKSJONER.LeverBrus: if (this.radiobutton1.checked) "Værsågod, en Coca Cola"; else "Værsågod, en Fanta"; case AKSJONER.LeverBrusOg5kr: if (this.radiobutton1.checked) "Værsågod, en Coca Cola og 5 kr tilbake"; else "Værsågod, en Fanta og 5 kr tilbake"; case AKSJONER.PengerTilbake: "Værsågod, her er pengene tilbake";

private void button_fem_kr_click(object sender, EventArgs e) // Denne metoden kalles når 5 kr knappen trykkes "La på 5 kroner"; Hendelse = HENDELSER.Kr5; private void button_ti_kr_click(object sender, EventArgs e) // Denne metoden kalles når 10 kr knappen trykkes "La på 10 kroner"; Hendelse = HENDELSER.Kr10; private void button_angre_click(object sender, EventArgs e) // Denne metoden kalles når Angre knappen trykkes Hendelse = HENDELSER.Angre;