Форум программистов, компьютерный форум CyberForum.ru

Проверить корректность реализации нескольких задач - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Операция delete в векторе http://www.cyberforum.ru/cpp-beginners/thread1226141.html
Привет, друзья, делаю маленькую игрушку, там у меня постоянно появляются и уничтожаются новые объекты, и я заметил такую вещь: со временем игра начинает галить, хотя количество объектов одновременно существующих на экране не становится больше. Что это может быть? Единственное, что приходит в голову - то, что память на самом деле не освобождается после уничтожения объекта, значит я неправильно...
C++ Как сделать чтобы цвет текста плавно менялся Как сделать чтобы цвет текста плавно переливался? void RenderDVD(void) { int left, top; left = 1; top = pPresentParam.BackBufferHeight - 45; pD3DFont->PrintShadow(left, top, D3DCOLOR_XRGB(rand() % 255, rand() % 255, rand() % 255), "Разработчик Дима"); http://www.cyberforum.ru/cpp-beginners/thread1226126.html
C++ Нужны ли в реальной практике массивы?
Вопрос такой: нужны ли в реальной практике массивы? Или это лишь пережиток С? Имеют ли массивы реальные преимущества перед векторами, например? Почему спрашиваю - сейчас изучаю STL алгоритмы, такие как sort(), reverse(), find() и проч. и кажется это все очень удобным при использовании с векторами. Так нужны ли массивы после этого?
C++ Как вывести символ в любое место экрана?
Речь идёт о консольной программе. Поиск на форуме в этом отношении ничего не дал. Говорится о формах, о текстовых полях и иных объектах объектно-ориентированного программирования. Наверняка кто-то знает, операторы или функции, которые перемещают курсор в нужную точку и далее можно выводить символ, число, текст
C++ Отсортировать массив строк и вывести информацию соответствующую условию http://www.cyberforum.ru/cpp-beginners/thread1226082.html
Ведомость содержит информацию: номер группы, фамилия и инициалы студента, оценки по 3 предметам. Вывести в алфавитном порядке фамилии студентов, которые имеют хотя бы одну двойку (заборгованість?) Определить средний балл в группе программирования. Добавлено через 27 секунд //--------------------------------------------------------------------------- #include <vcl.h> #include...
C++ Поиск и сортировка в текстовом файле В программирование не силен только начал изучать есть задача.Есть текстовый файл такого плана вторник 1 21.03.2014 маша купила кокаколу 20рублей Вася положил деньги на телефон 100рублей Петя сходил в кино 230 Вася получил получку 25000 вторник 2 22.03.2014 Вася заплатил за учебу 2000рублей Вася пообедал 200р маша положила деньиги на телефон 300рублей Петя получил получку 25000 как... подробнее

Показать сообщение отдельно
Горелый
70 / 44 / 11
Регистрация: 20.03.2014
Сообщений: 184

Проверить корректность реализации нескольких задач - C++

11.07.2014, 18:40. Просмотров 866. Ответов 19
Метки (Все метки)

Добрый вечер всем.
Вопрос относиться к опытным программистам С++.

Вопрос такой. Я хотел устроится на вакансию Junior Developer C++,
мне прислали тестовые задания:
Кликните здесь для просмотра всего текста

Задача 1.
Кликните здесь для просмотра всего текста

1. Распечатать произвольное число в двоичной системе исчисления.

Описание.

Написать функцию, принимающую на вход произвольное целочисленное значение и возвращающую

строку, содержащую его представление в двоичной системе исчисления.

Декларация.

C++
1
2
3
4
5
6
7
void NumberAsBinary(
 
 char * _result, // строка с результатом
 
 unsigned int _number // произвольное число
 
 )

Ожидаемый результат.


Например, для числа 13 данная функция должна вернуть строку "1101".

Проверка работы.


Решение должно демонстрировать работу функции на примере 10 случайных чисел в диапазоне 0 до 512.

Задача 2.
Кликните здесь для просмотра всего текста

2. Сгенерировать неупорядоченный массив целых чисел от 1 до N.

Описание.

Написать функцию, принимающую на вход произвольное целочисленное значение и возвращающую

массив, содержащий последовательность чисел от 1 до этого значения, в котором каждое число

последовательности находится в заведомо случайной позиции.

Декларация.

C++
1
2
3
4
5
6
7
void GenerateRandomArray(
 
 int * _result, // возвращаемый массив
 
 unsigned int _maxValue // максимальное число в последовательности
 
 )
Ожидаемый результат.

Например, 2 последовательных запуска данной функции с параметром 7 могут сгенерировать

последовательности вида

{2, 5, 7, 3, 4, 1, 6}

{5, 1, 3, 4, 6, 2, 7}

Проверка работы.

Решение должно демонстрировать работу функции на примере 4 случайных чисел в диапазоне от 5 до 15.

Задача 3.
Кликните здесь для просмотра всего текста

3. Сортировка массива.

Описание.

Написать функцию, принимающую в качестве параметра массив неупорядоченных целых чисел

(сгенерированный с помощью функции из задачи 2) и выполняющую его сортировку.

Декларация.

C++
1
2
3
4
5
6
7
void Sort(
 
 int * _values, // сортируемый массив
 
 unsigned int _count // количество элементов в массиве
 
 )
Ожидаемый результат.

Например, массив вида {2, 5, 7, 3, 4, 1, 6} будет преобразован данной функцией в {1, 2, 3, 4, 5, 6, 7}.

Проверка работы.

Решение должно демонстрировать работу функции на примере результатов, полученных при решении

задачи 2 (последовательностей, сгенерированных для 4 случайных чисел в диапазоне от 5 до 15).

Задача 4.
Кликните здесь для просмотра всего текста

4. Определить недостающее число в неупорядоченной последовательности целых чисел.

Описание.


Написать функцию, принимающую в качестве параметра массив неупорядоченных целых чисел

(сгенерированный с помощью функции из задачи 2) и определяющую значение последнего элемента в

массиве без доступа к нему.

Декларация.

C++
1
2
3
4
5
6
7
int GetMissingValue(
 
 const int * _values, // неупорядоченный массив целых чисел от 1 до _count
 
 unsigned int _count // количество элементов в массиве
 
 )
Ожидаемый результат.

Например, для последовательности {5, 7, 8, 3, 1, 9, 2, 6, 4} данная функция должна вернуть 4.

Проверка работы.

Решение должно демонстрировать работу функций на примере результатов, полученных при решении

задачи 2 (последовательностей, сгенерированных для 4 случайных чисел в диапазоне от 5 до 15).



Вот мои решения:
Кликните здесь для просмотра всего текста

Задача 1.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
 
using namespace std;
 
void NumberAsBinary(
    char *&_result, // строка с результатом
    unsigned int _number // произвольное число
);
 
int main(
    unsigned int argc,
    char **argv
)
{
  char *binstring;
  
  for(int i = 0; i < 10; i++)
  {  
    int number = rand()%513;
    NumberAsBinary(binstring, number);
    cout << number << " = " << binstring << endl;
    delete[] binstring;
  }
  return 0;
}
 
void NumberAsBinary(
    char *&_result,
    unsigned int _number
)
{  
  bool process = false;
  int i, j = 0;
  for (i = 31; i >= 0; --i)
  {
    if (!process && (1<<i & _number))          
    {
      _result = new char[i+2];
      process = true;    
    }
    if(process)
    {
      if(1<<i & _number)
        _result[j++] = '1';
      else
        _result[j++] = '0';
    }
  }
  _result[j] = '\0';
}

Задача 2.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
 
using namespace std;
 
void GenerateRandomArray(
    int *&_result, // возвращаемый массив
    unsigned int _maxValue // максимальное число в последовательности
);
 
int main(
    unsigned int argc,
    char **argv
)
{
  int *arr;
 
  for(int i = 0; i < 4; i++)
  {  
    int number = 5 + rand()%11;
    GenerateRandomArray(arr, number);
    cout << "{";
    for (int j = 0; j < number; ++j)
    {
      cout << arr[j];
      if(j < number - 1) cout << ",";
    }
    cout << "}" << endl;
    delete[] arr;
  }
 
  return 0;
}
 
void GenerateRandomArray(
    int *&_result,
    unsigned int _maxValue
)
{
  int p1, p2, t;
  _result = new int[_maxValue];
  for(int i = 0; i < _maxValue; ++i)
    _result[i] = i+1;
  
  for(int i = 0; i < _maxValue; ++i)
  {
    p1 = rand()%_maxValue;
    p2 = rand()%_maxValue;
    t = _result[p1];
    _result[p1] = _result[p2];
    _result[p2] = t;
  }
}

Задача 3.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
 
using namespace std;
 
void GenerateRandomArray(
    int *&_result, // возвращаемый массив
    unsigned int _maxValue // максимальное число в последовательности
);
void Sort(
    int * _values, // сортируемый массив
    unsigned int _count // количество элементов в массиве
);
 
int main(
    unsigned int argc,
    char **argv
)
{
  int *arr;
 
  for(int i = 0; i < 4; i++)
  {  
    int number = 5 + rand()%11;
    GenerateRandomArray(arr, number);
    cout << "       {";
    for (int j = 0; j < number; ++j)
    {
      cout << arr[j];
      if(j < number - 1) cout << ",";
    }
    cout << "}" << endl;
    Sort(arr, number);
    cout << "sorted {";
    for (int j = 0; j < number; ++j)
    {
      cout << arr[j];
      if(j < number - 1) cout << ",";
    }
    cout << "}" << endl << endl;
    delete[] arr;
  }
 
  return 0;
}
 
void Sort(
    int * _values, // сортируемый массив
    unsigned int _count // количество элементов в массиве
)
{
  for (int i = 0; i < _count; ++i)  
    for (int j = 0; j < _count; ++j)    
      if(_values[j] > _values[i])
      {
        int t = _values[i];
        _values[i] = _values[j];
        _values[j] = t;
      }
}
 
void GenerateRandomArray(
    int *&_result,
    unsigned int _maxValue
)
{
  int p1, p2, t;
  _result = new int[_maxValue];
  for(int i = 0; i < _maxValue; ++i)
    _result[i] = i+1;
 
  for(int i = 0; i < _maxValue; ++i)
  {
    p1 = rand()%_maxValue;
    p2 = rand()%_maxValue;
    t = _result[p1];
    _result[p1] = _result[p2];
    _result[p2] = t;
  }
}

Задача 4.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
 
using namespace std;
 
void GenerateRandomArray(
    int *&_result, // возвращаемый массив
    unsigned int _maxValue // максимальное число в последовательности
);
int GetMissingValue(
    const int * _values, // неупорядоченный массив целых чисел от 1 до _count
    unsigned int _count // количество элементов в массиве
);
 
int main(
    unsigned int argc,
    char **argv
)
{
  int *arr;
  srand(11);
  for(int i = 0; i < 4; i++)
  {  
    int number = 5 + rand()%11;
    GenerateRandomArray(arr, number);
    cout << "       {";
    for (int j = 0; j < number; ++j)
    {
      cout << arr[j];
      if(j < number - 1) cout << ",";
    }
    cout << "}" << endl;    
    cout << "miss val = " << GetMissingValue(arr, number) << endl;    
    delete[] arr;
  }
 
  return 0;
}
 
void GenerateRandomArray(
    int *&_result,
    unsigned int _maxValue
)
{
  int p1, p2, t;
  _result = new int[_maxValue];
  for(int i = 0; i < _maxValue; ++i)
    _result[i] = i+1;
 
  for(int i = 0; i < _maxValue; ++i)
  {
    p1 = rand()%_maxValue;
    p2 = rand()%_maxValue;
    t = _result[p1];
    _result[p1] = _result[p2];
    _result[p2] = t;
  }
}
 
int GetMissingValue(
    const int * _values,
    unsigned int _count
)
{
  bool notexist;
  for(int j = 1; j <= _count; ++j)
  {
    notexist = true;
    for(int i = 0; i < _count - 1; ++i)
    {
      if(_values[i] == j)
      {
        notexist = false;
        break;
      }
    }
    if(notexist)
    {
      return j;
    }
  }
}



Сначала ответели что просто не прошел тест. Я потом добивался более внятного ответа и
Мне вот что ответили:
Судя по отчету по вашему заданию, могу сказать, вот что:
первая задача построена нелогично, вторая задача у вас не работает, третья и четвертая не оптимальны.


Скриншот консоли:
Кликните здесь для просмотра всего текста
Проверить корректность реализации нескольких задач


Согласен что в 3-й задаче я психанул и отсортировал всё пузырьком, тут мои грабли.
В 4-й задаче я выбрал между нагрузгой на ОЗУ(использование ещё одного массива) и нагрузкой на ЦПУ, выбрал ЦПУ, тоже возможно не прав.

Я бы хотел что бы знающие люди мне подсказали пути дальнейшего развития, более конкретно указали какие стороны С++ подтянуть, я из этих заданий не вижу, возможно мало опыта потому что.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru