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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 94, средняя оценка - 4.88
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
#1

Тестовое задание на Junior C++ dev - C++

26.07.2013, 18:40. Просмотров 13520. Ответов 60
Метки нет (Все метки)

Доброго времени суток.
Неделю назад ради интереса отправил свое резюме в одну компанию, куда требуются с++ юниоры. Получил от них тестовое задание. Я ожидал, что они мне откажут (опыта то у меня действительно мизер), но хотелось бы узнать у более опытных людей, какое решение задач "ожидает" компания от соискателя для продолжения с ним отношений.
Далее идет 4 задачи и мой вариант решения каждой из них.

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

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

Декларация.
voidNumberAsBinary(
char* _result,// строка с результатом
unsignedint _number// произвольное число
)

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

Проверка работы.
Решение должно демонстрировать работу функции на примере 10 случайных чисел в диапазоне 0 до 512.
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
#include <iostream>
#include <stdlib.h>
#include <time.h>
using std::cout;
using std::endl;
 
void numberAsBinary(char *_result, unsigned int _number); 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char *result = new char[11];
    unsigned int number;
    
    srand((unsigned)time(NULL));
    for (int i = 1; i <= 10; i++)
    {
        number = rand() % 513;
        numberAsBinary(result, number);
        cout << "Число " << number << " в двоичной системе счисления равно " << result << endl;
    }
 
    delete [] result;
    system("pause");
    return 0;
}
 
void numberAsBinary(
char *_result,
unsigned int _number
    )
{
    static int i;
    i = 0;
 
    if (_number != 1)
        numberAsBinary(_result, _number / 2);
 
    _result[i] = (_number % 2) + '0';
    i++;
    _result[i] = '\0';
}

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

Описание.
Написать функцию, принимающую на вход произвольное целочисленное значение и возвращающую массив, содержащий последовательность чисел от 1 до этого значения, в котором каждое число последовательности находится в заведомо случайной позиции.

Декларация.
void GenerateRandomArray(
int * _result, // возвращаемыймассив
unsignedint _maxValue// максимальное число в последовательности
)

Ожидаемый результат.
Например, 2 последовательных запуска данной функции с параметром 7 могут сгенерировать последовательности вида
{2, 5, 7, 3, 4, 1, 6}
{5, 1, 3, 4, 6, 2, 7}

Проверка работы.
Решение должно демонстрировать работу функции на примере 4 случайных чисел в диапазоне от 5 до 15.
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>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
using std::cout;
using std::endl;
 
void generateRandomArray(int *_result, unsigned int _maxValue);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    unsigned int maxValue;
    
    srand((unsigned)time(NULL));
    for (int i = 1; i <= 4; i++)
    {
        maxValue = 5 + rand() % 11;
        int *result = new int[maxValue];
        generateRandomArray(result, maxValue);
    
        cout << "Неупорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ": ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
        cout << endl;
        delete [] result;
    }
 
    system("pause");
    return 0;
}
 
void generateRandomArray(
int *_result, 
unsigned int _maxValue
    )
{
    int ind1, ind2, tmp;
 
    for (unsigned int i = 0, j = 1; i < _maxValue; i++, j++)
        _result[i] = j;
 
    for (int i = 1; i <= 20; i++)
    {
        ind1 = rand() % _maxValue;
        ind2 = rand() % _maxValue;
        tmp = _result[ind1];
        _result[ind1] = _result[ind2];
        _result[ind2] = tmp;
    }
}

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

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

Декларация.
voidSort(
int* _values,// сортируемый массив
unsignedint _count// количество элементов в массиве
)

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

Проверка работы.
Решение должно демонстрировать работу функции на примере результатов, полученных при решении задачи 2 (последовательностей, сгенерированных для 4 случайных чисел в диапазоне от 5 до 15).
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
using std::cout;
using std::endl;
 
void generateRandomArray(int *_result, unsigned int _maxValue);
void Sort(int *_values, unsigned int _count);
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    unsigned int maxValue;
    
    srand((unsigned)time(NULL));
    for (int i = 1; i <= 4; i++)
    {
        maxValue = 5 + rand() % 11;
        int *result = new int[maxValue];
        generateRandomArray(result, maxValue);
    
        cout << "Неупорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ": ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
        cout << endl;
 
        Sort(result, maxValue - 1);
 
        cout << "Упорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ":   ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
        cout << endl << endl;
 
        delete [] result;
    }
 
    system("pause");
    return 0;
}
 
