diff --git a/.gitignore b/.gitignore index ed43d01..7c21410 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ .* !.gitignore +!.cs50.yml *.pyc -.vscode/ -__pycache__/ flask_session/ +__pycache__/ diff --git a/1/README.md b/1/README.md new file mode 100644 index 0000000..b26776d --- /dev/null +++ b/1/README.md @@ -0,0 +1,28 @@ +# Lecture 1 + +## Examples + +### Types + +1. `hello.c` +1. `string.c` +1. `int.c` +1. `float.c` +1. `ints.c` +1. `floats.c` +1. `doubles.c` +1. `parity.c` + +### Control Flow + +1. `conditions.c` +1. `answer.c` + +### Abstraction + +1. `cough*.c` +1. `positive.c` + +### Representation + +1. `overflow.c` diff --git a/1/README.txt b/1/README.txt deleted file mode 100644 index 6aa94ee..0000000 --- a/1/README.txt +++ /dev/null @@ -1,36 +0,0 @@ -../README.txt - -# functions, arguments, strings, side effects, return values, variables -hello{0,1,2}.c - -# ints, conditionals, Boolean expressions, chars, logical operators -compare{0,1,2,3,4}.c -agree{0,1,2}.c - -# loops -cat{0,1,2,3,4,5}.c - -# make a function, scope -cat{6,7,8}.c - -# user input with do-while -cat8.c - -# return value -cat9.c - -# problem solving, constants, comments, pseudocode -mario{0,1,2,3,4,5}.c - -# return value, variables -calculator{0,1}.c - -# overflow, long -calculator{2,3,4}.c - -# truncation, casting -calculator{5,6}.c - -# imprecision -calculator7.c - diff --git a/1/src1/agree0.c b/1/src1/agree0.c deleted file mode 100644 index cc68b1c..0000000 --- a/1/src1/agree0.c +++ /dev/null @@ -1,20 +0,0 @@ -// Comparing against lowercase char - -#include -#include - -int main(void) -{ - // Prompt user to agree - char c = get_char("Do you agree? "); - - // Check whether agreed - if (c == 'y') - { - printf("Agreed.\n"); - } - else if (c == 'n') - { - printf("Not agreed.\n"); - } -} diff --git a/1/src1/agree1.c b/1/src1/agree1.c deleted file mode 100644 index ec6100e..0000000 --- a/1/src1/agree1.c +++ /dev/null @@ -1,28 +0,0 @@ -// Comparing against lowercase and uppercase char - -#include -#include - -int main(void) -{ - // Prompt user to agree - char c = get_char("Do you agree? "); - - // Check whether agreed - if (c == 'y') - { - printf("Agreed.\n"); - } - else if (c == 'Y') - { - printf("Agreed.\n"); - } - else if (c == 'n') - { - printf("Not agreed.\n"); - } - else if (c == 'N') - { - printf("Not agreed.\n"); - } -} diff --git a/1/src1/agree2.c b/1/src1/agree2.c deleted file mode 100644 index dfc5db0..0000000 --- a/1/src1/agree2.c +++ /dev/null @@ -1,20 +0,0 @@ -// Logical operators - -#include -#include - -int main(void) -{ - // Prompt user to agree - char c = get_char("Do you agree? "); - - // Check whether agreed - if (c == 'Y' || c == 'y') - { - printf("Agreed.\n"); - } - else if (c == 'N' || c == 'n') - { - printf("Not agreed.\n"); - } -} diff --git a/6/src6/1/agree.c b/1/src1/answer.c similarity index 51% rename from 6/src6/1/agree.c rename to 1/src1/answer.c index dfc5db0..4bdbd58 100644 --- a/6/src6/1/agree.c +++ b/1/src1/answer.c @@ -5,16 +5,16 @@ int main(void) { - // Prompt user to agree - char c = get_char("Do you agree? "); + // Prompt user for answer + char c = get_char("Answer: "); - // Check whether agreed + // Check answer if (c == 'Y' || c == 'y') { - printf("Agreed.\n"); + printf("yes\n"); } else if (c == 'N' || c == 'n') { - printf("Not agreed.\n"); + printf("no\n"); } } diff --git a/1/src1/calculator0.c b/1/src1/calculator0.c deleted file mode 100644 index 3847ba4..0000000 --- a/1/src1/calculator0.c +++ /dev/null @@ -1,19 +0,0 @@ -// Addition with int - -#include -#include - -int main(void) -{ - // Prompt user for x - int x = get_int("x: "); - - // Prompt user for y - int y = get_int("y: "); - - // Add numbers - int z = x + y; - - // Perform addition - printf("%i\n", z); -} diff --git a/1/src1/calculator1.c b/1/src1/calculator1.c deleted file mode 100644 index bbe4cd0..0000000 --- a/1/src1/calculator1.c +++ /dev/null @@ -1,16 +0,0 @@ -// Addition with int, without third variable - -#include -#include - -int main(void) -{ - // Prompt user for x - int x = get_int("x: "); - - // Prompt user for y - int y = get_int("y: "); - - // Perform addition - printf("%i\n", x + y); -} diff --git a/1/src1/calculator2.c b/1/src1/calculator2.c deleted file mode 100644 index 71d7494..0000000 --- a/1/src1/calculator2.c +++ /dev/null @@ -1,13 +0,0 @@ -// Doubles a number - -#include -#include - -int main(void) -{ - // Prompt user for x - int x = get_int("x: "); - - // Double it - printf("%i\n", x * 2); -} diff --git a/1/src1/calculator3.c b/1/src1/calculator3.c deleted file mode 100644 index b616b5a..0000000 --- a/1/src1/calculator3.c +++ /dev/null @@ -1,22 +0,0 @@ -// Overflow - -#include -#include - -int main(void) -{ - int dollars = 1; - while (true) - { - char c = get_char("Here's $%i. Double it and give to next person? ", dollars); - if (c == 'y') - { - dollars *= 2; - } - else - { - break; - } - } - printf("Here's $%i.\n", dollars); -} diff --git a/1/src1/calculator4.c b/1/src1/calculator4.c deleted file mode 100644 index d629c22..0000000 --- a/1/src1/calculator4.c +++ /dev/null @@ -1,22 +0,0 @@ -// long - -#include -#include - -int main(void) -{ - long dollars = 1; - while (true) - { - char c = get_char("Here's $%li. Double it and give to next person? ", dollars); - if (c == 'y') - { - dollars *= 2; - } - else - { - break; - } - } - printf("Here's $%li.\n", dollars); -} diff --git a/1/src1/calculator5.c b/1/src1/calculator5.c deleted file mode 100644 index 845c322..0000000 --- a/1/src1/calculator5.c +++ /dev/null @@ -1,16 +0,0 @@ -// Division with ints, demonstrating truncation - -#include -#include - -int main(void) -{ - // Prompt user for x - int x = get_int("x: "); - - // Prompt user for y - int y = get_int("y: "); - - // Divide x by y - printf("%i\n", x / y); -} diff --git a/1/src1/calculator6.c b/1/src1/calculator6.c deleted file mode 100644 index ffbbdf7..0000000 --- a/1/src1/calculator6.c +++ /dev/null @@ -1,16 +0,0 @@ -// Casting - -#include -#include - -int main(void) -{ - // Prompt user for x - int x = get_int("x: "); - - // Prompt user for y - int y = get_int("y: "); - - // Divide x by y - printf("%f\n", (float) x / y); -} diff --git a/1/src1/cat1.c b/1/src1/cat1.c deleted file mode 100644 index d9a63fc..0000000 --- a/1/src1/cat1.c +++ /dev/null @@ -1,13 +0,0 @@ -// Better design - -#include - -int main(void) -{ - int i = 3; - while (i > 0) - { - printf("meow\n"); - i--; - } -} diff --git a/1/src1/cat2.c b/1/src1/cat2.c deleted file mode 100644 index 8aa91e1..0000000 --- a/1/src1/cat2.c +++ /dev/null @@ -1,13 +0,0 @@ -// Print values of i - -#include - -int main(void) -{ - int i = 1; - while (i <= 3) - { - printf("meow\n"); - i++; - } -} diff --git a/1/src1/cat3.c b/1/src1/cat3.c deleted file mode 100644 index 88ce846..0000000 --- a/1/src1/cat3.c +++ /dev/null @@ -1,13 +0,0 @@ -// Better design - -#include - -int main(void) -{ - int i = 0; - while (i < 3) - { - printf("meow\n"); - i++; - } -} diff --git a/1/src1/cat5.c b/1/src1/cat5.c deleted file mode 100644 index 7ca7dbc..0000000 --- a/1/src1/cat5.c +++ /dev/null @@ -1,12 +0,0 @@ -// Infinite loop - -#include -#include - -int main(void) -{ - while (true) - { - printf("meow\n"); - } -} diff --git a/1/src1/cat8.c b/1/src1/cat8.c deleted file mode 100644 index 2427fe7..0000000 --- a/1/src1/cat8.c +++ /dev/null @@ -1,26 +0,0 @@ -// User input - -#include -#include - -void meow(int n); - -int main(void) -{ - int n; - do - { - n = get_int("Number: "); - } - while (n < 1); - meow(n); -} - -// Meow some number of times -void meow(int n) -{ - for (int i = 0; i < n; i++) - { - printf("meow\n"); - } -} diff --git a/1/src1/cat9.c b/1/src1/cat9.c deleted file mode 100644 index 68527d3..0000000 --- a/1/src1/cat9.c +++ /dev/null @@ -1,34 +0,0 @@ -// Return value - -#include -#include - -int get_positive_int(void); -void meow(int n); - -int main(void) -{ - int n = get_positive_int(); - meow(n); -} - -// Get number of meows -int get_positive_int(void) -{ - int n; - do - { - n = get_int("Number: "); - } - while (n < 1); - return n; -} - -// Meow some number of times -void meow(int n) -{ - for (int i = 0; i < n; i++) - { - printf("meow\n"); - } -} diff --git a/1/src1/compare0.c b/1/src1/compare0.c deleted file mode 100644 index e63f8bd..0000000 --- a/1/src1/compare0.c +++ /dev/null @@ -1,17 +0,0 @@ -// Conditional, Boolean expression, relational operator - -#include -#include - -int main(void) -{ - // Prompt user for integers - int x = get_int("What's x? "); - int y = get_int("What's y? "); - - // Compare integers - if (x < y) - { - printf("x is less than y\n"); - } -} diff --git a/1/src1/compare1.c b/1/src1/compare1.c deleted file mode 100644 index da4cab0..0000000 --- a/1/src1/compare1.c +++ /dev/null @@ -1,21 +0,0 @@ -// Conditionals that are mutually exclusive - -#include -#include - -int main(void) -{ - // Prompt user for integers - int x = get_int("What's x? "); - int y = get_int("What's y? "); - - // Compare integers - if (x < y) - { - printf("x is less than y\n"); - } - else - { - printf("x is not less than y\n"); - } -} diff --git a/1/src1/compare2.c b/1/src1/compare2.c deleted file mode 100644 index e231320..0000000 --- a/1/src1/compare2.c +++ /dev/null @@ -1,25 +0,0 @@ -// Conditionals that aren't mutually exclusive - -#include -#include - -int main(void) -{ - // Prompt user for integers - int x = get_int("What's x? "); - int y = get_int("What's y? "); - - // Compare integers - if (x < y) - { - printf("x is less than y\n"); - } - if (x > y) - { - printf("x is greater than y\n"); - } - if (x == y) - { - printf("x is equal to y\n"); - } -} diff --git a/1/src1/compare3.c b/1/src1/compare3.c deleted file mode 100644 index a419964..0000000 --- a/1/src1/compare3.c +++ /dev/null @@ -1,25 +0,0 @@ -// Conditional that isn't necessary - -#include -#include - -int main(void) -{ - // Prompt user for integers - int x = get_int("What's x? "); - int y = get_int("What's y? "); - - // Compare integers - if (x < y) - { - printf("x is less than y\n"); - } - else if (x > y) - { - printf("x is greater than y\n"); - } - else if (x == y) - { - printf("x is equal to y\n"); - } -} diff --git a/1/src1/compare4.c b/1/src1/conditions.c similarity index 60% rename from 1/src1/compare4.c rename to 1/src1/conditions.c index ddbc2c6..d29a6d1 100644 --- a/1/src1/compare4.c +++ b/1/src1/conditions.c @@ -1,15 +1,17 @@ -// Conditionals +// Conditions and relational operators #include #include int main(void) { - // Prompt user for integers - int x = get_int("What's x? "); - int y = get_int("What's y? "); + // Prompt user for x + int x = get_int("x: "); - // Compare integers + // Prompt user for y + int y = get_int("y: "); + + // Compare x and y if (x < y) { printf("x is less than y\n"); diff --git a/1/src1/cat0.c b/1/src1/cough0.c similarity index 51% rename from 1/src1/cat0.c rename to 1/src1/cough0.c index 457aa39..02cc98a 100644 --- a/1/src1/cat0.c +++ b/1/src1/cough0.c @@ -4,7 +4,7 @@ int main(void) { - printf("meow\n"); - printf("meow\n"); - printf("meow\n"); + printf("cough\n"); + printf("cough\n"); + printf("cough\n"); } diff --git a/1/src1/cat4.c b/1/src1/cough1.c similarity index 78% rename from 1/src1/cat4.c rename to 1/src1/cough1.c index 023f307..32c1885 100644 --- a/1/src1/cat4.c +++ b/1/src1/cough1.c @@ -6,6 +6,6 @@ int main(void) { for (int i = 0; i < 3; i++) { - printf("meow\n"); + printf("cough\n"); } } diff --git a/1/src1/cat6.c b/1/src1/cough2.c similarity index 54% rename from 1/src1/cat6.c rename to 1/src1/cough2.c index d118657..25adde9 100644 --- a/1/src1/cat6.c +++ b/1/src1/cough2.c @@ -2,18 +2,18 @@ #include -void meow(void); +void cough(void); int main(void) { for (int i = 0; i < 3; i++) { - meow(); + cough(); } } -// Meow once -void meow(void) +// Cough once +void cough(void) { - printf("meow\n"); + printf("cough\n"); } diff --git a/1/src1/cat7.c b/1/src1/cough3.c similarity index 54% rename from 1/src1/cat7.c rename to 1/src1/cough3.c index 4a3d500..47f6a17 100644 --- a/1/src1/cat7.c +++ b/1/src1/cough3.c @@ -2,18 +2,18 @@ #include -void meow(int n); +void cough(int n); int main(void) { - meow(3); + cough(3); } -// Meow some number of times -void meow(int n) +// Cough some number of times +void cough(int n) { for (int i = 0; i < n; i++) { - printf("meow\n"); + printf("cough\n"); } } diff --git a/1/src1/count.c b/1/src1/count.c deleted file mode 100644 index 478d0a6..0000000 --- a/1/src1/count.c +++ /dev/null @@ -1,12 +0,0 @@ -// Counting forever, exit with ctl-c - -#include - -int main(void) -{ - int i = 1; - while (true) - { - printf("%i, ah ah ah\n" - } -} diff --git a/1/src1/doubles.c b/1/src1/doubles.c new file mode 100644 index 0000000..488fd5e --- /dev/null +++ b/1/src1/doubles.c @@ -0,0 +1,16 @@ +// Floating-point arithmetic with double + +#include +#include + +int main(void) +{ + // Prompt user for x + double x = get_double("x: "); + + // Prompt user for y + double y = get_double("y: "); + + // Perform division + printf("x / y = %.50f\n", x / y); +} diff --git a/1/src1/float.c b/1/src1/float.c new file mode 100644 index 0000000..03bbb6d --- /dev/null +++ b/1/src1/float.c @@ -0,0 +1,10 @@ +// get_float and printf with %f + +#include +#include + +int main(void) +{ + float f = get_float("Float: "); + printf("hello, %f\n", f); +} diff --git a/1/src1/calculator7.c b/1/src1/floats.c similarity index 63% rename from 1/src1/calculator7.c rename to 1/src1/floats.c index da2bf9c..8682b45 100644 --- a/1/src1/calculator7.c +++ b/1/src1/floats.c @@ -1,4 +1,4 @@ -// Floats +// Floating-point arithmetic with float #include #include @@ -11,6 +11,6 @@ int main(void) // Prompt user for y float y = get_float("y: "); - // Divide x by y - printf("%.50f\n", x / y); + // Perform division + printf("x / y = %.50f\n", x / y); } diff --git a/2/src2/hello0.c b/1/src1/hello.c similarity index 83% rename from 2/src2/hello0.c rename to 1/src1/hello.c index 927f7b6..02f12bd 100644 --- a/2/src2/hello0.c +++ b/1/src1/hello.c @@ -1,3 +1,5 @@ +// A program + #include int main(void) diff --git a/1/src1/hello1.c b/1/src1/hello1.c deleted file mode 100644 index 0fdfef2..0000000 --- a/1/src1/hello1.c +++ /dev/null @@ -1,10 +0,0 @@ -// get_string and printf with incorrect placeholder - -#include -#include - -int main(void) -{ - string answer = get_string("What's your name? "); - printf("hello, answer\n"); -} diff --git a/1/src1/hello2.c b/1/src1/hello2.c deleted file mode 100644 index e55eb61..0000000 --- a/1/src1/hello2.c +++ /dev/null @@ -1,10 +0,0 @@ -// get_string and printf with %s - -#include -#include - -int main(void) -{ - string answer = get_string("What's your name? "); - printf("hello, %s\n", answer); -} diff --git a/1/src1/int.c b/1/src1/int.c new file mode 100644 index 0000000..3cf137b --- /dev/null +++ b/1/src1/int.c @@ -0,0 +1,10 @@ +// get_int and printf with %i + +#include +#include + +int main(void) +{ + int i = get_int("Integer: "); + printf("hello, %i\n", i); +} diff --git a/1/src1/ints.c b/1/src1/ints.c new file mode 100644 index 0000000..3b2b5f6 --- /dev/null +++ b/1/src1/ints.c @@ -0,0 +1,20 @@ +// Integer arithmetic + +#include +#include + +int main(void) +{ + // Prompt user for x + int x = get_int("x: "); + + // Prompt user for y + int y = get_int("y: "); + + // Perform arithmetic + printf("x + y = %i\n", x + y); + printf("x - y = %i\n", x - y); + printf("x * y = %i\n", x * y); + printf("x / y = %i\n", x / y); + printf("x mod y = %i\n", x % y); +} diff --git a/1/src1/mario0.c b/1/src1/mario0.c deleted file mode 100644 index 1aad0c7..0000000 --- a/1/src1/mario0.c +++ /dev/null @@ -1,8 +0,0 @@ -// Prints a row of 4 question marks - -#include - -int main(void) -{ - printf("????\n"); -} diff --git a/1/src1/mario1.c b/1/src1/mario1.c deleted file mode 100644 index ef446bc..0000000 --- a/1/src1/mario1.c +++ /dev/null @@ -1,12 +0,0 @@ -// Prints a row of 4 question marks with a loop - -#include - -int main(void) -{ - for (int i = 0; i < 4; i++) - { - printf("?"); - } - printf("\n"); -} diff --git a/1/src1/mario3.c b/1/src1/mario3.c deleted file mode 100644 index 97efbad..0000000 --- a/1/src1/mario3.c +++ /dev/null @@ -1,15 +0,0 @@ -// Prints a 3-by-3 grid of bricks with nested loops - -#include - -int main(void) -{ - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - { - printf("#"); - } - printf("\n"); - } -} diff --git a/1/src1/mario4.c b/1/src1/mario4.c deleted file mode 100644 index 52a664c..0000000 --- a/1/src1/mario4.c +++ /dev/null @@ -1,16 +0,0 @@ -// Prints a 3-by-3 grid of bricks with nested loops using a constant - -#include - -int main(void) -{ - const int n = 3; - for (int i = 0; i < n; i++) - { - for (int j = 0; j < n; j++) - { - printf("#"); - } - printf("\n"); - } -} diff --git a/1/src1/mario5.c b/1/src1/mario5.c deleted file mode 100644 index ab98a35..0000000 --- a/1/src1/mario5.c +++ /dev/null @@ -1,23 +0,0 @@ -// Helper function - -#include - -void print_row(int width); - -int main(void) -{ - const int n = 3; - for (int i = 0; i < n; i++) - { - print_row(n); - } -} - -void print_row(int width) -{ - for (int i = 0; i < width; i++) - { - printf("#"); - } - printf("\n"); -} diff --git a/1/src1/overflow.c b/1/src1/overflow.c new file mode 100644 index 0000000..290bdfc --- /dev/null +++ b/1/src1/overflow.c @@ -0,0 +1,13 @@ +// Integer overflow + +#include +#include + +int main(void) +{ + // Iteratively double i + for (int i = 1; ; i *= 2) + { + printf("%i\n", i); + } +} diff --git a/1/src1/parity.c b/1/src1/parity.c new file mode 100644 index 0000000..7526ecc --- /dev/null +++ b/1/src1/parity.c @@ -0,0 +1,20 @@ +// Remainder operation + +#include +#include + +int main(void) +{ + // Prompt user for integer + int n = get_int("n: "); + + // Check parity of integer + if (n % 2 == 0) + { + printf("even\n"); + } + else + { + printf("odd\n"); + } +} diff --git a/1/src1/positive.c b/1/src1/positive.c new file mode 100644 index 0000000..3069970 --- /dev/null +++ b/1/src1/positive.c @@ -0,0 +1,24 @@ +// Abstraction and scope + +#include +#include + +int get_positive_int(string prompt); + +int main(void) +{ + int i = get_positive_int("Positive integer: "); + printf("%i\n", i); +} + +// Prompt user for positive integer +int get_positive_int(string prompt) +{ + int n; + do + { + n = get_int("%s", prompt); + } + while (n < 1); + return n; +} diff --git a/6/src6/1/hello1.c b/1/src1/string.c similarity index 50% rename from 6/src6/1/hello1.c rename to 1/src1/string.c index e55eb61..8162882 100644 --- a/6/src6/1/hello1.c +++ b/1/src1/string.c @@ -5,6 +5,6 @@ int main(void) { - string answer = get_string("What's your name? "); - printf("hello, %s\n", answer); + string s = get_string("Name: "); + printf("hello, %s\n", s); } diff --git a/2/README.md b/2/README.md new file mode 100644 index 0000000..8d2a29d --- /dev/null +++ b/2/README.md @@ -0,0 +1,30 @@ +# Week 2 + +## Tools + +1. `buggy*.c` +1. `style*.c` + +## Arrays + +1. `scores*.c` + +## Strings + +1. `string*.c` +1. `strlen.c` +1. `ascii*.c` +1. `capitalize*.c` + +## Command-line Arguments + +1. `argv*.c` + +## Exit Codes + +1. `exit.c` + +## Search + +1. `linear.c` +1. `binary*.c` diff --git a/2/README.txt b/2/README.txt deleted file mode 100644 index b9ee38b..0000000 --- a/2/README.txt +++ /dev/null @@ -1,17 +0,0 @@ -../README.txt - -hello{0,1}.c - -buggy{0,1,2}.c - -scores{0,1,2,3,4,5}.c - -hi{0,1,2,3,4,5,6,7}.c - -length{0,1,2}.c -string{0,1}.c -uppercase{0,1,2}.c - -greet{0,1,2,3}.c - -status.c diff --git a/2/src2/greet2.c b/2/src2/argv0.c similarity index 84% rename from 2/src2/greet2.c rename to 2/src2/argv0.c index e88dd18..ce5b340 100644 --- a/2/src2/greet2.c +++ b/2/src2/argv0.c @@ -1,4 +1,4 @@ -// Prints a command-line argument +// Printing a command-line argument #include #include diff --git a/2/src2/greet3.c b/2/src2/argv1.c similarity index 81% rename from 2/src2/greet3.c rename to 2/src2/argv1.c index 868753c..8331507 100644 --- a/2/src2/greet3.c +++ b/2/src2/argv1.c @@ -1,4 +1,4 @@ -// Prints command-line arguments +// Printing command-line arguments #include #include diff --git a/2/src2/argv2.c b/2/src2/argv2.c new file mode 100644 index 0000000..c2b9399 --- /dev/null +++ b/2/src2/argv2.c @@ -0,0 +1,17 @@ +// Printing characters in an array of strings + +#include +#include +#include + +int main(int argc, string argv[]) +{ + for (int i = 0; i < argc; i++) + { + for (int j = 0, n = strlen(argv[i]); j < n; j++) + { + printf("%c\n", argv[i][j]); + } + printf("\n"); + } +} diff --git a/2/src2/ascii0.c b/2/src2/ascii0.c new file mode 100644 index 0000000..bcdac9a --- /dev/null +++ b/2/src2/ascii0.c @@ -0,0 +1,15 @@ +// Explicitly casts chars to ints + +#include +#include +#include + +int main(void) +{ + string s = get_string("String: "); + for (int i = 0; i < strlen(s); i++) + { + int c = (int) s[i]; + printf("%c %i\n", s[i], c); + } +} diff --git a/2/src2/ascii1.c b/2/src2/ascii1.c new file mode 100644 index 0000000..15208f7 --- /dev/null +++ b/2/src2/ascii1.c @@ -0,0 +1,14 @@ +// Implicitly casts chars to ints + +#include +#include +#include + +int main(void) +{ + string s = get_string("String: "); + for (int i = 0; i < strlen(s); i++) + { + printf("%c %i\n", s[i], s[i]); + } +} diff --git a/2/src2/binary0.c b/2/src2/binary0.c new file mode 100644 index 0000000..f890a7f --- /dev/null +++ b/2/src2/binary0.c @@ -0,0 +1,51 @@ +// Iterative binary search + +#include +#include +#include + +// Names in a phone book +string book[] = { + "Chen", + "Kernighan", + "Leitner", + "Lewis", + "Malan", + "Muller", + "Seltzer", + "Shieber", + "Smith" +}; + +int main(void) +{ + // Prompt user for name + string name = get_string("Name: "); + + // Search for name + int left = 0, right = sizeof(book) / sizeof(string) - 1; + while (left <= right) + { + // Look at middle + int middle = (left + right) / 2; + if (strcmp(name, book[middle]) == 0) + { + printf("Calling %s\n", name); + return 0; + } + + // Search left half + else if (strcmp(name, book[middle]) < 0) + { + right = middle - 1; + } + + // Search right half + else if (strcmp(name, book[middle]) > 0) + { + left = middle + 1; + } + } + printf("Quitting\n"); + return 1; +} diff --git a/2/src2/binary1.c b/2/src2/binary1.c new file mode 100644 index 0000000..76631a4 --- /dev/null +++ b/2/src2/binary1.c @@ -0,0 +1,67 @@ +// Recursive binary search + +#include +#include +#include + +// Names in a phone book +string book[] = { + "Chen", + "Kernighan", + "Leitner", + "Lewis", + "Malan", + "Muller", + "Seltzer", + "Shieber", + "Smith" +}; + +bool search(string name, string names[], int left, int right); + +int main(void) +{ + // Prompt user for name + string name = get_string("Name: "); + + // Search for name + if (search(name, book, 0, sizeof(book) / sizeof(string) - 1)) + { + printf("Calling %s\n", name); + } + else + { + printf("Quitting\n"); + } +} + +// Searches names for name +bool search(string name, string names[], int left, int right) +{ + // No more names to search + if (left > right) + { + return false; + } + + // Look at middle + int middle = (left + right) / 2; + if (strcmp(name, names[middle]) == 0) + { + return true; + } + + // Search left half + else if (strcmp(name, names[middle]) < 0) + { + return search(name, names, left, middle - 1); + } + + // Search right half + else if (strcmp(name, names[middle]) > 0) + { + return search(name, names, middle + 1, right); + } + + return false; +} diff --git a/2/src2/buggy0.c b/2/src2/buggy0.c index 80e83fd..820cf1f 100644 --- a/2/src2/buggy0.c +++ b/2/src2/buggy0.c @@ -1,11 +1,6 @@ -// Buggy example for printf - -#include +// Buggy example for help50 int main(void) { - for (int i = 0; i <= 3; i++) - { - printf("#\n"); - } + printf("hello, world\n") } diff --git a/2/src2/buggy1.c b/2/src2/buggy1.c index 9e0055e..d07f5d5 100644 --- a/2/src2/buggy1.c +++ b/2/src2/buggy1.c @@ -1,12 +1,9 @@ -// Buggy example for printf +// Buggy example for help50 #include int main(void) { - for (int i = 0; i <= 3; i++) - { - printf("i is %i\n", i); - printf("#\n"); - } + string s = get_string("Name: "); + printf("hello, %s\n", s); } diff --git a/2/src2/buggy2.c b/2/src2/buggy2.c index 31f8021..de08e7d 100644 --- a/2/src2/buggy2.c +++ b/2/src2/buggy2.c @@ -1,19 +1,10 @@ -// Buggy example for debug50 +// Buggy example for printf -#include #include -void print_column(int height); - int main(void) { - int h = get_int("Height: "); - print_column(h); -} - -void print_column(int height) -{ - for (int i = 0; i <= height; i++) + for (int i = 0; i <= 10; i++) { printf("#\n"); } diff --git a/2/src2/uppercase0.c b/2/src2/capitalize0.c similarity index 83% rename from 2/src2/uppercase0.c rename to 2/src2/capitalize0.c index 57b38a7..e17ce90 100644 --- a/2/src2/uppercase0.c +++ b/2/src2/capitalize0.c @@ -1,4 +1,4 @@ -// Uppercases a string +// Capitalizes a string #include #include @@ -12,7 +12,7 @@ int main(void) { if (s[i] >= 'a' && s[i] <= 'z') { - printf("%c", s[i] - 32); + printf("%c", s[i] - ('a' - 'A')); } else { diff --git a/2/src2/uppercase1.c b/2/src2/capitalize1.c similarity index 84% rename from 2/src2/uppercase1.c rename to 2/src2/capitalize1.c index e17126d..0a1c254 100644 --- a/2/src2/uppercase1.c +++ b/2/src2/capitalize1.c @@ -1,4 +1,4 @@ -// Uppercases string using ctype library (and an unnecessary condition) +// Capitalizes string using ctype library (and an unnecessary condition) #include #include diff --git a/6/src6/2/uppercase2.c b/2/src2/capitalize2.c similarity index 86% rename from 6/src6/2/uppercase2.c rename to 2/src2/capitalize2.c index 2a93c0f..27f9b3c 100644 --- a/6/src6/2/uppercase2.c +++ b/2/src2/capitalize2.c @@ -1,4 +1,4 @@ -// Uppercases string using ctype library +// Capitalizes string using ctype library #include #include diff --git a/2/src2/status.c b/2/src2/exit.c similarity index 80% rename from 2/src2/status.c rename to 2/src2/exit.c index 2d74c79..4ec7d46 100644 --- a/2/src2/status.c +++ b/2/src2/exit.c @@ -7,7 +7,7 @@ int main(int argc, string argv[]) { if (argc != 2) { - printf("Missing command-line argument\n"); + printf("missing command-line argument\n"); return 1; } printf("hello, %s\n", argv[1]); diff --git a/2/src2/greet0.c b/2/src2/greet0.c deleted file mode 100644 index 8151b6b..0000000 --- a/2/src2/greet0.c +++ /dev/null @@ -1,10 +0,0 @@ -// Uses get_string - -#include -#include - -int main(void) -{ - string answer = get_string("What's your name? "); - printf("hello, %s\n", answer); -} diff --git a/2/src2/greet1.c b/2/src2/greet1.c deleted file mode 100644 index d9ec594..0000000 --- a/2/src2/greet1.c +++ /dev/null @@ -1,9 +0,0 @@ -// Prints a command-line argument - -#include -#include - -int main(int argc, string argv[]) -{ - printf("hello, %s\n", argv[1]); -} diff --git a/2/src2/hi0.c b/2/src2/hi0.c deleted file mode 100644 index 2284fa0..0000000 --- a/2/src2/hi0.c +++ /dev/null @@ -1,12 +0,0 @@ -// Prints chars - -#include - -int main(void) -{ - char c1 = 'H'; - char c2 = 'I'; - char c3 = '!'; - - printf("%c%c%c\n", c1, c2, c3); -} diff --git a/2/src2/hi1.c b/2/src2/hi1.c deleted file mode 100644 index ee1ae9c..0000000 --- a/2/src2/hi1.c +++ /dev/null @@ -1,12 +0,0 @@ -// Prints chars' ASCII codes - -#include - -int main(void) -{ - char c1 = 'H'; - char c2 = 'I'; - char c3 = '!'; - - printf("%i %i %i\n", c1, c2, c3); -} diff --git a/2/src2/hi2.c b/2/src2/hi2.c deleted file mode 100644 index 44cdc85..0000000 --- a/2/src2/hi2.c +++ /dev/null @@ -1,10 +0,0 @@ -// Prints string - -#include -#include - -int main(void) -{ - string s = "HI!"; - printf("%s\n", s); -} diff --git a/2/src2/hi3.c b/2/src2/hi3.c deleted file mode 100644 index 0ba390f..0000000 --- a/2/src2/hi3.c +++ /dev/null @@ -1,10 +0,0 @@ -// Treats string as array - -#include -#include - -int main(void) -{ - string s = "HI!"; - printf("%c%c%c\n", s[0], s[1], s[2]); -} diff --git a/2/src2/hi4.c b/2/src2/hi4.c deleted file mode 100644 index d6ff6a1..0000000 --- a/2/src2/hi4.c +++ /dev/null @@ -1,10 +0,0 @@ -// Prints string's ASCII codes, including NUL - -#include -#include - -int main(void) -{ - string s = "HI!"; - printf("%i %i %i %i\n", s[0], s[1], s[2], s[3]); -} diff --git a/2/src2/hi5.c b/2/src2/hi5.c deleted file mode 100644 index 130afd6..0000000 --- a/2/src2/hi5.c +++ /dev/null @@ -1,13 +0,0 @@ -// Multiple strings - -#include -#include - -int main(void) -{ - string s = "HI!"; - string t = "BYE!"; - - printf("%s\n", s); - printf("%s\n", t); -} diff --git a/2/src2/hi6.c b/2/src2/hi6.c deleted file mode 100644 index 18af39e..0000000 --- a/2/src2/hi6.c +++ /dev/null @@ -1,15 +0,0 @@ -// Array of strings - -#include -#include - -int main(void) -{ - string words[2]; - - words[0] = "HI!"; - words[1] = "BYE!"; - - printf("%s\n", words[0]); - printf("%s\n", words[1]); -} diff --git a/2/src2/hi7.c b/2/src2/hi7.c deleted file mode 100644 index 0f920ea..0000000 --- a/2/src2/hi7.c +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - -int main(void) -{ - string words[2]; - - words[0] = "HI!"; - words[1] = "BYE!"; - - printf("%c%c%c\n", words[0][0], words[0][1], words[0][2]); - printf("%c%c%c%c\n", words[1][0], words[1][1], words[1][2], words[1][3]); -} diff --git a/2/src2/length1.c b/2/src2/length1.c deleted file mode 100644 index 034b57a..0000000 --- a/2/src2/length1.c +++ /dev/null @@ -1,25 +0,0 @@ -// Determines the length of a string using a function - -#include -#include - -int string_length(string s); - -int main(void) -{ - // Prompt for user's name - string name = get_string("Name: "); - int length = string_length(name); - printf("%i\n", length); -} - -int string_length(string s) -{ - // Count number of characters up until '\0' (aka NUL) - int n = 0; - while (s[n] != '\0') - { - n++; - } - return n; -} diff --git a/2/src2/length2.c b/2/src2/length2.c deleted file mode 100644 index 114911f..0000000 --- a/2/src2/length2.c +++ /dev/null @@ -1,13 +0,0 @@ -// Determines the length of a string using a function - -#include -#include -#include - -int main(void) -{ - // Prompt for user's name - string name = get_string("Name: "); - int length = strlen(name); - printf("%i\n", length); -} diff --git a/2/src2/linear.c b/2/src2/linear.c new file mode 100644 index 0000000..08d7ae1 --- /dev/null +++ b/2/src2/linear.c @@ -0,0 +1,35 @@ +// Linear search + +#include +#include +#include + +// Names in a phone book +string book[] = { + "Chen", + "Kernighan", + "Leitner", + "Lewis", + "Malan", + "Muller", + "Seltzer", + "Shieber", + "Smith" +}; + +int main(void) +{ + // Prompt user for name + string name = get_string("Name: "); + + // Search for name + for (int i = 0; i < sizeof(book) / sizeof(string); i++) + { + if (strcmp(name, book[i]) == 0) + { + printf("Calling %s\n", name); + return 0; + } + } + printf("Quitting\n"); +} diff --git a/2/src2/scores0.c b/2/src2/scores0.c index 344a652..8352066 100644 --- a/2/src2/scores0.c +++ b/2/src2/scores0.c @@ -1,14 +1,36 @@ -// Averages three (hardcoded) numbers +// Generates a bar chart of three scores +#include #include int main(void) { - // Scores - int score1 = 72; - int score2 = 73; - int score3 = 33; + // Get scores from user + int score1 = get_int("Score 1: "); + int score2 = get_int("Score 2: "); + int score3 = get_int("Score 3: "); - // Print average - printf("Average: %f\n", (score1 + score2 + score3) / 3.0); + // Generate first bar + printf("Score 1: "); + for (int i = 0; i < score1; i++) + { + printf("#"); + } + printf("\n"); + + // Generate second bar + printf("Score 2: "); + for (int i = 0; i < score2; i++) + { + printf("#"); + } + printf("\n"); + + // Generate third bar + printf("Score 3: "); + for (int i = 0; i < score3; i++) + { + printf("#"); + } + printf("\n"); } diff --git a/2/src2/scores1.c b/2/src2/scores1.c index f33a925..2df7160 100644 --- a/2/src2/scores1.c +++ b/2/src2/scores1.c @@ -1,16 +1,37 @@ -// Averages three (hardcoded) numbers using an array +// Generates a bar chart of three scores #include #include +void chart(int score); + int main(void) { - // Scores - int scores[3]; - scores[0] = 72; - scores[1] = 73; - scores[2] = 33; + // Get scores from user + int score1 = get_int("Score 1: "); + int score2 = get_int("Score 2: "); + int score3 = get_int("Score 3: "); + + // Chart first score + printf("Score 1: "); + chart(score1); + + // Chart second score + printf("Score 2: "); + chart(score2); - // Print average - printf("Average: %f\n", (scores[0] + scores[1] + scores[2]) / 3.0); + // Chart third score + printf("Score 3: "); + chart(score3); +} + +// Generate bar +void chart(int score) +{ + // Output one hash per point + for (int i = 0; i < score; i++) + { + printf("#"); + } + printf("\n"); } diff --git a/2/src2/scores2.c b/2/src2/scores2.c index b279f2d..7880a2f 100644 --- a/2/src2/scores2.c +++ b/2/src2/scores2.c @@ -1,16 +1,34 @@ -// Averages three numbers using an array +// Generates a bar chart of three scores using an array #include #include +void chart(int score); + int main(void) { - // Get scores + // Get scores from user int scores[3]; - scores[0] = get_int("Score: "); - scores[1] = get_int("Score: "); - scores[2] = get_int("Score: "); + for (int i = 0; i < 3; i++) + { + scores[i] = get_int("Score %i: ", i + 1); + } + + // Chart scores + for (int i = 0; i < 3; i++) + { + printf("Score %i: ", i + 1); + chart(scores[i]); + } +} - // Print average - printf("Average: %f\n", (scores[0] + scores[1] + scores[2]) / 3.0); +// Generate bar +void chart(int score) +{ + // Output one hash per point + for (int i = 0; i < score; i++) + { + printf("#"); + } + printf("\n"); } diff --git a/2/src2/scores3.c b/2/src2/scores3.c index 9e52554..a829447 100644 --- a/2/src2/scores3.c +++ b/2/src2/scores3.c @@ -1,17 +1,36 @@ -// Averages three numbers using an array and a loop +// Generates a bar chart of three scores by using an array and using a constant #include #include +const int COUNT = 3; + +void chart(int score); + int main(void) { - // Get scores - int scores[3]; - for (int i = 0; i < 3; i++) + // Get scores from user + int scores[COUNT]; + for (int i = 0; i < COUNT; i++) { - scores[i] = get_int("Score: "); + scores[i] = get_int("Score %i: ", i + 1); } - // Print average - printf("Average: %f\n", (scores[0] + scores[1] + scores[2]) / 3.0); + // Chart scores + for (int i = 0; i < COUNT; i++) + { + printf("Score %i: ", i + 1); + chart(scores[i]); + } +} + +// Generate bar +void chart(int score) +{ + // Output one hash per point + for (int i = 0; i < score; i++) + { + printf("#"); + } + printf("\n"); } diff --git a/2/src2/scores4.c b/2/src2/scores4.c index b4f9aa8..87aa720 100644 --- a/2/src2/scores4.c +++ b/2/src2/scores4.c @@ -1,20 +1,36 @@ -// Adds a constant +// Generates a bar chart of three scores by passing an array, using a constant #include +#include #include +const int COUNT = 3; + +void chart(int count, int scores[]); + int main(void) { - // Number of scores - const int N = 3; - - // Get scores - int scores[N]; - for (int i = 0; i < N; i++) + // Get scores from user + int scores[COUNT]; + for (int i = 0; i < COUNT; i++) { - scores[i] = get_int("Score: "); + scores[i] = get_int("Score %i: ", i + 1); } - // Print average - printf("Average: %f\n", (scores[0] + scores[1] + scores[2]) / (float) N); + // Chart scores + chart(COUNT, scores); +} + +// Generate bars +void chart(int count, int scores[]) +{ + // Output one hash per point + for (int i = 0; i < count; i++) + { + for (int j = 0; j < scores[i]; j++) + { + printf("#"); + } + printf("\n"); + } } diff --git a/2/src2/scores5.c b/2/src2/scores5.c index cb3177a..c12e876 100644 --- a/2/src2/scores5.c +++ b/2/src2/scores5.c @@ -1,35 +1,41 @@ -// Averages three numbers using an array, a constant, and a helper function +// Generates a narrower bar chart of three scores by passing an array, using a constant #include +#include #include -// Constant -const int N = 3; +const int COUNT = 3; -// Prototype -float average(int length, int array[]); +void chart(int count, int scores[]); int main(void) { - // Get scores - int scores[N]; - for (int i = 0; i < N; i++) + // Get scores from user + int scores[COUNT]; + for (int i = 0; i < COUNT; i++) { - scores[i] = get_int("Score: "); + scores[i] = get_int("Score %i: ", i + 1); } - // Print average - printf("Average: %f\n", average(N, scores)); + // Chart scores + chart(COUNT, scores); } -float average(int length, int array[]) +// Generate bars +void chart(int count, int scores[]) { - // Calculate average - int sum = 0; - for (int i = 0; i < length; i++) + // Output one tenth as many hashes + for (int i = 0; i < count; i++) { - sum += array[i]; + // Calculate width + int width = (int) round((float) scores[i] / 10); + + // Generate bar + printf("Score %i: ", i); + for (int j = 0; j < width; j++) + { + printf("#"); + } + printf("\n"); } - return sum / (float) length; } - diff --git a/2/src2/string0.c b/2/src2/string0.c index 5045f8f..5368bec 100644 --- a/2/src2/string0.c +++ b/2/src2/string0.c @@ -1,4 +1,4 @@ -// Prints string char by char, using strlen +// Prints string char by char #include #include @@ -7,10 +7,9 @@ int main(void) { string s = get_string("Input: "); - printf("Output: "); + printf("Output:\n"); for (int i = 0; i < strlen(s); i++) { - printf("%c", s[i]); + printf("%c\n", s[i]); } - printf("\n"); } diff --git a/2/src2/string1.c b/2/src2/string1.c index fe08b20..8d3645f 100644 --- a/2/src2/string1.c +++ b/2/src2/string1.c @@ -1,4 +1,4 @@ -// Prints string char by char, using strlen, remembering string's length +// Prints string char by char, one per line #include #include @@ -6,11 +6,10 @@ int main(void) { - string s = get_string("Input: "); - printf("Output: "); + string s = get_string("Input: "); + printf("Output:\n"); for (int i = 0, n = strlen(s); i < n; i++) { - printf("%c", s[i]); + printf("%c\n", s[i]); } - printf("\n"); } diff --git a/2/src2/length0.c b/2/src2/strlen.c similarity index 78% rename from 2/src2/length0.c rename to 2/src2/strlen.c index fb842a1..e362b4a 100644 --- a/2/src2/length0.c +++ b/2/src2/strlen.c @@ -6,11 +6,11 @@ int main(void) { // Prompt for user's name - string name = get_string("Name: "); + string s = get_string("Name: "); // Count number of characters up until '\0' (aka NUL) int n = 0; - while (name[n] != '\0') + while (s[n] != '\0') { n++; } diff --git a/2/src2/style0.c b/2/src2/style0.c new file mode 100644 index 0000000..6846d8f --- /dev/null +++ b/2/src2/style0.c @@ -0,0 +1,8 @@ +// Poorly styled example for style50 + +#include + +int main(void) +{ +printf("hello, world\n"); +} diff --git a/1/src1/hello0.c b/2/src2/style1.c similarity index 57% rename from 1/src1/hello0.c rename to 2/src2/style1.c index 68e40b6..853c4a9 100644 --- a/1/src1/hello0.c +++ b/2/src2/style1.c @@ -1,8 +1,8 @@ -// A program that says hello to the world +// Poorly styled example for style50 #include int main(void) -{ + { printf("hello, world\n"); -} + } diff --git a/2/src2/uppercase2.c b/2/src2/uppercase2.c deleted file mode 100644 index 2a93c0f..0000000 --- a/2/src2/uppercase2.c +++ /dev/null @@ -1,17 +0,0 @@ -// Uppercases string using ctype library - -#include -#include -#include -#include - -int main(void) -{ - string s = get_string("Before: "); - printf("After: "); - for (int i = 0, n = strlen(s); i < n; i++) - { - printf("%c", toupper(s[i])); - } - printf("\n"); -} diff --git a/3/README.md b/3/README.md new file mode 100644 index 0000000..45e7ab2 --- /dev/null +++ b/3/README.md @@ -0,0 +1,13 @@ +# Lecture 4 + +1. `hello` +1. `compare0`, `compare1` +1. `compare2`, `compare3`, `compare4`, `compare5`, `compare6` +1. `copy0` +1. `copy1`, `copy2` +1. `scanf0`, `scanf1`, `scanf2` +1. `addresses` +1. `noswap` +1. `swap` +1. `memory` +1. `struct0`, `struct1`, `struct2` diff --git a/3/README.txt b/3/README.txt deleted file mode 100644 index 852b417..0000000 --- a/3/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -../README.txt - -search{0,1}.c -phonebook{0,1}.c -iteration.c -recursion.c diff --git a/4/src4/compare4.c b/3/src3/addresses.c similarity index 55% rename from 4/src4/compare4.c rename to 3/src3/addresses.c index 77c3402..aca480c 100644 --- a/4/src4/compare4.c +++ b/3/src3/addresses.c @@ -6,10 +6,10 @@ int main(void) { // Get two strings - char *s = get_string("s: "); - char *t = get_string("t: "); + string s = get_string("s: "); + string t = get_string("t: "); // Print strings' addresses - printf("%p\n", s); - printf("%p\n", t); + printf("s: %p\n", s); + printf("t: %p\n", t); } diff --git a/1/src1/mario2.c b/3/src3/buggy2.c similarity index 50% rename from 1/src1/mario2.c rename to 3/src3/buggy2.c index a8b102c..de08e7d 100644 --- a/1/src1/mario2.c +++ b/3/src3/buggy2.c @@ -1,10 +1,10 @@ -// Prints a column of 3 bricks with a loop +// Buggy example for printf #include int main(void) { - for (int i = 0; i < 3; i++) + for (int i = 0; i <= 10; i++) { printf("#\n"); } diff --git a/4/src4/compare0.c b/3/src3/compare0.c similarity index 80% rename from 4/src4/compare0.c rename to 3/src3/compare0.c index 750c130..f64508c 100644 --- a/4/src4/compare0.c +++ b/3/src3/compare0.c @@ -12,10 +12,10 @@ int main(void) // Compare integers if (i == j) { - printf("Same\n"); + printf("same\n"); } else { - printf("Different\n"); + printf("different\n"); } } diff --git a/4/src4/compare1.c b/3/src3/compare1.c similarity index 61% rename from 4/src4/compare1.c rename to 3/src3/compare1.c index e8c51be..b928f65 100644 --- a/4/src4/compare1.c +++ b/3/src3/compare1.c @@ -6,16 +6,16 @@ int main(void) { // Get two strings - char *s = get_string("s: "); - char *t = get_string("t: "); + string s = get_string("s: "); + string t = get_string("t: "); // Compare strings' addresses if (s == t) { - printf("Same\n"); + printf("same\n"); } else { - printf("Different\n"); + printf("different\n"); } } diff --git a/3/src3/compare2.c b/3/src3/compare2.c new file mode 100644 index 0000000..dc9812d --- /dev/null +++ b/3/src3/compare2.c @@ -0,0 +1,46 @@ +// Compares two strings for equality + +#include +#include +#include + +bool compare_strings(string a, string b); + +int main(void) +{ + // Get two strings + string s = get_string("s: "); + string t = get_string("t: "); + + // Compare strings for equality + if (compare_strings(s, t)) + { + printf("same\n"); + } + else + { + printf("different\n"); + } +} + +bool compare_strings(string a, string b) +{ + // Compare strings' lengths + if (strlen(a) != strlen(b)) + { + return false; + } + + // Compare strings character by character + for (int i = 0, n = strlen(a); i < n; i++) + { + // Different + if (a[i] != b[i]) + { + return false; + } + } + + // Same + return true; +} diff --git a/3/src3/compare3.c b/3/src3/compare3.c new file mode 100644 index 0000000..3ace858 --- /dev/null +++ b/3/src3/compare3.c @@ -0,0 +1,46 @@ +// Compares two strings for equality + +#include +#include +#include + +bool compare_strings(char *a, char *b); + +int main(void) +{ + // Get two strings + char *s = get_string("s: "); + char *t = get_string("t: "); + + // Compare strings for equality + if (compare_strings(s, t)) + { + printf("same\n"); + } + else + { + printf("different\n"); + } +} + +bool compare_strings(char *a, char *b) +{ + // Compare strings' lengths + if (strlen(a) != strlen(b)) + { + return false; + } + + // Compare strings character by character + for (int i = 0, n = strlen(a); i < n; i++) + { + // Different + if (a[i] != b[i]) + { + return false; + } + } + + // Same + return true; +} diff --git a/4/src4/compare2.c b/3/src3/compare4.c similarity index 61% rename from 4/src4/compare2.c rename to 3/src3/compare4.c index 394d1c5..1db4985 100644 --- a/4/src4/compare2.c +++ b/3/src3/compare4.c @@ -1,4 +1,4 @@ -// Compares two strings using strcmp +// Compares two strings for equality using strcmp #include #include @@ -10,13 +10,13 @@ int main(void) char *s = get_string("s: "); char *t = get_string("t: "); - // Compare strings + // Compare strings for equality if (strcmp(s, t) == 0) { - printf("Same\n"); + printf("same\n"); } else { - printf("Different\n"); + printf("different\n"); } } diff --git a/3/src3/compare5.c b/3/src3/compare5.c new file mode 100644 index 0000000..2175690 --- /dev/null +++ b/3/src3/compare5.c @@ -0,0 +1,33 @@ +// Compares two strings for equality while checking for errors + +#include +#include +#include + +int main(void) +{ + // Get a string + char *s = get_string("s: "); + if (s == NULL) + { + return 1; + } + + // Get another string + char *t = get_string("t: "); + if (t == NULL) + { + return 1; + } + + // Compare strings for equality + if (strcmp(s, t) == 0) + { + printf("same\n"); + } + else + { + printf("different\n"); + } + return 0; +} diff --git a/3/src3/compare6.c b/3/src3/compare6.c new file mode 100644 index 0000000..77ba11d --- /dev/null +++ b/3/src3/compare6.c @@ -0,0 +1,33 @@ +// Compares two strings for equality while checking (succinctly) for errors + +#include +#include +#include + +int main(void) +{ + // get a string + char *s = get_string("s: "); + if (!s) + { + return 1; + } + + // get another string + char *t = get_string("t: "); + if (!t) + { + return 1; + } + + // compare strings for equality + if (strcmp(s, t) == 0) + { + printf("same\n"); + } + else + { + printf("different\n"); + } + return 0; +} diff --git a/4/src4/copy0.c b/3/src3/copy0.c similarity index 84% rename from 4/src4/copy0.c rename to 3/src3/copy0.c index 321a6c5..deca64f 100644 --- a/4/src4/copy0.c +++ b/3/src3/copy0.c @@ -14,7 +14,10 @@ int main(void) string t = s; // Capitalize first letter in string - t[0] = toupper(t[0]); + if (strlen(t) > 0) + { + t[0] = toupper(t[0]); + } // Print string twice printf("s: %s\n", s); diff --git a/4/src4/copy5.c b/3/src3/copy1.c similarity index 64% rename from 4/src4/copy5.c rename to 3/src3/copy1.c index d9391ae..7307971 100644 --- a/4/src4/copy5.c +++ b/3/src3/copy1.c @@ -1,31 +1,33 @@ -// Capitalizes a copy of a string without memory errors +// Capitalizes a copy of a string while checking for errors #include #include #include -#include #include int main(void) { // Get a string char *s = get_string("s: "); - if (s == NULL) + if (!s) { return 1; } // Allocate memory for another string - char *t = malloc(strlen(s) + 1); - if (t == NULL) + char *t = malloc((strlen(s) + 1) * sizeof(char)); + if (!t) { return 1; } // Copy string into memory - strcpy(t, s); + for (int i = 0, n = strlen(s); i <= n; i++) + { + t[i] = s[i]; + } - // Capitalize copy + // Capitalize first letter in copy if (strlen(t) > 0) { t[0] = toupper(t[0]); diff --git a/6/src6/4/copy5.c b/3/src3/copy2.c similarity index 72% rename from 6/src6/4/copy5.c rename to 3/src3/copy2.c index d9391ae..761ea5f 100644 --- a/6/src6/4/copy5.c +++ b/3/src3/copy2.c @@ -1,23 +1,22 @@ -// Capitalizes a copy of a string without memory errors +// Capitalizes a copy of a string using strcpy while checking for errors #include #include #include -#include #include int main(void) { // Get a string char *s = get_string("s: "); - if (s == NULL) + if (!s) { return 1; } // Allocate memory for another string - char *t = malloc(strlen(s) + 1); - if (t == NULL) + char *t = malloc((strlen(s) + 1) * sizeof(char)); + if (!t) { return 1; } @@ -25,7 +24,7 @@ int main(void) // Copy string into memory strcpy(t, s); - // Capitalize copy + // Capitalize first letter in copy if (strlen(t) > 0) { t[0] = toupper(t[0]); diff --git a/2/src2/hello1.c b/3/src3/hello.c similarity index 63% rename from 2/src2/hello1.c rename to 3/src3/hello.c index 591dd57..398010c 100644 --- a/2/src2/hello1.c +++ b/3/src3/hello.c @@ -3,6 +3,6 @@ int main(void) { - string name = get_string("What's your name? "); + string name = get_string("Name: "); printf("hello, %s\n", name); } diff --git a/3/src3/iteration.c b/3/src3/iteration.c deleted file mode 100644 index 10d3e42..0000000 --- a/3/src3/iteration.c +++ /dev/null @@ -1,28 +0,0 @@ -// Draws a pyramid using iteration - -#include -#include - -void draw(int n); - -int main(void) -{ - // Get height of pyramid - int height = get_int("Height: "); - - // Draw pyramid - draw(height); -} - -void draw(int n) -{ - // Draw pyramid of height n - for (int i = 0; i < n; i++) - { - for (int j = 0; j < i + 1; j++) - { - printf("#"); - } - printf("\n"); - } -} diff --git a/3/src3/memory.c b/3/src3/memory.c new file mode 100644 index 0000000..5e99355 --- /dev/null +++ b/3/src3/memory.c @@ -0,0 +1,15 @@ +// http://valgrind.org/docs/manual/quick-start.html#quick-start.prepare + +#include + +void f(void) +{ + int *x = malloc(10 * sizeof(int)); + x[10] = 0; +} + +int main(void) +{ + f(); + return 0; +} diff --git a/4/src4/swap0.c b/3/src3/noswap.c similarity index 100% rename from 4/src4/swap0.c rename to 3/src3/noswap.c diff --git a/3/src3/phonebook0.c b/3/src3/phonebook0.c deleted file mode 100644 index c5cf63e..0000000 --- a/3/src3/phonebook0.c +++ /dev/null @@ -1,25 +0,0 @@ -// Implements a phone book without structs - -#include -#include -#include - -int main(void) -{ - // Arrays of strings - string names[] = {"Yuliia", "David", "John"}; - string numbers[] = {"+1-617-495-1000", "+1-617-495-1000", "+1-949-468-2750"}; - - // Search for name - string name = get_string("Name: "); - for (int i = 0; i < 3; i++) - { - if (strcmp(names[i], name) == 0) - { - printf("Found %s\n", numbers[i]); - return 0; - } - } - printf("Not found\n"); - return 1; -} diff --git a/3/src3/phonebook1.c b/3/src3/phonebook1.c deleted file mode 100644 index e9917b9..0000000 --- a/3/src3/phonebook1.c +++ /dev/null @@ -1,38 +0,0 @@ -// Implements a phone book with structs - -#include -#include -#include - -typedef struct -{ - string name; - string number; -} person; - -int main(void) -{ - person people[3]; - - people[0].name = "Yuliia"; - people[0].number = "+1-617-495-1000"; - - people[1].name = "David"; - people[1].number = "+1-617-495-1000"; - - people[2].name = "John"; - people[2].number = "+1-949-468-2750"; - - // Search for name - string name = get_string("Name: "); - for (int i = 0; i < 3; i++) - { - if (strcmp(people[i].name, name) == 0) - { - printf("Found %s\n", people[i].number); - return 0; - } - } - printf("Not found\n"); - return 1; -} diff --git a/3/src3/recursion.c b/3/src3/recursion.c deleted file mode 100644 index 3adf1a6..0000000 --- a/3/src3/recursion.c +++ /dev/null @@ -1,34 +0,0 @@ -// Draws a pyramid using recursion - -#include -#include - -void draw(int n); - -int main(void) -{ - // Get height of pyramid - int height = get_int("Height: "); - - // Draw pyramid - draw(height); -} - -void draw(int n) -{ - // If nothing to draw - if (n <= 0) - { - return; - } - - // Draw pyramid of height n - 1 - draw(n - 1); - - // Draw one more row of width n - for (int i = 0; i < n; i++) - { - printf("#"); - } - printf("\n"); -} diff --git a/4/src4/get1.c b/3/src3/scanf0.c similarity index 50% rename from 4/src4/get1.c rename to 3/src3/scanf0.c index 9ac4828..fa06858 100644 --- a/4/src4/get1.c +++ b/3/src3/scanf0.c @@ -4,8 +4,8 @@ int main(void) { - int n; - printf("n: "); - scanf("%i", &n); - printf("n: %i\n", n); + int x; + printf("x: "); + scanf("%i", &x); + printf("x: %i\n", x); } diff --git a/4/src4/get2.c b/3/src3/scanf1.c similarity index 58% rename from 4/src4/get2.c rename to 3/src3/scanf1.c index 237f7a0..929164b 100644 --- a/4/src4/get2.c +++ b/3/src3/scanf1.c @@ -1,4 +1,4 @@ -// Incorrectly gets a string from user using scanf; compile with -Wno-uninitialized +// Incorrectly gets a string from user using scanf #include diff --git a/4/src4/get3.c b/3/src3/scanf2.c similarity index 57% rename from 4/src4/get3.c rename to 3/src3/scanf2.c index 738d4c5..dd9c04d 100644 --- a/4/src4/get3.c +++ b/3/src3/scanf2.c @@ -1,10 +1,10 @@ -// Dangerously gets a string from user using scanf with array +// Dangerously gets a string from user using scanf #include int main(void) { - char s[4]; + char s[5]; printf("s: "); scanf("%s", s); printf("s: %s\n", s); diff --git a/3/src3/scores1.c b/3/src3/scores1.c new file mode 100644 index 0000000..2df7160 --- /dev/null +++ b/3/src3/scores1.c @@ -0,0 +1,37 @@ +// Generates a bar chart of three scores + +#include +#include + +void chart(int score); + +int main(void) +{ + // Get scores from user + int score1 = get_int("Score 1: "); + int score2 = get_int("Score 2: "); + int score3 = get_int("Score 3: "); + + // Chart first score + printf("Score 1: "); + chart(score1); + + // Chart second score + printf("Score 2: "); + chart(score2); + + // Chart third score + printf("Score 3: "); + chart(score3); +} + +// Generate bar +void chart(int score) +{ + // Output one hash per point + for (int i = 0; i < score; i++) + { + printf("#"); + } + printf("\n"); +} diff --git a/3/src3/search0.c b/3/src3/search0.c deleted file mode 100644 index 46d1b89..0000000 --- a/3/src3/search0.c +++ /dev/null @@ -1,23 +0,0 @@ -// Implements linear search for integers - -#include -#include - -int main(void) -{ - // An array of integers - int numbers[] = {20, 500, 10, 5, 100, 1, 50}; - - // Search for number - int n = get_int("Number: "); - for (int i = 0; i < 7; i++) - { - if (numbers[i] == n) - { - printf("Found\n"); - return 0; - } - } - printf("Not found\n"); - return 1; -} diff --git a/3/src3/search1.c b/3/src3/search1.c deleted file mode 100644 index a78b226..0000000 --- a/3/src3/search1.c +++ /dev/null @@ -1,24 +0,0 @@ -// Implements linear search for strings - -#include -#include -#include - -int main(void) -{ - // An array of strings - string strings[] = {"battleship", "boot", "cannon", "iron", "thimble", "top hat"}; - - // Search for string - string s = get_string("String: "); - for (int i = 0; i < 6; i++) - { - if (strcmp(strings[i], s) == 0) - { - printf("Found\n"); - return 0; - } - } - printf("Not found\n"); - return 1; -} diff --git a/3/src3/string0.c b/3/src3/string0.c new file mode 100644 index 0000000..8243cd2 --- /dev/null +++ b/3/src3/string0.c @@ -0,0 +1,22 @@ +// Prints a string's characters using square brackets + +#include +#include +#include + +int main(void) +{ + // Get a string + char *s = get_string("string: "); + if (!s) + { + return 1; + } + + // Print string, one character per line + for (int i = 0, n = strlen(s); i < n; i++) + { + printf("%c\n", s[i]); + } + return 0; +} diff --git a/3/src3/string1.c b/3/src3/string1.c new file mode 100644 index 0000000..4cd20cb --- /dev/null +++ b/3/src3/string1.c @@ -0,0 +1,22 @@ +// Prints a string's characters using pointer arithmetic + +#include +#include +#include + +int main(void) +{ + // Get a string + char *s = get_string("string: "); + if (!s) + { + return 1; + } + + // Print string, one character per line + for (int i = 0, n = strlen(s); i < n; i++) + { + printf("%c\n", *(s + i)); + } + return 0; +} diff --git a/3/src3/struct.h b/3/src3/struct.h new file mode 100644 index 0000000..2649809 --- /dev/null +++ b/3/src3/struct.h @@ -0,0 +1,8 @@ +// Represents a student + +typedef struct +{ + char *name; + char *dorm; +} +student; diff --git a/3/src3/struct0.c b/3/src3/struct0.c new file mode 100644 index 0000000..5bf355b --- /dev/null +++ b/3/src3/struct0.c @@ -0,0 +1,25 @@ +// Demonstrates lack of structs + +#include +#include + +int main(void) +{ + // Space for students + int enrollment = get_int("Enrollment: "); + string names[enrollment]; + string dorms[enrollment]; + + // Prompt for students' names and dorms + for (int i = 0; i < enrollment; i++) + { + names[i] = get_string("Name: "); + dorms[i] = get_string("Dorm: "); + } + + // Print students' names and dorms + for (int i = 0; i < enrollment; i++) + { + printf("%s is in %s.\n", names[i], dorms[i]); + } +} diff --git a/3/src3/struct1.c b/3/src3/struct1.c new file mode 100644 index 0000000..52ddc8f --- /dev/null +++ b/3/src3/struct1.c @@ -0,0 +1,26 @@ +// Demonstrates structs + +#include +#include + +#include "struct.h" + +int main(void) +{ + // Space for students + int enrollment = get_int("Enrollment: "); + student students[enrollment]; + + // Prompt for students' names and dorms + for (int i = 0; i < enrollment; i++) + { + students[i].name = get_string("Name: "); + students[i].dorm = get_string("Dorm: "); + } + + // Print students' names and dorms + for (int i = 0; i < enrollment; i++) + { + printf("%s is in %s.\n", students[i].name, students[i].dorm); + } +} diff --git a/3/src3/struct2.c b/3/src3/struct2.c new file mode 100644 index 0000000..df441b8 --- /dev/null +++ b/3/src3/struct2.c @@ -0,0 +1,32 @@ +// Demonstrates file I/O + +#include +#include +#include + +#include "struct.h" + +int main(void) +{ + // Space for students + int enrollment = get_int("Enrollment: "); + student students[enrollment]; + + // Prompt for students' names and dorms + for (int i = 0; i < enrollment; i++) + { + students[i].name = get_string("Name: "); + students[i].dorm = get_string("Dorm: "); + } + + // Save students to disk + FILE *file = fopen("students.csv", "w"); + if (file) + { + for (int i = 0; i < enrollment; i++) + { + fprintf(file, "%s,%s\n", students[i].name, students[i].dorm); + } + fclose(file); + } +} diff --git a/4/src4/swap1.c b/3/src3/swap.c similarity index 100% rename from 4/src4/swap1.c rename to 3/src3/swap.c diff --git a/4/README.txt b/4/README.txt deleted file mode 100644 index 4b11521..0000000 --- a/4/README.txt +++ /dev/null @@ -1,16 +0,0 @@ -../README.txt - -addresses*.c - -compare*.c -copy*.c - -memory.c -garbage.c - -swap*.c - -get*.c - -phonebook*.c -cp.c diff --git a/4/src4/addresses0.c b/4/src4/addresses0.c deleted file mode 100644 index f3deb92..0000000 --- a/4/src4/addresses0.c +++ /dev/null @@ -1,9 +0,0 @@ -// Prints an integer - -#include - -int main(void) -{ - int n = 50; - printf("%i\n", n); -} diff --git a/4/src4/addresses1.c b/4/src4/addresses1.c deleted file mode 100644 index 49e1b54..0000000 --- a/4/src4/addresses1.c +++ /dev/null @@ -1,9 +0,0 @@ -// Prints an integer's address - -#include - -int main(void) -{ - int n = 50; - printf("%p\n", &n); -} diff --git a/4/src4/addresses10.c b/4/src4/addresses10.c deleted file mode 100644 index 1846fb3..0000000 --- a/4/src4/addresses10.c +++ /dev/null @@ -1,11 +0,0 @@ -// Prints substrings via pointer arithmetic - -#include - -int main(void) -{ - char *s = "HI!"; - printf("%s\n", s); - printf("%s\n", s + 1); - printf("%s\n", s + 2); -} diff --git a/4/src4/addresses2.c b/4/src4/addresses2.c deleted file mode 100644 index 44b06fd..0000000 --- a/4/src4/addresses2.c +++ /dev/null @@ -1,10 +0,0 @@ -// Stores and prints an integer's address - -#include - -int main(void) -{ - int n = 50; - int *p = &n; - printf("%p\n", p); -} diff --git a/4/src4/addresses3.c b/4/src4/addresses3.c deleted file mode 100644 index 5e4a45a..0000000 --- a/4/src4/addresses3.c +++ /dev/null @@ -1,10 +0,0 @@ -// Stores and prints an integer via its address - -#include - -int main(void) -{ - int n = 50; - int *p = &n; - printf("%i\n", *p); -} diff --git a/4/src4/addresses4.c b/4/src4/addresses4.c deleted file mode 100644 index 71452ea..0000000 --- a/4/src4/addresses4.c +++ /dev/null @@ -1,10 +0,0 @@ -// Prints a string - -#include -#include - -int main(void) -{ - string s = "HI!"; - printf("%s\n", s); -} diff --git a/4/src4/addresses5.c b/4/src4/addresses5.c deleted file mode 100644 index ba17b9c..0000000 --- a/4/src4/addresses5.c +++ /dev/null @@ -1,14 +0,0 @@ -// Prints a string's address as well the addresses of its chars - -#include -#include - -int main(void) -{ - string s = "HI!"; - printf("%p\n", s); - printf("%p\n", &s[0]); - printf("%p\n", &s[1]); - printf("%p\n", &s[2]); - printf("%p\n", &s[3]); -} diff --git a/4/src4/addresses6.c b/4/src4/addresses6.c deleted file mode 100644 index a867831..0000000 --- a/4/src4/addresses6.c +++ /dev/null @@ -1,10 +0,0 @@ -// Declares a string with CS50 Library - -#include -#include - -int main(void) -{ - string s = "HI!"; - printf("%s\n", s); -} diff --git a/4/src4/addresses7.c b/4/src4/addresses7.c deleted file mode 100644 index 7804157..0000000 --- a/4/src4/addresses7.c +++ /dev/null @@ -1,9 +0,0 @@ -// Declares a string without CS50 Library - -#include - -int main(void) -{ - char *s = "HI!"; - printf("%s\n", s); -} diff --git a/4/src4/addresses8.c b/4/src4/addresses8.c deleted file mode 100644 index a75a8d8..0000000 --- a/4/src4/addresses8.c +++ /dev/null @@ -1,11 +0,0 @@ -// Prints a string's chars - -#include - -int main(void) -{ - char *s = "HI!"; - printf("%c\n", s[0]); - printf("%c\n", s[1]); - printf("%c\n", s[2]); -} diff --git a/4/src4/addresses9.c b/4/src4/addresses9.c deleted file mode 100644 index 322efca..0000000 --- a/4/src4/addresses9.c +++ /dev/null @@ -1,11 +0,0 @@ -// Prints a string's chars via pointer arithmetic - -#include - -int main(void) -{ - char *s = "HI!"; - printf("%c\n", *s); - printf("%c\n", *(s + 1)); - printf("%c\n", *(s + 2)); -} diff --git a/4/src4/compare3.c b/4/src4/compare3.c deleted file mode 100644 index 9ab9703..0000000 --- a/4/src4/compare3.c +++ /dev/null @@ -1,15 +0,0 @@ -// Prints two strings - -#include -#include - -int main(void) -{ - // Get two strings - char *s = get_string("s: "); - char *t = get_string("t: "); - - // Print strings - printf("%s\n", s); - printf("%s\n", t); -} diff --git a/4/src4/copy1.c b/4/src4/copy1.c deleted file mode 100644 index 49e5a67..0000000 --- a/4/src4/copy1.c +++ /dev/null @@ -1,25 +0,0 @@ -// Capitalizes a string, checking length first - -#include -#include -#include -#include - -int main(void) -{ - // Get a string - string s = get_string("s: "); - - // Copy string's address - string t = s; - - // Capitalize first letter in string - if (strlen(t) > 0) - { - t[0] = toupper(t[0]); - } - - // Print string twice - printf("s: %s\n", s); - printf("t: %s\n", t); -} diff --git a/4/src4/copy2.c b/4/src4/copy2.c deleted file mode 100644 index 93d563a..0000000 --- a/4/src4/copy2.c +++ /dev/null @@ -1,29 +0,0 @@ -// Capitalizes a copy of a string - -#include -#include -#include -#include -#include - -int main(void) -{ - // Get a string - char *s = get_string("s: "); - - // Allocate memory for another string - char *t = malloc(strlen(s) + 1); - - // Copy string into memory, including '\0' - for (int i = 0; i <= strlen(s); i++) - { - t[i] = s[i]; - } - - // Capitalize copy - t[0] = toupper(t[0]); - - // Print strings - printf("s: %s\n", s); - printf("t: %s\n", t); -} diff --git a/4/src4/copy3.c b/4/src4/copy3.c deleted file mode 100644 index 49c330c..0000000 --- a/4/src4/copy3.c +++ /dev/null @@ -1,29 +0,0 @@ -// Capitalizes a copy of a string, defining n in loop too - -#include -#include -#include -#include -#include - -int main(void) -{ - // Get a string - char *s = get_string("s: "); - - // Allocate memory for another string - char *t = malloc(strlen(s) + 1); - - // Copy string into memory, including '\0' - for (int i = 0, n = strlen(s); i <= n; i++) - { - t[i] = s[i]; - } - - // Capitalize copy - t[0] = toupper(t[0]); - - // Print strings - printf("s: %s\n", s); - printf("t: %s\n", t); -} diff --git a/4/src4/copy4.c b/4/src4/copy4.c deleted file mode 100644 index a2f215a..0000000 --- a/4/src4/copy4.c +++ /dev/null @@ -1,26 +0,0 @@ -// Capitalizes a copy of a string using strcpy - -#include -#include -#include -#include -#include - -int main(void) -{ - // Get a string - char *s = get_string("s: "); - - // Allocate memory for another string - char *t = malloc(strlen(s) + 1); - - // Copy string into memory - strcpy(t, s); - - // Capitalize copy - t[0] = toupper(t[0]); - - // Print strings - printf("s: %s\n", s); - printf("t: %s\n", t); -} diff --git a/4/src4/cp.c b/4/src4/cp.c deleted file mode 100644 index 0158432..0000000 --- a/4/src4/cp.c +++ /dev/null @@ -1,22 +0,0 @@ -// Copies a file - -#include -#include - -typedef uint8_t BYTE; - -int main(int argc, char *argv[]) -{ - FILE *src = fopen(argv[1], "rb"); - FILE *dst = fopen(argv[2], "wb"); - - BYTE b; - - while (fread(&b, sizeof(b), 1, src) != 0) - { - fwrite(&b, sizeof(b), 1, dst); - } - - fclose(dst); - fclose(src); -} diff --git a/4/src4/garbage.c b/4/src4/garbage.c deleted file mode 100644 index 1504277..0000000 --- a/4/src4/garbage.c +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include - -int main(void) -{ - int scores[1024]; - for (int i = 0; i < 1024; i++) - { - printf("%i\n", scores[i]); - } -} diff --git a/4/src4/get0.c b/4/src4/get0.c deleted file mode 100644 index b661b69..0000000 --- a/4/src4/get0.c +++ /dev/null @@ -1,10 +0,0 @@ -// Gets an int from user using get_int - -#include -#include - -int main(void) -{ - int n = get_int("n: "); - printf("n: %i\n", n); -} diff --git a/4/src4/list0.c b/4/src4/list0.c new file mode 100644 index 0000000..e803ded --- /dev/null +++ b/4/src4/list0.c @@ -0,0 +1,36 @@ +// Implements a list of numbers using an array of fixed length + +#include +#include + +int main(void) +{ + // Prompt for number of numbers + int capacity; + do + { + capacity = get_int("Capacity: "); + } + while (capacity < 1); + + // Memory for numbers + int numbers[capacity]; + + // Prompt for numbers + int size = 0; + while (size < capacity) + { + // Prompt for number + int number = get_int("Number: "); + + // Add to list + numbers[size] = number; + size++; + } + + // Print numbers + for (int i = 0; i < size; i++) + { + printf("%i\n", numbers[i]); + } +} diff --git a/4/src4/list1.c b/4/src4/list1.c new file mode 100644 index 0000000..440ed00 --- /dev/null +++ b/4/src4/list1.c @@ -0,0 +1,59 @@ +// Implements a list of numbers using an array of dynamic length + +#include +#include + +int main(void) +{ + // Memory for numbers + int *numbers = NULL; + int capacity = 0; + + // Prompt for numbers (until EOF) + int size = 0; + while (true) + { + // Prompt for number + int number = get_int("Number: "); + + // Check for EOF + if (number == INT_MAX) + { + break; + } + + // Check whether enough space for number + if (size == capacity) + { + // Allocate space for number + int *tmp = realloc(numbers, sizeof(int) * (size + 1)); + if (!tmp) + { + if (numbers) + { + free(numbers); + } + return 1; + } + numbers = tmp; + capacity++; + } + + // Add number to list + numbers[size] = number; + size++; + } + + // Print numbers + printf("\n"); + for (int i = 0; i < size; i++) + { + printf("%i\n", numbers[i]); + } + + // Free memory + if (numbers) + { + free(numbers); + } +} diff --git a/4/src4/list2.c b/4/src4/list2.c new file mode 100644 index 0000000..13632a9 --- /dev/null +++ b/4/src4/list2.c @@ -0,0 +1,72 @@ +// Implements a list of numbers using a linked list + +#include +#include + +typedef struct node +{ + int number; + struct node *next; +} +node; + +int main(void) +{ + // Memory for numbers + node *numbers = NULL; + + // Prompt for numbers (until EOF) + while (true) + { + // Prompt for number + int number = get_int("number: "); + + // Check for EOF + if (number == INT_MAX) + { + break; + } + + // Allocate space for number + node *n = malloc(sizeof(node)); + if (!n) + { + return 1; + } + + // Add number to list + n->number = number; + n->next = NULL; + if (numbers) + { + for (node *ptr = numbers; ptr != NULL; ptr = ptr->next) + { + if (!ptr->next) + { + ptr->next = n; + break; + } + } + } + else + { + numbers = n; + } + } + + // Print numbers + printf("\n"); + for (node *ptr = numbers; ptr != NULL; ptr = ptr->next) + { + printf("%i\n", ptr->number); + } + + // Free memory + node *ptr = numbers; + while (ptr != NULL) + { + node *next = ptr->next; + free(ptr); + ptr = next; + } +} diff --git a/4/src4/memory.c b/4/src4/memory.c index f3b960b..5e99355 100644 --- a/4/src4/memory.c +++ b/4/src4/memory.c @@ -1,12 +1,15 @@ -// Demonstrates memory errors via valgrind +// http://valgrind.org/docs/manual/quick-start.html#quick-start.prepare -#include #include +void f(void) +{ + int *x = malloc(10 * sizeof(int)); + x[10] = 0; +} + int main(void) { - int *x = malloc(3 * sizeof(int)); - x[1] = 72; - x[2] = 73; - x[3] = 33; + f(); + return 0; } diff --git a/4/src4/phonebook.csv b/4/src4/phonebook.csv deleted file mode 100644 index a9cb9a5..0000000 --- a/4/src4/phonebook.csv +++ /dev/null @@ -1 +0,0 @@ -name,number diff --git a/4/src4/phonebook0.c b/4/src4/phonebook0.c deleted file mode 100644 index 539f397..0000000 --- a/4/src4/phonebook0.c +++ /dev/null @@ -1,21 +0,0 @@ -// Saves names and numbers to a CSV file - -#include -#include -#include - -int main(void) -{ - // Open CSV file - FILE *file = fopen("phonebook.csv", "a"); - - // Get name and number - char *name = get_string("Name: "); - char *number = get_string("Number: "); - - // Print to file - fprintf(file, "%s,%s\n", name, number); - - // Close file - fclose(file); -} diff --git a/4/src4/phonebook1.c b/4/src4/phonebook1.c deleted file mode 100644 index c5cdda5..0000000 --- a/4/src4/phonebook1.c +++ /dev/null @@ -1,25 +0,0 @@ -// Saves names and numbers to a CSV file - -#include -#include -#include - -int main(void) -{ - // Open CSV file - FILE *file = fopen("phonebook.csv", "a"); - if (!file) - { - return 1; - } - - // Get name and number - char *name = get_string("Name: "); - char *number = get_string("Number: "); - - // Print to file - fprintf(file, "%s,%s\n", name, number); - - // Close file - fclose(file); -} diff --git a/4/src4/struct.h b/4/src4/struct.h new file mode 100644 index 0000000..2649809 --- /dev/null +++ b/4/src4/struct.h @@ -0,0 +1,8 @@ +// Represents a student + +typedef struct +{ + char *name; + char *dorm; +} +student; diff --git a/4/src4/struct0.c b/4/src4/struct0.c new file mode 100644 index 0000000..03a4865 --- /dev/null +++ b/4/src4/struct0.c @@ -0,0 +1,27 @@ +// Demonstrates structs + +#include +#include +#include + +#include "struct.h" + +int main(void) +{ + // Allocate space for students + int enrollment = get_int("Enrollment: "); + student students[enrollment]; + + // Prompt for students' names and dorms + for (int i = 0; i < enrollment; i++) + { + students[i].name = get_string("Name: "); + students[i].dorm = get_string("Dorm: "); + } + + // Print students' names and dorms + for (int i = 0; i < enrollment; i++) + { + printf("%s is in %s.\n", students[i].name, students[i].dorm); + } +} diff --git a/4/src4/struct1.c b/4/src4/struct1.c new file mode 100644 index 0000000..037f7dc --- /dev/null +++ b/4/src4/struct1.c @@ -0,0 +1,33 @@ +// Demonstrates file I/O + +#include +#include +#include +#include + +#include "struct.h" + +int main(void) +{ + // Allocate memory for students + int enrollment = get_int("Enrollment: "); + student students[enrollment]; + + // Prompt for students' names and dorms + for (int i = 0; i < enrollment; i++) + { + students[i].name = get_string("Name: "); + students[i].dorm = get_string("Dorm: "); + } + + // Save students to disk + FILE *file = fopen("students.csv", "w"); + if (file) + { + for (int i = 0; i < enrollment; i++) + { + fprintf(file, "%s,%s\n", students[i].name, students[i].dorm); + } + fclose(file); + } +} diff --git a/5/README.md b/5/README.md new file mode 100644 index 0000000..138416f --- /dev/null +++ b/5/README.md @@ -0,0 +1,19 @@ +# `src5` + +1. `hello0.html` +1. `image.html` +1. `link.html` +1. `paragraphs.html` +1. `headings.html` +1. `table.html` +1. `form*.html` +1. `search.html` +1. `css*.html` + +*** + +1. `hello*.html` +1. `background.html` +1. `size.html` +1. `geolocation.html` +1. `blink.html` diff --git a/5/README.txt b/5/README.txt deleted file mode 100644 index 884da80..0000000 --- a/5/README.txt +++ /dev/null @@ -1,4 +0,0 @@ -../README.txt - -list*.c -tree.c diff --git a/8/src8/background.html b/5/src5/background.html similarity index 64% rename from 8/src8/background.html rename to 5/src5/background.html index 8197c32..f74c732 100644 --- a/8/src8/background.html +++ b/5/src5/background.html @@ -13,15 +13,15 @@ diff --git a/8/src8/blink.html b/5/src5/blink.html similarity index 100% rename from 8/src8/blink.html rename to 5/src5/blink.html diff --git a/5/src5/bootstrap.html b/5/src5/bootstrap.html new file mode 100644 index 0000000..a75dd63 --- /dev/null +++ b/5/src5/bootstrap.html @@ -0,0 +1,29 @@ + + + + + + + + + + + + bootstrap + + + +
+
+ John Harvard +
+
+ Welcome to my home page! +
+
+ Copyright © John Harvard +
+ +
+ + diff --git a/5/src5/cat.jpg b/5/src5/cat.jpg new file mode 100644 index 0000000..00191ba Binary files /dev/null and b/5/src5/cat.jpg differ diff --git a/5/src5/css0.html b/5/src5/css0.html new file mode 100644 index 0000000..47a0bf9 --- /dev/null +++ b/5/src5/css0.html @@ -0,0 +1,20 @@ + + + + + + + css0 + + +
+ John Harvard +
+
+ Welcome to my home page! +
+
+ Copyright © John Harvard +
+ + diff --git a/8/src8/home4.html b/5/src5/css1.html similarity index 50% rename from 8/src8/home4.html rename to 5/src5/css1.html index 6213ecf..820764a 100644 --- a/8/src8/home4.html +++ b/5/src5/css1.html @@ -1,19 +1,19 @@ - + - css + css1 - -
+ +
John Harvard
-
+
Welcome to my home page!
-