Program Design and Analysis II Professor: Jeffrey Forbes

Slides:



Advertisements
Similar presentations
Designing a Program & the Java Programming Language
Advertisements

 2005 Pearson Education, Inc. All rights reserved Introduction.
Week 2: Primitive Data Types 1.  Programming in Java  Everything goes inside a class  The main() method is the starting point for executing instructions.
1 Java Basics. 2 Compiling A “compiler” is a program that translates from one language to another Typically from easy-to-read to fast-to-run e.g. from.
Introduction to Computers and Programming Lecture 4: Mathematical Operators New York University.
COMP 14: Primitive Data and Objects May 24, 2000 Nick Vallidis.
CSE 131 Computer Science 1 Module 1: (basics of Java)
CPS 100, Fall COMPSCI 100, Fall 2011 Owen Astrachan w/ Michael Hewner
CS101: Introduction to Computer Science Slides adapted from Sedgewick and Wayne Copyright © Your First Program.
General Computer Science for Engineers CISC 106 Lecture 02 Dr. John Cavazos Computer and Information Sciences 09/03/2010.
Java: Chapter 1 Computer Systems Computer Programming II.
CompSci 100e1.1 Welcome! Program Design and Analysis II for Engineers CompSci 100E French 2231 M, W 2:50-4:05 Professor Jeff Forbes
CPS 100, Spring COMPSCI 100, Spring 2010 Owen Astrachan
The string data type String. String (in general) A string is a sequence of characters enclosed between the double quotes "..." Example: Each character.
Lecture 2 Object Oriented Programming Basics of Java Language MBY.
1.1 Your First Program Introduction to Programming in Java: An Interdisciplinary Approach · Robert Sedgewick and Kevin Wayne · Copyright © 2008 · October.
CS 11 java track: lecture 1 Administrivia need a CS cluster account cgi-bin/sysadmin/account_request.cgi need to know UNIX
Lecture 2: Classes and Objects, using Scanner and String.
CSE 131 Computer Science 1 Module 1: (basics of Java)
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
Netprog: Java Intro1 Crash Course in Java. Netprog: Java Intro2 Why Java? Network Programming in Java is very different than in C/C++ –much more language.
JAVA 0. HAFTA Algorithms FOURTH EDITION Robert Sedgewick and Kevin Wayne Princeton University.
 JAVA Compilation and Interpretation  JAVA Platform Independence  Building First JAVA Program  Escapes Sequences  Display text with printf  Data.
CPS 100, Fall COMPSCI 100, Fall 2009 Owen Astrachan
CompSci CompSci 6 Programming Design and Analysis I Dietolf (Dee) Ramm
CompSci 100E 1.1 CompSci 100E Dietolf (Dee) Ramm Robert A. Wagner
CS101: Introduction to Computer Science Slides adapted from Sedgewick and Wayne Copyright © Your First Java.
CompSci 100e1.1 Welcome! Program Design and Analysis II for Engineers CompSci 100E Soc Psy 126 W, F 2:50-4:05 Professor Jeff Forbes
CPS 100, Spring COMPSCI 100, Spring 2009 Owen Astrachan
VISUAL C++ PROGRAMMING: CONCEPTS AND PROJECTS Chapter 2A Reading, Processing and Displaying Data (Concepts)
1.2 Built-in Types of Data Introduction to Programming in Java: An Interdisciplinary Approach · Robert Sedgewick and Kevin Wayne · Copyright © 2008 · December.
An Introduction to Java – Part 1 Erin Hamalainen CS 265 Sec 001 October 20, 2010.
CS 177 Recitation Week 1 – Intro to Java. Questions?
CS0007: Introduction to Computer Programming Primitive Data Types and Arithmetic Operations.
Lecture 3: More Java Basics Michael Hsu CSULA. Recall From Lecture Two  Write a basic program in Java  The process of writing, compiling, and running.
CompSci 100 Prog Design and Analysis II
CompSci 100E cs. duke CompSci 100E Dietolf (Dee) Ramm
Information and Computer Sciences University of Hawaii, Manoa
Lecture 1b- Introduction
Week 2 - Wednesday CS 121.
Lecture 2 D&D Chapter 2 & Intro to Eclipse IDE Date.
Chapter 2 Basic Computation
Chapter No. : 1 Introduction to Java.
Building Java Programs
Lecture 2: Operations and Data Types
CompSci 100 Dietolf (Dee) Ramm
CompSci 6 Introduction to Computer Science
Primitive Data, Variables, Loops (Maybe)
An Introduction to Java – Part I
Subroutines Idea: useful code can be saved and re-used, with different data values Example: Our function to find the largest element of an array might.
CS 177 Week 15 Recitation Slides
Type Conversion, Constants, and the String Object
Building Java Programs
Building Java Programs Chapter 2
Building Java Programs
Chapter 2 Programming Basics.
CompSci 1: Principles of Computer Science Lecture 1 Course Overview
Building Java Programs
Building Java Programs
Building Java Programs
Building Java Programs
Building Java Programs
Building Java Programs
Building Java Programs
Building Java Programs Chapter 2
CS Week 2 Jim Williams, PhD.
Building Java Programs
Building Java Programs
COMPSCI 100, Spring 2008 Owen Astrachan
Presentation transcript:

Program Design and Analysis II Professor: Jeffrey Forbes Welcome! Program Design and Analysis II CompSci 100E B101 LSRC M, W 4:25-5:40 Professor: Jeffrey Forbes http://www.cs.duke.edu/courses/spring08/cps100e

What is Computer Science? What does a computer scientist do? What does a programmer do? What are the various subfields of computer science? What binds them together? What do you want to do?

What is Computer Science? What is it that distinguishes it from the separate subjects with which it is related? What is the linking thread which gathers these disparate branches into a single discipline? My answer to these questions is simple --- it is the art of programming a computer. It is the art of designing efficient and elegant methods of getting a computer to solve problems, theoretical or practical, small or large, simple or complex. C.A.R. (Tony)Hoare

Programming != Computer Science What is the nature of intelligence? How can one predict the performance of a complex system? What is the nature of human cognition? Does the natural world 'compute'? It is the interplay between such fundamental challenges and the human condition that makes computer science so interesting. The results from even the most esoteric computer science research programs often have widespread practical impact. Computer security depends upon the innovations in mathematics. Your Google search for a friend depends on state-of-the-art distributed computing systems, algorithms, and artificial intelligence. http://www.post-gazette.com/pg/pp/04186/341012.stm

Efficient design, programs, code Object-oriented design and patterns. Software design principles transcend language, but … Using the language: Java (or C++, or Python, or …), its idioms, its idiosyncracies Know data structures and algorithms. Trees, hashing, binary search, sorting, priority queues, greedy methods, graphs … Engineer, scientist: what toolkits do you bring to programming? Mathematics, design patterns, libraries --- standard and others…

Course Overview Active Lectures, Labs, Quizzes, Programs Labs based on questions given out in previous week Hands-on practice with programming Discuss answers, answer new questions, small quiz More opportunities for questions to be answered. Active Lectures based on readings, questions, programs Online quizzes used to motivate/ensure reading In-class questions used to ensure understanding Programs Theory and practice of data structures and OO programming Fun, practical, tiring, … Weekly APT programs and longer programs Exams/Tests Semester: open book/note* Final: open book/note

Tradeoffs Simple, elegant, quick, efficient: what are our goals in programming? Don’t worry about getting it right the first time. Programming, design, algorithmic, data-structural Fast programs, small programs,. Runtime, space, your time, CPU time… Time vs. space How do we decide what tradeoffs are important? Tension between generality, simplicity, elegance, …

Languages Machine languages. Natural languages. Pictures High-level programming languages. Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do. - Donald Knuth Pictures Natural language (English) Pseudo-code Specific high-level programming language Machine Language More easily expressed More precise Milk Drinkers Turn to Powder. Kids Make Nutritious Snacks. Red Tape Holds Up New Bridge. Police Squad Helps Dog Bite Victim. Local High School Dropouts Cut in Half. [ real newspaper headlines, compiled by Rich Pattis ] © Sedgewick & Wayne

Why Java? Java features. Widely used. Widely available. Embraces full set of modern abstractions. Variety of automatic checks for mistakes in programs. Java economy. Mars rover. Cell phones. Blu-ray Disc. Web servers. Medical devices. Supercomputing. … originally designed for consumer electronic devices used in 3.8 billion cell phones, pcs, secure Java cads, supercomputers, medical devices and other gadgets. enterprise solutions; "enhanced" web browsing; software on servers; embedded systems; Blu-ray DVD players http://news.com.com/McNealy+on+message+-+page+2/2008-1010_3-5759831-2.html?tag=st.next James Gosling http://java.net/jag © Sedgewick & Wayne

Why Java? Java features. Widely used. Widely available. Embraces full set of modern abstractions. Variety of automatic checks for mistakes in programs. Caveat. There are only two kinds of programming languages: those people always [gripe] about and those nobody uses. - Bjarne Stroustrup Venture capitalist John Doerr of Kleiner Perkins (May 1996 before dot com bust) I'm one of the few crazies... who believes it's very possible the Internet has been underhyped instead of overhyped... I predict over the next 90 days Java is going to be like a drug you rub over venture capitalists and they go crazy. - John Doerr © Sedgewick & Wayne

Why Java? Java features. Widely used. Widely available. Embraces full set of modern abstractions. Variety of automatic checks for mistakes in programs. Caveat. No perfect language. Our approach. Minimal subset of Java. Develop general programming skills that are applicable to: C, C++, C#, Perl, Python, Ruby, Matlab, Fortran, Fortress, … also applicable to languages not yet invented show Java foldout of entire class library for humor © Sedgewick & Wayne

A Rich Subset of the Java Language Built-In Types System Math Library int double System.out.println() Math.sin() Math.cos() long String System.out.print() Math.log() Math.exp() char boolean System.out.printf() Math.sqrt() Math.pow() Math.min() Math.max() Flow Control Parsing Math.abs() Math.PI if else Integer.parseInt() for while Double.parseDouble() Primitive Numeric Types + - * Imagine how easy Japanese class would be if you only needed to know a few dozen words and rules of grammar. Boolean Punctuation / % ++ true false { } -- > < || && ( ) <= >= == ! , ; != String Arrays Objects + "" a[i] class static length() compareTo() new public private charAt() matches() a.length toString() equals() new main() © Sedgewick & Wayne

Programming in Java Programming in Java. Create the program by typing it into a text editor, and save it as HelloWorld.java /******************************************* * Prints "Hello, World" * Everyone's first Java program. *******************************************/ public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } Note name of file must match name of class. HelloWorld.java © Sedgewick & Wayne

Programming in Java Programming in Java. Create the program by typing it into a text editor, and save it as HelloWorld.java Compile it using Eclipse or by typing at the command-line: javac HelloWorld.java This creates a Java bytecode file named: HelloWorld.class command-line % javac HelloWorld.java (or click the Save button in Eclipse) © Sedgewick & Wayne

Java Bytecode HelloWorld.class © Sedgewick & Wayne 0000000 312 376 272 276 \0 \0 \0 . \0 035 \n \0 006 \0 017 \t 0000020 \0 020 \0 021 \b \0 022 \n \0 023 \0 024 007 \0 025 007 0000040 \0 026 001 \0 006 < i n i t > 001 \0 003 ( ) 0000060 V 001 \0 004 C o d e 001 \0 017 L i n e N 0000100 u m b e r T a b l e 001 \0 004 m a i 0000120 n 001 \0 026 ( [ L j a v a / l a n g 0000140 / S t r i n g ; ) V 001 \0 \n S o u 0000160 r c e F i l e 001 \0 017 H e l l o W 0000200 o r l d . j a v a \f \0 007 \0 \b 007 \0 0000220 027 \f \0 030 \0 031 001 \0 \f H e l l o , 0000240 W o r l d 007 \0 032 \f \0 033 \0 034 001 \0 \n 0000260 H e l l o W o r l d 001 \0 020 j a v 0000300 a / l a n g / O b j e c t 001 \0 020 0000320 j a v a / l a n g / S y s t e m 0000340 001 \0 003 o u t 001 \0 025 L j a v a / i 0000360 o / P r i n t S t r e a m ; 001 \0 0000400 023 j a v a / i o / P r i n t S t 0000420 r e a m 001 \0 007 p r i n t l n 001 \0 0000440 025 ( L j a v a / l a n g / S t r 0000460 i n g ; ) V \0 ! \0 005 \0 006 \0 \0 \0 \0 0000500 \0 002 \0 001 \0 007 \0 \b \0 001 \0 \t \0 \0 \0 035 0000520 \0 001 \0 001 \0 \0 \0 005 * 267 \0 001 261 \0 \0 \0 0000540 001 \0 \n \0 \0 \0 006 \0 001 \0 \0 \0 \f \0 \t \0 0000560 013 \0 \f \0 001 \0 \t \0 \0 \0 % \0 002 \0 001 \0 0000600 \0 \0 \t 262 \0 002 022 003 266 \0 004 261 \0 \0 \0 001 0000620 \0 \n \0 \0 \0 \n \0 002 \0 \0 \0 017 \0 \b \0 020 0000640 \0 001 \0 \r \0 \0 \0 002 \0 016 0000652 Form more amenable for executing a computer. Viewed with "od –c HelloWorld.class" to view as octal © Sedgewick & Wayne

A real problem? Text clouds: A simple yet powerful idea Visualization of most frequently occurring words within some body of text Color or font size indicates word frequency Close cousin: Tag clouds What is involved with generating a tag clouds? Steps? Issues? See SimpleCloudMaker.java

Data processing Scan a large (~ 107 bytes) file Print the words together with counts of how often they occur Need more specification? How do you do it? What is we only wanted the top k (say 20) words?

Possible solutions Use heavy duty data structures (Knuth) Hash tries implementation Randomized placement Lots o’ pointers Several pages UNIX shell script (Doug Mclroy) tr -cs “[:alpha:]” “[\n*]” < FILE | \ sort | \ uniq -c | \ sort -n -r -k 1,1 See SimpleWordCount.java Which is better? K.I.S.?

Problem Solving and Programming How many words are in a file? What’s a word? What’s a file? How do we solve this: simply, quickly, …? What’s the best we can do? Constraints? How many different words are in a file? How is this similar? Different? How many words do two files have in common? Spell-checking, did you mean ..?

Basics Definitions. Trace. © Sedgewick & Wayne declaration: Java is strongly-typed, must specify type of each variable (avoid multiplying a string with a real number) Why? variable: name to refer to data type value assignment statement: changes the value of a variable © Sedgewick & Wayne

Some Java Vocabulary and Concepts Java has a huge standard library Organized in packages: java.lang, java.util, javax.swing, … API browseable online, but Eclipse IDE helps a lot Java methods have different kinds of access inter/intra class Public methods … Private methods … Protected and Package methods … Primitive types (int, char, double, boolean) are not objects but everything else is literally an instance of class Object foo.callMe();

Basic data structures and algorithms Arrays are typed and fixed in size when created Don't have to fill the array, but cannot expand it Can store int, double, String, … ArrayList (and related class Vector and interface List) grows Stores objects, not primitives Autoboxing in Java 5/6 facilitates int to/from Integer conversion Accessing elements can require a downcast ArrayList objects grow themselves intelligently java.util package has lots of data structures and algorithms Use rather than re-implement, but know how do to do both

Built-In Data Types Data type. A set of values and operations defined on those values. Type Description Literals Operations char characters 'A' '@' compare String sequences of characters "Hello World" "CS is fun" concatenate int integers 17 12345 add, subtract, multiply, divide double floating point numbers 3.1415 6.022e23 add, subtract, multiply, divide boolean truth values true false and, or, not © Sedgewick & Wayne

Integers Integers: the int data type. -231 231 - 1 Integers: the int data type. Values: integers between –2147483648 and 2147483647. Operations: add, subtract, multiply, divide, remainder. Useful for expressing algorithms. asymmetry in smallest and biggest integer deferred for now, as is dealing with negative integers using 2's complement notation for now, focus on using integers and appreciate that it doesn't matter so much how they are represented internally © Sedgewick & Wayne

Integer Operations public class IntOps { public static void main(String[] args) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); int sum = a + b; int prod = a * b; int quot = a / b; int rem = a % b; System.out.println(a + " + " + b + " = " + sum); System.out.println(a + " * " + b + " = " + prod); System.out.println(a + " / " + b + " = " + quot); System.out.println(a + " % " + b + " = " + rem); } command-line arguments do demo in DrJava to show how to enter command-line arguments % javac IntOps.java % java IntOps 1234 99 1234 + 99 = 1333 1234 * 99 = 122166 1234 / 99 = 12 1234 % 99 = 46 Java automatically converts a, b , and rem to type String 1234 = 12*99 + 46 © Sedgewick & Wayne

Leap Year Q. Is a given year a leap year? A. Yes if either (i) divisible by 400 or (ii) divisible by 4 but not 100. public class LeapYear { public static void main(String[] args) { int year = Integer.parseInt(args[0]); boolean isLeapYear; // divisible by 4 but not 100 isLeapYear = (year % 4 == 0) && (year % 100 != 0); // or divisible by 400 isLeapYear = isLeapYear || (year % 400 == 0); System.out.println(isLeapYear); } Why do you think there is there a leap year? Anticipate weird answers. % java LeapYear 2004 true % java LeapYear 1900 false % java LeapYear 2000 © Sedgewick & Wayne

Type Conversion Type conversion. Convert from one type of data to another. Automatic: no loss of precision; or with strings. Explicit: cast; or method. Ex. Generate a pseudo-random number between 0 and N-1. public class RandomInt { public static void main(String[] args) { int N = Integer.parseInt(args[0]); double r = Math.random(); int n = (int) (r * N); System.out.println("random integer is " + n); } technically Math.random() output is between 0.0 (inclusive) and 1,0 (exclusive) there are statistically superior methods to get random integers in a certain range, but this is probably the simplest String to int (method) double between 0.0 and 1.0 double to int (cast) int to double (automatic) % java RandomInt 6 random integer is 3 random integer is 0 % java RandomInt 10000 random integer is 3184 int to String (automatic) © Sedgewick & Wayne

Control Flow Control flow. Sequence of statements that are actually executed in a program. Conditionals and loops: enable us to choreograph control flow. boolean 1 statement 1 true false straight-line programs: akin to calculator statement 2 statement 1 boolean 2 true statement 2 statement 3 false statement 4 statement 3 straight-line control flow control flow with conditionals and loops © Sedgewick & Wayne

If-Else Statement The if-else statement. A common branching structure. Check boolean condition. If true, execute some statements. Otherwise, execute other statements. boolean expression if (boolean expression) { statement T; } else { statement F; can be any sequence of statements true false if-else syntax statement T statement F if-else flow chart © Sedgewick & Wayne

If-Else: Leap Year If-else. Take different action depending on value of variable. If isLeapYear is true, then print "is a". Otherwise, print "isn't a ". System.out.print(year + " "); if (isLeapYear) { System.out.print("is a"); } else { System.out.print("isn't a"); System.out.println(" leap year"); Note difference between print(year) and println("leap year"); © Sedgewick & Wayne

What is Computer Science? Computer science is no more about computers than astronomy is about telescopes. Edsger Dijkstra Computer science is not as old as physics; it lags by a couple of hundred years. However, this does not mean that there is significantly less on the computer scientist's plate than on the physicist's: younger it may be, but it has had a far more intense upbringing! Richard Feynman http://www.wordiq.com

Computer Science in a Nutshell?