Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.

Slides:



Advertisements
Liknende presentasjoner
Trykk på mus eller tastatur for neste bilde…
Advertisements

Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Tabeller av objekter Klassen ArrayList
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Filbehandling (Kapittel 8)
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Kontrollstrukturer (Kapittel 3)
Uke 8 - Mer om: Objekter, klasser og pekere
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Tabeller – Arrays Lage frekvenstabell Norske Bokstaver
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Objektorientert programmering i PHP del 2
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
Oblig4 - forklaringer Arne og Ole Christian.
Eiendomregister mars 2002 Arne Maus. import java.util.*; import inf101.*; /* Klasse med main() som starter hele programmet */ class EiendomsregisterMain.
Eiendomsregister - eksempel
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
En gang til!? .
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
Opplæring: Digital Diktering
Introduksjon til Java 5.0. Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Objektorientert programmering
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
1 Arrayer og form(ularer) (Kapittel 4). 2 Mål  Forstå assosiative og superglobale arrays  Kunne behandle webformularer (forms)  Kjenne forskjellen.
Høgskolen i Oslo Webprogrammering Filbehandling i PHP.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
Java 3 Mer om uttrykk Terminal I/O Forgreninger
Java 11 Programmering med og uten objekter: hva er forskjellen?
Andre funksjoner. Her kommer en beskrivelse av søkefunksjoner, knapper og annen funksjonalitet. 2.
INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Java 5 Litt mer om løkker Arrayer Metoder Ole Christian Lingjærde
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
INF1000 (Uke 13) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
1 Inf1000 (Uke 10) Oppgaveløsning. Hashmap Programmering med og uten objekter: hva er forskjellen? Noen generelle råd vedrørende oppgaveløsing HashMap.
Inf1000 (Uke 10) HashMap og ArrayList
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
INF1000 (Uke 11) Programmering
Kapittel 4 Skriving av klasser. 4.1 Anatomien til ein klasse Så langt har vi brukt ferdige klasser frå klassebiblioteket i Java Vi lagar objekt og brukar.
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 14.9 Ulike måter for å lese inn og skrive ut data. Kap. 3.5 mer om if – setninger Ferdige.
Repetisjon INF 1000 – våren 2007 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Anne Landro, Are Magnus Bruaset og Arild Waaler.
Iterator i Java boolean hasNext() E next() void remove()
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo

Ole Chr. Lingjærde © Institutt for informatikk4. november Organisering av veldig små programmer  I veldig små programmer (noen få linjer) med en enkelt klasse og ingen objekter av egne klasser, kan all programkode ligge i main-metoden: import easyIO.*; import java.io.*; class VeldigLiteProgram { public static void main (String [] args) { In tast = new In(); System.out.print("Gi et filnavn: "); String fnavn = tast.inLine(); if (new File(fnavn).exists()) { System.out.println("Filen fins"); } else { System.out.println("Filen fins ikke"); }

Ole Chr. Lingjærde © Institutt for informatikk4. november Organisering av alle andre programmer  I alle andre programmer bør main-metoden kun brukes til å få igang programmet. Eksempel: class MittProgram { public static void main (String [] args) { Flyreservasjon fr = new Flyreservasjon(); fr.ordreløkke(); } class Flyreservasjon { void ordreløkke() {... }

Ole Chr. Lingjærde © Institutt for informatikk4. november Variant 1  Det er mulig å slå sammen de to klassene på forrige foil til en klasse: class MittProgram { public static void main (String [] args) { MittProgram mp = new MittProgram(); mp.ordreløkke(); } void ordreløkke() {... }  Det blir en smakssak om man velger å gjøre det slik, eller slik som på forrige foil. I undervisningen vil du hovedsakelig se eksempler på den varianten som bruker to klasser.

Ole Chr. Lingjærde © Institutt for informatikk4. november Variant 2  Istedet for å lage en egen ordreløkke-metode, kan koden for ordreløkken ligge i konstruktøren: class MittProgram { public static void main (String [] args) { Flyreservasjon fr = new Flyreservasjon(); } class Flyreservasjon { Flyreservasjon() {... ordreløkken... }  Dette blir også en smakssak, men varianten ovenfor bruker konstruktøren til noe annet enn initialisering av objektvariable og er mindre gjennomsiktig/selvforklarende enn å bruke en egen ordreløkke-metode.

Ole Chr. Lingjærde © Institutt for informatikk4. november Oppsummering  Legg ikke annen programkode i main enn det som skal til for å få igang programmet (typisk: lage et objekt og kalle på en metode i dette), unntatt i bittesmå programmer.  I main kan du velge å lage et objekt av klassen som main ligger i - eller et objekt av en annen klasse. I kurset bruker vi stort sett siste variant.  Metoden som kalles fra main er typisk den som er ansvarlig for programkontrollen (f.eks. en ordreløkke), eller en del av den.  Programkontrollen kan ligge i en konstruktør eller i en annen metode (f.eks. void ordreløkke() ). I kurset gjør vi stort sett det siste.  Råd: bestem deg for hvilken organisering du foretrekker (f.eks. den på foil 3) og hold deg til den når du skriver dine egne programmer - så slipper du å bruke tid på å velge hver gang du skal lage et nytt program.

Ole Chr. Lingjærde © Institutt for informatikk4. november Lese fra fil: repetisjon  Anta at vi skal lese en fil med følgende format:  Først er det en linje med 3 overskrifter (separert av blanke tegn)  Deretter kommer det en eller flere linjer, som hver består av et heltall, et desimaltall og en tekststreng (separert av blanke tegn)  Eksempel:  Dataene som leses skal programmet ta vare på for senere formål. AntallPrisVarenavn Oppvaskkost Kaffe Pizza

Ole Chr. Lingjærde © Institutt for informatikk4. november Framgangsmåte  Den første linja er spesiell, og vi tenker oss her at den ikke er så interessant - vi ønsker bare å få lest forbi den. Det kan vi gjøre med inLine().  De andre linjene har samme format, så vi kan lage en løkke hvor hvert gjennomløp av løkken leser de tre itemene på en linje. Vi bruker da henholdsvis inInt(), inDouble() og inWord().  For å vite når filen er slutt, kan vi enten bruke endOfFile() eller lastItem(). Siden vi leser filen itemvis, er det mest naturlig å bruke lastItem(). Da får vi heller ikke problemer dersom det skulle ligge noen blanke helt på slutten av filen.  Vi hopper over detaljene.

Ole Chr. Lingjærde © Institutt for informatikk4. november import easyIO.*; class SkrivTilFil { public static void main (String [] args) { Out fil = new Out("filnavn"); fil.outln("Dette er første linje"); fil.close(); } Skrive til fil Vi må først importere pakken easyIO Vi åpner filen for skriving Her skrives en linje med tekst til filen Vi må huske å lukke filen til slutt

Ole Chr. Lingjærde © Institutt for informatikk4. november Hvilke skrivemetoder finnes? DatatypeEksempelBeskrivelse intfil.out(x); fil.out(x, 6); Skriv x Skriv x høyrejustert på 6 plasser doublefil.out(x, 2); fil.out(x, 2, 6); Skriv x med 2 desimaler Skriv x med 2 desimaler på 6 plasser charfil.out(c);Skriv c Stringfil.out(s); fil.out(s, 6); Skriv s Skriv s på 6 plasser (venstrejustert) fil.outln();Skriv en linjeskift fil.close();Lukk filen Merk: dersom antall plasser spesifiseres og det ikke er plass til det som skal skrives ut, vil det som skrives ut avsluttes med tre punktumer:...

Ole Chr. Lingjærde © Institutt for informatikk4. november Oppgave  Lag et program som:  leser en tekstfil  erstatter alle forekomster av en bestemt tekststreng s med en ny tekststreng t  skriver resultatet til en ny tekstfil

Ole Chr. Lingjærde © Institutt for informatikk4. november

Ole Chr. Lingjærde © Institutt for informatikk4. november

Ole Chr. Lingjærde © Institutt for informatikk4. november

Ole Chr. Lingjærde © Institutt for informatikk4. november HashMap  En HashMap er en form for tabell (i likhet med arrayer) som kan brukes til å holde orden på mange objekter. Med en HashMap kan man:  legge inn nye objekter  finne tilbake til et objekt som er lagt inn  fjerne et objekt som er lagt inn  løpe gjennom alle objektene i tabellen  Den viktigste forskjellen mellom array og HashMap:  I en array legger vi inn objekter i en bestemt posisjon, og vi må gå tilbake til denne posisjonen/indeksen når vi senere skal se på objektet. Indeksen er et heltall mellom 0 og length-1.  I en HashMap oppgir vi en bestemt nøkkel (vanligvis en tekststreng) når vi legger vi inn et nytt objekt, og vi oppgir denne nøkkelen når vi senere skal se på objektet. Dvs. indeksen er en tekststreng.

Ole Chr. Lingjærde © Institutt for informatikk4. november Å opprette en HashMap  I starten av programmet: import java.util.*; Dette importerer pakken java.util hvor bl.a. klassen HashMap ligger.  I klassen eller metoden som skal bruke HashMap'en: HashMap tabell = new HashMap(); Hvis tabellen skal brukes av flere metoder i en klasse, deklareres variabelen ovenfor i starten av klassen (som en objektvariabel). Hvis tabellen kun skal brukes av en enkelt metode, er det naturlig å deklarere variabelen ovenfor inni denne metoden.

Ole Chr. Lingjærde © Institutt for informatikk4. november Å legge inn et objekt i en HashMap  Et hvilket som helst objekt i Java kan legges inn i en HashMap  Når vi legger et objekt inn i HashMap'en, må vi samtidig oppgi en nøkkel (en tekststreng) som entydig identifiserer objektet.  Vi trenger denne nøkkelen dersom vi senere skal finne eller fjerne objektet i HashMap'en.  Eksempel: Person p = new Person(...); tabell.put("Karin", p); Her lager vi først et Person-objekt (med passende argumenter) og legger det deretter inn i tabellen med "Karin" som nøkkel.

Ole Chr. Lingjærde © Institutt for informatikk4. november  Dersom vi legger inn flere objekter med samme nøkkel, er det bare det sist innlagte objektet som blir liggende i tabellen (de andre overskrives): Person p1 = new Person(...); Person p2 = new Person(...); Person p3 = new Person(...); String navn = "Jens"; tabell.put(navn, p1); // p1 legges inn tabell.put(navn, p2); // p2 legges inn og p1 overskrives tabell.put(navn, p3); // p3 legges inn og p2 overskrives  Noen ganger må vi konstruere en nøkkel ut fra flere variable: String lengdegrad = "67.3"; String breddegrad = "53.3"; String posisjon = lengdegrad + ";" + breddegrad; tabell.put(posisjon, målestasjon);

Ole Chr. Lingjærde © Institutt for informatikk4. november Å hente et objekt fra en HashMap  For å hente et objekt med utgangspunkt i nøkkelen: Person p = (Person) tabell.get("Jens");  Legg merke til at vi i starten må skrive i parentes navnet på klassen som objektet tilhører - i dette tilfellet klassen Person.  Årsaken er at HashMap'en ikke holder rede på hvilken klasse objektene som legges inn har - bare at det er objekter. Når objektene hentes ut må vi derfor "minne Java på" hvilken klasse objektet var av (dette er egentlig et møte med en avansert og svært nyttig mekanisme i objektorienterte språk som kalles arv og som blir tatt opp i vårens INF1010).  Merk: å hente et objekt fra en HashMap slik som over medfører ikke at objektet fjernes fra HashMap'en.

Ole Chr. Lingjærde © Institutt for informatikk4. november Å fjerne et objekt fra en HashMap  For å fjerne et objekt med utgangspunkt i nøkkelen: tabell.remove("Jens");  Dersom det ligger et objekt i HashMap'en med den gitte nøkkelen, blir objektet fjernet og setningen ovenfor returnerer med en peker til objektet som fjernes.  Dersom det ikke ligger et objekt i HashMap'en med den gitte nøkkelen, returnerer setningen ovenfor med verdien null.

Ole Chr. Lingjærde © Institutt for informatikk4. november Å få fatt i alle objektene i en HashMap  For å få fatt i alle objektene i en HashMap på en gang, lager vi en egen oppramsing av alle objektene i HashMap'en: Iterator it = tabell.values().iterator();  Deretter kan vi se på hvert enkelt objekt i HashMap'en ved å gå i løkke: while (it.hasNext()) { Person p = (Person) it.next(); }

Ole Chr. Lingjærde © Institutt for informatikk4. november To måter å løpe gjennom en HashMap  Løpe gjennom verdiene (som på forrige foil)  Løpe gjennom nøklene Iterator it = tabell.values().iterator(); while (it.hasNext()) { Person p = (Person) it.next(); } Iterator it = tabell.keySet().iterator(); while (it.hasNext()) { String nøkkel = (String) it.next(); }

Ole Chr. Lingjærde © Institutt for informatikk4. november Metoder i HashMap MetodeEksempelBeskrivelse put tabell.put(id, obj); Legg inn objekt get (Person) tabell.get(id); Finn objekt remove tabell.remove(id); Fjern objekt containsKey if (tabell.containsKey(id)) { // gjør et eller annet } Sjekk om nøkkel finnes i tabell values Iterator it = tabell.values().iterator(); Lag oppramsing av objektene keySet Iterator it = tabell.keySet().iterator(); Lag oppramsing av nøklene

Ole Chr. Lingjærde © Institutt for informatikk4. november Skal vi bruke array eller HashMap?  Array:  kan lagre et spesifisert antall verdier eller objekter  hver tabell kan bare lagre verdier av én type  HashMap:  kan lagre et uspesifisert antall objekter  hver tabell kan lagre objekter av ulike klasser  kan sette inn og fjerne objekter i tabellen  kan gjøre oppslag ved hjelp av en nøkkel

Ole Chr. Lingjærde © Institutt for informatikk4. november Et fullstendig eksempel Vi lager et program som består av to klasser:  class TestHashMap (inneholder bl.a. main-metoden)  class Person (med objektvariablene navn og fnr) Programmet skal lage en HashMap og et objekt av klassen Person, og skal legge sistnevnte objekt inn i HashMap'en, med "Petter" som nøkkel. Deretter skal programmet - ut fra nøkkelverdien "Petter" - finne fram Person-objektet igjen i HashMap'en.

Ole Chr. Lingjærde © Institutt for informatikk4. november Et fullstendig eksempel forts. import java.util.*; class TestHashMap { public static void main (String [] args) { TestHashMap test = new TestHashMap(); } TestHashMap() { HashMap h = new HashMap(); Person p1 = new Person("Petter", " "); h.put("Petter", p1); Person p2 = (Person) h.get("Petter"); p2.skrivUt(); } class Person { String navn; String fnr; Person (String navn, String fnr) { this.navn = navn; this.fnr = fnr; } void skrivUt() { System.out.println("Navn: " + navn); System.out.println("Fnr: " + fnr); } >javac LagTabell.java >java LagTabell Navn: Petter Fnr:

Ole Chr. Lingjærde © Institutt for informatikk4. november Et større eksempel Vi skal lage et program som ved hjelp av HashMap:  først leser informasjon (= varenavn og pris) om ulike varer fra terminal, og lagrer informasjonen i en HashMap  deretter (når alle varer er innlest) går i løkke og spør om varenavn og søker i HashMapen etter varen (og skriver ut resultatet).

Ole Chr. Lingjærde © Institutt for informatikk4. november Hele programmet: skisse import java.util.*; import easyIO.*; class Vareoversikt { public static void main (String [] args) { Varelager v = new Varelager(); v.leggInnVarer(); v.søkEtterVarer(); } class Varelager { private HashMap tabell = new HashMap(); In tastatur = new In(); Out skjerm = new Out(); void leggInnVarer() {...} void søkEtterVarer() {...} } class Vare { // Data om en enkelt vare + metoder for å sette og // avlese variablenes verdier }

Ole Chr. Lingjærde © Institutt for informatikk4. november class Vare class Vare { private String varenavn; private double pris; Vare (String varenavn, double pris) { this.varenavn = varenavn; this.pris = pris; } // Merk: Metoden nedenfor blir ikke brukt og kan derfor sløyfes String fåVarenavn() {return varenavn;} double fåPris() {return pris;} }

Ole Chr. Lingjærde © Institutt for informatikk4. november Metoden leggInnVarer: skisse void leggInnVarer() { while ( ) { <Legg Vare-objektet inn i HashMap'en med varenavnet som nøkkel> }

Ole Chr. Lingjærde © Institutt for informatikk4. november Metoden leggInnVarer void leggInnVarer() { skjerm.out("Varenavn: "); String varenavn = tastatur.inWord("\n"); while (!varenavn.equals("avslutt")) { skjerm.out("Pris: "); double pris = tastatur.inDouble(); Vare v = new Vare(varenavn, pris); tabell.put(varenavn, v); skjerm.out("Varenavn: "); varenavn = tastatur.inWord("\n"); }

Ole Chr. Lingjærde © Institutt for informatikk4. november Metoden søkEtterVarer: skisse void søkEtterVarer() { while ( ) { }

Ole Chr. Lingjærde © Institutt for informatikk4. november Metoden søkEtterVarer void søkEtterVarer() { skjerm.out("Søk etter vare med navn: "); String varenavn = tastatur.inWord("\n"); while (!varenavn.equals("avslutt")) { Vare v = (Vare) tabell.get(varenavn); if (v == null) { skjerm.outln("Ukjent varenavn!"); } else { skjerm.outln("Pris: " + v.fåPris()); } System.out.print("Søk etter vare med navn: "); varenavn = tastatur.inWord("\n"); }

Ole Chr. Lingjærde © Institutt for informatikk4. november Programeksempler på nettsiden  Du finner hele programmet vi nettopp gikk gjennom på kursets nettsider, under pekeren "Programmer fra forelesninger" og videre under "Java12".  Der finner du også et enda større programeksempel som illustrerer bruk av HashMap, innlesning fra fil og skriving til fil. Dette eksemplet er laget av en av øvingslærerne (Nils Petter Wien).

Ole Chr. Lingjærde © Institutt for informatikk4. november ELIZA - den elektroniske psykiater Person : Men are all alike. ELIZA : In what way? Person : They're always bugging us about something or other. ELIZA : Can you think of a specific example? Person : Well, my boyfriend made me come here. ELIZA : Your boyfriend made you come here? Person : He says I'm depressed much of the time. ELIZA : I am sorry to hear that you are depressed. Person : It's true. I am unhappy. ELIZA : Do you think coming here will help you not to be unhappy? Person : I need some help, that much seems certain. ELIZA : What would it mean to you if you got some help? Person : Perhaps I could learn to get along with my mother. ELIZA : Tell me more about your family ELIZA: program skrevet av Joseph Weizenbaum i 1966 for studier av språklig kommunikasjon mellom mennesker og datamaskiner. Programmet imiterer en psykiater, slik som i dette eksemplet:

Ole Chr. Lingjærde © Institutt for informatikk4. november En samtalepartner Vi skal nå lage to programmer som tilsammen gjør det mulig å "snakke med maskinen", slik at hver gang maskinen gjenkjenner et ord i det vi skriver så gir den et bestemt (og tilnærmet fornuftig) svar.  Det første programmet går i løkke og ber brukeren om å oppgi et ord og et tilhørende svar, og legger dette på en fil "svar.txt".  Det andre programmet skal starte med å lese filen "svar.txt" og skal deretter gå i løkke og be brukeren skrive noe, hvoretter programmer skriver ut tilhørende svar (hvis ordet er registrert).

Ole Chr. Lingjærde © Institutt for informatikk4. november Lag programmet Test programmet

Ole Chr. Lingjærde © Institutt for informatikk4. november

Ole Chr. Lingjærde © Institutt for informatikk4. november

Ole Chr. Lingjærde © Institutt for informatikk4. november