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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Горелый
70 / 44 / 11
Регистрация: 20.03.2014
Сообщений: 186
#1

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

11.07.2014, 18:40. Просмотров 893. Ответов 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-й задаче я выбрал между нагрузгой на ОЗУ(использование ещё одного массива) и нагрузкой на ЦПУ, выбрал ЦПУ, тоже возможно не прав.

Я бы хотел что бы знающие люди мне подсказали пути дальнейшего развития, более конкретно указали какие стороны С++ подтянуть, я из этих заданий не вижу, возможно мало опыта потому что.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2014, 18:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверить корректность реализации нескольких задач (C++):

Метод хорд - проверить корректность реализации кода - C++
Приветствую, форумчане. Хочу обратиться к вам за помощью, вот еле написала программу для метода хорд, методом шары если честно, так как...

Простой консольный конвертер валют - проверить корректность реализации - C++
Всем привет! Я новичок на вашем форуме, как и в C++. Изучаю его третий день. Вот решил подкрепить свои знания и написать простенький...

Проверить корректность ввода - C++
Постройте функции для запроса и чтения ФИО, почтового адреса и даты, и проверьте корректность ввода.

Проверить код на корректность - C++
Сделал лабу, все работает отлично.... Но я не уверен что она написана нормально, может где то переменная не там обявляется или не так...

Проверить корректность заданной даты - C++
задана дата в пределах годах (число - от 1 до 31, месяц -от 1 до 12). Проверить корректность введенных данных и в случае ошибки вывести...

Проверить корректность расположения скобок - C++
Код #include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;fstream&gt; using namespace std; int main(void) { setlocale (0,&quot;&quot;); ...

19
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,070
11.07.2014, 18:49 #2
На форуме уже был разбор точно таких же заданий. Тестовое задание на Junior C++ dev
2
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.07.2014, 19:18 #3
Цитата Сообщение от 0x10 Посмотреть сообщение
На форуме уже был разбор точно таких же заданий. Тестовое задание на Junior C++ dev
А я вот одного не пойму. Это тесты по C++, а люди пишут ответы на Си. В условии вроде бы не сказано, что STL нельзя использовать. Может быть их за незнание STL и бракуют?
1
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
11.07.2014, 19:29 #4
Я бы первую задачу решил бы примерно так:
C++
1
2
3
4
5
6
void NumberAsBinary(char * _result, unsigned int _number)
{
   std::bitset<32> bits(static_cast<_ULonglong>(_number));
   strcpy(_result, bits.to_string().c_str()); 
  // либо используя strcpy_s, чтобы не было переполнения
}
1
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,070
11.07.2014, 19:35 #5
Цитата Сообщение от Mr.X Посмотреть сообщение
Это тесты по C++, а люди пишут ответы на Си.
Из постановки задачи ясно, что требуется знание не библиотеки, а тривиальных алгоритмов. Иначе было бы оговорено специально. Задания решены либо неправильно, либо неоптимально, а массив там или вектор - непринципиально.
1
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
11.07.2014, 19:43 #6
Горелый, можешь кинуть сайт этой компании? Уж больно хочется попробовать )
1
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.07.2014, 19:48 #7
Цитата Сообщение от 0x10 Посмотреть сообщение
Из постановки задачи ясно, что требуется знание не библиотеки, а тривиальных алгоритмов. Иначе было бы оговорено специально.
Так в том-то и дело, что в задании нет никаких специальных указаний, а все что не запрещено, то разрешено.
1
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,070
11.07.2014, 19:51 #8
Цитата Сообщение от Mr.X Посмотреть сообщение
Так в том-то и дело, что в задании нет никаких специальных указаний, а все что не запрещено, то разрешено.
Наивное переписывание на stl не гарантирует корректность и оптимальность получившегося кода.
1
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.07.2014, 19:54 #9
Цитата Сообщение от 0x10 Посмотреть сообщение
Наивное переписывание на stl не гарантирует корректность и оптимальность получившегося кода.
Ну, сортировку можно было и стандартную применить, чего ее выдумывать-то?
1
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,070
11.07.2014, 20:00 #10
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, сортировку можно было и стандартную применить, чего ее выдумывать-то?
Если не стоять на формальной ноге, а руководствоваться здравым смыслом, то задание с исходным данным в виде массива, подразумевающее его сортировку вызовом стандартной функции - само по себе глупо.

Добавлено через 1 минуту

Не по теме:

А вообще, эти задания - уровень не джуниора, а скорее уровня контрольной в школе.

1
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.07.2014, 20:07 #11
Цитата Сообщение от 0x10 Посмотреть сообщение
Если не стоять на формальной ноге, а руководствоваться здравым смыслом, то задание с исходным данным в виде массива, подразумевающее его сортировку вызовом стандартной функции - само по себе глупо.
Ну вы все-таки какими-то своими интуитивными предположениями оперируете, но так как нет в задании никаких указаний, то они недоказуемы.
Давайте все-таки будем взаимно вежливы, не стоит в наших "высокоумных и глубоко теоретических" дискуссиях переходить на личности.
1
0x10
11.07.2014, 20:10
  #12

Не по теме:

Mr.X, да я не перехожу вроде. Ок, проехали.

0
nmcf
5356 / 4676 / 1566
Регистрация: 14.04.2014
Сообщений: 18,643
11.07.2014, 20:29 #13
А почему прототипы не соответствуют? В задании просто указатели.
1
Горелый
70 / 44 / 11
Регистрация: 20.03.2014
Сообщений: 186
11.07.2014, 20:57  [ТС] #14
Использовал ссылки на указатели что бы выделение памяти поместить в сам метод.
Например для первой задачи каким образом вернуть строку через параметр.

Да, прочитав ветку форума по ссылке из первого ответа вижу что нужно ещё подучить матчасть.

Добавлено через 41 секунду
Компания G5 Entertaiment.
2
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.07.2014, 21:41 #15
Цитата Сообщение от Горелый Посмотреть сообщение
Например для первой задачи каким образом вернуть строку через параметр.
вам дали указатель по которому вы должны расположить результат, выделение памяти для строки не ваша забота не забота функции NumberAsBinary
1
11.07.2014, 21:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2014, 21:41
Привет! Вот еще темы с ответами:

Распарсить ввод структуры, проверить на корректность - C++
Мне нужно сделать такую вот программу &quot;С клавиатуры задается текст. Написать программу, которая проверяет, заданный текст может быть...

Решение уравнения - проверить код на корректность - C++
Написал рещение небольшого уровнения а=корень из (2а+sin|2a|)/3,56 #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;climits&gt; ...

Проверить корректность ввода элементов матрицы - C++
Ввод элементов матрицы А(m, n) осуществляется в произвольном порядке тройками чисел &lt; i, j, Aij&gt;. Признаком конца ввода служат три нуля:...

Нужно проверить на корректность ввода E-mail адреса - C++
Допустим пользователь вводит _____@___.___ Как мы можем проверить эти три ↑ ..... ↑.... ↑ поля на корректность? Во всех...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru