联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2022-10-18 09:06

COMP2113 Programming Technologies / ENGG1340 Computer Programming II

Assignment 1

Deadline: 20 October 2022 (Thursday) 23:59


If you have any questions, please post to the Moodle discussion forum on Assignment 1.


Total marks: 100 marks

5 marks for proper code comments and indentation

95 marks for program correctness

A maximum of 5 marks will be deducted if you fail to follow the submission instructions strictly.


General Instructions


Read the instructions in this document carefully.


In this assignment you will solve 4 tasks and a tester would automatically test your submitted program. So if

your submitted files and program outputs do not conform to our instructions given here, your programs cannot

be evaluated and you will risk losing marks totally.


Sample test cases are provided with each task in this document. Note that the test cases may or may not cover

all boundary cases for the problem. It is also part of the assessment whether you are able to design proper test

cases to verify the correctness of your program. We will also use additional test cases when marking your

assignment submission.


Input and output format


Your C++ programs should read from the standard input. Also, your answer should be printed through

the standard output. If you failed to follow this guide, the tester may not able to give a score for your program.

Additionally, you should strictly follow the sample output format (including space, line breaker, etc.), otherwise,

your answer might be considered as wrong.




How to use the sample test cases for problems 3 and 4?

Sample test cases in text file formats are made available for you to check against your work. Here's how you

may use the sample test cases. Take Question 4 test case 3 as an example. The sample input and the expected

output are given in the files input4_3.txt and output4_3.txt, respectively. Suppose that your program is named

"4", do the followings at the command prompt of the terminal to check if there is any difference between your

output and the expected output.


./4 < input4_3.txt > myoutput.txt

diff myoutput.txt output4_3.txt


Testing against the sample test cases is important to avoid making formatting mistakes. The additional test

cases for grading your work will be of the same formats as the sample test cases.



Coding environment

For Problem 3 and Problem 4, you must make sure that your C++ program can compile, execute and generate

the required outputs on our standard environment, namely, the gcc C++11 environment we have on the CS

Linux servers (academy*). Make sure the following compilation command is used to compile your programs:


g++ -pedantic-errors -std=c++11 [yourprogram].cpp


As a programmer/developer, you should always ensure that your code can work perfectly as expected on a