void generateRandomArray(
int *_result, 
unsigned int _maxValue
    )
{
    int ind1, ind2, tmp;
 
    for (unsigned int i = 0, j = 1; i < _maxValue; i++, j++)
        _result[i] = j;
 
    for (int i = 1; i <= 20; i++)
    {
        ind1 = rand() % _maxValue;
        ind2 = rand() % _maxValue;
        tmp = _result[ind1];
        _result[ind1] = _result[ind2];
        _result[ind2] = tmp;
    }
}
 
void Sort(
int *_values,
unsigned int _count
    )
{
    int i = 0, j = _count; 
    int temp, p;
 
    p = _values[_count >> 1]; 
 
    do
    {
        while (_values[i] < p) i++;
        while (_values[j] > p) j--;
 
        if (i <= j) 
        {
            temp = _values[i];
            _values[i] = _values[j];
            _values[j] = temp;
            i++;
            j--;
        }
 
    } while (i <= j);
 
    if (j > 0) 
        Sort(_values, j);
    if (_count > (unsigned)i)  
        Sort(_values+i, _count-i);
}
4. Определить недостающее число в неупорядоченной последовательности целых чисел.

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

Декларация.
intGetMissingValue(
constint * _values,// неупорядоченный массив целых чисел от 1 до _count
unsignedint _count// количество элементов в массиве
)

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

Проверка работы.
Решение должно демонстрировать работу функций на примере результатов, полученных при решении задачи 2 (последовательностей, сгенерированных для 4 случайных чисел в диапазоне от 5 до 15).
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
using std::cout;
using std::endl;
 
void generateRandomArray(int *_result, unsigned int _maxValue);
void Sort(int *_values, unsigned int _count);
int getMissingValue(const int *_values, unsigned int _count);
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    unsigned int maxValue;
    
    srand((unsigned)time(NULL));
    for (int i = 1; i <= 4; i++)
    {
        maxValue = 5 + rand() % 11;
        int *result = new int[maxValue];
        generateRandomArray(result, maxValue);
    
        cout << "Неупорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ": ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
 
        cout << endl << "Значение последнего элемента:     " 
             << getMissingValue(result, maxValue) << endl;
 
        Sort(result, maxValue - 1);
 
        cout << "Упорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ":   ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
        cout << endl << endl;
 
        delete [] result;
    }
 
    system("pause");
    return 0;
}
 
void generateRandomArray(
int *_result, 
unsigned int _maxValue
    )
{
    int ind1, ind2, tmp;
 
    for (unsigned int i = 0, j = 1; i < _maxValue; i++, j++)
        _result[i] = j;
 
    for (int i = 1; i <= 20; i++)
    {
        ind1 = rand() % _maxValue;
        ind2 = rand() % _maxValue;
        tmp = _result[ind1];
        _result[ind1] = _result[ind2];
        _result[ind2] = tmp;
    }
}
 
void Sort(
int *_values,
unsigned int _count
    )
{
    int i = 0, j = _count; 
    int temp, p;
 
    p = _values[_count >> 1]; 
 
    do
    {
        while (_values[i] < p) i++;
        while (_values[j] > p) j--;
 
        if (i <= j) 
        {
            temp = _values[i];
            _values[i] = _values[j];
            _values[j] = temp;
            i++;
            j--;
        }
 
    } while (i <= j);
 
    if (j > 0) 
        Sort(_values, j);
    if (_count > (unsigned)i)  
        Sort(_values+i, _count-i);
}
 
int getMissingValue(
const int *_values,
unsigned int _count
    )
{
    unsigned int checkSum = 0, sum = 0;
 
    for (unsigned int i = 0; i < _count - 1; i++)
    {
        checkSum += i + 1;
        sum += _values[i];
    }
 
    return checkSum + _count - sum;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2013, 18:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Тестовое задание на Junior C++ dev (C++):

Тестовое задание - C++
private class Connect (){ public Device dev1 = new Device(); public Device dev2 = new Device(); puclic void Connect (){ for...

ООП. Тестовое задание собеседования. - C++
Это тестовое задание для устройста на работу. Я не совсем понимаю что от меня хотят. Не могли бы вы мне далее составить набросок плана...

Тестовое задание для трудоустройства - C++
Решил попробовать устроиться в компанию и узнать что вообще и как. Отправил в компанию резюме, дали тестовое задание: Страуструп. Глава...

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

Написать ответы на тестовое задание при приёме на работу (исключения, sizeof, mutex) - C++
Добрый день! Ходил недавно на собеседование. Имеется список вопросов, на некоторые ответил правильно на какие-то - нет. Хотелось бы...

Тестовое задание от работадателя. Хотелось бы услышать критику. - C++
Пробую устроиться программистом. Вот одна из компаний выслала мне тестовое задание следующего содержания: Немного поломав голову,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 23:30  [ТС] #46
Цитата Сообщение от TimeToWork Посмотреть сообщение
Как-никак, а опыт имеет огромное значение, если действительно хотите работать по данной специальности - нужно больше практиковаться.
Конечно же Вот только чтобы получить больше опыта, нужно куда то устроиться в подмастерье... а чтобы это сделать, нужно больше опыта Преподавателя у меня нет, универ я закончил 5 лет назад и из головы уже многое повылетало. Не буду же я на форуме по каждой задаче спрашивать оптимальные алгоритмы решения. Курсы не признаю вовсе Но я не собираюсь опускать руки. Надеюсь, толк из меня будет вскоре
0
nonedark2008
908 / 647 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
26.07.2013, 23:32 #47
Цитата Сообщение от Мимино Посмотреть сообщение
Не буду же я на форуме по каждой задаче спрашивать оптимальные алгоритмы решения.
Ну дык, а книжки умные кто будет читать? Вооружись Корменом и Кнутом, прочитай - будешь сам оптимальные алгоритмы придумывать.
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 23:36  [ТС] #48
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Ну дык, а книжки умные кто будет читать? Вооружись Корменом и Кнутом, прочитай - будешь сам оптимальные алгоритмы придумывать.
Читаю, читаю... не просто так же сижу но на это нужно время, а "копилочка" безработного не резиновая Помимо чтения надо же и писать что то, причем много.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.07.2013, 23:38 #49
Оптимальность... Оптимальность далеко не всегда важна. Зависит от задач, зависит от компании, зависит, в конце концов, от предметной области. Чаще всего лучше написать красивый, понятный код, нежели писать swap через битовые операции.
0
nonedark2008
908 / 647 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
26.07.2013, 23:45 #50
Цитата Сообщение от ForEveR Посмотреть сообщение
Чаще всего лучше написать красивый, понятный код
Хороший программист легко напишет оптимальный алгоритм красиво и понятно. Я, например, считаю, что оптимальность очень важна. Одно дело когда ты пишешь поиск подстроки прямым поиском в несколько строк, а другое - когда тот же поиск, но алгоритмом Боуера и Мура. Второе выглядит многим красивее...
Мне кажется, что красота кода, его понятность и его оптимальность - понятия схожи, и одно без другого как-то и не встречаются.
0
kamre
26.07.2013, 23:54
  #51

Не по теме:

Цитата Сообщение от Мимино Посмотреть сообщение
универ я закончил 5 лет назад и из головы уже многое повылетало
Почему тогда за C++ взялся сразу? Может стоило на .NET/Java посмотреть, там junior-ом должно быть проще устроиться.

0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 23:57  [ТС] #52
Цитата Сообщение от kamre Посмотреть сообщение

Не по теме:


Почему тогда за C++ взялся сразу? Может стоило на .NET/Java посмотреть, там junior-ом должно быть проще устроиться.

Мне он с универа еще очень нравился Проще/сложнее меня не пугает, главное - удовольствие.
1
nonedark2008
908 / 647 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
27.07.2013, 00:02 #53
Цитата Сообщение от Мимино Посмотреть сообщение
Проще/сложнее меня не пугает, главное - удовольствие.
Тут я с тобой солидарен =) А еще C++ хорош своей креативностью, любой баг в программе подпирается костылем, цвет, размер, форма и позиция которого подбираются на любой вкус ^_^
0
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
27.07.2013, 00:03 #54
Цитата Сообщение от kamre Посмотреть сообщение

Не по теме:


Почему тогда за C++ взялся сразу? Может стоило на .NET/Java посмотреть, там junior-ом должно быть проще устроиться.

я тоже сейчас изучаю с++, может мне забить на него и посмотреть на Java/C# ?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.07.2013, 00:07 #55
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Хороший программист легко напишет оптимальный алгоритм красиво и понятно. Я, например, считаю, что оптимальность очень важна. Одно дело когда ты пишешь поиск подстроки прямым поиском в несколько строк, а другое - когда тот же поиск, но алгоритмом Боуера и Мура. Второе выглядит многим красивее...
Мне кажется, что красота кода, его понятность и его оптимальность - понятия схожи, и одно без другого как-то и не встречаются.
Я вероятно соглашусь вцелом, но не соглашусь в частностях. Хороший программист знает что и где выбрать. Где-то удобнее простой поиск подстроки, где-то удобнее алгоритмом Боуера и Мура, где-то удобнее использовать регулярные выражения, а где-то этот поиск вообще не нужен.
Хороший программист легко напишет оптимальный алгоритм красиво и понятно.
Ну и да, в большинстве случаев, хороший программист не будет изобретать велосипед, а воспользуется проверенными средствами (читай библиотеками).
0
nonedark2008
908 / 647 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
27.07.2013, 00:11 #56
Цитата Сообщение от ovner Посмотреть сообщение
я тоже сейчас изучаю с++, может мне забить на него и посмотреть на Java/C# ?
Лучше хорошо допилить один язык, остальные пойдут намного проще. Вначале я неплохо в школе выучил C, после него C++ пошел легко. Далее Java - один хрен что и C++, а C# - считай содран с Явы. А дальше совсем все просто пошло: Python, Фортран, Хаскел, Лисп, Асма. За пару дней запоминаешь синтаксис языка и его особенности и уже можно писать что-либо осмысленное.

Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Хороший программист знает что и где выбрать. Где-то удобнее простой поиск подстроки, где-то удобнее алгоритмом Боуера и Мура, где-то удобнее использовать регулярные выражения, а где-то этот поиск вообще не нужен.
Это как раз и называется поиском оптимального решения для конкретной задачи.
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.07.2013, 00:14 #57
nonedark2008,
Цитата Сообщение от ForEveR Посмотреть сообщение
Одно дело когда ты пишешь поиск подстроки прямым поиском в несколько строк, а другое - когда тот же поиск, но алгоритмом Боуера и Мура. Второе выглядит многим красивее...
Кажется вы немножко себе противоречите. Впрочем, пустое. В целом, вы сказали все верно.
0
nonedark2008
27.07.2013, 00:17
  #58

Не по теме:


Цитата Сообщение от ForEveR Посмотреть сообщение
Кажется вы немножко себе противоречите.
Есть немного =)

0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2013, 08:03 #59
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Ну дык нужно же где-то хранить битовый результат, хотя все на усмотрение программиста.
судя по прототипу функции
void numberAsBinary(char *_result, unsigned int _number);
результат сразу помещать в строку result, дополнительные массивы вряд ли приветствуются.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Для этой сортировки понадобятся два временных массива, что ИМХО не хорошо.
откуда там два временных массива? там только массив count из 11 элементов всего. а вообще стоило пару сортировок прислать с комментариями.

Цитата Сообщение от TimeToWork Посмотреть сообщение
Задача 4. Стандартная олимпиадная задачка, решается в 4 строчки.
стандартная детская задачка, решается в две строчки кода. При оценке ее сложности можно O-большим не пользоваться, чтобы подчеркнуть, что сложность алгоритма W(N) < N.
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
29.07.2013, 22:26 #60
Цитата Сообщение от Мимино Посмотреть сообщение
3. Сортировка массива.
Цитата Сообщение от Мимино Посмотреть сообщение
Решение должно демонстрировать работу функции на примере результатов, полученных при решении задачи 2 (последовательностей, сгенерированных для 4 случайных чисел в диапазоне от 5 до 15).
Что-то мне кажется что эта задача с подвохом. У нас уже есть перемешанный массив с числами от 1 до N.
И теперь нужно произвести его сортировку. Но тогда можно и таким способом

C++
1
2
3
4
5
6
7
8
void Sort(
    int *_values,  // сортируемый массив
    unsigned int _count  // количество элементов в массиве
    )
{
  for (unsigned int i=0;  i!=_count;  ++i)
    _values[i]=i+1;
}
В результате получим массив 1 2 3 4 5 ... N
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 22:26
Привет! Вот еще темы с ответами:

Тестовое задание к собеседованию Junior ASP.NET MVC - C# MVC
Всем привет! Буду рад любой помощи и совету. Ситуация такая: компания дала тестовое задние перед собеседование на Junior ASP.NET MVC...

Тестовое задание - Java
Возникла необходимость сделать вот такое задание. Create a configurable two-level cache (for caching Objects). Level 1 is memory,...

Тестовое задание - PHP
Ребят, подскажите пожалуйста, кто с опытом, есть компания, хорошие условия работы и т.п. Я сразу понимаю что не волоку, но хочу подтянуть...

тестовое задание - Java SE
Здравствуйте! тестовое задание : Задача создать GUI приложение для конвертации файлов данных разных форматов. Данными в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.07.2013, 22:26
Ответ Создать тему
Опции темы

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