โœฆ

Anna Grigoryan

ENGS110 ยท Spring 2026
โ† Back to main page
๐Ÿ“ Struct
๐Ÿ“„
Complex .c โ–ถ
#include <stdio.h>
#include <math.h>
//problem 2) Complex numbers from practice exercises
struct Complex {
    double real;
    double imag;
};
//add two complex numbers
struct Complex add(struct Complex c1, struct Complex c2) {
    struct Complex result;
    result.real = c1.real + c2.real;
    result.imag = c1.imag + c2.imag;
    return result;
}
//multiply two complex numbers
//the formula is (a+bi)(c+di) = (ac-bd) + (ad+bc)i
struct Complex multiply(struct Complex c1, struct Complex c2) {
    struct Complex result;
    result.real = c1.real * c2.real - c1.imag * c2.imag;
    result.imag = c1.real * c2.imag + c1.imag * c2.real;
    return result;
}
//print complex number as "a + bi"
void print_complex(struct Complex c) {
    printf("%.2f + %.2fi", c.real, c.imag);
}
//calculate magnitude = sqrt(aยฒ + bยฒ)
double magnitude(struct Complex c) {
    return sqrt(c.real * c.real + c.imag * c.imag);
}
int main() {
    struct Complex c1 = {6, 7};
    struct Complex c2 = {1, 2};
    struct Complex sum = add(c1, c2);
    printf("Sum: ");
    print_complex(sum);
    printf("\n");
    struct Complex product = multiply(c1, c2);
    printf("product: ");
    print_complex(product);
    printf("\n");
    printf("magnitude of c1: %.2f\n", magnitude(c1));
    return 0;
}
๐Ÿ“„
Date .c โ–ถ
#include <stdio.h>
#include <stdbool.h>
//problem 5 from practices(struct)
struct Date {
    int day;
    int month;
    int year;
};
//check if date is valid
bool is_valid_date(struct Date d) {
    //check month
    if (d.month < 1 || d.month > 12) return false;
    //days in each month
    int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    //check february
    bool is_leap = (d.year % 4 == 0 && d.year % 100 != 0) || (d.year % 400 == 0);
    if (is_leap && d.month == 2) {
        days_in_month[1] = 29;
    }
    //check day
    return (d.day >= 1 && d.day <= days_in_month[d.month - 1]);
}
//compare two dates
int compare_dates(struct Date d1, struct Date d2) {
    if (d1.year != d2.year) {
        return d1.year < d2.year ? -1 : 1;
    }
    if (d1.month != d2.month) {
        return d1.month < d2.month ? -1 : 1;
    }
    if (d1.day != d2.day) {
        return d1.day < d2.day ? -1 : 1;
    }
    return 0;
}
// check if date1 is earlier than date2
bool is_earlier(struct Date d1, struct Date d2) {
    return compare_dates(d1, d2) == -1;
}
int main(void) {
    struct Date d1 = {7, 6, 2006};
    struct Date d2 = {8, 7, 2006};
    printf("date1 valid? %s\n", is_valid_date(d1) ? "Yes" : "No");
    printf("is_earlier? %s\n", is_earlier(d1, d2) ? "Yes" : "No");
    return 0;
}
๐Ÿ“„
SmartArray .c โ–ถ
#include <stdio.h>
#include <stdlib.h>
//SmartArray struct from practices
struct SmartArray {
    int* data;
    int size;
    int capacity;
};
//dynamically allocate memory and initialize it
struct SmartArray* create(int capacity) {
    struct SmartArray* arr = malloc(sizeof(struct SmartArray));
    arr->data = malloc(capacity * sizeof(int));
    arr->size = 0;
    arr->capacity = capacity;
    return arr;
}
//print only valid elements
void print(struct SmartArray* arr) {
    printf("[");
    for (int i = 0; i < arr->size; i++) {
        printf("%d", arr->data[i]);
        if (i < arr->size - 1) {
            printf(", ");
        }
    }
    printf("]\n");
}
// add element at end push back logic
void push_back(struct SmartArray* arr, int value) {
    if (arr->size >= arr->capacity) {
        printf(" the array is full\n");
        return;
    }
    arr->data[arr->size] = value;
    arr->size++;
}
//insert at specific position
void insert_at(struct SmartArray* arr, int index, int value) {
    if (arr->size >= arr->capacity) {
        printf("the array is full\n");
        return;
    }
    if (index < 0 || index > arr->size) {
        printf("invalid index\n");
        return;
    }
    for (int i = arr->size; i > index; i--) {
        arr->data[i] = arr->data[i - 1];
    }
    arr->data[index] = value;
    arr->size++;
}
// remove element at position
void remove_at(struct SmartArray* arr, int index) {
    if (index < 0 || index >= arr->size) {
        printf("invalid index\n");
        return;
    }
    for (int i = index; i < arr->size - 1; i++) {
        arr->data[i] = arr->data[i + 1];
    }
    arr->size--;
}
void destroy(struct SmartArray* arr) {
    free(arr->data);
    free(arr);
}
int get(struct SmartArray* arr, int index) {
    if (index < 0 || index >= arr->size) {
        printf("invalid index\n");
        return -1;
    }
    return arr->data[index];
}
void set(struct SmartArray* arr, int index, int value) {
    if (index < 0 || index >= arr->size) {
        printf("invalid index\n");
        return;
    }
    arr->data[index] = value;
}
int main() {
    struct SmartArray* arr = create(10);
    printf("after creation: ");
    print(arr);
    push_back(arr, 10);
    push_back(arr, 20);
    push_back(arr, 30);
    printf("after pushes: ");
    print(arr);
    insert_at(arr, 1, 67);
    printf("after insert at index 1: ");
    print(arr);
    remove_at(arr, 2);
    printf("after remove at index 2: ");
    print(arr);
    printf("value at index 1: %d\n", get(arr, 1));
    set(arr, 1, 100);
    printf("After set: ");
    print(arr);
    destroy(arr);
    return 0;
}