Course work consists of:

  • Two lectures per week: Attendance at lectures is strongly recommended and expected but will not be recorded. Students are, however, fully responsible for all material presented in lectures. Some of that material will not be in the textbooks.
  • Six bi-weekly assignments (A): All assignments are to be written based on the assignment specification and should function properly. The assignments are designed to give you as much flexibility as possible: key details will be set out in the assignment specification, and the remaining decisions will be left up to you.
  • One midterm exam (M) and one final exam (F): All exams are closed book, closed notes, no other aids.

Mark distribution

The course mark (C) is calculated as:

      if (F ≥ 5.0) then
        C = round(0.3*A + 0.2*M + 0.5*F)
        C = round(F) [Fail]

The same course mark calculation is used for all exam periods. Course assignments are turned in only once, before the first exam period.

Getting Help

Ask questions in class. It always makes lectures (and life) more interesting. Beyond lectures, you can and should use each teaching assistant's weekly office hours to ask questions about your assignments. Office hours are especially appropriate if you need to use a terminal to show/explain what goes wrong in your assignment. Teaching assistants are here to help you, take advantage of it.

You may ask questions to the course's question and answer platform at https://elearn.uoc,gr , especially if your questions are helpful to other students (and usually they are). To login, use your LDAP credentials ( where XXXX is your student ID). You are encouraged to respond to questions of your colleagues already posted, without however, violating any rules of academic contact. If your question is specific to your work, or if you must reveal portions of your code to express your question adequately, then you should e-mail it to one of the teaching assistants or all of them at h y 2 5 5 @ c s d . u o c . g r.

Make sure that you subscribe to the course mailing list h y 2 5 5 - l i s t @ c s d . u o c . g r. You can subscribe to the mailing list by sending e-mail to m a j o r d o m o @ c s d . u o c . g r with the text "subscribe hy255-list" as the mail body. The course mailing list h y 2 5 5 - l i s t @ c s d . u o c . g r will be used for course-specific announcements.


Programming, like composition, is an individual creative process. Individuals must reach their own understanding of the problem and discover a path to its solution. During this time, discussions with friends are encouraged. However, when the time comes to write the code that solves the problem, such discussions are no longer appropriate -- the program must be your own work (although you may ask teaching assistants for help in debugging). If you have a question about how to use some feature of UNIX, etc., then you can certainly ask either your friends or the teaching assistants.

Do not, under any circumstances, copy another person's program. Writing code for use by another or using another's code in any form is academic fraud and will be dealt with harshlyYou are also responsible for ensuring that the code you write for the assignments is not readable by others. You can use the chmod command to change the protection of your files (type man chmod for more information or consult the first tutorial).

Due Dates and Late Work

Assignments are due at 23:59:59 on the date specified. Each assignment has to be turned in by the specified deadline. There will be a penalty of 10% of the assignment mark for each day of delay in turning in an assignment. Exceptions to these rules will be made only under exceptional circumstances, and then only with an appropriate written excuse. Problems with transportation, network connectivity, or other unexpected situations do not justify any type of extensions. The only cases that will be considered are days that the University is officially closed.

Assignment Marking - Code Review

Assignments are marked both for functional correctness and design issues. Program readability and student's understanding of the subject are important aspects of the design procedure:

  • Correctness means that the assignment adheres to the specification, and in any case, it either performs according to the specification, or returns an error. "core dumps", even with invalid inputs, are not acceptable (the use of assert statements, though, is an acceptable means of checking for valid states in your program).
  • The student's understanding of the subject matter is tested through questions about the turned in code and the subject matter of the assignment. Various guides to programming style can be found on the web. A couple of documents on style can also be found under the Links directory entry in the course's web page. Also, you can use the indent utility to format C code (for more information type man indent).

Each student will be examined and marked individually in each assignment, as follows:

  • Each student will be examined on their understanding of the code and subject matter during code review sessions. A code review is a short (about 10min) one-on-one question-and-answer evaluation on the turned in code with a teaching assistant in the lab. There will be three one-to-one code review sessions for each student throughout the semester. The dates for each code review session will be published along with the assignment submission deadline. Each student will reserve a slot for a code review with the rendezvous utility.
  • After each code review session, a mark will be issued for each assignment included in the session. The final assignment marks are valid for the second and third replacement final exams as well.

Assignment turn in

To turn in an assignment, use turnin (type man turnin for more information). Simply log in to a Debian/Linux system (e.g.,,, ...) and type turnin ask#@hy255 my_folder/ to turn in the files of the assignment inmy_folder/ (e.g. turnin ask1@hy255 FirstExercise/ to turn in assignment number 1).

The turned in files should be all the source files specified by the assignment and necessary to compile and run it. You should also include abrief README file that explains any implementation decisions or reasonable assumptions that you have made, and how you have tested your program. Do not include object or executable files in your assignment submissions, since they only take space.

A submission is copied into a specific (protected) directory, it is given the name of the user that does the submission, and it is time-stamped with the submission time. Assignments can be turned in up to 10 times. A resubmission is not copied over previous submissions for the same assignment. Late submissions (or resubmissions) will be handled according to the course policies.


All assignments are to be done on the CSD linux workstations. For all the assignments you should use the gcc compiler (type man gcc for more help), unless otherwise stated in the assignment specification. These are the default utilities used when you type gcc on the linux systems (typing gcc -v and make -v will give you version information). Documentation and reference cards on the necessary tools can be found on the web and under the course's Links directory entry.


  • The material used in the class and the flow of lectures was inspired by course offerings in the Computer Science Department at Princeton University and the ECE Department at the University of Toronto.
  • Assignments 2 (A String Module), 3 (ADTs: Πίνακας Συμβόλων), and 6 (Systems Security: Buffer Overrun Attack) originate from material used in CS217 at Princeton University during the Spring Semester of 2005.

Τελευταία τροποποίηση: Τετάρτη, 13 Μαΐου 2015, 6:54 PM