#include <stdio.h>

// Returns the sum of x and the ith  element in arr
int add_to(int x, int arr[], int i) {
    int sum = x;
    sum += arr[i];
    return sum;
}

int calculate(int x, int arr[]) {
    int sum = x;
    sum += arr[0];
    sum <<= x;
    sum &= 512;
    return sum;
}

long func(long x, long *ptr) {
    *ptr = x + 1;
    long result = x % *ptr; // or x + 1
    return result;
}

// Returns x/y, stores remainder in location stored in remainder_ptr
long full_divide(long x, long y, long *remainder_ptr) {
    long quotient = x / y;
    long remainder = x % y;
    *remainder_ptr = remainder;
    return quotient;
}

int sum_example1(int x, int y) {
    return x + y;
}

int sum_example2(int arr[]) {
    int sum = 0;
    sum += arr[0];
    sum += arr[3];
    sum -= arr[6];
    return sum;
}

void print_int_arr(int arr[], int nelems) {
    for (int i = 0; i < nelems; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {5, 4, 3, 2, 1};
    int nelems = sizeof(arr)/sizeof(arr[0]);
    printf("Initial array: ");
    print_int_arr(arr, nelems);

    int i = 3;
    int x = 20;
    int sum = add_to(x, arr, i);
    printf("Add to: %d\n", sum);

    long tmp = 0;
    long func_result = func(5, &tmp);
    printf("func: %ld\n", func_result);

    long remainder;
    printf("Divide 42/8\n");
    long quotient = full_divide(42, 8, &remainder);
    printf("Quotient: %ld, Remainder: %ld\n", quotient, remainder);

    int sum1 = sum_example1(4, 5);
    printf("sum_example1: %d\n", sum1);

    int sum2 = sum_example2(arr);
    printf("sum_example2: %d\n", sum2);

    return 0;
}
