From 679a25a0ceae1874b90d0aa90669f3bb542043ba Mon Sep 17 00:00:00 2001 From: Alex Leleka Date: Fri, 7 Feb 2014 23:00:43 +0200 Subject: [PATCH 1/3] task done --- 1.cpp | 24 +++++++++++++++++++++--- 2.cpp | 10 +++++++++- 3.cpp | 18 +++++++++++++++++- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/1.cpp b/1.cpp index 898198d..6c88fb0 100644 --- a/1.cpp +++ b/1.cpp @@ -1,11 +1,29 @@ // Разверните строку. Указатель reverse_string должен // указывать на развернутую строку. - +#include char* string = "The string!"; int main() { - char* reverse_string; - + char* reverse_string; + int Len = strlen(string); + reverse_string = new char[Len + 1]; + char *start = string; + char *end = start + Len; + char *start_rev = reverse_string; + char *end_rev = start_rev + Len; + *end_rev-- = *end--; // copy ending 0 + while (end >= start) + { + // copy + *end_rev = *start; + *start_rev = *end; + // move + ++start; + ++start_rev; + --end; + --end_rev; + } + delete [] reverse_string; return 0; } \ No newline at end of file diff --git a/2.cpp b/2.cpp index 9eed732..6eb5cff 100644 --- a/2.cpp +++ b/2.cpp @@ -10,7 +10,15 @@ typedef int Matrix[c_kM][c_kM]; int min_from_top_sector(Matrix& m) { - + int min = m[0][0]; + int middle = c_kM / 2 + 1; + for(int i = 0; i < middle; i++) + for(int j = i; j < c_kM - i; j++) + { + if(min > m[i][j]) + min = m[i][j]; + } + return min; } int _tmain(int argc, _TCHAR* argv[]) diff --git a/3.cpp b/3.cpp index 169e055..e5c3b27 100644 --- a/3.cpp +++ b/3.cpp @@ -14,10 +14,26 @@ struct List // It should return pointer to the added List object. List* Add(List* l, int value) { - + List * new_last = new List(); + new_last->next = nullptr; + new_last->value = value; + if(!l) // if empty + return new_last; + while(l->next) // find the last element + l = l->next; + l->next = new_last; + return new_last; } int main(int argc, char* argv[]) { + const int N = 6; + List * l = new List(); + l->next = nullptr; + l->value = 0; + for(int i = 1; i < N; i++) + { + Add(l, i); + } return 0; } \ No newline at end of file From adb9b554a5efdb8a020ebcf019c54a21a01ae6c0 Mon Sep 17 00:00:00 2001 From: Alex Leleka Date: Sat, 8 Feb 2014 19:39:42 +0200 Subject: [PATCH 2/3] fixed, refactored --- 1.cpp | 28 +++++++++------------------- 3.cpp | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/1.cpp b/1.cpp index 6c88fb0..6ae9309 100644 --- a/1.cpp +++ b/1.cpp @@ -5,25 +5,15 @@ char* string = "The string!"; int main() { - char* reverse_string; - int Len = strlen(string); - reverse_string = new char[Len + 1]; - char *start = string; - char *end = start + Len; - char *start_rev = reverse_string; - char *end_rev = start_rev + Len; - *end_rev-- = *end--; // copy ending 0 - while (end >= start) - { - // copy - *end_rev = *start; - *start_rev = *end; - // move - ++start; - ++start_rev; - --end; - --end_rev; - } + char* reverse_string; + int Len = strlen(string); + reverse_string = new char[Len + 1]; + reverse_string[Len] = '\0'; // ending 0 + for(int beg = 0, end = Len - 1; beg <= end; beg++, end--) + { + reverse_string[beg] = string[end]; + reverse_string[end] = string[beg]; + } delete [] reverse_string; return 0; } \ No newline at end of file diff --git a/3.cpp b/3.cpp index e5c3b27..994d462 100644 --- a/3.cpp +++ b/3.cpp @@ -25,15 +25,24 @@ List* Add(List* l, int value) return new_last; } +void FreeList(List* head) +{ + if(!head) + return; + if(head->next) + FreeList(head); + delete head; + head = nullptr; +} int main(int argc, char* argv[]) { const int N = 6; - List * l = new List(); - l->next = nullptr; - l->value = 0; - for(int i = 1; i < N; i++) + List * l = Add(nullptr, 1); + for(int i = 2; i < N; i++) { Add(l, i); } + FreeList(l); + return 0; } \ No newline at end of file From 7f614376f678c1a18f507d2cc3795d5e5cea3961 Mon Sep 17 00:00:00 2001 From: Alex Leleka Date: Sun, 9 Feb 2014 18:12:44 +0200 Subject: [PATCH 3/3] fixed FreeList() --- 1.cpp | 2 +- 3.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/1.cpp b/1.cpp index 6ae9309..d9fcf41 100644 --- a/1.cpp +++ b/1.cpp @@ -9,7 +9,7 @@ int main() int Len = strlen(string); reverse_string = new char[Len + 1]; reverse_string[Len] = '\0'; // ending 0 - for(int beg = 0, end = Len - 1; beg <= end; beg++, end--) + for(int beg = 0, end = Len - 1; beg <= end; beg++, end--) { reverse_string[beg] = string[end]; reverse_string[end] = string[beg]; diff --git a/3.cpp b/3.cpp index 994d462..f887033 100644 --- a/3.cpp +++ b/3.cpp @@ -29,8 +29,7 @@ void FreeList(List* head) { if(!head) return; - if(head->next) - FreeList(head); + FreeList(head->next); delete head; head = nullptr; }