From 3904906621b344420b1eae3ad8bc11f2309910a6 Mon Sep 17 00:00:00 2001 From: dzruyk Date: Sat, 16 Apr 2022 03:24:45 +0300 Subject: [PATCH] add vector.c template, update makefile, add readme.txt --- .vscode/launch.json | 32 +++++++++++++ .vscode/tasks.json | 14 ++++++ Makefile | 3 ++ README.txt | 34 +++++++++++++ vector.c | 113 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 196 insertions(+) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 README.txt create mode 100644 vector.c diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..999839b --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,32 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) Launch", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/vector_test", + "args": ["--no-fork"], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..0b9fc33 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,14 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "shell", + "label": "C/C++: gcc build", + "command": "make", + "problemMatcher": [ + "$gcc" + ], + "group": "build", + } + ] +} \ No newline at end of file diff --git a/Makefile b/Makefile index 09b1754..ba3707a 100644 --- a/Makefile +++ b/Makefile @@ -9,3 +9,6 @@ vector_test: util.o vector.o vector_test.o $(unittest_obj) clean: rm vector_test $(unittest_obj) *.o +test: vector_test + ./vector_test + diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..82e27ec --- /dev/null +++ b/README.txt @@ -0,0 +1,34 @@ +Базовые структуры данных +------------------------ + +* Склонировать репозиторий https://timp.pw/121/lab4_ivec.git + (если репозиторий уже склонирован -- пропустить этот шаг ^_^) + + В этом задании мы должны реализовать вектор для типа int. + Вектор -- это динамический массив данных, который может менять свой размер + в процессе работы. + + Описание структуры данных ivector в файле vector.h + Вам необходимо реализовать некоторые функции в файле ./vector.c + и пройти тесты (описанные в ./vector_test.c). + + Команда для сборки проекта -- make + Команда для запуска тестов -- make test + + + Необходимо реализовать следующие функции + vector_len + vector_data + vector_resize + vector_initdata + + vector_set + vector_get + vector_push + vector_pop + + (Опционально, но очень желательно) + vector_insert + vector_del + + diff --git a/vector.c b/vector.c new file mode 100644 index 0000000..bfbea79 --- /dev/null +++ b/vector.c @@ -0,0 +1,113 @@ +#include + +#include +#include +#include + +#include "vector.h" +#include "util.h" + +#define VECTOR_START_SIZE 8 +#define VECTOR_GROW_FACTOR 2 +#define ITEMSZ sizeof(int) + +void +vector_init(ivector *v) +{ + assert(v); + + v->n = 0; + v->maxsz = VECTOR_START_SIZE; + v->data = xmalloc(ITEMSZ * VECTOR_START_SIZE); +} + +void +vector_initdata(ivector *v, int *arr, size_t arrsz) +{ + assert(v && arrsz); + // +} + +void +vector_free(ivector *v) +{ + assert(v); + + v->n = 0; + v->maxsz = 0; + xfree(v->data); + v->data = NULL; +} + +size_t +vector_len(const ivector *v) +{ + assert(v); + + // + return 0; +} + +int * +vector_data(const ivector *v) +{ + assert(v); + // + return NULL; +} + +void +vector_resize(ivector *v, int n) +{ + assert(v); + + // +} + +void +vector_set(ivector *v, size_t idx, int val) +{ + assert(v && idx < v->n); + // +} + +int +vector_get(const ivector *v, size_t idx) +{ + assert(v && idx < v->n); + // + return 0; +} + +void +vector_push(ivector *v, int val) +{ + assert(v); + // +} + +void +vector_pop(ivector *v) +{ + assert(v); + // +} + +void +vector_insert(ivector *v, size_t idx, int val) +{ + assert(v && v->n >= idx); + // +} + +void +vector_del(ivector *v, size_t idx) +{ + // +} + +void +vector_clear(ivector *v) +{ + vector_resize(v, 0); +}