forked from akemi/c-labs
Lab 3: add description
This commit is contained in:
commit
7155aa5a6e
138
lab-3/check.sh
Executable file
138
lab-3/check.sh
Executable file
|
@ -0,0 +1,138 @@
|
|||
#!/usr/bin/env bash
|
||||
declare -r program="$1"
|
||||
declare -r tmp1=tmp1 #"$(mktemp)"
|
||||
declare -r tmp2=tmp2 #"$(mktemp)"
|
||||
|
||||
declare -ri case_1_a1=1
|
||||
declare -ri case_1_a2=4
|
||||
declare -r case_1="$(mktemp)"
|
||||
cat <<'EOM' > "$case_1"
|
||||
$$$$
|
||||
$$$$
|
||||
$$$$
|
||||
$$$$
|
||||
EOM
|
||||
|
||||
declare -ri case_2_a1=1
|
||||
declare -ri case_2_a2=10
|
||||
declare -r case_2="$(mktemp)"
|
||||
cat <<'EOM' > "$case_2"
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
EOM
|
||||
|
||||
declare -ri case_3_a1=2
|
||||
declare -ri case_3_a2=6
|
||||
declare -r case_3="$(mktemp)"
|
||||
cat <<'EOM' > "$case_3"
|
||||
$$
|
||||
$$$$
|
||||
$$$$$$
|
||||
EOM
|
||||
|
||||
declare -ri case_4_a1=2
|
||||
declare -ri case_4_a2=7
|
||||
declare -r case_4="$(mktemp)"
|
||||
cat <<'EOM' > "$case_4"
|
||||
$
|
||||
$$$
|
||||
$$$$$
|
||||
$$$$$$$
|
||||
EOM
|
||||
|
||||
declare -ri case_5_a1=3
|
||||
declare -ri case_5_a2=14
|
||||
declare -r case_5="$(mktemp)"
|
||||
cat <<'EOM' > "$case_5"
|
||||
$$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$
|
||||
$$$$$$
|
||||
$$$$
|
||||
$$
|
||||
EOM
|
||||
|
||||
declare -ri case_6_a1=4
|
||||
declare -ri case_6_a2=14
|
||||
declare -r case_6="$(mktemp)"
|
||||
cat <<'EOM' > "$case_6"
|
||||
$$
|
||||
$$$$
|
||||
$$$$$$
|
||||
$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$
|
||||
$$$$$$
|
||||
$$$$
|
||||
$$
|
||||
EOM
|
||||
|
||||
declare -ri case_7_a1=4
|
||||
declare -ri case_7_a2=15
|
||||
declare -r case_7="$(mktemp)"
|
||||
cat <<'EOM' > "$case_7"
|
||||
$
|
||||
$$$
|
||||
$$$$$
|
||||
$$$$$$$
|
||||
$$$$$$$$$
|
||||
$$$$$$$$$$$
|
||||
$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$
|
||||
$$$$$$$$$
|
||||
$$$$$$$
|
||||
$$$$$
|
||||
$$$
|
||||
$
|
||||
EOM
|
||||
|
||||
if ! gcc -Wall -Wextra -Werror -std=c99 "$program"; then
|
||||
echo "Program compiled with errors. Did NOT pass check"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run_case() {
|
||||
local a1="$1"
|
||||
local a2="$2"
|
||||
local tmp="$3"
|
||||
local comp="$4"
|
||||
local case="$5"
|
||||
|
||||
if ! ./a.out $a1 $a2 > "$tmp"; then
|
||||
echo "Error at runtime on case $case"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
sed -i 's#\s*$##' "$tmp"
|
||||
|
||||
if ! diff -qy "$tmp" "$comp"; then
|
||||
echo "Input does not match for case $case"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
# Case 1
|
||||
run_case "$case_1_a1" "$case_1_a2" "$tmp1" "$case_1" 1
|
||||
run_case "$case_2_a1" "$case_2_a2" "$tmp1" "$case_2" 2
|
||||
run_case "$case_3_a1" "$case_3_a2" "$tmp1" "$case_3" 3
|
||||
run_case "$case_4_a1" "$case_4_a2" "$tmp1" "$case_4" 4
|
||||
run_case "$case_5_a1" "$case_5_a2" "$tmp1" "$case_5" 5
|
||||
run_case "$case_6_a1" "$case_6_a2" "$tmp1" "$case_6" 6
|
||||
run_case "$case_7_a1" "$case_7_a2" "$tmp1" "$case_7" 7
|
||||
|
||||
echo "You passed! Commit to git before the deadline"
|
168
lab-3/lab_3_description.md
Normal file
168
lab-3/lab_3_description.md
Normal file
|
@ -0,0 +1,168 @@
|
|||
# Lab 3 - Fancy shapes
|
||||
|
||||
In this lab we'll be focusing on the C programming aspect. This will cover
|
||||
for-loops and if-statements. To practice these we'll be drawing some shapes in
|
||||
the terminal!
|
||||
|
||||
The input will be one of the following numbers, passed through argv:
|
||||
1. A square
|
||||
2. A triangle
|
||||
3. An inverted triangle (upside down)
|
||||
4. A diamond
|
||||
|
||||
Your program will take in 2 arguments. The first is a number between 1 and 4,
|
||||
indicating which of the shapes listed above you'll be printing. The second
|
||||
argument is a number indicating the _largest horizontal width_ of the shape. For
|
||||
example, for a triangle, this'll be the width of the base.
|
||||
|
||||
Your program will print the indicated shape at the indicated dimensions. Write
|
||||
your code in a `main.c` file, then run `bash check.sh main.c` to test your code.
|
||||
|
||||
## Examples
|
||||
|
||||
#### Example 1
|
||||
|
||||
```
|
||||
./a.out 1 4
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
$$$$
|
||||
$$$$
|
||||
$$$$
|
||||
$$$$
|
||||
```
|
||||
|
||||
#### Example 2
|
||||
|
||||
```
|
||||
./a.out 1 10
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
```
|
||||
|
||||
#### Example 3
|
||||
|
||||
```
|
||||
./a.out 2 6
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
$$
|
||||
$$$$
|
||||
$$$$$$
|
||||
```
|
||||
|
||||
Notice how with an even number for the width, will result with 2 at the top, not
|
||||
one.
|
||||
|
||||
#### Example 4
|
||||
|
||||
```
|
||||
./a.out 2 7
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
$
|
||||
$$$
|
||||
$$$$$
|
||||
$$$$$$$
|
||||
```
|
||||
|
||||
#### Example 5
|
||||
|
||||
```
|
||||
./a.out 3 14
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
$$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$
|
||||
$$$$$$
|
||||
$$$$
|
||||
$$
|
||||
```
|
||||
|
||||
#### Example 6
|
||||
|
||||
```
|
||||
./a.out 4 14
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
$$
|
||||
$$$$
|
||||
$$$$$$
|
||||
$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$
|
||||
$$$$$$$$$$
|
||||
$$$$$$$$
|
||||
$$$$$$
|
||||
$$$$
|
||||
$$
|
||||
```
|
||||
|
||||
#### Example 7
|
||||
|
||||
```
|
||||
./a.out 4 15
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
$
|
||||
$$$
|
||||
$$$$$
|
||||
$$$$$$$
|
||||
$$$$$$$$$
|
||||
$$$$$$$$$$$
|
||||
$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$$$
|
||||
$$$$$$$$$$$
|
||||
$$$$$$$$$
|
||||
$$$$$$$
|
||||
$$$$$
|
||||
$$$
|
||||
$
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the following command to test your work:
|
||||
|
||||
```
|
||||
bash check.sh main.c
|
||||
```
|
||||
|
||||
If the output doesn't say you passed, your program has a bug. Fix it and then
|
||||
try again.
|
Loading…
Reference in a new issue