Skiv- minne
description
Transcript of Skiv- minne
1
Stefan Möller
Skiv-minne
CD-läsare
Diskett-läsare
Sekundär-minnes-enheter (SM)
Central-enhet
PM CPUBIOS
2
Stefan Möller
Primär-minne (PM) Processor (CPU)
11001010 00101101 10101100 101011010
00101101 10101100 10101101 101010104
10101011 01101101 10011100 110100118
00101101 10101100 10101101 1101000112
11001010 00101101 10101100 1010110116
01011100 01111001 00110100 1110100120
10011100 10101011 10101100 1010110124
11001010 00101101 10101100 0111000128
Vektor av minnesceller8 bitar = 1 byte, 4 byte = 1 ordt ex 256 MB (megabyte - miljoner byte)program-instruktioner & -data
R1
R2
Ett antal register ...
Styr-enhet
Aritmetiskenhet
3
Stefan Möller
Olika nivåer av program
Maskinkod (binär kod)Ett antal (t ex 32) ettor/nollor100111001001111100011010Krångligt att skriva direkt
AssemblerkodMnemoniska namn för instruktionerAdd #25 to R3Ett-till-ett matchning mot maskinkodOlika instruktioner beroende på dator
HögnivåspråkMer kraftfulla instruktionerif (x!=5) x+=10;Ger 5-10 maskininstruktionerEj beroende av datorsystemT ex Pascal, C, C++, Java
4
Stefan Möller
Kod i högnivåspråk måste översättas till maskinkod.
Kompilering:
Interpretering:
Källkod ihögnivåspråk
KompilatorOlika beroendepå datorsystem
Maskinkod somkan exekveras idatorsystemet
Källkod ihögnivåspråk
InterpretatorOlika beroende på datorsystemLäser en instruktion i taget, översättertill maskinkod och exekverar
5
Stefan Möller
Programmering
Indata Program Utdata
Data kan vara av olika typ:
12 43 ”Kalle Nilsson” Bil:Volvo
73.67 ’X’ 730512 ABC 123Röd
true ”Stockholm” 7300 mil
Måste representeras i programmet.
6
Stefan Möller
Javas Primitiva Datatyper
Heltalstyper:byte 8 bitarshort 16 bitarint 32 bitarlong 64 bitar
Flyttalstyper:float 32 bitar double 64 bitar
Övriga:char Unicode 16 bitarboolean true / false
Textsträngar (INTE primitiv datatyp): String
7
Stefan Möller
Litteraler
Deklaration
Tilldelning
Utskrift
Inläsning
Selection
Iteration
8
Stefan Möller
if-satsen
if (<villkor>) <programsats>;
if (<villkor>) <programsats1>;else <programsats2>;
Nästlade if-satser
int x=8;if (x>5) System.out.println(x);
if (x<10) x++;else x--;
//Kan även skrivas så här:if (x<10) x++; else x--;
if (x>25) if (x<50) System.out.println(”Mellan 25 och 50”); else System.out.println(”50 eller större”);else System.out.println(”25 eller mindre”);
9
Stefan Möller
Villkor (booleska uttryck)
Jämförelse-operatorer: < <= > >= == !=(operanderna enkla datatyper)
Logiska operatorer: && || !(fullständigt utvärderande: & | )
String’ar jämförs INTE med dessa operatorer.
String s1=”Hej”, s2=”Hopp”;
if ( s1.equals(s2) ) ... ; //equals returnerar true om INNEHÅLLET i s1 och s2 är lika
int x = s1.compareTo(s2); //compareTo returnerar ett positivt tal om s1 > s2 //ett negativt tal om s1 < s2 samt 0 om s1 = s2
10
Stefan Möller
switch-satsen
switch (<uttryck>) { case <värde>: <programsatser> case <värde>: <programsatser> default: <programsatser>}
”Hoppar” till den case sommatchar uttrycket. Exekverarresten av programsatserna.
break-satsen bryter switchbreak;
(kan även användas på loopar)
Uttryck och värde måste vara avheltalstyp eller char
int x, tal=10;//x får ett slumpvärde
switch(x){case 1: System.out.println(tal);
case 2: case 3: System.out.println(++tal);
case 4: System.out.println(tal++);
default: System.out.println(tal);}
11
Stefan Möller
while - loopen
while (<villkor>) <programsats>;
do <programsats>;while (<villkor>);
<villkor> - booleskt uttryck<programsats> - valfri programsats
om flera satser inom { } - block
break; //bryter loopencontinue; //börja om nästa varv
villkor
sats
true
false
villkor
sats
false
true
12
Stefan Möller
for-loopen
for (<initiering> ; <villkor> ; <uppräkning>) <programsats>;
Skriv ut talen 1 - 10:
for (int x=1; x<=10; x++) System.out.println(x);
Man kan utelämna någon del:
int x=1;for ( ; x<=10; x++) System.out.println(x);
for (int y=1; y<=10; ) System.out.println(y++);
initiering
villkor
programsats
uppräkning
true
false
13
Stefan Möller
Skriv en programsnutt som skriver ut en tabell övercelsius-temperaturer & motsvarande fahrenheit-temperaturervar 10’de celsius i intevallat 10-90:
Förväntat utseende:
Celsius Fahrenheit----------------------- 10 50 20 68 30 86 40 104 50 122 60 140 70 158 80 176 90 194
System.out.println("Celsius Fahrenheit");System.out.println("-----------------------");for (int cels=10; cels<100; cels+=10){ int fahr=(int)(9.0/5.0*cels+32); System.out.println(" "+cels+" "+fahr);}
14
Stefan Möller
Operatorer
Prioritetsordning Operatorer
1 [] . (metod anrop) ++ --2 ++ -- + - ~ !3 new (cast)4 * / %5 + -6 << >> >>>7 < <= > >= instanceof8 == !=9 &10 ^11 |12 &&13 ||14 ?:15 = += -= *= /= %=
15
Stefan Möller
Flera variabler av samma sort - arrayer
Varje variabel som deklareras får ett utrymme i primärminnet.
int tal;double d;tal=43;d=7.85;
En array deklareras som <typ>[ ]
int[] arr; arr (inget utrymme finns...)
Utrymmet måste skapas, görs med newarr = new int[5];arr[0]=28; arrarr[1]=43;arr[2]=12;arr[3]=19;arr[4]=193;
43tal 7.85d
28 43 12 19 193
0 1 2 3 4
16
Stefan Möller
Array
Deklaration:int[] arr;int arr[]; //Alternativ deklarering
Skapas med newarr=new int[25]; //Alltid index från 0 och uppåt
Indexering med [<index>]arr[3]=12;
Längden kan kollas med lengthint max=arr.length; //max får värdet 25
Initiering vid deklarationint[] kvadrater={0, 1, 4, 9, 16, 25, 36};
17
Stefan Möller
Om vi vill representera mer komplexa objekt?
T ex bilar som har ett bilmärke, ett registreringsnummer, en färg samt
en mätarställning.
VolvoABC 123Röd7300
SaabXYW 987Vit3800
FiatMSQ 545Svart12900
Att ”samla ihop” flera attribut på detta sätt görs i klasser.Vi behöver alltså nu en klass Bil som skall ha attributenmärke, regnummer, färg och mätarställning.
Klasser kan innehålla mer än attribut, exempelvis konstruktorer ochmetoder.
18
Stefan Möller
Deklaration av klass Bil:
class Bil{ String märke, regnummer, färg; int mätarställning;}
Varje klass läggs lämpligen i en egen fil. Denna Bil-klass läggsalltså då på filen Bil.java
Skapa objekt
Referenser
Åtkomst
null
19
Stefan Möller
class - deklaration
class <class-namn>{
<variabel-deklarationer>
<konstruktorer>
<metoder>
<class-deklarationer>
}
Olika data som beskriverklassen, t ex märke, mätarställninghos en Bil
Anropas när ett objekt av klassenskapas (med new <classnamn>)
Olika operationer som kangöras på klassen
En klass kan ha ”inre” klasser
20
Stefan Möller
Metoder - subrutiner
<modifierare> <returtyp> <namn> (<argumentlista>){ <lokala deklarationer och programsatser>;}
modifierare anger olika egenskaper, t ex för åtkomst public, private, protected, abstract, static, final, native, synchronized
returtyp vad som returneras. Valfri datatyp, även referenser till classer eller arrayer.
argumentlista lista över eventuella indata till metoden. Om inga argument ( ).
int getInt(){...}static void skriv(int x, int y, String str){...}
Java ”letar upp” och startar metoden main vid programmets start:
public static void main(String[] args){...}
21
Stefan Möller
Argumentöverföring
Retur-värde
Överlagring
klass-metoder
instans-metoder
22
Stefan Möller
Slumptal - biblioteks-klassen Random
Det finns ett antal fördefinierade klasser i Java’s API-bibliotek.Beskrivs i API-dokumentationen:
http://java.sun.com/j2se/1.5.0/docs/api/
Klassen Random används om man vill ha slumptal. Random ligger ijava.util - delbiblioteket.
Innehåller metoder för att få slumptal, t ex:
int nextInt() returnerar ett slumpmässigt heltalint nextInt(int n) returnerar ett slumptal mellan 0 och n-1
(nextInt(100) returnerar alltså ett tal mellan 0 och 99)boolean nextBoolean() returnerar true eller falsedouble nextDouble() returnerar ett tal mellan 0.0 och 1.0
23
Stefan Möller
Ett program som skriver ut 10 slumptal mellan 1 och 100:
import java.util.*;class SlumpTest{ public static void main(String[] args){ Random slump = new Random(); for (int x=1; x<=10; x++){ int tal = slump.nextInt(100) + 1; System.out.println(tal); } }}
import-satsen kan utelämnas. Man måste då skriva:
java.util.Random slump = new java.util.Random();
Man kan skriva:
import java.util.Random;
24
Stefan Möller
Klassen Math
Ligger på java.lang - delbiblioteket. Allt som ligger i java.lang kan användas direkt, man behöver alltså INTE göra: import java.lang.*;
I Math-klassen finns ett antal statiska metoder och variabler, t ex
static double PI pi med jättemånga decimaler...
static int abs(int a) returnerar absolutbeloppet av a
static double log(double a) returnerar naturliga logaritmen av a
static double pow(double a, double b) returnerar a upphöjt till b
plus många fler... Eftersom metoderna är statiska så kan de anropas utanatt man skapar ett Math-objekt:
double dd = Math.sqrt(14);double omkrets = Math.PI * diameter;
25
Stefan Möller
Jämförelse av anrop på metoder i Random och Math:
Random slump = new Random();int tal = slump.nextInt(100);
double d = 4.876;int x = (int)Math.round(d);
nextInt är en instans-metod. Man måste alltsåskapa ett Random-objektinnan nextInt kan anropas
round är en klassmetod.static long round(double d);Kan alltså anropas viaklassnamnet