diff --git a/1.cpp b/1.cpp index 6d4731a..4c4d61d 100644 --- a/1.cpp +++ b/1.cpp @@ -1,9 +1,65 @@ -// Разверните строку. Указатель reverse_string должен указывать на развернутую строку. +// Разверните строку. Указатель reverse_string должен +// указывать РЅР° развернутую строку. + +#define USE_VERSION 1 + +static const char* str = "The string!"; + +#if (USE_VERSION == 1) + +# include +# include +# include + +void strreverse(char * aStr); + +# define swap_char(left, right) { char _t = left; left = right; right = _t; } + +# ifdef _MSC_VER +# define strdup _strdup +# endif -char* string = “The string!”; int main() { - char* reverse_string; + char* reverse_string = strdup(str); //strlen + alloc + memcpy + + strreverse(reverse_string); + + printf("%s\n", str); + printf("%s\n", reverse_string); + + free(reverse_string); + + return 0; +} + +void strreverse(char * p) +{ + char *q = p + strlen(p); + for(--q; p < q; ++p, --q) + swap_char(*p, *q); +} + +#endif + +#if (USE_VERSION == 2) + +# include +# include + // std::reverse +# include + +int main () { + std::string result(str); + + std::reverse(result.begin(), result.end()); + + char* reverse_string = &result[0]; + + std::cout << "Original: " << str << std::endl; + std::cout << "Reversed: " << reverse_string << std::endl; + + return 0; +} - return 0; -} \ No newline at end of file +#endif diff --git a/2.cpp b/2.cpp index d73a0de..362f482 100644 --- a/2.cpp +++ b/2.cpp @@ -1,4 +1,8 @@ -// Квадратная матрица разделена диагоналями на четыре сектора. Напишите функцию min_from_top_sector(), которая будет находить значение ячейки, минимальное для всех ячеек верхнего сектора, включая отрезки диагоналей, составляющие этот сектор. +// Квадратная матрица разделена диагоналями РЅР° четыре сектора. +// Напишите функцию min_from_top_sector(), которая будет находить +//значение ячейки, минимальное для всех ячеек верхнего сектора, +// включая отрезки диагоналей, составляющие этот сектор. + #include const int c_kM = 5; @@ -6,7 +10,13 @@ typedef int Matrix[c_kM][c_kM]; int min_from_top_sector(Matrix& m) { - + int min = m[0][0]; + for(size_t i = 0; i < (c_kM + 1) / 2; i++) { + for(size_t j = i; j < c_kM - i; j++) { + if (m[i][j] < min) + min = m[i][j]; + } + } } int _tmain(int argc, _TCHAR* argv[]) diff --git a/3.cpp b/3.cpp index b81e266..783614f 100644 --- a/3.cpp +++ b/3.cpp @@ -1,19 +1,62 @@ -// Напишите функцию Add(), которая создает новый объект List, инициализирует его входным значением value и добавляет его в конец списка l, полученного на вход. В функции main() создайте проинициализированный список, со значениями value равными: 1, 2, 3, 4 и 5. +// Напишите функцию Add(), которая создает новый объект List, инициализирует +// его входным значением value Рё добавляет его РІ конец СЃРїРёСЃРєР° l, полученного РЅР° РІС…РѕРґ. +// Р’ функции main() создайте проинициализированный СЃРїРёСЃРѕРє, СЃРѕ значениями value равными: 1, 2, 3, 4 Рё 5. + +#include struct List { - int value; - List* next; + int value; + List* next; + + ~List(); + + void printList() const; }; // Add should create new List object, initialize it by value and add it to the end of the list. // It should return pointer to the added List object. List* Add(List* l, int value) { + List *newElem = new List; + newElem->value = value; + newElem->next = NULL; + + if (l) { + while (l->next) + l = l->next; + + l->next = newElem; + } + return newElem; } int main(int argc, char* argv[]) { -return 0; + List *l, *tmpList; + size_t i; + + l = Add(NULL, 1); + for (i = 2, tmpList = l; i < 6; i++) + tmpList = Add(tmpList, i); + + l->printList(); + + delete l; + + return 0; +} + +List::~List() +{ + delete next; +} + +void List::printList() const +{ + std::cout << "The list is:"; + for (const List *iter = this; iter; iter = iter->next) + std::cout << " " << iter->value; + std::cout << std::endl; } \ No newline at end of file