Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/76: Рейтинг темы: голосов - 76, средняя оценка - 4.72
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323

Что изучать для совершенствования знаний по C++

08.11.2018, 09:25. Показов 21498. Ответов 361

Студворк — интернет-сервис помощи студентам
Изучил уже до ООП, вопрос что делать дальше? Могу ли я уже писать программы, с чего начинать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.11.2018, 09:25
Ответы с готовыми решениями:

Что изучать после получения базовых знаний по c#
В каком направлении дальше двигаться? Или попытаться устроиться стажером для начала? А там дальше скажут в каком направлении двигаться...

Какой язык и технологию изучать после получения средних знаний
Здравствуйте! Я сейчас в 9 классе, буду поступать в техникум...Хорошие знания C#.NET, LINQ, ADO.NET, скоро буду начинать учить ASP.NET, и...

Ссылки для изучения и совершенствования
Ha всякий случай, несколько ссылок, больше на Rutracker. He знаю других трекеров c поиском в этих категориях. Темы c наибольшим спросом...

361
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
19.11.2018, 10:47
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от CyberGame Посмотреть сообщение
до list ещё не дошли
Не жди, когда вам что-то начнут объяснять. Программирование - это самостоятельная практика. Лучше если ты заранее что-то узнаешь, тогда во время объяснения преподавателем, ты ещё лучше и больше поймёшь, закрепишь и запомнишь.

Если теперь в начало update() добавить этот код, то змейка будет двигаться целиком:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void update(int value)
{
    Vector2i newPos;
    newPos.x = snake.front().x + vectorDir.x;
    newPos.y = snake.front().y + vectorDir.y;
    // Добавляем новый элемент в начало списка
    snake.push_front(newPos);
    // Удаляем старый элемент с конца списка
    snake.pop_back();
    // ...
    // ...
    // ...
}
Название: Snake.gif
Просмотров: 76

Размер: 16.3 Кб
1
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
19.11.2018, 10:53
Я поторопился. Съедание змейкой еды позже должно было быть. Сейчас она должна пролетать сквозь еду с кодом, который выше.

Добавлено через 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
void drawFood()
{
    glColor3f(0.0f, 0.5f, 0.5f);
    for (auto const& food : foods)
    {
        drawSquare(food.x, food.y, 1);
    }
}
 
void drawSnake()
{
    glColor3f(0.0f, 1.0f, 0.0f);
    for (auto const& cell : snake)
    {
        drawSquare(cell.x, cell.y, 1);
    }
}
 
void draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    drawText(0, 19, "Score: " + to_string(score));
    drawText(15, 19, "Lives: " + to_string(lives));
 
    drawFood();
    drawSnake();
 
    glutSwapBuffers();
}
 
void update(int value)
{
    Vector2i newPos;
    newPos.x = snake.front().x + vectorDir.x;
    newPos.y = snake.front().y + vectorDir.y;
    // Добавляем новый элемент в начало списка
    snake.push_front(newPos);
    // Удаляем старый элемент с конца списка
    snake.pop_back();
 
    int x = snake.front().x;
    int y = snake.front().y;
    for (auto it = foods.begin(); it != foods.end(); /* */)
    {
        int foodX = (*it).x;
        int foodY = (*it).y;
 
        if (x == foodX && y == foodY)
        {
            Vector2i cell = { x, y };
            snake.push_back(cell);
            it = foods.erase(it);
        }
        else
        {
            ++it;
        }
    }
 
    glutTimerFunc(250, update, 0);
    glutPostRedisplay();
}
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
19.11.2018, 22:16  [ТС]
8Observer8, я вообще ничего не понимаю. Сейчас буду изучать
"Указатели"
"Классы, конструктор и деструктор"
"Списки"
Потом продолжим.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
20.11.2018, 02:10
Начни с изучения struct и std::list. Не только из книг пытайся понять, но и из текстовых и видео туторов для начинающих. Когда будешь изучать, то снова и снова обращайся к коду, что я скинул, чтобы сильно в сторону не уходить.

Программирование связано с каждодневным самообучением. А так же программирование связано с английским: документация, хорошие обучающие материалы и т.д. Английский, который ты воспринимаешь на слух связан с тем английским, который ты читаешь в плане понимания терминологии и смысла.

Я клоню к тому чтобы ты скопировал в поиск youtube эти два запроса и смотрел на английском:
  • struct c++
  • std::list c++

Смотри один ролик за другим на английском. Допустим когда ты ешь, смотри ролики один за одним, даже если ни слова не понимаешь. Лайкай, какие понравились за обедом (эти ролики будут сохраняться в "Liked Videos"), Потом после обеда пересматриваешь их заново, ставишь на паузу, переписываешь код, экспериментируешь, выполняешь по шагам, наблюдаешь результат выполнения кода. Потом эти ролики опять пересматриваешь снова и снова и ты увидишь, что ты с каждым новым просмотром ролика понимаешь смысл того, что говорят, всё больше и больше, ты же уже экспериментировал с кодом и понимаешь какой результат он даёт.
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
20.11.2018, 08:58
Конечно, каждый по-своему запоминает информацию. Но видео для новичка - зло. Убьет усидчивость при чтении и восприятии документации.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
20.11.2018, 12:10
Я считаю, что каждый человек свободный в плане выбора источников получения информации. Нельзя сказать новичку, что вот тебе только документация на английском, а всё остальное убёт твою мотивацию и энтузиазм. Я принципиально не смотрю курсы на русском. Однажды начал смотреть ITVDN, но бросил, потому что решил отказаться от курсов и книг на русском, чтобы быстрее изучать английский.

Можно и документацию читать, и книги, и туторы. Одно другому не мешает, а как раз дополняет. На этих ресурсах много курсов для начинающих. Их можно сочетать с документацией и с книгами:
1
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
20.11.2018, 14:00
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Нельзя сказать новичку, что вот тебе только документация на английском, а всё остальное убёт твою мотивацию и энтузиазм.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я клоню к тому чтобы ты скопировал в поиск youtube эти два запроса и смотрел на английском
Некое противоречие. Здесь вы можете говорить только за себя.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Одно другому не мешает, а как раз дополняет.
Я вроде объяснил:
Цитата Сообщение от n1b1ru Посмотреть сообщение
Но видео для новичка - зло. Убьет усидчивость при чтении и восприятии документации.
Придерживаюсь этого мнения и настаиваю на том чтобы при изучении с нуля никаких видео не было, с опытом будет виднее.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
20.11.2018, 16:04
Цитата Сообщение от n1b1ru Посмотреть сообщение
Но видео для новичка - зло. Убьет усидчивость при чтении и восприятии документации.
Это вы сами придумали или есть ссылки на исследования? По собственному опыту могу сказать, что это не так. Я считаю, что усидчивость новичка может убить чтение документации, которая практически для всего на английском. Она может показаться непонятной, сухой и скучной для начинающего. Хорошие лекции принесут только пользу.
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
20.11.2018, 16:43
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Это вы сами придумали или есть ссылки на исследования?
Хотя бы в школе как обучались?
Под чтением книги тоже подразумеваются. ИМХО с таким подходом до документации дело и не дойдет.
В общем, я вижу что святое затронул. Советуйте ТС что хотите. Если из него выйдет программист, а не кодер буду только рад.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
20.11.2018, 17:57
Цитата Сообщение от n1b1ru Посмотреть сообщение
Хотя бы в школе как обучались?
В школе учитель писал на доске, устно объяснял. В универе преподаватели тоже на доске писали, а некоторые слайды показывали и говорили. На видео курсах показывают слайды, иногда на доске пишут, демонстрируют примеры кода, объясняют. Никакого привыкания курсы у меня не вызывали. Читать книжки они мне не мешают и документацию тоже.

Пример видео курса по Алгоритмам, который выкладывал преподаватель МФТИ. Он буквально начинает на доске писать с нуля первую программну на Python: print("Hello, World"), то есть он выкладывал видео курс для абсолютных новичков.

Алгоритмы на Python 3. Лекция №1
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
20.11.2018, 21:02
8Observer8, это был риторический вопрос. Все ваши утверждения касаются только вас, вашего личного опыта.
Я больше не буду продолжать, мы говорим на разных языках. Успехов вам.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
21.11.2018, 02:10
Цитата Сообщение от n1b1ru Посмотреть сообщение
мы говорим на разных языках. Успехов вам
Согласен и вам успехов.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
21.11.2018, 02:39
CyberGame, раз ты учишься в школе, то я тебе советую прочитать эту небольшую книгу от начала до конца: Изучаем C++
  • Книга имеет очень маленький объём. Всего 250 страниц.
  • Она легко читается, потому что расчитана на школьников средних и старших классов о чём пишет автор в рецензии
  • Сам автор пишет, что книга даёт необходимую базу для написания даже довольно сложных программ, но при этом является подготовкой к чтению более толстых книг и толстенных фолиантов.

Правда, в ней нет структур и списков. Но структуры - это тоже самое, что и классы. По-моему, разница лишь в том, что в структурах поумолчанию свойства и методы public, а в класса private, но это неточно. Про списки - в общем, и про std::list - в частности, ты узнаешь где-нибудь в другом месте.



0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
21.11.2018, 03:29
Цитата Сообщение от 8Observer8 Посмотреть сообщение
но это неточно
Точно.
1
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
21.11.2018, 07:42
CyberGame, ты, наверное, обратил внимание на промежуток между квадратами. Я его добавил с помощью константы padding. Я назвал так константу, потому что в CSS есть такой термин с тем же смыслом.

C++
1
2
3
4
5
6
7
8
9
10
11
void drawSquare(int x, int y, int size)
{
    const float padding = 0.1f;
 
    glBegin(GL_QUADS);
    glVertex2f(x + padding, y + padding);
    glVertex2f(x + size - padding, y + padding);
    glVertex2f(x + size - padding, y + size - padding);
    glVertex2f(x + padding, y + size - padding);
    glEnd();
}
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
21.11.2018, 08:09
Ты не спрашивал, почему мы задаём цвет рисования с помощью трёх вещественных чисел. Причём, эти числа не превышают единицу:
C++
1
glColor3f(1.0f, 1.0f, 1.0f); // Задаём белый цвет рисования
Может ты знаешь про RGB, но я поясню. Есть три главных цвета: красный, зелёный и синий. Комбинируя эти цвета с разными интенсивностями, можно получать все остальные цвета и оттенки. Каждый цвет имеет интенсивность в диапазоне [0, 255].

Если интенсивность всех трёх основных цветов равна нулю, то получается чёрный цвет. Если - 255, то это белый цвет.

(0, 0, 0) - чёрный цвет
(255, 0, 0) - красный цвет
(0, 255, 0) - зелёный цвет
(0, 0, 255) - синий цвет
(221, 95, 218) - оттенок розового цвета
(255, 255, 255) - белый цвет

Ещё раз ссылка на удобный калькулятор: http://doc.instantreality.org/... alculator/

В OpenGL тоже самое, только эти числа используются в нормализованном виде, то есть их делят на 255. Оттенок розового, который я привёл выше будет выглядеть в нормализованном виде так:

(221, 95, 218) --> нормализуем --> (221/255, 95/255, 218/255) = (0.866, 0.372, 0.854)

Это просто для примера нормализация красного цвета:
(255, 0, 0) = --> нормализуем --> (255 / 255, 0 / 255, 0 / 255) = (1.0, 0, 0)
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
21.11.2018, 10:27
Цитата Сообщение от 8Observer8 Посмотреть сообщение
По-моему, разница лишь в том, что в структурах поумолчанию свойства и методы public, а в класса private, но это неточно.
Структуры - наследие Си, там это просто упорядоченное хранилище данных, без методов, без разделения на приватные - публичные. В С++ к ним просто добавили методы.
А потом сделали отдельный тип данных - класс, который уже реализует принципы ООП - инкапсуляцию, наследование и полиморфизм.
Тут на любителя, но лично я стараюсь использовать структуры именно как структуры, без методов. А если нужна "структура С++", то просто объявляю все содержимое класса публичным:
C++
1
2
3
4
5
class CppStruct{
public:
  int field;
  int method(){return field+1;}
};
1
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
21.11.2018, 11:00
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Структуры - наследие Си, там это просто упорядоченное хранилище данных, без методов, без разделения на приватные - публичные.
Да, вот из Си я помню структуры хорошо помню. На первой работе наш отдел долгое время программировал микроконтроллеры на Ассеблере, а последний год, как я там работал, мы стали переходить на Си. Я стал изучать книгу Язык программирования Си от создателей языка Си: Брайан У. Керниган, Деннис М. Ритчи. Я её сначала на русском прочитал, потом на английском. На C++ я структуры так и продолжал использовать, как в Си - для хранения свойств. Я, конечно, знал, что в C++ можно методы писать в структуру, но раз методы нужны, то class сразу писал, а структуры для простых данных, чтобы слово public не писать.

CyberGame, я тебе задание придумал. Создай структуру для хранения цвета и передавай объект цвета в метод. Сделай тоже самое для вывода текста, чтобы можно было выводить текст разных цветов:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct Color3f
{
    float r = 0.5f;
    float g = 0.5f;
    float b = 0.5f;
};
 
void drawSquare(int x, int y, int size, Color3f color)
{
    const float padding = 0.1f;
 
    glColor3f(color.r, color.g, color.b);
 
    glBegin(GL_QUADS);
    glVertex2f(x + padding, y + padding);
    glVertex2f(x + size - padding, y + padding);
    glVertex2f(x + size - padding, y + size - padding);
    glVertex2f(x + padding, y + size - padding);
    glEnd();
}
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
22.11.2018, 09:09  [ТС]
8Observer8,
Ты не спрашивал, почему мы задаём цвет рисования с помощью трёх вещественных чисел.
Ты же сам говорил
Посчет структур, тоже самое что и класс, только там модификаторы доступа разные по умолчанию.

Сейчас пройду списки, и на этом всё

padding
Да, помню такое. Изучал CSS.

Ух, голова кругом. С чего же начинать, ты мне статей 3-4 сделал, что мне выполнить.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
22.11.2018, 11:35
Цитата Сообщение от CyberGame Посмотреть сообщение
С чего же начинать
Вот с этого:
Цитата Сообщение от CyberGame Посмотреть сообщение
Сейчас пройду списки, и на этом всё
В общих чертах понять, что главное в списках, то есть то, что в список можно добавлять элемент в начало, удалять элемент с конца. В змейке сейчас два списка: змейка и еда. Каждый элемент списка это простейшая структура, в которой хранятся два числа: X и Y.

Ты посмотри какие методы используются в программе у списков, почитай про эти методы, например:
C++
1
snake.push_front(newPos);
В гугле набираешь: list push_front
Первая ссылка: http://www.cplusplus.com/refer... ush_front/
Это самый ходовой сайт. Там всегда есть короткий пример использования и хорошее краткое описание. По сути это краткая документация. Самая серьёзная документация - это спецификация (или другими словами - стандарт языка), в которой описаны самые тонкие моменты. Я спецификацию очень редко открывал, на сайте cplusplus.com есть всё что нужно в 99% - это грубо, но пока точно спецификация будет очень сложная для понимания и для меня тоже, тем более у современных стандартов, начиная с C++11.
Insert element at beginning
Inserts a new element at the beginning of the list, right before its current first element. The content of val is copied (or moved) to the inserted element.
Метод list-контейнера push_front вставляет элемент в начало списка, и этот элемент становится перед первым элементов (и сам становится первым (нулевым) элементом). Передаваемое в метод содержимое копируется (или перемещается) в созданный элемент. Как-то так.

C++
1
snake.pop_back();
Копируем в гугл: pop_back std::list
http://www.cplusplus.com/refer... push_back/
Delete last element
Removes the last element in the list container, effectively reducing the container size by one.
Удаляет последний элемент в контейнере list. Эффективно уменьшает размер list-контейнера на единицу.

Сам почитай и посмотри примеры использования методов по запросам:
front std::list
erase std::list
begin std::list
end std::list
Сложнее всего будет тебе разобраться в логике перемещения змеи и хвоста, а так же понять понять, как работают итераторы в этом коде:
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
void update(int value)
{
    // Перемещение змеи и хвоста (змейка перемещается за счёт добавления нового элемента вместо головы, и удаления последнего элемента хвоста)
    Vector2i newPos;
    newPos.x = snake.front().x + vectorDir.x;
    newPos.y = snake.front().y + vectorDir.y;
    // Добавляем новый элемент в начало списка (то есть добавляем новую голову, по рассчитанной позиции)
    snake.push_front(newPos);
    // Удаляем старый элемент с конца списка (то есть удаляем самое последнее звено хвоста)
    snake.pop_back();
 
    // Столкновение с едой, поедание еды, рост змейки
    int x = snake.front().x;
    int y = snake.front().y;
    for (auto it = foods.begin(); it != foods.end(); /* */)
    {
        int foodX = (*it).x;
        int foodY = (*it).y;
 
        if (x == foodX && y == foodY)
        {
            Vector2i cell = { x, y };
            snake.push_back(cell);
            it = foods.erase(it);
        }
        else
        {
            ++it;
        }
    }
 
    glutTimerFunc(250, update, 0);
    glutPostRedisplay();
}
Добавлено через 2 минуты
Я подправил текст сообщения и добавил несколько строк комментариев к коду.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2018, 11:35

Какой язык изучать или что изучать?
Здравствуйте форумчане. какой язык программирования изучать чтоб работать дома через интернет? может 1с? я сам живу в деревне работы нет,о...

Подскажите, как лучше всего изучать язык, ежели в академии не дают достаточный объем знаний
хожу на курсы в академию уже 3 месяца, изучаем С++ по либерти, практики нету вообще, просто примеры по книге набираем...в общем туго идет,...

Какие паттерны можно использовать для совершенствования приложения
Доброго времени суток! У меня есть приложение реализованное на Qt C++ - тестирование студентов. Суть приложения заключается в...

Что изучать для работы
Всем здравствуйте. Ребята, такой вопрос. Какие технологии сейчас лучше изучать, чтобы было проще и быстрее, и при этом чтобы можно было...

Что изучать для создания сайтов
Привет всем, всех с новым годом! кто занимается web - разработкой, создание сайтов , хотелось у вас узнать ко э что. В каком порядки...


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

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru