Summer 2012 Syllabus

- Lecture: 9:30-10:35 am, Monday through Friday, Room CCSB G.0208
- Lab: 12:00-1:05 pm, Monday through Friday, Room CCSB 1.0410
- Final exam: Monday August 6, 10-12:45 pm

You should be enrolled in a lab section. You must attend the lecture section and the lab section that you are enrolled in; do not drop in on another lab section without prior approval.

NOTE: The next computer science class CS 2302 (Data Structures) has two prerequisites: CS2401 and MATH 2300 (Discrete Math). To avoid delaying your progress through the program, if you are not currently taking MATH 2300 and have not already passed it, you should seriously consider adjusting your schedule.

**Instructors:**

- in June: Rodrigo Romero, email raromero2@utep.edu,
office CCSB 3.1018,

office phone (915) 747-5916

office hours: MTWR 11:30-1:30 pm or by appointment. - in July: Vladik Kreinovich, email vladik@utep.edu,
office CCSB 3.0404,

office phone (915) 747-6951

office hours: MTWR 9-9:30 am, TWR 10:35-11:30 am, or by appointment.

**Teaching Assistants (TAs):**

- Mohammad Shajib Khan, email mkhan4@miners.utep.edu,

office hours by appointment. - Melisa Vela, emails smvelaloya@miners.utep.edu, melisavela@gmail.com,

office hours are MW 3:00-4:00 pm or by appointment, in Room 3.1202G.

**Course Objectives:**
This is the second course for students majoring in Computer Science. Students
will learn about fundamental computing algorithms, including searching and
sorting; elementary abstract data types including linked lists, stacks, queues
and trees; and elementary algorithm analysis. Prerequisite: CS 1401, with a
grade of C or better.

**Knowledge and Abilities Required Before the Students Enter the Course:**
Students are assumed
to be comfortable programming in Java. Students should be able to code basic
arithmetic expressions, define simple classes, use strings, code loops and
conditional statements, write methods, create objects from classes, invoke
methods on an object, perform basic text file input and output, and use
arrays.

**Learning Outcomes**

**Level 3: Synthesis and Evaluation:**

Level 3 outcomes are those in which the student can apply the material in new
situations. This is the highest level of mastery. On successful completion of
this course, students will be able to identify, implement and use the following
data structures as appropriate for a given problem:

- multi-dimensional arrays;
- lists implemented as arrays or linked lists;
- stacks;
- queues;
- binary trees and binary search trees;
- simple hashes.

**Level 2: Application and Analysis:**

Level 2 outcomes are those in which the student can apply the material in
familiar situations, e.g., can work a problem of familiar structure with minor
changes in the details. Upon successful completion of this course, students
will be able to:

- use Big-O notation to express the best-, average- and worst-case behaviors of an algorithm;
- explain the structure and use of activation records;
- determine the best, average and worst-case behaviors of an algorithm;
- assess time and space trade-offs in algorithms;
- explain, code, and use quadratic and O(n log n) sorting algorithms;
- implement recursive algorithms over natural numbers, lists, and trees;
- define and use classes, subclasses and inheritance;
- implement a simple graphical user interface;
- perform string manipulation and simple parsing;
- implement and use multidimensional arrays;
- describe the importance of encapsulation and information hiding;
- implement applications and simulations of the data structures identified above;
- describe and analyze simple sequential and binary search algorithms;
- implement quadratic sorting algorithms;
- describe memory allocation of integers, real numbers, arrays and objects.

**Level 1: Knowledge and Comprehension**

Level 1 outcomes are those in which the student has been exposed to the terms
and concepts at a basic level and can supply basic definitions. On successful
completion of this course, students will be able to:

- explain basic and introductory-level notions of a virtual machine;
- explain the concept of polymorphism;
- use class browsers and related tools;
- identify class hierarchies;
- recognize the basic terms associated with particular data structures, for example, head/tail, push/pop/peek

**Textbook:**
Reading and laboratory assignments will be drawn from *Introduction
to Java Programming*, 9th edition, by Y. Daniel Liang.
If necessary, this book is available at the
bookstore and through major online book retailers, and you are expected to
acquire a copy for your use in this course. Photocopied textbooks are
illegal and their use will not be tolerated.

**Software:**
Software used in this course will be available in the two instructional
labs. For those who wish to use the course software on your home computer,
instructions will be given in the labs.

**Assignments:**
Reading and homework assignments will be handed out or announced in class
and in labs. If you miss a class or lab session, it is your responsibility
to find out what you missed. You should expect to spend at least 12
hours/week outside of class and lab on reading and homework.

**Grading:**
Your semester grade will be based on a combination of homework and lab
assignments, weekly quizzes, lab attendance, exams, and a final exam. The
approximate percentages are as follows:

- 30% Homework and lab assignments
- 5% Lab attendance
- 10% In-class exercises and quizzes
- 30% Exams (3 exams, 10 points each)
- 25% Final comprehensive exam

**Homework and Lab Assignments:**
Homework and lab
assignments are designed to allow you to practice using the
concepts presented in lecture and in your reading. Homework and lab
assignments may
include written problems, tutorial exercises, and programming problems.
Assignments usually will be due at the start of your lab session. Late
homework will be accepted only in unusual circumstances, by prior
arrangement if at all possible.

Homework must be done individually. While you may discuss the problem in
general terms with other people, your answers and your code should be
written and tested by you alone. **Do not exchange programs or let someone
look at your code, even "just so they can see how you did it."**
If you need
help, consult a TA, a peer leader, or a professors

**Laboratory Sessions:**
Laboratory sessions are designed to give you guidance in getting your
homework assignment started well. In a typical lab session, the Teaching
Assistant will present additional material that will help you complete the
assignment and answer your questions as you begin work.

You are required to sign up for and attend one of the lab sections associated with this course. In Summer, a lab section meets every day. Attendance will be taken. To earn full credit for attendance, you must show up on time, stay for the entire session, and work only on your assignment. You may be excused from lab with full credit if your work has been completed and turned in.

In addition to turning in your lab assignment, you must schedule a one-on-one lab demo session with your TA in which you will explain how your program works and he/she will ask questions to test your understanding of the program being submitted. The TA will then assign a pass/fail grade for this session; a student receiving a failing grade in this session will receive a grade of zero for the lab assignment. NOTE: The lab demo should be presented before or on the deadline for the assignment.

Late Projects: Lab projects up to 3 days late will receive up to 70% percent of full credit, from 3 days to one week late, up to 50%, and more than a week late will receive no credit. NOTE: The turn-in-date for labs is not when you e-mail the code, but the date when you demo the lab.

Guidelines for grading labs are listed here.

**You must score 60% or better on the lab assignments to pass this
course.**

**Quizzes:**
The purpose of a quiz is to ensure that you have read the weekly
reading assignment and to verify that you have mastered the major concepts
of recent lectures. Quizzes typically will be about 5-10 minutes in length and
will cover the material assigned to be read for the upcoming lecture plus
selected concepts from previous lectures.
There will be no make-up on missed quizzes.

**Exams:**
The purpose of the exams is to allow you to demonstrate mastery of course
concepts. Each exam will focus on the material from the previous three or
four weeks. Exams will take place during the regular class session. There
will be three exams, each contributing 10% to your final grade, or 30% total
to the overall course grade.

Because the exams contribute so heavily to your total grade, it is vital that you do well on them. If you have test-taking difficulties in general, or if you have difficulties with our tests in particular, please come talk to us as soon as possible (and certainly before the first exam).

Exams are planned for the following dates (subject to change):

- Wednesday, June 27
- Tuesday, July 17
- Thursday, August 2

**Final Exam:**
The final exam will be comprehensive and will count 25% toward your course
grade.
If you cannot demonstrate your understanding of the concepts and skills
needed for success in CS 2402, you cannot pass this course even if you have
enough points to do so.

You must take the final exam during the time shown in the schedule for the class section that you are formally enrolled in. Do not simply "drop in" to the other section; there will not be a copy of the exam for you. This is University policy. If you have a scheduling conflict (e.g., if you are taking a final at EPCC) or if you are scheduled for three final exams in one day, see one of the instructors IN ADVANCE.

**Grading:**
The nominal percentage-score-to-letter-grade conversion is as follows:

- 90% or higher is an A
- 80-89% is a B
- 70-79% is a C
- 60-69% is a D
- below 60% is an F

**Standards of Conduct:**
You are expected to conduct yourself in a professional and courteous manner, as
prescribed by the
UTEP Standards
of Conduct.

Graded work, e.g., homework and tests, is to be completed independently and should be unmistakably your own work (or, in the case of group work, your team's work), although you may discuss your project with other students in a general way. You may not represent as your own work material that is transcribed or copied from another person, book, or any other source, e.g., a web page.

Academic dishonesty includes but is not limited to cheating, plagiarism and collusion.

- Cheating may involve copying from or providing information to another student, possessing unauthorized materials during a test, or falsifying data (for example program outputs) in laboratory reports.
- Plagiarism occurs when someone represents the work or ideas of another person as his/her own.
- Collusion involves collaborating with another person to commit an academically dishonest act.

**Disabilities:**
If you feel that you may have a disability that requires accommodation,
contact the Disabled Student Services Office at 747-5184, go to Room 106E
Union, or email dss@utep.edu

**Weekly Schedule:** (tentative and subject to change) When learning a new
topic, often, we will see how it relates to the previously learned topics
and thus, we will use this as an opportunity to recall
the previous topics

- Reading: Sections 6.1, 6.2, 6.5, 6.6, and 6.7,
Single-Dimensional Arrays; Sections 2.16 and 2.8, Principles of Programming
and Software Engineering
- June 11-13: class overview, arrays, principles of programming and software engineering

- Reading: Chapter 7, Multi-dimensional Arrays
- June 14, 15, and 18: multi-dimensional arrays, principles of programming and software engineering

- Reading: Sections 6.10, 24.1, 24.2, 24.3, 24.4.1, 24.4.6, and 24.7,
Algorithm Analysis
- June 19-21: algorithm analysis, search algorithms

- Reading: Section 26.4, Handouts: ADT, Lists
- June 22, 25, and 26: abstract data types, linked lists

- Reading: no specific reading
- June 26, 27, 28: Pre-Test Review, Exam 1, Test Review

- Reading: Chapter 20, Recursion
- June 28, 29, July 2, 3, and 5: recursion

- Reading: Sections 6.11 and 25.1-25.4, Sorting
- July 9-11: sorting

- Reading: Sections 26.5 (stacks part) and 22.10, Stacks
- July 12, 13, and 16: stacks and elementary compilers

- Reading: no specific reading
- July 16, 17, and 18: Pre-Test Review, Exam 2, Test Review

- Reading: Section 26.5, Queues
- July 18-20: queues

- Reading: Sections 27.1-3, Chapter 29,
Binary Search Trees
- July 23-25: binary search trees, including balanced (AVL) trees

- Reading: Section 25.5, Heaps and heapsort
- July 26, 27, and 30: heaps and heapsort

- Reading: Chapter 28, Hash Tables
- July 31, August 1: hash tables

- Reading: no specific reading
- August 1, 2: Pre-Test Review, Exam 3

- Reading: no specific reading
- August 3: Test Review of Exam 3, review for the final exam