Computer Science Fundamentals

advertisement
Computer Science Fundamentals
A topics course in Computer Science
Topics we hope to cover
•
•
•
•
•
•
•
•
•
Data representation (especially binary and hex), arithmetic, base change
algorithms
Operating systems (including an introduction to Threads of execution)
Boolean algebra and switching functions
Combinational and flip-flop circuitry (an introduction to architecture)
Computer communication (an introduction to sockets and/or datagrams)
Theory of computation (an introduction to automata and computability)
Assembly language programming
Program translation
We’ll also learn some java programming!
Data representation
• Information in the computer is represented in base 2 (binary),
although, for convenience, base 16 is also sometimes used.
• In radix positional notation, a digit d, located in position p, in a number
base b, represents d*bp. So, the decimal value 8352 represents
8*(1000)+3*(100)+5*(10)+2*1. Similarly, the binary value 1011101
represents the value 1*64+0*32+1*16+1*8+1*4+0*2+1*1.
• Note that the powers base 2 are 1,2,4,8,16,32,… 20=1, 21=2, etc.
Make sure you are familiar with the two-powers.
You will need to memorize the values 0..15 in binary and hex
Decimal
Binary
decimal
binary
hex
8
1000
8
0
0
1
1
9
1001
9
2
10
10
1010
A
3
11
11
1011
B
4
100
12
1100
C
5
101
13
1101
D
14
1110
E
15
1111
F
6
7
110
111
Kinds of data
• There are many types of data stored in
computer memory. Some memory cells
hold instructions, some hold integers, some
hold float values, some hold char data, other
store composite data types.
Char data is stored internally using the ASCII
(or UNICODE) collating sequence
• You can find a complete ASCII table in most
computer texts.
• Exercise: In C++ or Java, print your own ASCII
table: print the int value x = 32…255 in the left
column of a table and print (char)(x) in the right
column.
• You will need to know the collating sequence
values for some characters like ‘0’, ‘1’, … also
‘a’,’b’, … and ‘A’, ‘B’, …
• Exercise: write these values in binary.
Int data
• Integers may be stored internally in one of
several formats:
• BCD (binary coded decimal) often used in
spreadsheet programs
• Unsigned int: a positive binary value
• Signed int: positive or negative value
BCD
• BCD allocates 4 bits (a nibble) of binary
storage for each decimal digit to be
represented.
• Example: 598 in decimal will require
3digits*4bits each =12 bits. In BCD it
looks like this: 010110011000
• Practice converting a few decimals to BCD
Unsigned ints
• In unsigned (positive) representations, all bits are
used to indicate the value.
• In 4 bits of binary, you can represent decimal
values 0,…,15. (see table a few slides back.)
What values could be represented in 5 bits? In 8
bits? In 16 bits?
• What is the general rule?
• Represent values 0, 48, 65, 97, and 127 in 8 bits.
Example: 48 decimal is 00110000 in 8 binary bits.
• 8 bits is called a byte.
Quick conversion between bases:
From base b to decimal
• To convert from any base to decimal, use Horner’s
algorithm for polynomial evaluation. A number in base b
can be regarded as a polynomial p in the variable b. Let
P(b)= anbn + a n-1 b n-1+…+a1b1+a0b0
• This would be written as the series of (coefficient) digits.
For example, the base 6 value 32501 represents
3*(64)+2*(63)+5*(62)+0*(61)+1*(60)
• Using nested multiplication we can rewrite this without
needing to compute exponentials of the base:
((((3*6)+2)*6+5)*6+0)*6+1
Base b to decimal via Horner
• If a value in a base b is entered as a String in a TextField
named input, and the base is entered in a TextField called
basefield, we could use the following Java code to do the
conversion:
•
•
•
•
•
•
•
String value;
int b, answer;
answer=0;
b=Integer.parseInt(basefield.getText());
value=input.getText();
for(int j=0;j<value.length();j++)
answer = answer*base+ (int) (value.charAt(j)-48);
Remarks on this code & exercises
• Note that the length of a String in Java can be obtained
using the class method length(). The String method
charAt(p) returns the char in position of a String. The
TextField method getText() returns the String entered into
a TextField.
• For which bases would the java code fragment not provide
the correct answer? Why?
• Fix this problem.
• Complete the JApplet. Write a JApplet which provides
labels and textfields for a base, a value and an answer and
performs the conversion from base b to base 10.
Converting from decimal to other bases
• In determining what a decimal value would look like if
represented in another base (b), we need to figure out what
digit in base b goes in each position of the representation.
• Suppose n=295 and b=2, ie., we are trying to convert to
binary. The 1s place will have a 1 in it since 295 is odd.
• 295 (10) == ???..??1(2)
• But how many other bits are there, and what are each of
their values? Since positions in the binary representation
indicate powers of two, having figured out the ones place
means we have only half of n (295/2= 147) left to
represent.
Example: convert 295 decimal to binary
•
•
•
295 is odd…least significant bit is a 1: 295(10) = ???..?1(2)
295/2= 147. Since 147 is odd, 2s bit is also a 1: 295(10) = ???..?11(2)
147/2 =73. Since this is odd, next bit is also a 1: 295(10) = ???..111(2)
•
73/2=36. Even, so next bit is a zero: 295(10) = ???..0111(2)
•
36/2=18, which is even. 295(10) = ???…00111(2)
•
18/2=9, odd. 295(10) = ???100111(2)
•
9/2=4 even. ??0100111(2)
•
4/2=2 even. ?00100111(2)
•
•
2/2=1 0dd. 100100111(2)
½=0 stop.
Decimal to any other base
• Convert from decimal to any base using the
remainder/division algorithm described previously. Each
remainder operation generates one digit of the answer.
Then divide the number by the base and continue.
• String answer=””;
• int base =Integer.parseInt(basefield.getText());
• int value = Integer.parseInt(input.getText());
• while (value!=0){
• answer= value%base+answer;
• value/=base;}
Remarks & Exercises
• Note, we use the static Integer method parseInt() to convert a String to
an int value.
• For what input values would this Java code not work properly? Why?
• Can you fix this problem to convert decimal values into values in any
other base?
• Write the JApplet which would provide labels, textfields and buttons
enabling the user to enter a decimal int and a new base value and
convert the decimal int to the new base.
• Practice doing these conversions by hand.
Base conversions: base b to base bn
• If you are converting between bases where one base is a power of the
other, like binary to hex, or binary to octal, or base 3 to base 9 then the
conversion may be done very easily. n digits of base b will be needed
for each 1 digit of base bn .
• Consider converting A6E9 in base 16 to binary. Each hex digit will
generate 4 binary bits. If you have not memorized your hex digits yet,
this is a good time to start. In decimal A is 10, B is 11, C is 12, …F is
15. So A= 1010(2), etc.
• A6E9 (16) = 1010011011101001 (2)
• Convert this number (right hand side above) to base 8 and base 4.
• Convert the base 9 value 783361 to base 3.
An introduction to Java
• Java syntax is the same as C++. In other words, an assignment
statement, an if, a while, or a for statement in Java looks the same as in
C++.
• Java class methods are called, like in C++, using the dot ‘.’ operator:
• ClassInstance.methodName(parameters);
• To get a String which a user has entered into a TextField named input
we might use the code:
• String value= input.getText();//getText is a TextField method
• Java methods (functions) have return types, parameters, and their
definitions are enclosed in a block {}, like in C++ programming.
Prototypes are not used in Java.
An introduction to Java
•
•
•
•
•
•
•
•
•
•
Java provides components (classes) buttons, textfields, and labels, among
many others. These three are called JTextField, JLabel, and JButton in Java
1.2 and higher. These classes must be instantiated with “new”. Example:
JButton b=new JButton(“press me”);
In a small program, declarations are typically global (not inside a method) and
data allocation occurs in the JApplet method init(). The init method is
executed when a browser loads an applet.
All java applets and applications must consist of an outer class:
//sample Java JApplet
import javax.swing.*; //contains Java2 classes
public class OuterClass extends JApplet
{//open block
//methods, declarations go in here
}//close outer block
JApplet with JLabel, JTextField and JButton
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
import javax.swing.*;
public class OuterClass extends JApplet
{//global applet declarations typically go here:
public JLabel label;
public JTextField text;
public JButton button;
public void init(){//first method browser will execute
Container c=getContentPane();//get the panel for this applet
c.setLayout(new FlowLayout());//one sort of layout
button=new JButton(“press me”);
label =new JLabel (“enter value”);
text=new JTextField(20);
c.add(label);//components appear in the order they were added to the panel
c.add(text);
c.add(button);
}//end init
}//end applet
JApplet structure
• Note that imports appear the top of a java Applet. These are like
includes in C++.
• Applets may have many user defined methods.
• They may also override the Applet methods init(), paint(), start(),
stop(), and many others.
• A Java applet or an application must consist of an outer class (with a
block) and any data fields, and methods (with their blocks) defined
inside the outer block.
Applet deployment
•
1.
2.
3.
4.
We must perform a number of steps in order to deploy an applet to our
webspace so a visitor there could run it.
Type the code into an editor or IDE
Compile the .java file. This process will check syntax. If it is successful, a
.class file will be created which has the same name as the original java
source file. Ie. Prog.java when compiled with generate a file called
prog.class. Create an appropriate html file to point a browser to your class
file.
Check things out on your desktop by running the applet in appletviewer.
Use FTP to send appropriate html and class files to your webspace
Using an editor
Type the java source code into an editor or IDE (integrated development
environment like JBuilder) and save it as a .java file.
The filename must be the same as the outerclass name.
We will use TextPad, a shareware program, as our editing environment, although
you can also use the Borland C++ editor or Word. (If you use MS Word,
make sure the file is saved as ASCII text format and has the extension .java)
TextPad can be downloaded on your own computer. It is produced by Helios.com
TextPad has some features of an IDE: you can compile and run java applets and
applications from TextPad.
TextPad is available in the campus labs.
Compile the .java file.
•
This process will check syntax. If it is successful, a .class file will be created which
has the same name as the original java source file. Ie. Prog.java when compiled with
generate a file called Prog.class.
Java is case sensitive.
•
Compile in TextPad by selecting compile from the tools menu.
•
•
Alternative. If you’ve downloaded JDK1.3.X onto your own computer, you have
java, the java compiler as part of the kit. Open a DOS window (run
command.com)and navigate to your jdk bin directory where you should have saved
your .java file. At the prompt, type: java Prog.java
This will create a file called Prog.class.
A class file is not an executable, it contains portable byte-code. It requires a java
interpreter (named java) to be executed.
Create an appropriate html file to point a browser to
your class file
•
•
•
•
•
•
Sample html:
<html>
<applet code =”Prog.class” height=300 width=500>
</applet>
</html>
This must be typed into a file and saved with the .html extension. You
could call this file Prog.html to make it easier to remember which
applet it pointed to.
A possible problem with the html and current
browser versions (IE & Netscape)
• Depending on what browser you use, and its version, it may require a
plugin to run java2. The html file will then need to be modified to tell
the browser to go load the plug in. Campus labs have the plugin
already downloaded.
• There should also be a java program called HTMLConverter you can
use to convert the html file we created into a more complicated one
that tells the browser it needs to load a plugin to run the applet.
• My class page has examples of this converted html file format – you
can cut and paste from the examples there to create a new html.
• See class notes about this topic.
Check things out on your desktop by running the
applet in appletviewer
• If you can get into DOS (on your own computer) and have
downloaded the jdk you can use the simple html file format I presented
earlier to check whether your applet works now.
• Assuming you have an applet called Prog.java, a class file named
Prog.class and an html file named Prog.html, navigate to the bin
directory and type: appletviewer Prog.html
• appletviewer is a program in the jdk which will run your applet as a
browser would, so you can check if it works ok.
• Textpad is also configured to run appletviewer in the labs. If you’ve
created an html file for your applet, select appletviewer from the
textpad tool menu. You may need to have saved these files in
particular directories, like the java/bin directory, for this to work
properly in the labs. See class notes on this.
Use FTP to send appropriate html and class files to
your webspace
• I have a screen shot of how to configure your WinFTP session to ship
files to your webspace on our class pages.
• Make sure to send .class files as type binary. Later, you’ll use binary
type for jpg and wav files also.
• HTML can be sent as ascii.
• Type your applet url into the browser to go visit your applet. It will be
something like
• http://www.webserver2/students/smitxy87/Prog.html
An applet with a listener
• Applets are event-driven programs. This means things happen when
the user click buttons, moves the mouse, or enters values into fields.
• It is up to the programmer to insure the applet listens for button clicks
(or whatever) and does what needs to be done if a button is clicked.
• This is done by means of listeners in Java. There are many (!)
listeners. One of the simplest is the one which checks if values have
been entered into textfields or if a button is clicked. It is called
ActionListener.
• Listeners are types of interfaces. A java applet or application program
may use many interfaces.
Implementing the ActionListener
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
import javax.swing.*;
public class OuterClass extends Japplet implements ActionListener
{//global applet declarations typically go here:
public JLabel label;
public JTextField text1, text2;
public JButton button;
public void init(){//first method browser will execute
Container c=getContentPane();//get the panel for this applet
c.setLayout(new FlowLayout());//one sort of layout
button=new JButton(“press me”);
label =new JLabel (“enter value”);
text1=new JTextField(20);
Text2=new JTextField(20);
c.add(label);//components appear in the order they were added to the panel
c.add(text1); c.add(text2);
button.addActionListener(this);//button is listening now for user to press it
c.add(button);
}//end init
//see next slide!
ActionListener interface requires the programmer to
define the method actionPerformed(…)
• The above applet is not complete. It is missing the outer close block,
but even so, will not compile without the definition of the method
actionPerformed which tells the aplet what to do if the button is
pressed.
•
•
•
•
•
•
•
public void actionPerformed(ActionEvent x){
int z= Integer.parseInt(text1.getText());//get int entered by user
int p =2*z;// do elaborate computations
text2.setText(“”+p);
//when button is clicked, 2*input value is calculated and displayed
}//end actionPerformed
}//end outer class
Download