target (e.g., your client's) environment, not only on yours.


While you may develop your work on your own environment, you should always try your program (compile &

execute & check results) on our standard environment before submission.



Submission

Name your shell script (for Problem 1 and Problem 2) and C++ programs (for Problem 3 and Problem 4) as the

following table shows and put them together into one directory. Make sure that the folder contains only these

source files (*.sh / *.cpp) and no other files. Compress this directory as [uid].zip file where [uid] is your

university number and check carefully that the correct file have been submitted. We suggest you to download

your submitted file from Moodle, extract them, and check for correctness. You will risk receiving 0 marks for

this assignment if you submit incorrect files. Resubmission after the deadline is not allowed.


Filename Description

1.sh Problem 1

2.sh Problem 2

3.cpp Problem 3

4.cpp Problem 4



Late submission

If you submit n days after the deadline, there will be 20n% mark deduction. The 24 hours right after the

deadline is considered as 1 day, and so on so forth. In another word, no mark will be given if you submit after 5

days.



Evaluation

Your code will be auto-graded for technical correctness. In principle, we use test cases to benchmark your

solution, and you may get zero marks for not being able to pass any of the test cases. Normally partial credits

will not be given for incomplete solution, as in many cases the logic of the programs are not complete and an

objective assessment could be difficult. However, your work may still be considered on a case-by-case basis

during the rebuttal stage.


Academic dishonesty

We will be checking your code against other submissions in the class and from the Internet for logical

redundancy. Please be reminded that no matter whether it is providing your work to others, assisting others to

copy, or copying others will all be considered as committing plagiarism and we will follow the departmental

policy to handle such cases. Please refer to the course information notes for details.



Getting help

You are not alone! If you find yourself stuck on something, post your questions to the course forum, send us

emails or come to our support sessions. We want this assignment to be rewarding and instructional, not

frustrating and demoralizing. But we don’t know when or how to help unless you ask.



Discussion forum

Please be careful not to post spoilers. Please don’t post any code that is directly related to the assignments.

However, you are welcome and encouraged to discuss general ideas on the discussion forums. If you have any

questions about this assignment you should post them in the discussion forums.






A. Shell Programming [45%]


A certain railway company in Hong Kong uses a signaling system to keep track of trains in its railway system.

The system generates a log file (.txt) every day. Each line in the log file represents a train calling at a station

and has the following format:


[time_HH:MM:SS], [train_id], [station_id], [paltform_no.]


Each column is separated by a comma “,” in the log file.

The log files have “Trains_” as prefix in their file names, followed by a date in form of YYYY-MM-DD.

The records are sorted by time in ascending order


Field Description

time_HH:MM:SS The time has the format HH:MM:SS

train_id Identify a train

Train ID starting with “E” represents a passenger train. (e.g E201, E217)

Train ID starting with a number represents a maintenance train. (e.g. 8001, 59)

station_id Identify a station

platform_no. The platform number in that particular station


Example:

Consider an example Trains_2022-09-01.txt that stores the records on 2022-09-01.


06:01:10,E201,SHS,1

06:06:28,E209,SHS,1

...

07:10:27,8001,MOK,2

...


From the log file, we know that the E201 passenger train called at SHS station platform No.1 at time 06:01:10.



Problem 1 [20%]:

Create a shell script 1.sh that performs the following:

1. For each “Trains_” log file, find out the three busiest stations that have the most number of passenger

trains calling at. The output should display the count of passenger trains that called at that station and

the station ID.

2. If two or more stations have the same count, we output them in alphabetical order of the station ID.

Therefore “4 FAN” is put ahead of “4 HHK” under “Trains_2022-09-03.txt” in the example below.


If we run 1.sh, the following will output. The sample output can be found in the file output1.txt.

Trains_2022-09-01.txt:

25 LMC

23 TWO

22 FAN

Trains_2022-09-02.txt:

30 SHS

24 LMC

24 SHT

Trains_2022-09-03.txt:

4 FAN

4 HHK

4 KOT

Trains_2022-09-04.txt:

17 SHS

11 MOK

9 FAN




Problem 2 [25%]:

Create a shell script 2.sh that performs the following:

1. The 2.sh takes one command line input argument, which represents the train ID of a train that we would

like to trace.

2. The 2.sh generates a file .txt that contains a list of stations called by the train in all “Trains_”

log files, organized by the filenames and the records in the order of Date and Time.

3. If the number of input arguments is not 1, then the error message “Usage: ./Train_trace.sh ”

should be output in shell prompt.

4. If there is no train record found, then the log file will be deleted (or no need to generate it). The script

should outputs “No records found for train id” in shell prompt. (where id is the train ID inputted by the

user).


For example, If we run:

$ ./2.sh E201


The shell script will generate a file “E201.txt” that contains the following contents:

Trains_2022-09-01.txt

06:01:10,E201,SHS,1

06:19:13,E201,FAN,2

06:48:48,E201,FTR,3

Trains_2022-09-02.txt

06:00:50,E201,SHS,1

06:23:40,E201,HHK,3

23:15:24,E201,SHS,1

Trains_2022-09-03.txt

Trains_2022-09-04.txt



Sample Test Cases:

2_1

$ ./2.sh E201

E201.txt will be generated. Please refer to the files given.


2_2

$ ./2.sh E209

E209.txt will be generated. Please refer to the files given.


2_3

$ ./2.sh E213

E213.txt will be generated. Please refer to the files given.


2_4

$ ./2.sh E229

E229.txt will be generated. Please refer to the files given.


2_5

$ ./2.sh 8001

8001.txt will be generated. Please refer to the files given.




B. C++ Programming [50%]


Problem 3 [20%]:

Write a program 3.cpp to read an integer N and then print all prime numbers in the range [1, N]. A prime

number is a natural number greater than 1 that has no positive divisors other than 1 and itself.


Hint: For each number M in the range [2, N], you have to check whether it is divisible by any number in the

range [2, M – 1] in order to determine if it is a prime number.


Sample Test Cases:

User inputs are shown in blue.


Problem 4 [30%]:

Write a C++ program 4.cpp which encrypts and decrypts some input characters using the Caesar Shifting

algorithm detailed below.

Input:

A line of input s k c1 c2 c3 …, where

o s is either the character e for encryption, or the character d for decryption

o k is an integer for the number of shifts used in the Caesar shift algorithm (key for encryption or

decryption)

o c1 c2 c3 … is a sequence of space separated characters, ended by !, to be encrypted or

decrypted

Output:

The encrypted/decrypted message ended by !. No space between two consecutive characters.


Algorithm:

To encrypt (decrypt) a letter c (within the alphabet A-Z or a-z) with a shift of k positions:

1. Let x be c’s position in the alphabet (0 based), e.g., position of B is 1 and position of g is 6.

2. For encryption, calculate y = x + k modulo 26;

For decryption, calculate y = x ? k modulo 26.

Here modulo is equivalent to remainder in mathematics.

3. Let w be the letter corresponding to position y in the alphabet. If c is in uppercase, the encrypted

(decrypted) letter is w in lowercase; otherwise, the encrypted (decrypted) letter is w in uppercase.


A character which is not within the alphabet A-Z or a-z will remain unchanged under encryption or

decryption.

Example. Given letter B and k = 3, we have x = 1, y = 1 + 3 mod 26 = 4, and w = E. As B is in uppercase, the

encrypted letter is e.


Requirement:

Implement a function CaesarShift() which takes in a char c and an int k, where c is the character to

undergo Caesar Shifting and k is the number of positions (can be negative) to shift, and return the

processed char after Caesar Shifting. The returned char is c if c is not within the alphabet range. The

prototype of the function is given by: char CaesarShift(char c, int k).

You can ONLY use the simple data types char, bool, int, double. In other words, you are not allowed

the use other data types or data structures such as strings, arrays, vectors, etc.


相关文章

版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp