Week 9 (11.07.)
Task descriptions are on the portal
Task 2
#include <stdio.h>
#include <stdlib.h>
double * allocate(int n) {
return (double*)malloc(sizeof(double)*n);
}
int main(void) {
double curr;
int arr_size = 0;
double* arr;
scanf("%lf", &curr);
while (curr != -1) {
double* new_arr = allocate(++arr_size);
for (int i = 0; i < arr_size-1; i++) {
new_arr[i] = arr[i];
}
new_arr[arr_size-1] = curr;
if (arr != NULL) free(arr);
arr = new_arr;
scanf("%lf", &curr);
}
for (int i = arr_size-1; i >= 0; i--) {
printf("%f, ", arr[i]);
}
free(arr);
return 0;
}
Task 2
#include <stdio.h>
#include <string.h>
void remove_spaces(char* input) {
size_t length = strlen(input);
for (int i = 0; i < length; i++) {
while (input[i] == ' ') {
for (int j = i; j < length; j++) {
input[j] = input[j+1];
}
}
}
}
int main(void) {
char text[50+1];
strcpy(text, "Hello, this is text!");
//[50];
//scanf("%s", text);
printf("%s\n", text);
remove_spaces(text);
printf("%s", text);
return 0;
}
Task 3-4
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct {
double* values;
size_t count;
} Set;
Set* set_new() {
Set* result = (Set*)malloc(sizeof(Set));
result->values = (double*)malloc(0);
result->count = 0;
return result;
}
bool value_is_in_set(Set* s, double value) {
for (size_t i = 0; i < s->count; i++) {
if (value == s->values[i]) return true;
}
return false;
}
void set_add(Set* s, double value) {
if (value_is_in_set(s, value)) return;
s->values = (double*)realloc(s->values, ++(s->count)*sizeof(double));
s->values[s->count-1] = value;
}
void set_remove(Set* s, double value) {
for (size_t i = 0; i < s->count; i++) {
if (s->values[i] == value) {
for (size_t j = i; j < s->count - 1; j++) {
s->values[j] = s->values[j+1];
}
s->values = (double*)realloc(s->values, --(s->count)*sizeof(double));
}
}
}
void set_print(Set* s) {
for (size_t i = 0; i < s->count; i++) {
printf("%f, ", s->values[i]);
}
printf("\n");
}
void set_destroy(Set* s) {
if (s != NULL) {
free(s->values);
free(s);
}
}
int main(void) {
Set* s = set_new();
set_add(s, 5);
set_add(s, 3);
set_print(s);
set_remove(s, 5);
set_print(s);
set_destroy(s);
}
- ← Previous
Week 8 (10.25.)