x

Разработать 4 простых класса для студенческого домашнего задания C++

Перейти к заказу
Ниже будет представлены требования для каждого из классов. 1) Vector std::vector Интерфейс и реализация std::vector во многом похожи на std::string. Ключевым отличием является семантика работы метода reserve (и остальных методов, которые приводят к увеличению capacity). При резервировании памяти под большее число объектов, выделяется "сырая" (неинициализированная) память достаточная для хранения нужного числа дополнительных объектов. Пустые ячейки заполняются лениво по мере необходимости. То есть, если size < capacity, то это значит, что первые size * sizeof(T) байт реально заняты объектами, а последние (capacity - size) * sizeof(T) байт пусты - объектов там не создано. Это нужно, например, для того, чтобы можно было создавать вектор из объектов, у которых нет конструктора по умолчанию (а как бы тогда нужно было инициализировать неиспользуемые ячейки?): struct A { int x; A() = delete; explicit A(int x_param) : x(x_param) { } }; std::vector v; v.reserve(1000); // объекты A не создаются! Выделяется "сырая" память размера 1000 * sizeof(A) for (int i = 0; i < 1000; ++i) { v.push_back(A(i)); // а лучше v.emplace_back(i); } Подробности на лекциях, семинарах, в чатах, на заборе, а также в справочнике. Детали реализации От вас требуется реализовать шаблонный класс Vector с единственным шаблонным параметром - типом хранящихся элементов. При реализации можно (и даже нужно) пользоваться обобщенными алгоритмами из STL (std::copy, std::fill и т.п.), но нельзя использовать стандартные контейнеры. Будет проверяться корректность мультипликативной схемы расширения массива с коэффициентом 2. В базовой версии ручное управление временем жизни объектов не требуется (см. доп. задание). Класс должен поддерживать следующий функционал:Конструктор по умолчанию - создает пустой массив;Явный конструктор от числа - создает массив заданного размера заполненный объектами, сконструированными по умолчанию;Конструктор, принимающий size и value (именно в этом порядке) - создает массив длины size, заполненный элементами со значением value;Шаблонный конструктор, принимающий пару итераторов - создает копию переданного диапазона;Важно: объявление этого конструктора должно иметь видtemplate ::iterator_category>>>Vector(Iterator first, Iterator last)Это делает конструктор доступным только в случае, когда на вход приходят два Forward итератора.Конструктор от std::initializer_list;Правило "пяти";Методы Size, Capacity, Empty;Константный и неконстантный оператор доступа по индексу []. Неконстантный должен позволять изменять полученный элемент;Константный и неконстантный метод доступа по индексу At. При выходе за границы массива должен бросать исключение std::out_of_range;Методы Front() и Back()доступ к первому и последнему элементам (тоже по две версии).Метод Data()возвращает указатель на начало массива.Метод Swap(other)обменивает содержимое с другим массивом other;Метод Resize(new_size)изменяет размер на new_size. Если вместимость не позволяет хранить столько элементов, то выделяется новый буфер с вместимостью new_size. Недостающие элементы конструируются по умолчанию.Метод Resize(new_size, value)то же, что и Resize(new_size), но в случае new_size > size заполняет недостающие элементы значением value.Метод Reserve(new_cap)изменяет вместимость на max(new_cap, текущая вместимость). Размер при этом не изменяется.Метод ShrinkToFit()уменьшает capacity до size.Метод Clear()устанавливает размер в 0, очищения выделенной памяти при этом НЕ происходит.Методы PushBack(const T&) и PushBack(T&&)добавляет новый элемент в конец массива.Метод PopBack()удаляет последний элемент.Операции сравнения (<, >, <=, >=, ==, !=), задающие лексикографический порядок.Также реализуйте поддержку итераторов и методы для работы с ними: begin(), end(), cbegin(), cend(), rbegin(), rend(), crbegin(), crend(). begin()-end(), rbegin()-rend() должны иметь две версии, возвращающие константные и неконстантные итераторы. Для того, чтобы codestyle не ругался на написание методов с маленькой буквы, напишите в данной строке комментарий // NOLINTВнутри класса Vector определите типы-члены ValueType, Pointer, ConstPointer, Reference, ConstReference, SizeType, Iterator, ConstIterator. Гарантии безопасности Спроектируйте класс так, чтобы при возникновении исключений (нехватка памяти, ошибка при копировании объектов и т.п.) методы удовлетворяли строгой гарантии безопасности. То есть все методы должны работать атомарно: либо работать без сбоев, либо не изменять исходного состояния вектора. Исключение: копирующее присваивание может давать лишь базовую гарантию безопасности.При решении можно предполагать, что конструкторы перемещения, перемещающие присваивания и деструкторы объектов никогда не бросают исключений!2) Itertools.Range Itertools Одним из минусов языка C++ является отсутствие удобного интерфейса работы с последовательностями и промежутками значений, который, по большому счету сводится к ручному написанию циклов и работе со встроенными итераторами. С введением библиотеки в C++20 ситуация заметно улучшилась. В этом цикле задач мы попытаемся решить заявленную проблему средствами C++17. Range Для написания цикла по целым значениям в C++ необходимо написать следующий код: for (int i = 0; i < end; ++i) { // ... } for (int i = begin; i < end; ++i) { // ... } for (int i = begin; i < end; i += step) { // ... } Сравните, например, с языком Python: for i in range(end): # ... for i in range(begin, end): # ... for i in range(begin, end, step): # ... Хотелось бы иметь подобный лаконичный код и в C++ (благо range-based for завезли в C++11): for (int i : range(end)) { // ... } for (int i : range(begin, end)) { // ... } for (int i : range(begin, end, step)) { // ... } Проблема в том, что в стандартной библиотеке (до C++20) нет сущности range, которую можно было использовать в подобном контексте. Ну а раз так - надо ее реализовать самостоятельно! Детали реализации Необходимо реализовать Range (класс или функцию), который возвращает объект некоторого класса (вам нужно его реализовать) с определенными методами begin и end. Эти методы должны возвращать итератор (его тоже нужно реализовать), который при разыменовывании возвращает соответствующее целое значение, а при инкрементировании увеличивает свое состояние на step (по умолчанию step == 1).Примеры: (больше примеров см. в тестах) for (int i : Range(3)) { ... } // i in [0, 1, 2] for (int i : Range(3, 6)) { ... } // i in [3, 4, 5] for (int i : Range(3, 6, 2)) { ... } // i in [3, 5] for (int i : Range(6, 1, -2)) { ... } // i in [6, 4, 2] Указание: вспомните как работает range-based for в C++- Поддержать обратные итераторы (см. примеры в тестах). 3) Реализуйте шаблонный класс UnorderedSet, аналог std::unordered_set, который основан на хешировании методом цепочек с динамическим увеличением числа корзин.Метод цепочек предполагает хранение массива, в каждой ячейке которого лежит корзина - список вставленных элементов с одинаковыми хеш-значениями. Среднее время операций над такой структурой пропорционально степени загруженности таблицы (load_factor = n_elements / n_buckets). При превышении load_factor некоторого значения (в задании = 1) происходит перехеширование - создание нового массива корзин в, например, 2 раза большего размера и перенос старых элементов в новые корзины.В простейшем варианте достаточно хранить вектор (std::vector) списков (std::list / std::forward_list) и выполнять операции над ним. Более эффективные техники описаны ниже в дополнительных заданиях. Базовая часть Шаблонный класс UnorderedSet должен быть параметризован типом ключа KeyT. Стратегия расширения такая же как в задаче String - при добавлении элемента в пустую таблицу число корзин становится равным 1, при добавлении элемента в полную таблицу число корзин увеличивается в 2 раза (таблица считается полной, если число корзин совпадает с числом элементов, то есть load_factor == 1). В качестве хеш-функции воспользуйтесь std::hash. std::hash отображает объекты в диапазон size_t, чтобы получить индекс корзины, возьмите остаток от деления полученного числа на количество корзин.Набор методов включает:Конструктор по умолчанию. Создает пустую хеш-таблицу.Конструктор от числа корзин count. Создает хеш-таблицу с count пустыми корзинами.Конструктор от промежутка заданного двумя Forward итераторами. Создает хеш-таблицу с числом корзин равным числу элементов в последовательности, а затем вставляет элементы в таблицу.Конструкторы копирования, перемещения, а также присваивания должны работать корректно.Методы Size, Empty, Clear с привычной семантикой.Методы вставки Insert(const KeyT&), Insert(KeyT&&).Метод удаления Erase(const KeyT&).Метод поиска bool Find(const KeyT&).Метод Rehash(new_bucket_count). Изменяет число корзин в хеш-таблице с перехешированием. Если new_bucket_count совпадает с текущим количеством корзин или меньше числа элементов (load_factor становится больше 1), то ничего делать не нужно.Метод Reserve(new_bucket_count). То же, что и Rehash, но не уменьшает число корзин, то есть срабатывает, если new_bucket_count превышает текущее количество корзин.Методы BucketCount (возвращает число корзин в таблице), BucketSize(id) (возвращает размер корзины с номером id), Bucket(key) (возвращает номер корзины, в которую попадает объект key), LoadFactor() (возвращает степень заполненности таблицы).Обратите внимание, что каждый раз создавать новые узлы списков при перехешировании может быть неэффективно. Для переиспользования старых узлов (перебрасывания указателей старых списков) рассмотрите возможность использования метода std::list::splice.4) BigInteger Условие В C++ в отличие от, например, Python нет встроенных возможностей для работы с длинной арифметикой - вычислениями над величинами превосходящими по размеру базовые типы. Несмотря на то, что типы long long и unsigned long long(~10191019) покрывают большую часть практических вычислений, иногда бывает необходимо повысить точность выполняемых операций.В этом задании необходимо реализовать класс BigInteger для работы с большими целыми числами, которые вмещают в себя значения от −N−N до NN, где N=1030,000N=1030,000 Детали реализации В качестве решения ожидается описание класса BigInteger. Для этого класса необходимо реализовать все требуемые арифметические операции и сопутствующие методы, упрощающие работу с ним.Длинное число можно представлять в памяти в виде массива цифр из некоторой системы счисления. Например, если в качестве системы счисления взять 1000, то каждый элемент массива будет представлять собой целое число из промежутка [0,...,999][0,...,999]. Рекомендуется в качестве основания брать некоторую степень 10 для удобства ввода и вывода числа в десятичной системе счисления (иначе придется выполнять перевод из одной системы в другую).Пример:Пусть число представляется в виде массива 5 цифр из 1000-й системы счисления. Тогда десятичное число 1,234,567,890 будет представляться в памяти массивом [890, 567, 234, 1, 0] (сначала младшие разряды, затем старшие).При таком подходе достаточно просто реализовать операции сложения, вычитания и умножения над массивами "в столбик", последовательно выполняя операции над цифрами.Недостатком данного метода является неэффективное расходование памяти, выделяемое под число. Допустим, основание системы счисления равно 10'000, а цифра представляет собой беззнаковое 16-битное число, которое может вместить в себя 65'536 значений. Получается, что в каждый момент времени, как минимум 2 бита расходуется в пустую.Кроме того, при реализации сложения и умножения следует помнить, что результат их применения к цифрам может не помещаться в заданный тип (9'999 * 9'999 не влезает в 16-битное число). Для решения этой проблемы можно было бы взять тип "с большим запасом" - хранить цифры в 32-битных целых числах. Но это только усугубляет проблему, описанную в предыдущем абзаце. В качестве альтернативы предлагается использование приведения целых типов к более широкому в момент умножения, для получения корректного результата.Пример: using DigitType = uint16_t; // тип цифры - 16 битное число using DoubleDigitType = uint32_t; // тип цифры с удвоенной шириной digits_[i] * digits_[j]; // результат uint16_t - возможно переполнение static_cast(digits_[i]) * digits_[j]; // результат uint32_t - нет переполнения Для поддержки отрицательных чисел достаточно хранить булевский флаг "отрицательности" числа и соответствующим образом корректировать операции в случае, когда он имеет значение true.Полный набор операций, который необходимо поддержать:Создание на основе целого числа (конструктор от целых чисел) и на основе си-строки с десятеричным представлением числа.IsNegative()true, если число отрицательное.Унарные + и -.Сложение, вычитание, умножение с присваивающими аналогами.Те же операции со встроенными целыми числами.Префиксные и постфиксные инкремент и декремент.Оператор приведения к bool.Операции сравнения.Операции ввода из потока и вывода в поток.При переполнении длинного числа, то есть если в результате операции количество десятичных цифр числа превосходит N (формально в тестах разрешается погрешность в 9 цифр), то нужно бросать исключение типа BigIntegerOverflow.Замечания.Решение должно состоять из файла интерфейса big_integer.h и файла реализации big_integer.cpp.В задаче есть открытые и закрытые тесты. Перед отправкой решения проверяйте его на открытых тестах (чуда не будет, если есть ошибка в публичных тестах, то она проявится и на более сложных приватных).Операции можно тестировать независимо на соответствующих задачах из Я.Контест.Решение необязательно должно быть оптимальным. Сосредоточьтесь на корректности реализаций. Решения "столбиком" будет достаточно."Бросить исключение типа E" значит - написать строку throw E{};. В этот момент выполнение функции прекращается и, если исключение не будет обработано, программа завершится аварийно. Тестирующий код корректно обработает эту ошибку, вам этого делать не нужно.Реализуйте операции целочисленного деления и взятия остатка от деления. Заметьте, правила деления отрицательных чисел в математике и C++ отличаются. От вас требуется реализация деления по правилам C++.Решение необязательно должно быть оптимальным, но в меру. Подойдет решение "уголком", но линейный поиск делителя на каждом шаге эффективным точно не назвать.

Найдено 5216 результатов

Разработать Bot Telegram

Заказ одежды:1.Пользователь нажимает на «Заказ одежды»2.Далее пользователь выбирает пол:Кнопки:‍♂️ 3.Далее пользователь выбирает:Если женщина: Платья/Блузки Свитера/Кофты Юбки БрюкиОбувьНе нашли нужное? (переводит на мой тг)Если мужчина: Футболки/Рубашки Свитера/КофтыБрюки/ШортыОбувьНе нашли нужное? (переводит на мой тг)4.Пользователь вводит ссылки «Введите ссылку (-и)» ( если ссылок несколько , нужно предусмотреть кнопки для добавления ссылок)и добавление штук товаров (автоматически с добавлением ссылок)5.Пользователь вводит размер«Введите ваш размер (-ы):Вводит любой размер, если некорректно написан размер, то ошибка высвечивается соответсвующая ( если несколько товаров , нужно предусмотреть кнопки для добавления размеров)Если кол-во ссылок не совпадает с кол-во размеров, кол-во товаров - ошибка.После ввода - он нажимает кнопку «Оформить заказ»Ему высвечивется результат:6. Результат:Фото или несколько фото(API) Название или несколько названий(API) Стоимость или несколько стоимостей(API)Размер и несколько размеровСсылка или несколько ссылокОплата ROBOKASSA6. Также появляется личный кабинет(всё остается как мы ранее обсуждали):Только отсутствует выставление счёта за доставкуАКСЕССУАРЫ:«Заказ аксессуаров»1. выбор категории:УкрашенияПарфюмОчкиЧехлыДиски⌚️Часы⚡️Зарядки2.Ссылка ( если ссылок несколько , нужно предусмотреть кнопки для добавления ссылок)и добавление штук товаров (автоматически с добавлением ссылок)Расчет стоимости доставки по ценовым диапозонам и исключениям , которые описаны выше3.Результат :4. Также появляется личный кабинет (всё остается как мы ранее обсуждали):Только отсутствует выставление счёта за доставку

Bots
Опубликован:
11.05.24 07:58
Бюджет:
15000 руб.~$187.25
Озвучка на украинском языке (женский голос)

Нужно озвучить графический видеоролик (5 мин 33 сек) с русского языка на Украинский. Озвучить нужно под оригинальный ролик, чтобы совпадал хронометраж, паузы и интонация. Для озвучки нужен женский голос. Перевод текста уже сделан.

Аудиозапись и озвучка
Опубликован:
11.05.24 07:42
Бюджет:
10000 руб.~$124.83
Перевод инструкции с английского на русский

Необходимо перевести инструкцию к электронному устройству на русский язык с сохранением всех элементов в PDF файле

Переводы
Опубликован:
11.05.24 06:25
Бюджет:
3000 руб.~$37.45
Доработать презентацию

Презентация для китайских партнёров тема сделана из шаблона и уже размещена, необходимо дорасположить грамотно картинки, доделать инфографику (некоторые шаблоны в теме уже есть) и выровнять расположение в целом, чтобы всё выглядело презентабельно. Срок 11 мая вечер 17.00 по мск. Это презентация на русском! Корректировать надо будет уже с китайским переводом! Переводчик разместит по смыслам правильно текст, его структуру надо будет сохранить! https://docs.google.com/presentation/d/1W5nsQ5qNajB9s48kZNxWIdWxbJJdMAn4nHSw6vqPjxc/edit?usp=sharing

Презентации и инфографика
Опубликован:
11.05.24 02:43
Бюджет:
6000 руб.~$74.9
Перевод с арабского на испанский

Нужен перевод документа на испанский.

Переводы
Опубликован:
10.05.24 20:27
Бюджет:
6000 руб.~$74.9
Перевод с немецкого языка

З/П от 60 до 70 000 рублей, удаленно DJI PRINT — репутационный менеджмент каталогов об авто . Что предстоит делать: – Принимать задачи на перевод текстов с немецкого языка. – Принимать задачи на перевод текстов с английского языка – Принимать работу, проверять. – Уметь давать комментарии копирайтерам, по которым они самостоятельно доработают текст. Круто, если вы сами можете всё исправить, но делать это нужно копирайтерам. – Уметь объяснить коллегам и клиентам, как и почему именно так нужно написать текст. – Работать над контентом для компании: отредактировать текст для страницы на сайте, КП. Ждем от тебя: – Уже работал на похожей позиции или в теории понимает, что мы хотим от него. – Рассмотрим людей без опыта в диджитал, но совсем без опыта работы с текстами и людьми — нет. – Умеет задавать вопросы в момент их возникновения.

Переводы
Опубликован:
10.05.24 20:19
Бюджет:
130000 руб.~$1622.77
Лендинг

Здравствуйте, нужен лендинг. Короткий, но сделанный со вкусом. Состоит всего из главного слайда(с фото), блок с цифрами, блок о себе, блок с ценой и контакты. Одну лид форму. Желательно на вордпрессе, но не обязательно. Сайт на английском языке, перевод всех текстов есть. Ниша бухгалтерские услуги. Пример на фото что примерно нужно. Нужно за выходные закончить

Создание сайта
Опубликован:
10.05.24 20:02
Бюджет:
5000 руб.~$62.42
Перевод каталогов с немецкого языка

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

Переводы
Опубликован:
10.05.24 19:54
Бюджет:
70000 руб.~$873.8
Схема и описание синтеза речи с клоном голоса и переводом

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

Video
Опубликован:
10.05.24 19:51
Бюджет:
30000 руб.~$374.49
Перевод инструкции с Китайского, подготовка к печати

Нужно качественно перевести инструкцию на электрическую точилку и подготовить файл к печати. Нужен в формате psd или pdf подготовить файл к печати Перевод с Китайского на русский Сделать нужно один лист(файл), тот который на Китайском языке. Второй файл на английском языке просто для информации

Переводы
Опубликован:
10.05.24 18:15
Бюджет:
3000 руб.~$37.45
Описание синтеза речи с клоном голоса и переводом

Требуется составить техническую схему замены голоса в видео на английском языке на такой же клонированный голос только на русском. Можно найти уже существующую схему и немного ее дополнить. Срок - 1-3 недели

Редактирование аудио
Опубликован:
10.05.24 18:09
Бюджет:
60000 руб.~$748.98
Перевод с немецкого на русский

нужно перевести каталог , и сделать это в нужном формате , примеры вышлю ,- поиск постоянного переводчика, предварительно будет выслано тестовое задание

Переводы
Опубликован:
10.05.24 17:39
Бюджет:
7000 руб.~$87.38
Написать текста в блог

Нужно написать 5 текстов в блог. Текста на русском языке. Текста от третьего лица. Возможно нужно будет переводить текста на англ. язык

Тексты и наполнение сайта
Опубликован:
10.05.24 15:23
Бюджет:
3000 руб.~$37.45
Перевод

Сделать перевод текста ( технический) Просьба откликаться только переводчикам, т .к. нужен качественный перевод. Цена открытая, жду предложений.

Переводы
Опубликован:
10.05.24 14:02
Бюджет:
1000 руб.~$12.49
Требуется разработчик HTML + Vue3

Требуется разработчик HTML + Vue3 Опыт работы с RestAPI Базовые знания Laravel Оплата почасовая. 350р/час (максимум 6 часов в день), задачи есть всегда. Так же в обязанности входят: - Переговоры с менеджером по заказам. - "Дейлики". - Недельные миты. - Составление отчетов по проделанной работе раз в неделю. По софту: - Нам без разницы на какой ОС вы работаете, главное чтобы все настраивалось без проблем [:1f642] - !!! Включаем в работе ПО скриннинга, для отслеживания активности Наши преимущества: - Стабильные оклады + премии за выполненную работу / наставничество разрабов послабее - Свободный график (работаешь когда захочется, главное 6 часов в день) - Никакой бюрократии, не надо согласовывать отпуск и выходные дни с десятками людей и составлять объяснительные. Написал что не выйдешь и готово - Наставничество от тим-лидера, приятный коллектив, никакого негатива и арбузеров По оплате: - Первая часть присылается числа 15-20, вторая часть числа 25-30 - Оплата производится на карту Сбербанка/Тинькоффа (К сожалению с переводами за границу не работаем) По форме работы: - Первые 15 дней стажировка со ставкой 250 рублей / час, после стажирвоки тим лид определяет ставку в большую часть в соответствии с навыками (Обычно +200 рублей за час) - После стажировки оформляем официальный договор как с Самозанятым/ИП

Верстка
Опубликован:
10.05.24 12:23
Бюджет:
96000 руб.~$1198.36
Изменить картинки товара

Изменить картинки товара (Работа в фотошопе + перевод текста) Необходимо изменить картинки к 19 товарам (готовые комплекты камер видеонаблюдения). Необходимо перенести картинки в новый шаблон и сделать перевод надписей на картинках. Пошагово: 1) Открываете файл "Список комплектов для иняз сайта.xlsx" В файле 19 ссылок 2) Нажимаете на первую ссылку, откроется список из 20-30 товаров (это одна и та же модель комплектов камер видеонаблюдения, отличаются по количеству камер в комплекте). Вам нужно нажать на каждый товар и сохранить себе главную картинку товара https://skrinshoter.ru/s/080524/OHvv38V9?a 4) Открываете фотошоповский шаблон "Комплект камер для перевода.psd" Подробное тз во вложении

Обработка и редактирование
Опубликован:
10.05.24 09:46
Бюджет:
6000 руб.~$74.9
Профессиональный перевод текста с английского на французский

Здравствуйте! Нам требуется опытный переводчик для выполнения перевода текста с английского на французский язык. Текст... руб

Переводы
Опубликован:
10.05.24 09:30
Бюджет:
800 руб.~$9.99
Перевод с английского языка на русский

Добрый день! Требуется сделать перевод резюме с Русского на Английский язык. Перевод одной странички.

Переводы
Опубликован:
10.05.24 09:15
Бюджет:
500 руб.~$6.25
Изменить картинки (Работа в фотошопе + перевод текста)

Необходимо изменить картинки к 33 товарам (камеры видеонаблюдения). У некоторых товаров по несколько картинок, всего около 150 картинок. Необходимо перенести камеры в новый шаблон и сделать перевод надписей на картинках. Пошагово: 1) Открываете файл "Список камер для перевода.xlsx" В файле 33 ссылки 2) Нажимаете на первую ссылку, откроется карточка товара. 3) Вам нужно сохранить себе на компьютер картинки товара из карточки. По первой ссылке их будет 4 https://skrinshoter.ru/s/070524/O8B9mHUT?a Чтобы увидеть 3 остальные кликайте на маленькие картинки под главной картинкой. В некоторых карточках товаров этих картинок больше, в некоторых меньше. 4) Открываете фотошоповский шаблон "Камера для перевода.psd" Подробное ТЗ во вложении

Обработка и редактирование
Опубликован:
10.05.24 08:01
Бюджет:
4000 руб.~$49.94
Небольшие добавления в игру тест на construct 3

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

Игры
Опубликован:
10.05.24 07:48
Бюджет:
6000 руб.~$74.9

Текущая страница: 82

Всего страниц: 261