Data Representation and Applets CSC 1051 Data Structures and Algorithms I Dr. Mary-Angela Papalaskari Department of Computing Sciences Villanova University Course website: http://www.csc.villanova.edu/~map/1051/ Some slides in this presentation are adapted from the slides accompanying Java Software Solutions by Lewis & Loftus
Data Representation Review Computers store all information digitally, using binary codes: numbers text images audio video program instructions 9278 9279 9280 9281 9282 9283 9284 9285 9286 01110100
Why Binary Numbers? Simplest way to represent digital information: Electronic circuits: high/low voltage Magnetic devices (eg hard drive): positive/negative Optical devices (eg DVD): light reflected/not reflected due to microscopic grooves A binary digit is called a bit - binary digit
A byte is a group of eight bits 01110100 a number? a letter? the red component of a pixel? a program instruction? Computing devices store & use binary codes to represent data of all kinds
Binary codes 1 bit 0 1 2 bits 00 01 10 11 Each additional bit doubles the number of possible codes 3 bits 000 001 010 011 100 101 110 111 4 bits 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Binary Codes How many codes? 1 bit? 2 bits? 3 bits? 4 bits? 5 bits? How many codes of N bits? How many bits are needed to represent 64 items? How many bits are needed to represent 80 items? How many bits are needed to represent each of the 50 states (so that each state corresponds to a unique code)?
Storage requirements examples If a code requires 5 bits, a document consisting of 4000 such codes will require a total of: 5 x 4000 = 20,000 bits how many bytes is that? If a code requires 8 bits (i.e., a byte), a document consisting of 2000 such codes will require 2000 bytes. how many bits is that? If a code requires 32 bits, a program that needs to store 2000 such codes will require bits or bytes.
Storage Capacity Every memory device has a storage capacity, indicating the number of bytes it can hold Unit Symbol Number of Bytes kilobyte KB 2 10 = 1024 megabyte MB 2 20 (over one million) gigabyte GB 2 30 (over one billion) terabyte TB 2 40 (over one trillion) petabyte PB 2 50 (a whole bunch)
What s a picture? programs represent pictures as grids of picture elements or pixels Stephanos with his eraser collection
Representing Images Bitmap 1 bit Grayscale 8 bits RGB Color 3 colors: red, green, blue 8 bits/color 24 bits
Example: Representing Pixels red=116 green=86 blue=142 y = 8 Color ( 01110100, 01010110, 10001110 ) x = 11 fff
Additive/Subtractive Color We choose 3 primary colors that can be combined to produce almost all visible colors Additive primaries - combining light Red Green Blue Subtractive primaries - combining ink, thus subtracting light Cyan Yellow Magenta
Bitmap image A 2000 by 1000 bitmap image contains Bitmap 1 bit/pixel pixels. Thus, we need bits to to represent this image, or bytes
Grayscale Image A 2000 by 1000 grayscale image contains Grayscale 8 bits/pixel pixels. Thus, we need bytes to represent this image, or bits
RGB Image A 2000 by 1000 RGB image contains pixels. RGB color 24 bits/pixel 3 bytes/pixel Thus, we need bytes to represent this image, or bits
Graphics and images in Java Images are represented as objects in Java. Color components and positions for pixels can be represented as integers (but also in other ways). Java libraries allow flexibility, providing many alternative ways of representing and processing images. We will be using the Graphics class of the awt package and Japplet from the swing
Applets A Java applet is a program that is intended to be transported over the Web and executed using a web browser An applet doesn't have a main method The type of program we have seen so far is a Java application - a stand-alone program with a main method
Example: Einstein.java //******************************************************************** // Einstein.java Author: Lewis/Loftus // // Demonstrates a basic applet. //******************************************************************** import javax.swing.japplet; import java.awt.*; public class Einstein extends JApplet { //----------------------------------------------------------------- // Draws a quotation by Albert Einstein among some shapes. //----------------------------------------------------------------- public void paint (Graphics page) { page.drawrect (50, 50, 40, 40); // square page.drawrect (60, 80, 225, 30); // rectangle page.drawoval (75, 65, 20, 20); // circle page.drawline (35, 60, 100, 120); // line } } page.drawstring ("Out of clutter, find simplicity.", 110, 70); page.drawstring ("-- Albert Einstein", 130, 100);
//******************************************************************** // Einstein.java Author: Lewis/Loftus // // Demonstrates a basic applet. //******************************************************************** import javax.swing.japplet; import java.awt.*; public class Einstein extends JApplet { //----------------------------------------------------------------- // Draws a quotation by Albert Einstein among some shapes. //----------------------------------------------------------------- public void paint (Graphics page) { page.drawrect (50, 50, 40, 40); // square page.drawrect (60, 80, 225, 30); // rectangle page.drawoval (75, 65, 20, 20); // circle page.drawline (35, 60, 100, 120); // line } } page.drawstring ("Out of clutter, find simplicity.", 110, 70); page.drawstring ("-- Albert Einstein", 130, 100);
Drawing a Line 10 150 X 20 45 Y page.drawline (10, 20, 150, 45); or Start x y End x y page.drawline (150, 45, 10, 20);
Drawing a Rectangle 50 X 20 40 100 Y Start x y Width Height page.drawrect (50, 20, 100, 40);
Drawing an Oval 175 X 20 80 Y bounding rectangle 50 page.drawoval (175, 20, 50, 80);
Drawing an Arc An arc is defined by an oval, a start angle, and an arc angle:
Filled vs unfilled shapes Instead of using drawrect(), drawoval() etc, we can use fillrect(), filloval() etc We can set the color using setcolor() See Snowman.java See also Snowman applet on a webpage
//******************************************************************** // Snowman.java Author: Lewis/Loftus // // Demonstrates basic drawing methods and the use of color. //******************************************************************** import javax.swing.japplet; import java.awt.*; public class Snowman extends JApplet { //----------------------------------------------------------------- // Draws a snowman. //----------------------------------------------------------------- public void paint (Graphics page) { final int MID = 150; final int TOP = 50; continued setbackground (Color.cyan); page.setcolor (Color.blue); page.fillrect (0, 175, 300, 50); // ground page.setcolor (Color.yellow); page.filloval (-40, -40, 80, 80); // sun
continued page.setcolor (Color.white); page.filloval (MID-20, TOP, 40, 40); // head page.filloval (MID-35, TOP+35, 70, 50); // upper torso page.filloval (MID-50, TOP+80, 100, 60); // lower torso page.setcolor (Color.black); page.filloval (MID-10, TOP+10, 5, 5); page.filloval (MID+5, TOP+10, 5, 5); // left eye // right eye page.drawarc (MID-10, TOP+20, 20, 10, 190, 160); // smile } } page.drawline (MID-25, TOP+60, MID-50, TOP+40); // left arm page.drawline (MID+25, TOP+60, MID+55, TOP+60); // right arm page.drawline (MID-20, TOP+5, MID+20, TOP+5); // brim of hat page.fillrect (MID-15, TOP-20, 30, 25); // top of hat
The Java Color Class A color in a Java program is represented as an object created from the Color class The Color class also contains several predefined colors, eg: Object RGB Value Color.black Color.blue Color.cyan Color.orange Color.white Color.yellow 0, 0, 0 0, 0, 255 0, 255, 255 255, 200, 0 255, 255, 255 255, 255, 0 Using a color: Creating a new color: page.setcolor(color.blue); Color salmon = new Color(255, 140, 128); page.setcolor(salmon);
Translation of programs into machine code High-level language source code compiler 00101011 00000000 00010001 01010000 00101000 01001010 00000000 00010001 01010000 00101000 01001010 Machine code machine-dependent low-level language
Java Translation is different High-level language Java source code Java bytecode machine-independent intermediate language Java compiler Bytecode interpreter Bytecode compiler machine-dependent low-level language 00101011 00000000 Machine 00010001 01010000 code 00101000 01001010 00000000 00010001 01010000 00101000 CSC 1051 M.A. 01001010 Papalaskari, Villanova University
The HTML applet Tag An applet is embedded into an HTML file using a tag that references the bytecode file of the applet The bytecode version of the program is transported across the web and executed by a Java interpreter that is part of the browser. <html> <head> <title>the Einstein Applet</title> </head> <body> <applet code="einstein.class" width=350 height=175> </applet> </body> </html>
Numeric Primitive Data The difference between the numeric primitive types is their size and the values they can store: Type Storage Min Value Max Value byte short int long 8 bits 16 bits 32 bits 64 bits -128-32,768-2,147,483,648 < -9 x 10 18 127 32,767 2,147,483,647 > 9 x 10 18 float double 32 bits 64 bits +/- 3.4 x 10 38 with 7 significant digits +/- 1.7 x 10 308 with 15 significant digits
Characters in Java Characters, including spaces, digits, and punctuation are represented by numeric codes H i, H e a t h e r. 72 105 44 32 72 101 97 116 104 101 114 46 The ASCII (American Standard Code for Information Interchange) character set uses eight bits per character, allowing for 256 unique characters 01110100 ASCII 00000000 01110100 UNICODE The Unicode character set extends ASCII to sixteen bits per character, allowing for 65,536 unique characters.
Characters in Java A char variable stores a single character Character literals are delimited by single quotes: 'a' 'X' '7' '$' ',' '\n' Note the difference between a primitive character variable, which holds only one character, and a String object, which can hold multiple characters char grade = 'A'; char terminator = ';', separator = ' ', newline = '\n'; char letter = 't'; char next = letter++; // 'u'
Automatic type conversion Values of different types can be combined in an assignment or an expression Example: int dollars = 5; double money = dollars + 2.50; System.out.println(dollars + " dollars"); These are all examples of widening conversions, i.e, smaller data type è larger data type
Converting from one type to another Widening conversions small data type è larger one eg: int è double 32 bits è 64 bits Narrowing conversions large data type è smaller one eg: double è int 64 bits è 32 bits narrowing conversions can lose information! narrowing conversions cannot happen automatically (for example, through assignment)
Casting Casting forces a change of type, even if information is lost Can be used for both widening and narrowing conversion To cast, put the type in parentheses in front of the value to be converted: int total = 5; double result = (double) total / 2; int answer = (int) result + 4; double angle = 0; // 0 radians int x = (int)(math.cos(angle) * 300); (cast has higher precedence than arithmetic operators)
Data Conversion Widening Conversions Narrowing Conversions
How to use cast? Forcing floating point division between int expressions int qp = 35; int credits = 10; double gpa = (double) qp / credits; int qp = 35; int credits = 10; gpa should be 3.5? double gpa = (double) (qp / credits);
How to use cast? Scaling a double and converting to int double gpa = 3.2; int gpapercent = (int) (gpa / 4) * 100; gpapercent should be 80? double gpa = 3.2; int gpapercent = (int) ((gpa / 4) * 100);
char ó int Conversion A char variable is stored as its unicode representation char ó int conversion: convert between char and its unicode. e.g.: t ó 116 increment and decrement of char variables takes you up and down in alphabetical order (codes are in numeric sequence) char letter = 't'; int lettercode = letter; // 116 (code for 't ) char next = letter++; // 'u' int nextcode = next; // 117 (code for 'u ) char nextalt = (char) nextcode; // 'u // narrowing conversion - requires cast char whatsthis = (char) ('A' + 3); //??? int num = (int) (letter 'p'); //???