diff --git a/c_modern_approach/Pointers/exercises/e_4.c b/c_modern_approach/Pointers/exercises/e_4.c new file mode 100644 index 0000000..93f55ac --- /dev/null +++ b/c_modern_approach/Pointers/exercises/e_4.c @@ -0,0 +1,22 @@ +#include + +/** + * @brief Variable swapping exercide + */ +void swap(int *p, int *q) { + printf("*p: %d; p = %p\n", *p, p); + printf("*q: %d; q = %p\n", *q, q); + int x = *p; + int y = *q; + *p = y; + *q = x; +} + +int main() { + int a, b; + a = 4; + b = 5; + printf("a = %d, b = %d\n", a, b); + swap(&a, &b); + printf("a = %d, b = %d", a, b); +} diff --git a/c_modern_approach/Pointers/exercises/e_5.c b/c_modern_approach/Pointers/exercises/e_5.c new file mode 100644 index 0000000..fe451e3 --- /dev/null +++ b/c_modern_approach/Pointers/exercises/e_5.c @@ -0,0 +1,35 @@ +#include + +/* Splitting seconds into hh:mm:ss */ + +void split_time(long total_sec, int *hr, int *min, int *sec) { + int f_h, f_m, f_s; + f_h = total_sec / 3600; + printf("hours: %d\n", f_h); + total_sec = total_sec - f_h * 3600; + f_m = total_sec / 60; + printf("minutes: %d\n", f_m); + total_sec = total_sec - f_m * 60; + printf("seconds: %ld\n", total_sec); + *hr = f_h; + *min = f_m; + *sec = total_sec; +} + +void split_time_otimized(long total_sec, int *hr, int *min, int *sec) { + *hr = (int)(total_sec / 3600); + *min = (int)((total_sec % 3600) / 60); + *sec = (int)(total_sec % 60); +} + +int main() { + long total_sec = 5123; + int hours, minutes, seconds; + hours = 0; + minutes = 0; + seconds = 0; + printf("BEFORE: %d:%d:%d\n", hours, minutes, seconds); + /* split_time(total_sec, &hours, &minutes, &seconds); */ + split_time_otimized(total_sec, &hours, &minutes, &seconds); + printf("AFTER: %d:%d:%d\n", hours, minutes, seconds); +} diff --git a/c_modern_approach/Pointers/exercises/e_6.c b/c_modern_approach/Pointers/exercises/e_6.c new file mode 100644 index 0000000..e35d795 --- /dev/null +++ b/c_modern_approach/Pointers/exercises/e_6.c @@ -0,0 +1,43 @@ +/* Finding two largest values in array */ + +#include +#include +#include + +#define MAX_RANDOM_VALUE 1000 +#define ARRAY_SIZE 10 + +void find_two_largest(int a[], int n, int *largest, int *second_largest) { + for (int i = 0; i < n; i++) { + if (a[i] > *largest) { + *second_largest = *largest; + *largest = a[i]; + } else if (a[i] < *largest && a[i] > *second_largest) { + *second_largest = a[i]; + } + } +} + +int main() { + int random_numbers_array[ARRAY_SIZE]; + int largest = 0; + int second_largest = 0; + // Generate random numbers + srand(time(NULL)); + for (int i = 0; i < ARRAY_SIZE; i++) { + random_numbers_array[i] = rand() % MAX_RANDOM_VALUE + 1; + } + // Print array + printf("["); + for (int i = 0; i < ARRAY_SIZE; i++) { + if (i == ARRAY_SIZE - 1) { + printf("%d", random_numbers_array[i]); + } else { + printf("%d,", random_numbers_array[i]); + } + } + printf("]\n"); + // Exercise + find_two_largest(random_numbers_array, ARRAY_SIZE, &largest, &second_largest); + printf("Largest: %d\nSecond largest: %d\n", largest, second_largest); +}