首页
网站开发
桌面应用
管理软件
微信开发
App开发
嵌入式软件
工具软件
数据采集与分析
其他
首页
>
> 详细
辅导ECS 34留学生程序、讲解c++编程、c/c++编程辅导 讲解SPSS|辅导R语言程序
项目预算:
开发周期:
发布时间:
要求地区:
ECS 34: Programming Assignment #7
Fall 2020
Contents
1 Changelog 1
2 General Submission Details 1
3 Grading Breakdown 1
4 Submitting on Gradescope 2
4.1 Regarding Autograder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
5 Your Programming Tasks 2
5.1 Part #1: Copy to Multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
5.2 Part #2: Run Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5.3 Part #3: Templated Linked List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1 Changelog
You should always refer to the latest version of this document.
• v.1: Initial version.
2 General Submission Details
Partnering on this assignment is prohibited. If you have not already, you should read the section on
academic misconduct in the syllabus.
This assignment is due the night of Tuesday, December 15. Gradescope will say 12:30 AM on Wednesday, December 16,
due to the “grace period” (as described in the syllabus). Be careful about relying on the grace period for extra time; this could
be risky.
You should use the -Wall, -Werror, and -std=c++11 flags when compiling. The autograder will use these flags when it
compiles your code.
3 Grading Breakdown
As stated in the syllabus, this assignment is worth 4% of the final grade. Below is the breakdown of each part.
• Part #1: 2% (20 points)
• Part #2: 2% (20 points)
• Part #3: 5% (50 points)
Note on extra credit: I will set the points cutoff at 40 points, which means that it is possible to earn extra credit on
this assignment. 1
∗This content is protected and may not be shared, uploaded, or distributed.
1
If, due to unique circumstances that we discussed over email, the worth of programming assignment #7 is scaled up to be worth more than
4% of your final grade, the extra credit will not scale, i.e. you cannot earn more extra credit than other students.
1
4 Submitting on Gradescope
You should only submit list.hpp, list.inl, and the two shell scripts. You have infinite submissions until the deadline.
During the 10/02 lecture, I talked about how to change the active submission, just in case that is something that you
find yourself wanting to do.
4.1 Regarding Autograder
Your output must match mine exactly.
There is a description about how to interpret some of the autograder error messages in the directions for the first two
programming assignments. I will not repeat that description here.
5 Your Programming Tasks
5.1 Part #1: Copy to Multiple
Filename: cp_mult.sh
Motivation: Recall that the cp command can be used to copy multiple files into a destination directory, but it cannot be
used to copy one file into multiple destinations. You will write a script that does that.
Write a shell script that takes as argument a regular file (i.e. never a directory) and a list of destinations. The script
should copy the file into each of the given destinations. If not enough arguments are provided, then a usage message should
be printed and the script should return 1 (with exit 1); otherwise, the script should return 0. Note that just like cp, cp_mult.sh
can be used to make multiple copies of a file in the same directory.
Below are some examples of how your script should behave.
21 Usage : ./ cp_mult . sh [ src ] [ dest1 ] ...
22 $ echo $?
23 1
24 $ ./ cp_mult . sh vals . txt
25 Usage : ./ cp_mult . sh [ src ] [ dest1 ] ...
26 $ ls *. txt
27 vals . txt
28 $ ./ cp_mult . sh vals . txt vals2 . txt vals3 . txt vals4 . txt
29 $ cat vals2 . txt
5.2 Part #2: Run Steps
Filename: run_steps.sh
Motivation: As a happy undergraduate student, I encountered several situations in which I had to run an executable
multiple times with different command-line arguments and collect the output of each of those runs. As you can hopefully
imagine, doing this manually (i.e. typing each line into the terminal) would have been annoying; you can save time on such
a task by writing a script like the one you will write for this part.
Write a script that takes five arguments:
• A command to run (which could be an executable compiled with gcc). Note that it must be the exact command needed
to run it, not just the executable’s name (which is why you see ./test in the example instead of test).
• A start integer A.
• An end integer B.
• A step integer S.
• An output file.
The script should perform a series of runs of the given command. The first run should have A be passed as argument to
the command to run. In the next run, A + S should be passed. After that, A + 2S, then A + 3S, then A + 4S, and so on,
until the value passed would exceed B. Each run’s results should be logged into the output file. You may not assume this
output file exists, and its old contents should be overwritten.
The script assumes that the executable only takes an integer as its only command-line argument. If not enough arguments
are provided, then a usage message should be printed and the script should return 1 (with exit 1); otherwise, the script should
return 0.
Below are some examples of how your script should behave.
1 $ cat test .c
2 # include < stdio .h >
3
4 int main ( int argc , char * argv [])
5 {
6 printf (" Provided : %s \n", argv [1]) ;
7 }
8 $ gcc - Wall - Werror test . c -o test
9 $ ./ run_steps . sh ./ test 10 100 5 output1 . txt
10 $ cat output1 . txt
11 === 10 ===
12 Provided : 10
13 === 15 ===
14 Provided : 15
15 === 20 ===
16 Provided : 20
17 === 25 ===
18 Provided : 25
19 === 30 ===
20 Provided : 30
21 === 35 ===
22 Provided : 35
23 === 40 ===
24 Provided : 40
25 === 45 ===
26 Provided : 45
27 === 50 ===
28 Provided : 50
29 === 55 ===
30 Provided : 55
31 === 60 ===
32 Provided : 60
33 === 65 ===
34 Provided : 65
35 === 70 ===
36 Provided : 70
37 === 75 ===
38 Provided : 75
39 === 80 ===
40 Provided : 80
41 === 85 ===
3
42 Provided : 85
43 === 90 ===
44 Provided : 90
45 === 95 ===
46 Provided : 95
47 === 100 ===
48 Provided : 100
49 $ ./ run_steps . sh ./ test 50 80 10 output2 . txt
50 $ cat output2 . txt
51 === 50 ===
52 Provided : 50
53 === 60 ===
54 Provided : 60
55 === 70 ===
56 Provided : 70
57 === 80 ===
58 Provided : 80
59 $ cat test2 .c
60 # include < stdio .h >
61 # include < stdlib .h >
62
63 int main ( int argc , char * argv [])
64 {
65 int num = atoi ( argv [1]) ;
66 if ( num < 100)
67 printf (" Less than 100.\ n ") ;
68 else
69 printf (" Greater than or equal to 100.\ n ") ;
70 }
71 $ gcc - Wall - Werror test2 .c -o test2
72 $ ./ run_steps . sh ./ test2 97 104 2 output3 . txt
73 $ echo $?
74 0
75 $ cat output3 . txt
76 === 97 ===
77 Less than 100.
78 === 99 ===
79 Less than 100.
80 === 101 ===
81 Greater than or equal to 100.
82 === 103 ===
83 Greater than or equal to 100.
84 $ ./ run_steps . sh ./ test2 97 104
85 Usage : ./ run_steps . sh [ executable ] [ start ] [ end ] [ step ] [ outfile ]
86 $ echo $?
87 1
88 $
5.3 Part #3: Templated Linked List
Filenames: list.hpp and list.inl
Look at the files list.hpp and list.inl that are provided on Canvas. These files contain the incomplete definition of a
templated linked list. You are to implement this class’ methods. In the header file, I describe what each method is supposed
to.
You are not allowed to use smart pointers in this assignment. (We will talk about these in slide deck #13.)
Manual review: I will do a quick manual review of your submission after the deadline in order to check that you obey
the time complexity constraints (where applicable), that you do not use smart pointers, and that you do not have public
member variables in class List.
Suggestions/tips:
• Recommended order of completion: I would probably start with the constructor, pushFront(), pushBack(), and
operator<<. I would consider the copy constructor, copy assignment operator, and destructor to be the hardest parts.
• Required concepts: If you understand operator overloading, templates, and copy semantics well, then I would think
that this assignment should be comparable to programming assignment #5 (class UnweightedGraph) in difficulty, so make
sure to start by understanding the recent concepts.
• list.hpp vs. list.inl: Because list.inl is included in list.hpp, it isn’t important which functions you choose to define in
list.hpp vs. list.inl. I would recommend avoiding defining all of the required methods in one or the other; I think you
should get used to the syntax for both defining a method within the class (in list.hpp) and defining a method outside
4
the class (in list.inl). For operator<<, it did not seem that I could define it outside of class List, as the compiler seems
to put additional restrictions on a friend of a templated class; I could not find a workaround, but maybe there is one.
• Avoid duplicating code where possible: Certain methods and/or operators are so similar (e.g. pushBack() and
operator+=) that, probably, you should have one of them call the other.
• Template compiler error messages: If you ask any C++ programmer what the worst part of the language is, they
will likely say it’s the compiler error messages that you get when dealing with templates. The slightest mistake in dealing
with templates can generate a huge number of error messages, and this can occur even when you’re not explicitly using
templates (e.g. when you’re using std::string, which is a typedef for the templated class std::basic_string
). As is
usually the case, you want to start looking at the first error message (in case that one causes all of the other ones), but
this requires some scrolling. An alternative that I’ve sometimes found helpful is to do the command g++ ... 2>&1 | head,
where 2>&1 redirects the standard error (the compiler error messages) of the g++ command to standard output so that
it can be pipelined into head.
• Initializer list error messages: If a compiler error is generated by one of your constructor initializer lists, the
compiler (at least, g++) will flag the last line that the initializer list reaches. This only matters if you spread the
initializer list across multiple lines like I tend to, but it’s something to be aware of, because it can be deceiving if the
cause of the error has to do with something towards the beginning of the initializer list instead of the end.
Below are examples of how your code should behave. You can find main.cpp on Canvas.
1 $ cat main . cpp
2 # include " list . hpp "
3
4 struct X
5 {
6 X () { std :: cout << " Constructor !\ n "; }
7 ~X () { std :: cout << " Destructor !\ n "; }
8 };
9
10 int main ()
11 {
12 std :: cout << std :: boolalpha ;
13 List < int > lst ;
14 lst . pushBack (15) ;
15 lst . pushFront (33) ;
16 lst . pushFront (20) ;
17 lst . pushBack (50) ;
18 lst . pushFront (40) ;
19 lst += 80;
20 std :: cout << lst ;
21 std :: cout << lst . length () << ’\n ’;
22 std :: cout << " lst [3]=" << lst [3] << ’\n ’;
23 lst [2] = 90;
24 std :: cout << lst ;
25 std :: cout << " Contains 50: " << lst . contains (50) << ’\n ’
26 << " Contains -10: " << lst . contains ( -10) << ’\n ’;
27 std :: cout << " Remove 50: " << lst . remove (50) << ’ ’ << lst ;
28 std :: cout << " Remove 80: " << lst . remove (80) << ’ ’ << lst ;
29 std :: cout << " Remove -10: " << lst . remove ( -10) << ’ ’ << lst ;
30 lst . pushFront (200) ;
31 lst . pushBack (300) ;
32 lst += 100;
33 std :: cout << lst ;
34 lst . remove (200) ;
35 lst -= 40;
36 std :: cout << lst ;
37 std :: cout << " Copy construction ...\ n ";
38 List < int > lst2 { lst };
39 lst2 . remove (90) ;
40 std :: cout << lst << lst2 ;
41 std :: cout << " Copy assignment ...\ n ";
42 lst2 = lst ;
43 std :: cout << lst << lst2 ;
44 lst . pushBack ( -400) ;
45 lst2 . pushFront ( -100) ;
46 lst2 += -200;
47 std :: cout << lst << lst2 ;
48 std :: cout << lst . length () << ’ ’ << lst2 . length () << ’\n ’;
49
50 std :: cout << " Trying strings ...\ n ";
51 List < std :: string > strings ;
5
52 std :: cout << strings ;
53 std :: cout << strings . length () << ’\n ’;
54 strings . pushBack (" def ") ;
55 strings . pushFront (" abc ") ;
56 strings += " ghi ";
57 std :: cout << strings ;
58 std :: cout << strings . length () << ’\n ’;
59 strings -= " gh ";
60 strings -= " abc ";
61 std :: cout << " After removing \" abc \": " << strings ;
62 std :: cout << strings . length () << ’\n ’;
63 strings . pushFront (" jklmn ") ;
64 std :: cout << strings ;
65 std :: cout << strings [2] << ’\n ’;
66 std :: cout << " Copy construction ...\ n ";
67 auto strings2 = strings ;
68 std :: cout << strings [1] << ’ ’ << strings2 [1] << ’\n ’;
69 strings . remove (" def ") ;
70 strings2 . pushFront (" op ") ;
71 std :: cout << " strings : " << strings
72 << " strings2 : " << strings2 ;
73 std :: cout << " strings [1]: " << strings [1] << ’\n ’
74 << " strings2 [1]: " << strings2 [1] << ’\n ’;
75
76 std :: cout << " Trying class X ...\ n ";
77 List
objs ;
78 objs . pushBack (X {}) ;
79 std :: cout << " Trying out -of - range index ...\ n ";
80 try
81 {
82 auto o = objs [3];
83 }
84 catch ( const std :: out_of_range & ex )
85 {
86 std :: cerr << "I accept your exception !\ n ";
87 }
88 catch (...)
89 {
90 std :: cerr << " Wrong type of exception !\ n ";
91 }
92
93 std :: cout << std :: noboolalpha ;
94 }
95 $ g ++ - Wall - Werror main . cpp
96 $ ./ a. out
97 40 20 33 15 50 80
98 6
99 lst [3]=15
100 40 20 90 15 50 80
101 Contains 50: true
102 Contains -10: false
103 Remove 50: true 40 20 90 15 80
104 Remove 80: true 40 20 90 15
105 Remove -10: false 40 20 90 15
106 200 40 20 90 15 300 100
107 20 90 15 300 100
108 Copy construction ...
109 20 90 15 300 100
110 20 15 300 100
111 Copy assignment ...
112 20 90 15 300 100
113 20 90 15 300 100
114 20 90 15 300 100 -400
115 -100 20 90 15 300 100 -200
116 6 7
117 Trying strings ...
118
119 0
120 abc def ghi
121 3
122 After removing " abc ": def ghi
123 2
124 jklmn def ghi
125 ghi
6
126 Copy construction ...
127 def def
128 strings : jklmn ghi
129 strings2 : op jklmn def ghi
130 strings [1]: ghi
131 strings2 [1]: jklmn
132 Trying class X ...
133 Constructor !
134 Destructor !
135 Trying out - of - range index ...
136 I accept your exception !
137 Destructor !
138 $ valgrind ./ a . out > / dev / null
139 ...
140 ==3198== All heap blocks were freed -- no leaks are possible
141 ==3198==
142 ==3198== For counts of detected and suppressed errors , rerun with : -v
143 ==3198== ERROR SUMMARY : 0 errors from 0 contexts ( suppressed : 0 from 0)
144 $
7
软件开发、广告设计客服
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-23:00
微信:codinghelp
热点项目
更多
urba6006代写、java/c++编程语...
2024-12-26
代做program、代写python编程语...
2024-12-26
代写dts207tc、sql编程语言代做
2024-12-25
cs209a代做、java程序设计代写
2024-12-25
cs305程序代做、代写python程序...
2024-12-25
代写csc1001、代做python设计程...
2024-12-24
代写practice test preparatio...
2024-12-24
代写bre2031 – environmental...
2024-12-24
代写ece5550: applied kalman ...
2024-12-24
代做conmgnt 7049 – measurem...
2024-12-24
代写ece3700j introduction to...
2024-12-24
代做adad9311 designing the e...
2024-12-24
代做comp5618 - applied cyber...
2024-12-24
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 9951568
© 2021
www.rj363.com
软件定制开发网!