C++ — Мне нужна помощь C ++


Содержание

Написание программы в C++, и мне нужна помощь

Поэтому я новичок в этом. Я пытаюсь написать программу с функцией

double_product (вектор a, vector b), который вычисляет скалярное произведение двух векторов. Скалярное произведение

Вот что у меня есть. Это беспорядок, но я стараюсь!

У вас есть довольно правильная идея на фундаментальном уровне. Несколько базовых строительных блоков дополнительно, и вам будет хорошо на вашем пути. Функция scalar_product близка, но не совсем. Вы создали два итератора цикла с тем же именем, итерации по тем же значениям. Это должно быть хорошо, просто сказать

Теперь все, что вам нужно сделать, это получить некоторые данные, вызвать их и затем вывести результат.

Вся вещь class совершенно не нужна here-, только классы, которые вам нужны, входят в стандартную библиотеку.

так как я не могу комментировать, я вынужден ответить.

видимо, есть один и тот же вопрос, слово за словом, здесь:

Мне нужна помощь с этим алгоритмом на С++

Я пытаюсь решить проблему с алгоритмом, но не могу найти решение.

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

Существует два ряда ламп и N 4 ответа

Изменить:

Недавно OP опубликовала ссылку на исходную задачу, и оказалось, что вам разрешено переключаться между лампами взад и вперед. Мое нижнее решение работает только в том случае, если вам разрешено включать только свет.

Определения


U[i] := i-th light in the upper row.

L[i] := i-th light in the lower row.

A[i][j] := subconfiguration of the input configuration where you have i lamps in the upper row and j lamps in the lower row.

Например, если начальное состояние:

Во-вторых, пусть определит:

f(i, j) := minimum number of moves to switch all lights off in A[i][j]

Вы заинтересованы в вычислении f(n, n)

Кроме того, определим:

RU[i] := maximal consecutive run of 1 in the upper row ending in the i-th position.

RL[i] := maximal consecutive run of 1 in the lower row ending in the i-th position.

Например, если начальное состояние:

Тогда RU[1] = 1 , RU[3] = 3 , RU[4] = 0

Вы можете вычислить как RU, так и RL слева направо в O(n) времени.

Наблюдения

Сначала заметим, что если A[i][j] имеет k_1 нули в конце верхней строки и k_2 нули в конце нижней строки, то f(i, j) = f(i — k_1, j — k_2) , потому что последние k_1 и k_2 свет выключен.

Отношение повторения


Обратите внимание, что если вы хотите вычислить f(i, j) , есть 3 случая:

  • Отключить максимальный последовательный запуск 1 в верхней строке за один ход.
  • Отключить максимальный последовательный запуск 1 в нижней строке за один ход.
  • Если я = j и огни U [i] и L [j] включены, вы можете отключить их одним движением.

Конечно, базовый случай f(0, 0) и ему требуется 0 ходов.

Затем для вычисления f(i, j) :

запоминание

Чтобы избежать вычисления f для тех же i и j много раз во время рекурсивных вызовов, просто сохраните результаты уже вычисленного f в хеш-таблице и верните их в O(1) , а не снова вычислите.

Runtime

Простая верхняя граница, конечно, O(n^2) , потому что существует не более O(n^2) подзадач.

Полезные приёмы и хитрости C++

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

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

Общие хитрости для C++

1. Макрос watch — один из самых полезных приёмов.

При отладке кода watch(переменная) выведет имя переменной и её значение.


2. Другие полезные макросы:

3. Не бойтесь использовать typedef .

Порой что-нибудь вроде set

>>> можно заменить на set

Цукерберг рекомендует:  Простой поиск при помощи PHP, jQuery и MySQL

4. В качестве наиболее точного значения числа π можно использовать const double pi = 2 * acos(0.0) . Желательно использовать именно такой вариант, если иное значение не указано в условии задания.

4 октября 2020 – 1 марта 2020, Москва и онлайн, беcплатно

5. Никогда не используйте INT_MAX в качестве бесконечности для целых чисел. В некоторых алгоритмах, например, Флойда–Уоршелла, используются значения вроде ∞+w, что приведёт к переполнению при использовании INT_MAX . Вместо этого лучше использовать int oo = 0x3f3f3f3f , поскольку:

  • Это число достаточно большое для задач, связанных с целыми числами;
  • 2 * oo не приведёт к переполнению;
  • Все байты равны, поэтому вы без проблем можете использовать memset(array, oo, sizeof(array)) ;
  • Его довольно легко запомнить.

Однако будьте осторожны: не используйте 0x3f3f3f3f для long long , так как в таком случае фокус уже не пройдёт, и вы потом потратите кучу времени на поиск ошибки.

6. Для double -бесконечности хорошей идеей будет использовать double inf = 1.0/0.0 , поскольку именно так представлено значение бесконечности. У вас не будет переполнения, если вы напишете что-нибудь вроде 2*inf , так как 2*inf равно inf .

7. Существует встроенная функция для нахождения наибольшего общего делителя двух чисел. Это функция __gcd , доступная в заголовочном файле algorithm . Подробней можно почитать здесь.

8. Почти всё о манипуляциях с битами — как установить бит, обнулить бит, быстро умножить/разделить на 2 и т.д. — можно найти здесь и здесь.

9. Не используйте 1 , если x может быть больше 31, так как это неопределённое поведение может привести совсем не к тому результату, который вы ожидаете. Сначала приведите 1 к long long : 1ll .

10. Вместо if(условие) x++ вы можете написать x += условие . Спецификация C не гарантирует, что true равно 1, но в соревновательном программировании можно предположить, что это сработает.

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


Прим. перев. В олимпиадном программировании оценивается время работы программы на тестирующем сервере, флаги компиляции на котором задаются огранизаторами олимпиады и обычно уже включают флаг -O2 .

12. Стандартные объекты ввода и вывода C++ cin и cout по умолчанию работают быстро. Но их работу замедляет синхронизация с буферами C. Поэтому, если в начале кода написать ios::sync_with_stdio(false) , то cin и cout будут работать так же быстро, как и printf и scanf , которые вы, однако, больше не сможете использовать.

13. Не стесняйтесь использовать глобальные переменные. Максимальный размер массива, объявленного в функции main , может быть порядка 10 6 , в то время как размер глобального массива может быть порядка 10 7 .

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

Хитрости для GCC

1. Если вы используете GCC, вы можете написать #include для импортирования всех стандартных библиотек.

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

Есть множество других встроенных функций, прочитать про которые можно здесь.

Хитрости для C++11

C++11 привнёс некоторые обновления и пару классных вещей. Почти все компиляторы установили эту версию по умолчанию, но если в вашем случае это не так, то используйте флаг -std=c++11 для компиляции.

Прим. перев. В новых версиях GCC по умолчанию включён более новый стандарт C++14, который включает в себя все возможности C++11.

1. В заголовочном файле numeric есть полезная функция std::iota . Она заполняет std::vector (или какой-нибудь контейнер) увеличивающимися значениями, начиная с x . Например, iota(v.begin(), v.end(), x) .

2. Вам больше не нужно использовать _pair . Вместо этого вы можете написать ii p = <1, 2>или, например, iii p = <1, <2, 3>> .

Примечание Иногда работает не так, как вы ожидаете . Например, этот код выведет то, что должен:

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


3. Ключевое слово auto позволяет не указывать явно тип переменной, если вы объявляете и инициализируете её в одном месте. Например, вместо int i = 10 вы можете написать auto i = 10 , поскольку компилятор знает, что у i тот же тип, что и у 10 . Само собой, без инициализации переменной это не сработает.

4. В С++11 появилась такая классная штука, как цикл for , основанный на диапазоне. Например, вам не придётся писать for (int i = 0; i , потому что теперь есть for (auto &e : v) . За подробностями сюда.

Он очень полезен при обходе std::set или std::map :

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

5. Вы можете написать функцию, которая будет возвращать два и более значений, с помощью std::tuple и std::tie .

Уже знали все эти хитрости и думаете, что вы эксперт в С++? Тогда пройдите наш тест и подтвердите это.

Тема: Помощь по С++.

Опции темы
Поиск по теме
Отображение
  • Линейный вид
  • Комбинированный вид
  • Древовидный вид
Цукерберг рекомендует:  Html - Как в водить вв-коды со сторонних ресурсов.


Помощь по С++.

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

ЗЫ Новички пусть тоже не стесняются постить, никто за «ламерский» вопрос не убьет и не забанит, а наоборот, выслушают и помогут

Re: Помощь по С++.

— де тут ошибка и как её исправить? плиз ,помоги

Re: Помощь по С++.

а можно описание поподробней? в чем именно заключается ошибка? компилятор ругаецца? алгоритм не пашет?

при первом взгляде на код возникает еще несколько вопросов..
что это за хедер такой «wind.h»?
почему не подключен хотя бы «windows.h»?
куда делась главная функция?
и что за типы данных необъявленниые, типа smb и player? или они как раз в этом «wind.h» объявлены?

Re: Помощь по С++.

а можно описание поподробней? в чем именно заключается ошибка? компилятор ругаецца? алгоритм не пашет?

при первом взгляде на код возникает еще несколько вопросов..
что это за хедер такой «wind.h»?
почему не подключен хотя бы «windows.h»?
куда делась главная функция?
и что за типы данных необъявленниые, типа smb и player? или они как раз в этом «wind.h» объявлены?

я тоже глянул, фигня какая то, откуда ТС это выдрал?

Re: Помощь по С++.

эт тока часть программы, я не могу в функции beginOFgame создать переменную-указатель типа FILE, компилятор звезду(*) принимает за битовую операцию.


Заполнить строку одинаковыми символами [требует правки]

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

заполнение строки str заданным символом c .

Объявлен 1 час назад требующим правки участниками vmchar, Drakonoved, Streletz, Let’s say Pie, AR Hovsepyan, так как непонятна суть вопроса.

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

Программисты нужна помощь в c++!

Помогите пожалуйста с программой в c++.

Написать программу, вычисляющую сумму и среднее арифметическое последовательности положительных чисел, которые вводятся с клавиатуры.
Вводите после стрелки числа. Для завершения ввода введите
ноль.
-> 45
-> 23
-> 15
-> О
Введено чисел: 3
Сумма чисел: 83
Среднее арифметическое: 27.67

НУЖНО СДЕЛАТЬ ТРЕМЯ СПОСОБАМИ В ОДНОЙ ПРОГРАММЕ, используя все три оператора цикла

Написание программы в C++, и мне нужна помощь

Поэтому я новичок в этом. Я пытаюсь написать программу с функцией

double_product (вектор a, vector b), который вычисляет скалярное произведение двух векторов. Скалярное произведение

Вот что у меня есть. Это беспорядок, но я стараюсь!

У вас есть довольно правильная идея на фундаментальном уровне. Несколько базовых строительных блоков дополнительно, и вам будет хорошо на вашем пути. Функция scalar_product близка, но не совсем. Вы создали два итератора цикла с тем же именем, итерации по тем же значениям. Это должно быть хорошо, просто сказать

Теперь все, что вам нужно сделать, это получить некоторые данные, вызвать их и затем вывести результат.

Вся вещь class совершенно не нужна here-, только классы, которые вам нужны, входят в стандартную библиотеку.


так как я не могу комментировать, я вынужден ответить.

видимо, есть один и тот же вопрос, слово за словом, здесь:

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.

Цукерберг рекомендует:  Нужна - помощ JS и PHP

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что нужно знать, чтобы устроиться c++ программистом?

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

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

Так лучше бери проекты на фрилансе, наберешься опыта, знаний и сразу все твои вопросы отпадут, а работать ты всегда успеешь устроится (может junior’ом, а может к тому времени уже и middle)

C++ — Мне нужна помощь C ++

Из своего опыта знаю что программистом С++ устроиться на хорошее место очень сложно. К программистам на этом языке предъявляют очень высокие требования и очень обширного набора знаний. Второй интересный аспект данного вопроса, почему к программистам на C++ предъявляют обязательное требование знать Qt и даже при наличии хороших знаний по C++/STL и смежных направлений без знания данной библиотеки кандидатов даже не рассматривают. Третий аспект, это что на C++ без огромного опыта работы по трудовой берут только молодых специалистов. Если устраиваться программистом C#/JS/SQL на даже большие деньги при тестировании вопросы в разы проще, типа напишите пару SQL запросов и как в коде работают замыкания плюс на ошибки смотрят сквозь пальцы.
Приведу несколько примеров:
1) На собеседовании помимо С/С++ были задания на знание Win32 API и в частности Threads, хотя это не подразумевалось.
2) На собеседовании по C/C++ не было ни одного вопроса по данному языку, а только тесты по алгебре и геометрии, например — разделить прямоугольник с выбитой окружностью на две равные по площади фигуры с помощью прямой или другое задание — сколько не пересекающихся плоскостей можно провести через 4 точки не лежащие в одной плоскости и помимо решений привести доказательства. Хотя анонсировано было только тестирование C/C++ и векторная алгебра.
3) В задании было написано что принимаются работы на OpenGL и DirectX, но в итоге кандидатов с решениями на DirectX не рассматривают.
4) Выполнив задание для очень крупной компании на DirectX 12 (предложили разобраться) и убив очень много времени что бы выучить данную библиотеку даже не отвечают на письма. И как оказалось DX12 промышленно почти ни кто не использует.
5) Поставленные задачи необходимо решать только на определенных алгоритмах, например для задач со строками необходимо обязательно пользоваться логикой указателей, а все другие решения считаются неправильными.
6) Если вы где то ошиблись то вам в конце обязательно заявляют что в данной компании необходим человек который сразу может решать задачи компании и что вы не являетесь таким человеком или что вы в принципе не умеете решать задачи по математике или геометрии или чему то еще.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих