Krististudio.ru

Онлайн образование
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Видеокурс по c

Уроки C++

Уроки C++ с нуля / Урок #1 — Основы

Видеоурок

Полезные ссылки:

Информация про C++

С++ берёт основу в языке Си, активно разрабатываемом ещё в 1969-1973 годах. За разработку отвечала компания Bell Labs во главе с главным разработчиком Деннис Ритчи. Через 10 лет программист из Дании Бьёрн Страуструп, в своё время являвшийся разработчиком Си, выпускает расширенную версию языка под названием С++. Вначале своего пути C++ являлся всего лишь расширением, неким дополнением к Си, которое расширяло язык, добавляя в него принципы ООП. Сам Страуструп изначально рассматривал язык всего лишь как «Си с классами».

Дата рождения C++ приходится на 1983 год. Хоть он и не являлся полноценным языком, а лишь ответвлением от Си, но всё же имел ряд полезных функций за счёт которых и стал полноценным отдельным языком программирования. С выходом C++ в мире появилось ряд, ныне общераспространённых, понятий:

  • Инициация классов с объектами;
  • Принцип наследования в ООП;
  • Выгрузка и удаление функций из памяти;
  • Создание виртуальных функций;
  • Система исключений и многое другое.

А что же язык Си?

Язык Си по сей день сохраняет популярность даже несмотря на развитие C++ и доминирующее положение последнего языка в сфере функциональности. Почему старый и менее развитый язык даже сегодня популярен? Всё просто – переносить программы на новый язык — довольно затратное и долгое дело. Часть компаний просто плывут по течению и продолжают поддерживать свои программы на Си.

В сети очень многие специалисты дают советы, что начать изучение С-подобных языков лучше с Си. Они говорят, что только так можно лучше понять суть С++. В реальности – это неправильное мнение. Если начать изучение с С++, в арсенале разработчика появятся знания о более новых и современных возможностях языка. Если когда-то появится необходимость перейти на Си, это не потребует много времени и сил. Даже сам факт необходимости перехода на довольно старый Си уже вызывает большие сомнения.

Но если вы все же хотите изучить Си перед языком C++, то предлагаем вам ознакомиться с большим видео уроком, в котором вы сможете познакомиться с этим языком:

Более детально про язык вы можете почитать на этой странице .

Распространение C++

В скоре после выхода язык С++ начал завоёвывать различные сферы программирования. Постепенно в него внедряли всё новые функции, что всё больше отдаляло его от роли дополнения к Си. Годами позже его перестали рассматривать продолжением или расширением и пришло время полностью отделиться от Си, тогда-то язык и назвали С++. С тех пор путь языков разошёлся, они стали независимыми (насколько это возможно).

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

Несколько ключевых сфер использования:

  • Разработка операционных систем. в том числе система Windows преимущественно базируется на С++;
  • Создание драйверов;
  • Написание программ с нуля;
  • Разработка и поддержка антивирусных приложений и прочего.

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

Весьма много игровых движков, предназначенных для визуализации огромного игрового мира, основываются на С++. За последние года всё больше мобильных приложений используют данный язык. Даже в сфере веба нашлось место этому языку. Всевозможные веб-приложения активно используют С++, не обязательно в качестве основы, может просто для реализации вспомогательных функций, но факт остаётся фактом. Если подытожить: сложнее найти сферы, в которых С++ не может применяться, чем там, где используется этот язык.

Ключевые особенности C++

С++ относится к компилируемым языкам, то есть компилятор изменяет код C++, преображая его в машинный с помощью предустановленных инструкций. Все платформы отличаются некоторыми особенностями, из-за чего нельзя взять и перенести программу с одной на другую платформу. Точнее, перенести можно, но она там не запустится. При этом исходный код приложения преимущественно переносится. Единственное исключение – использование специфических возможностей конкретной ОС.

У С++ есть компиляторы и инструменты для работы с кодом на большинстве известных платформ. Это позволяет скомпилировать исходники под любую платформу.

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

Как поэтапно развивался С++?

Шаги развития С++:

  • 1979-1980 – С++ появился и позиционировался, как язык Си с дополнительными классами;
  • 1983 – язык начал называться, как все мы привыкли С++;
  • 1985 – релиз коммерческого варианта С++. В этот же год появилась первая бумажная книга «Языка программирования C++», она включала описание функций, возможностей и правил использования языка;
  • 1989 – выпущена вторая версия языка с расширенными возможностями;
  • С 1990 до 2011 – медленное развитие и добавление функционала. Также стоит упомянуть, что в 1998 году впервые попытались стандартизировать язык. Тот стандарт впоследствии назвали ISO/IEC 14882:1998 , сегодня — С++98. В 2003 году появилась следующий вариант стандарта C++03;
  • 2011 – издание стандарта C++11, в нём появилось действительно много нововведений. Обновление обогатило язык обилием полезных возможностей;
  • 2014 – выпуск относительно малого добавления к предыдущей версии стандарта. Его прозвали C++14;
  • 2017 – последний крупный релиз языка.

Среды программирования, компиляторы

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

Для работы с C++ необходимо установить среду разработки. Вы можете установить любую удобную для вас среду или же вовсе воспользоваться онлайн компилятором, что представлен на этой странице ниже. Среди самых популярных сред разработки можно отметить такие, как: Visual C++ , Xcode (только Мак), GCC , Intel C++ Compiler , Embarcadero (Borland) C++ Builder .

Читать еще:  Курсы психолога бесплатно

Дополнительные курсы

Также можете посмотреть дополнительные курсы по языку C++. На нашем сайте все курсы по языку С++ вы можете найти по этой ссылке .

Видеокурс для изучения языка Си с нуля

Видеокурс для изучения языка Си с нуля

  • Видео , 8 января 2019 в 21:26
  • Алексей Грачев

Язык Си был разработан в 70-е годы XX века Деннисом Ритчи, сотрудником исследовательского центра Bell Labs. Язык отличается несложным синтаксисом, возможностью писать код на низком уровне абстракции, а также компактным размером стандартной библиотеки. Поэтому на нём до сих пор пишут программы для микроконтроллеров, драйвера устройств, промышленное ПО и многое другое.

Чтобы вы смогли изучить Си с нуля, мы нашли интересный видеокурс на русском языке, подробно объясняющий основные конструкции и другие элементы языка. Автор видеоуроков в качестве рабочей среды использует ОС Ubuntu, компилятор GCC и редакторы кода Sublime Text и Visual Studio Code. Каждый видеоурок длится в среднем 25−30 минут, в течение которых подробно разбирается каждая тема. Курс ориентирован на тех, кто никогда не сталкивался с программированием.

Содержание курса

  1. Введение в язык, создание первой программы
    Автор приводит историю языка, объясняет некоторые базовые понятия и создаёт простейшую программу на Си.
  2. Переменные, создание переменных в языке Си
    В данном видео рассказывается о типах переменных (short, int, char, float, double, long, long long) и методах их создания.
  3. Переменные, ввод и вывод информации в терминале в языке Си
    В видеоролике говорится о том, как ввести и вывести через терминал значения переменных с помощью функций scanf() и printf() .
  4. Escape-последовательности
    Escape-последовательности представляют собой сочетания символов, начинающиеся с косой черты и представляющие собой цифру или букву, например n , t . Автор рассказывает, какие escape-последовательности существуют, за что они отвечают и как используются в программе.
  5. Арифметические операции
    Видео посвящено разбору различных арифметических операций, принятых в языке.
  6. Составные операции в языке Си
    В Си можно использовать составное присваивание значений, например, с помощью += , -= , *= и /= . В видео подробно разбираются эти конструкции, а также показывается их использование на примерах программ.
  7. Локальные и глобальные переменные в языке Си
    Автор рассказывает о том, чем отличаются глобальные и локальные переменные, а также знакомит с ключевыми словами extern и static .
  8. Преобразование типов данных в языке Си
    В видео объясняется, как привести переменные к другим типам данных, например int к float .
  9. Массивы, создание массивов в языке Си
    Из видео вы узнаете, что такое массив, как его создать на языке Си и как выполнять действия с его элементами. Рассматривается только одномерный массив.
  10. Многомерные массивы, создание многомерного массива в языке Си
    В видеоролике объясняется работа с многомерными массивами на примере двумерного.
  11. Объявление констант
    В 11-м уроке автор рассказывает о том, что такое константа и как объявить её в коде.
  12. Объявление перечислений в языке Си
    Автор знакомит с ключевым словом enum и рассказывает, как с его помощью создавать собственные типы данных с помощью последовательностей констант.
  13. Отладка с помощью определений препроцессора
    Вы узнаете, какие существуют команды для препроцессора (компонента компилятора, подготавливающего код к компиляции), для чего нужна каждая из них и как применять команды на практике.
  14. Сравнение значений в Си
    В видео рассказывается о сравнении значений переменных с помощью == , != , > , , >= , .
  15. Логические значения
    В данном видеоуроке рассматриваются логические операции И && , ИЛИ || и НЕ ! .
  16. Проверка условий — тернарная операция
    Вы познакомитесь с тернарной операцией, которая представляет собой краткую запись if. else , например (a > b) ? a : b .
  17. Проверка условий if-else
    В 17-м уроке рассматривается конструкция if. else , позволяющая запустить определённый код в зависимости от того, выполнено требуемое условие или нет.
  18. Оператор множественного выбора switch case
    В видео рассмотрен оператор switch. case , с помощью которого в зависимости от поданного ключа можно выполнить нужный код.
  19. Цикл for
    Автор рассказывает о цикле for , позволяющем выполнить код внутри цикла при необходимых условиях требуемое количество раз.
  20. Циклы while, do while
    Цикл while часто используется для перебора элементов и может повторяться сколько угодно раз. Цикл do. while отличается от while блоком do , код в котором вне зависимости от условия выполнится хотя бы один раз.
  21. Утверждения break, continue, goto
    Вы изучите работу с оператором выхода из цикла break , перехода на следующую итерацию цикла continue , а также оператором перехода на определённое место в коде goto .
  22. Функции, прототипы функций
    Здесь даётся введение в функции. Чтобы облегчить понимание, в видео рассматриваются функции без передачи параметров и аргументов. Также вы узнаете, что такое прототип функции.
  23. Функции, передача аргументов в функции
    В видеоуроке рассматривается передача аргументов в функции, а также возврат значений из функций.
  24. Функции, рекурсия
    В видео рассказывается о рекурсии — вызове функции из самой себя.
  25. Сравнение листингов кода на Си
    Вы узнаете, как с помощью команды терминала diff сравнить два файла с исходным кодом.
  26. Пишем код на Си с разделением на файлы
    Вы научитесь разделять свою программу на несколько файлов с исходным кодом и использовать заголовочные файлы с расширением .h.
  27. Указатели в языке Си
    В видеоуроке всё внимание уделяется указателям — переменным, содержащим ссылку на другую переменную.
  28. Передача указателей в функции в языке Си
    С помощью указателей можно напрямую изменять элементы в памяти. Поэтому с их помощью расширяются возможности функций.
  29. Массивы указателей в языке Си
    Тема урока — создание и использование массивов указателей.
  30. Функции ввода и вывода строк в языке Си
    В этом видео автор рассказывает о вводе/выводе строк через терминал с использованием функций printf() , scanf() , fprintf() , fscanf() , gets() , puts() , fgets() , fputs() .
  31. Строки, функции: strcat, strncat в языке Си
    В видеоуроке разбираются функции объединения строк strcat() и strncat() .
  32. Строки, функции: strstr, strcmp в языке Си
    Здесь уделяется внимание функции поиска в строке strstr() и функции сравнения строк strcmp() .
  33. Строки, функции: atoi, sprintf, itoa в языке Си
    В видео рассматривается функция перевода из строки в число atoi() и функции перевода из числа в строку sprintf() и itoa() .
  34. Структуры в языке Си
    Автор объясняет, что такое структуры, а также как их создавать и объявлять.
  35. Структуры в языке Си: объявление указателей в структуре
    В видеоуроке рассматривается использование указателей в структурах и объясняется, почему в структурах лучше оперировать указателями, чем массивами.
  36. Структуры в языке Си: указатели на структуры
    Здесь рассказывается о том, что такое указатели на структуры, на что они действительно указывают, а также объясняется, для чего нужен оператор -> .
  37. Работа с файлами в языке Си
    В данном видеоуроке рассматривается чтение из файла, запись в файл и создание файла на языке Си. В видео демонстрируются кроссплатформенные методы работы с файлами, однако действия с файлами можно проводить и с помощью системных функций Linux.
  38. Работа с файлами в языке Си: функции fread, fwrite
    Вы познакомитесь с функцией чтения из файла fread() и функцией записи в файл fwrite() .
  39. Сообщения об ошибках
    Если при работе с файлами возникают ошибки, их можно обработать с помощью функций perror() и strerror() .
  40. Рандомные числа в Си
    В видео автор разбирает создание псевдослучайных чисел с помощью функций srand(time(NULL)) и rand() и изменение границ множества случайных чисел.
  41. Сортировка в Си
    В данном видеоуроке рассматривается использование быстрой сортировки qsort() (Quick Sort), уже встроенной в язык.
  42. WinAPI
    В последнем видео курса вы изучите несколько базовых функций системной библиотеки WinAPI, с помощью которых вы сможете реализовать MessageBox.

Дополнительные материалы

Чтобы быстро вникнуть в синтаксис языка, вы можете посмотреть часовое видео, в котором объясняются основы языка. В частности, в нём рассказывается о переменных, условных операторах, структурах, типах данных, арифметических операциях, функциях, циклах и многом другом.

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

C++ с нуля

Этот самоучитель создан для тех, кто хочет освоить основы программирования на C++. Уроки рассчитаны, в первую очередь на новичков, но будут полезны и тем, кто уже имеет небольшой опыт в программировании. Мы начнем с основных принципов и закончим данный курс уже на более сложных примерах.

Первая программа на C++ — урок 1

В качестве среды разработки под Windows автор советует использовать Visual Studio 2008 (800 Мб), если у вас Windows XP, Visual Studio 2013 (6.5 Гб) для Windows 7 и выше, или Dev C++ 5 (41 Мб) для тех, у кого слишком медленный интернет для загрузки Visual Studio. Пользователям Unix-подобных систем, потребуется компилятор GCC и любой текстовый редактор, например Vim.

После того, как вы установили все необходимое, приступим к написанию первой программы.

Переменные и типы данных в C++ — урок 2

Из школьного курса математики мы все знаем, что такое переменные. В программировании принципы довольно схожи. Переменная — это «ячейка» оперативной памяти компьютера, в которой может храниться какая-либо информация.

Конструкция ветвления в C++ — урок 3

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

К примеру, мы вводим с клавиатуры целое число. Если это число больше десяти, то программа должна выполнить одно действие, иначе — другое. Реализуем этот алгоритм на C++ с помощью конструкции ветвления.

Циклы в C++ — урок 4

Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. В этом уроке мы научимся программировать циклы на C++, после чего посчитаем сумму всех чисел от 1 до 1000.

Массивы в C++ — урок 5

Сегодня мы с поговорим о массивах. Вы уже знаете, что переменная — это ячейка в памяти компьютера, где может храниться одно единственное значение. Массив — это область памяти, где могут последовательно храниться несколько значений.

Возьмем группу студентов из десяти человек. У каждого из них есть фамилия. Создавать отдельную переменную для каждого студента — не рационально. Создадим массив, в котором будут храниться фамилии всех студентов.

Функции в C++ — урок 6

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

Указатели в C++ — урок 7

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

Если переменных в памяти потребуется слишком большое количество, которое не сможет вместить в себя сама аппаратная часть, произойдет перегрузка системы или её зависание.

Динамические массивы в C++ — урок 8

В пятом уроке мы разобрали понятие массива. При объявлении, мы задавали массиву определенный постоянный размер.

Параметры командной строки в C++ — урок 9

При запуске программы из командной строки, ей можно передавать дополнительные параметры в текстовом виде.

Классы в C++ — урок 10

Весь реальный мир состоит из объектов. Города состоят из районов, в каждом районе есть свои названия улиц, на каждой улице находятся жилые дома, которые также состоят из объектов.

Практически любой материальный предмет можно представить в виде совокупности объектов, из которых он состоит. Допустим, что нам нужно написать программу для учета успеваемости студентов. Можно представить группу студентов, как класс языка C++. Назовем его Students .

15 YouTube-каналов для начинающих веб-разработчиков

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

Русскоязычные каналы

WebForMySelf

Программированию с нуля по видеоурокам обучает команда проекта webformyself.com, цель которого — максимально доступно и подробно рассказать о создании сайтов начинающим веб-разработчикам, фрилансерам и всем интересующимся. На канале выложено большое количество обучающих видео, а на сайте — множество инструкций и статей о создании программ, основах SEO и веб-дизайне.

На WebForMySelf можно посмотреть курсы по:

  • объектно-ориентированному программированию;
  • JavaScript — одному из лидирующих языков веб-разработки;
  • теории и практике адаптивной верстки сайтов;
  • фреймворку Bootstrap — набору популярных инструментов фронтенд-разработки;
  • Node.js — платформе, с помощью которой можно писать серверный код на языке фронтенда JavaScript.

Кроме уроков, на канале появляются руководства по установке инструментов программиста и работе с ними, обзор библиотек, решение задач с собеседований и видео на смежные темы — например, о тенденциях веб-дизайна.

Наталья Березовская

Автор в сфере IT, digital, экономики и финансов. Ведет некоммерческий проект для начинающих писателей «ЛитЦех».

#SimpleCode

Очень качественные видеоуроки по языкам программирования C++ и C# для начинающих. Преподаватель действительно знает свое дело и доступно преподносит информацию, при этом разбирает предмет не поверхностно. По С++ вышло уже больше 200 видео по темам:

  • основы С++;
  • объектно-ориентированное программирование в С++;
  • многопоточное программирование;
  • STL — библиотека стандартных шаблонов.

Кроме того, есть уроки по основам HTML, динамическим структурам данных, общим понятиям веб-разработки и даже собран плейлист по созданию мессенджера под Android.

Технострим Mail.Ru Group

Канал создан компанией Mail.ru для демонстрации своей экспертизы в IT и продвижения образовательных проектов. Здесь вы найдете множество оригинальных видео различного содержания:

  • лекции по администрированию Linux;
  • уроки разработки на Java;
  • ток-шоу для айтишников Oh my code — код ревью , разбор резюме, кейсы и истории успеха от экспертов индустрии;
  • лекции по Android-разработке;
  • видеозаписи докладов с митапов Mail.ru.

Академия Яндекса

За время существования «Яндекс» накопил множество знаний и реальных кейсов по веб-разработке, грех этим не поделиться. Академия Яндекса обучает новых разработчиков, а на канале выкладываются лучшие материалы для всех интересующихся разными направлениями IT:

  • фронтенд;
  • системное администрирование;
  • веб-разработка в целом;
  • компьютерные науки;
  • тестирование и другое.

Winderton

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

Если вам легко изучать программирование, вы двигаетесь в неправильном направлении. Вам должно быть сложно.

Winderton

Главная заслуга автора — мотивация к обучению, что отмечает большинство зрителей канала и стримов. Winderton серьезно занимается менторством: у него есть собственные планы обучения, наработки и методика, а на Patreon его поддерживает 180 человек.

Гоша Дударь

Этот канал можно рекомендовать новичкам, которые только начинают самостоятельно искать информацию о веб-разработке. Круг освещаемых автором тем очень широк:

  • курсы по HTML, CSS, PHP, JavaScript, Ajax, различным фреймворкам и движкам;
  • C++, C#, Java, Python, С, Swift, Go и другие языки;
  • руководства по созданию игр на Unity, Unreal Engine, GameMaker, Corona SDK.

На первый взгляд канал выглядит очень масштабно, но темы рассматриваются поверхностно, будут интересны только начинающим. Затем стоит переходить на что-то более углубленное. Если вы интересуетесь фронтендом, то хорошим подспорьем станут онлайн-курсы по этому направлению.

Хауди Хо™

Просто о мире IT!

Видеоблог ведет программист-фрилансер. В последнее время на его канале выходит больше видео на далекие от разработки темы: топы программ для Windows, обзоры игр и популярного софта и даже уроки Photoshop. Но есть и полезные для начинающих выпуски: например, «HTML5 Canvas за 30 минут» или «Python за час».

Также автор канала много рассказывает о фрилансе, заработке на создании сайтов, тонкостях профессии программиста, но порой грешит роликами на «хайповые» темы. Если вас не отпугивают названия в стиле «5 худших языков программирования» или «Топ-7 фильмов про хакеров», то подпишитесь: новичку что-нибудь отсюда может и пригодиться.

У автора канала есть сайт «Клондайк программиста», где он регулярно размещает публикации на темы кибербезопасности, руководства по использованию программ и инструментов, обзоры софта для разработки веб-приложений и игр и многое другое на технические темы. В какой-то мере сайт можно назвать даже более полезным, чем сам YouTube-канал.

Англоязычные каналы

Отдельно приводим список полезных англоязычных каналов, благодаря которым вы не только получите новые знания по веб-разработке, но и попрактикуетесь в языке.

  • Codecourse — все, связанное с обучением PHP: основы, тонкости, фреймворки;
  • LearnWebCode — видеоуроки по HTML, CSS, JavaScript, WordPress;
  • LearnCode.academy — идеальный канал для начинающих: лекции по JavaScript, веб-дизайну, обзоры инструментов разработчика, советы по построению карьеры и многое другое;
  • Coder’s Guide — серии видео по JavaScript, HTML/CSS, Java, Visual Basic, гайды по Bootstrap, Laravel, WordPress;
  • Helping Develop — короткие (10-15 минут) видеоуроки по HTML, CSS, jQuery и PHP;
  • DevTips — все о frontend и дизайне сайтов;
  • Google Developers — новости веба от главного поисковика Google, есть несколько видео по разработке;
  • thenewboston — большое количество туториалов по Java, JavaScript, PHP, Node.js, HTML, Angular. У канала более 2 млн подписчиков, а это говорит о многом.

Заключение

В англоязычном сегменте хороших видеокурсов по разработке больше, чем на русском YouTube, и мы привели далеко не полный список блогов. А как вы лучше всего воспринимаете информацию: через видео, текст или аудио? И что предпочитаете: смотреть на языке оригинала или адаптированный контент на русском?

Бесплатные видеоуроки по программированию хороши доступностью, но самостоятельно разбираться в нем без наставника и мотивации трудно и долго. Зато если вы заплатили за обучение, то оно пройдет куда эффективнее и быстрее. Курс «Я — веб-разработчик PRO» откроет вам двери в веб: преподаватели научат всему, что знают и умеют сами, разберут домашние задания, проведут по всей программе, которую вы завершите дипломной работой и гарантированным трудоустройством в одной из компаний-партнеров.

Ссылка на основную публикацию
Adblock
detector