Программирование

Программирование на С++

,

помогите научиться..

Дата публикации:

nokeMoH, 8.10.2018 - 0:06

Добрый вечер, у меня есть странная затея, которая интересна пожалуй будет только мне одному, но не смотря на это, под себя, я бы хотел Создать определённую программу, чья работоспособность бы имела около 10-15 разных функций (поиск, замена, сравнение и т.д)..

Назначение утилиты я продумываю не как работу с текстом, а работу непосредственно с Кодом файла (всеми значениями от 00-ff), то есть хочу сделать что-то вроде Hex-редактора, чтобы Утилита открывала файл, меняла одни нужные мне значения на другие, искала позиции определённых символов, относительно их делала какие-то последующие операции...

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

Просмотреть весь доступный материал у меня просто не хватит на это время физически, и затем вычерпнуть из него только то, что мне действительно нужно, мне было бы проще Задать вопрос, и получить на него ответ.. Сам принцип программирования я вроде уловил (написания программы), устанавливается нужная Среда программирования, а в ней просто чередуется последовательность определённых кодов, значений, функций, которые в последствии компилируются в *.exe файл... Так вот помощь с этими Кодами мне и нужна только..

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

Если кто-то отзовётся, то у меня сразу есть первый вопрос.. Я узнал, что языков программирования оказывается уже существует более 8.000 штук, к моему удивлению, я думал штук 10 их всего, потому что на слуху столько.. Для меня самое важное и первостепенное - СКорость РАботы ПРограммы в той области применения, о которой я писал в первом и во втором абзацах.. Пусть программа занимает места на компьютере большего объёма чем должна была бы, пусть подъедает побольше RAM, пусть ещё что-нибудь, но чтобы Большой Жирный Плюс всегда был в сторону её Скорости Работы.. А вопрос такой, из всех сред программирования, я правильно определился с тем, что нужно мне это делать именно на C++ или нет ?..

Henry723, 8.10.2018 - 8:12

Java - лучше попробуй на ней... smile.gif

nokeMoH, 8.10.2018 - 14:14

Советуете попробовать на Java потому, что её знаете сами и сможете подсказать как реализовать программу с помощью её кодов ?, или же знаете разницу между С++ по этому и советуете Java ?..

Я бы конечно ради интереса приложение создал бы на разных средах программирования, если появиться такая возможность, и проверил бы каждую из них на быстродействие, мне нужна утилита, которая бы работала с файлами разных размеров, от 1 MB до хотя бы 1 GB, а если и больше 1 GB раза в 2-4 получиться то даже и лучше будет, а если и меньше, до 400-500 MB получиться реализовать, то ни чего страшного, буду разбивать файлы на необходимые куски размера и обрабатывать каждую часть по отдельности, потом соединять их обратно в один большой кусок..

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

Я буду рад любой помощи по принципу Вопрос-> Ответ ,, так как я не хочу научиться всеобъемлющему программированию, а мне интересны исключительно только конкретные цели (работать с Шестнадцатеричным кодом файла в диапазонах от 00 по ff, поиск символа, их замена, их позиционирование, зависимость одного символа от другого, и немного остальных прочих условий).. Я знаю про существование Hex-редакторов с поддержкой скриптов, мне это не подходит, там не всё можно сделать что мне нужно.. По этому...

Я буду рад любой помощи по принципу Вопрос-> Ответ

AquaTour, 8.10.2018 - 15:12

1) С++ как язык для обучения программированию так себе, он слишком сложный. Конечно могут набежать те, кто скажет что ничего сложного там нет, но не факт, что они смогут с легкостью ответить на несколько вопросов почему кусок кода на С++ работет так, а не иначе
2) Оптимизировать скорость можно только понимая, как работает программа, классический пример, что будет быстрее, обход матрицы по строкам или по столбцам и почему?
3) Обработать файл в несколько Гб нет проблемы, какую скорость обработки будем считать приемлемой?
4) Для того, чтобы спрашивать конкретной помощи, хорошо бы тщательно сформулировать вопросы.
5) По принципу вопрос-ответ и работает stackoverflow.com, хочется программировать - этот сайт в закладки.
6) Скрипты скорее всего могут сделать все что нужно, не может пользователь. Но это не точно.
6) Ну и язык - C# rolleyes.gif

nokeMoH, 8.10.2018 - 16:45

AquaTour, спасибо..

1) Из всех просмотренных мною роликов за последние дни по С++, пока не ощущаю такой сложности как об этом могут сказать, я конечно ни чего сам не умею, но у меня сформировалось такое мнение - что умение программировать - это просто знание нужных кодов и их применение, от сюда вытекает следующее, другой Язык Программирования - просто другие коды на те же самые операции, очевидно, что где-то должны быть уникальные коды, по функциональности, где-то коды, делающее одно и тоже...
2) Я точно пока не могу знать ответа на этот вопрос(..
3) Приемлемая скорость работы - максимально высокая, так как я решил замахнуться на файлы большого объёма.., разумеется для того, чтобы сократить Время обработки файла..
5) Спасибо, запомню его и уже сохранил, буду обращаться по случаю.. Надеюсь с переводчиком языкового барьера возникнуть не должно..
6) smile.gif
7) Я не знаю чем отличаются языки [C], [C++] и [C#] друг от друга, но на слуху почему-то С++, что он мол самый лучший, по этому им и начал интересоваться..


4). Если начать с малого, то хотел бы поинтересоваться, Какой софт для программирования посоветуете ?, вероятней всего одну из последних версий, так как в них должно быть больше сокращений (команд), это я из роликов запомнил..

Хотелось бы, чтобы будущая Созданная программа умела работать на Системах WinXP, Windows 7, Win8.1 ну и Win10 разумеется, x32 и x64 редакциях разумеется, если это имеет какое-то значение при выборе метода программирования...

Цель проекта - полноценная работа с Шестнадцатеричным кодом файла в диапазонах от 00 по ff ,, то есть с любым его значением от 0 до 255 включительно, поиск символов, замена одного на другое при разных условиях, вставка определённого символа в нужное место, тоже по условию, все операции расписать сразу тяжело, это по ходу движения поезда только получиться сделать..

С чего посоветуете начать чтобы можно было потихонечку начинать приступать к работе ?.. Какой-то софт для программирования...

kostya-chist, 8.10.2018 - 17:31

Цитата | Quote(nokeMoH @ 8.10.2018 - 17:25)
но у меня сформировалось такое мнение - что умение программировать - это просто знание нужных кодов и их применение

Крайне ошибочное мнение.
Почитайте Дональда Кнута "Искусство программирования"
Цитата | Quote(nokeMoH @ 8.10.2018 - 17:25)
от сюда вытекает следующее, другой Язык Программирования - просто другие коды на те же самые операции, очевидно, что где-то должны быть уникальные коды, по функциональности, где-то коды, делающее одно и тоже...

А вот конкретный язык программирования выбирается в зависимости от задач, знаний и умений.
Цитата | Quote(nokeMoH @ 8.10.2018 - 17:25)
Хотелось бы, чтобы будущая Созданная программа умела работать на Системах WinXP, Windows 7, Win8.1 ну и Win10 разумеется, x32 и x64 редакциях разумеется, если это имеет какое-то значение при выборе метода программирования...

Эту задачу большинство гигантов решить не могут. Но, конечно, решение зависит от сложности поставленной задачи.

OffTop: C таким подходом к программированию получаем то, что имеем, т.е. индийский код.

AquaTour, 8.10.2018 - 19:10

Цитата | Quote(kostya-chist @ 8.10.2018 - 18:11)
Почитайте Дональда Кнута "Искусство программирования"
*

крайне ошибочный совет. Сам то читал? wink.gif Помогло? Не надо учить физику с квантовой механики, результата не будет.
Цитата | Quote(kostya-chist @ 8.10.2018 - 18:11)
C таким подходом к программированию получаем то, что имеем, т.е. индийский код.
*

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

AquaTour, 8.10.2018 - 19:33

nokeMoH,
1) Если задача состоит в складывании двух чисел, то да, код будет относительно простым на всех языках, только на С\С++ он все равно будет сложнее.
Вот тут есть пара примеров кода, понятно что происходит? Амперсанды, звездочки, квадратные скобки, за время, которое понадобится для более менее спокойного чтения и понимания этого кода, вполне можно самостоятельно написать решение на другом языке.
3) С такой постановкой работать нельзя. Действительно критична разница в пару секунд на гигабайтном файле? Вся жизнь состоит из компромиссов, программирование не исключение. Определитесь со своими потребностями и сколько ресурсов (времени например) готовы потратить на то, чтобы выиграть лишнюю секунду. Сразу скажу, что стоимость оптимизации лишней секунды может вылиться в часы работы над программой, готовы?
Не менее важно помнить о том, что в первую очередь надо оптимизировать алгоритм, а не код.
7) С/С++ неуправляемые языки, т.е. в общем случае работать с памятью придется вручную, выделять, освобождать, обращаться по указателю, вообще без понимания работы с указателями в этих языках ловить нечего, C# это управляемый язык, т.е. среда выполнения сама следит за памятью и работа с указателями в управляемых языках не является необходимостью, хотя и возможна. В целом C# проще как язык, Java задумывалась как очищенная версия C++, C# это очищенная версия Java, хотя в дебри можно и в нем залезть.
4) Задача рядовая, решается на любом языке. Нужно попробовать выделить одну мелкую задачу и разбить ее на подзадачи, действуя таким образом до "атомарных" команд, т.е. грубо говоря чтобы каждой подзадаче можно было поставить в соответствие строку кода, после остаётся собрать эти строки вместе и задача решена.

Цитата | Quote(nokeMoH @ 8.10.2018 - 17:25)
WinXP, Windows 7, Win8.1 ну и Win10 разумеется, x32 и x64
*

собственно трудности в этом особой нет, другое дело, что программы для своей работы часто требуют библиотеки, которые используют, их может не быть в целевой системе и потребуется их установка, названия у библиотек самые разные c++ redistributable, .net framework, java runtime, суть одна.
Для неуправляемых языков можно решить задачу, если таскать библиотеки рядом с программой.

Код пишут либо в IDE, либо в текстовом редакторе. Мне в IDE проще, выбор IDE зависит от языка, я использую Visual Studio и Visual Studio Code, работал бы я с другими языками, выбор IDE был бы другим.

nokeMoH, 8.10.2018 - 21:44

Цитата | Quote(AquaTour @ 8.10.2018 - 20:13)
1) Если задача состоит в складывании двух чисел, то да, код будет относительно простым на всех языках, только на С\С++ он все равно будет сложнее.
Вот тут есть пара примеров кода, понятно что происходит? Амперсанды, звездочки, квадратные скобки, за время, которое понадобится для более менее спокойного чтения и понимания этого кода, вполне можно самостоятельно написать решение на другом языке.

Складывания чисел не будет, будет Вставка определённого символа, выбранного не случайным образом в предыдущей операции, рядом с другим символом, так же, который будет выбран не случайно, а за счёт определённого алгоритма, и этот вставляемый символ в зависимости от ситуации, должен будет вставиться либо -До, либо -После выбранного значения...

Цитата | Quote(AquaTour @ 8.10.2018 - 20:13)
3) С такой постановкой работать нельзя. Действительно критична разница в пару секунд на гигабайтном файле? Вся жизнь состоит из компромиссов, программирование не исключение. Определитесь со своими потребностями и сколько ресурсов (времени например) готовы потратить на то, чтобы выиграть лишнюю секунду. Сразу скажу, что стоимость оптимизации лишней секунды может вылиться в часы работы над программой, готовы?
Не менее важно помнить о том, что в первую очередь надо оптимизировать алгоритм, а не код.

Мм, я ожидал что разница при работе с такими внушительными габаритами может быть крайне высокой, ну там скажем 1 GB бы обрабатывался в одном случае за 15 минут ,, в другом случае 30-45 минут, разница была бы очевидна конечно, и эту проблему нужно было бы решать, ну а если такая разница будет выделяться только Парой секунд, думаю ни чего страшного тут нету, даже и минуту другую можно было бы перетерпеть, но не излишних 20-30 минут.. Как Вами уже было замечено ранее, делаю утилиту под себя, по этому по большому счёту сырой, !но рабочий вариант меня бы вполне устроил, но тем не менее, в будущем, я не оставлю попыток сделать ещё лучше, сразу к идеалу стремиться сознательно не хочу, с моими знаниями не получиться, возможно в каком-то из будущих, я бы смог с помощью или без ,, как-то сделать лучше, но это потом и не сразу, а "сырой" вариант всё равно тоже нужен, чтобы было с чем работать.. Да, над алгоритмом я думал долго и всё продумал до мелочей, ну может где-то и осталась какая-то заноза, не всегда всё получается с первого раза, старался сосредоточиться на минимум операций до достижения намеченной цели..

Цитата | Quote(AquaTour @ 8.10.2018 - 20:13)
Цитата | Quote(nokeMoH @ 8.10.2018 - 17:25)
WinXP, Windows 7, Win8.1 ну и Win10 разумеется, x32 и x64
*

собственно трудности в этом особой нет, другое дело, что программы для своей работы часто требуют библиотеки, которые используют, их может не быть в целевой системе и потребуется их установка, названия у библиотек самые разные c++ redistributable, .net framework, java runtime, суть одна.
Для неуправляемых языков можно решить задачу, если таскать библиотеки рядом с программой.

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

Цитата | Quote(AquaTour @ 8.10.2018 - 20:13)
Код пишут либо в IDE, либо в текстовом редакторе. Мне в IDE проще, выбор IDE зависит от языка, я использую Visual Studio и Visual Studio Code, работал бы я с другими языками, выбор IDE был бы другим.

Я текстовый редактор не осилю (если это блокнот), я пока ещё не привык ко всем закорючкам по этому подсветка в нужных местах разными окрасами для меня будет играть пока очень важную роль..


---------
------
---------
----


Первое, с чего бы мне хотелось научиться и начать, это вот что:

1). Что скачать и установить для программирования..

2). В моём алгоритме, любой файл, какого бы он не был размера, обработка всегда будет Подвух-байтной, но в связке по 8 Байт, сейчас объясню, то есть (начало Алгоритма) имеем грубо говоря файл размером в 8 байт, и в процессе его Полной обработки, утилита Сначала обрабатывает Первые 2 байта до определённого результата, результат обработки первых двух байт она должна будет запомнить либо у себя в голове, либо в каком-нибудь временном файле который будет создаваться, этот результат нам ещё понадобиться.. Затем переключается на следующие 2 байта, то есть на 3 и 4 уже по счёту получается.. Соответственно результаты обработки 3 и 4 байта тоже необходимо будет запомнить, а затем, провести определённые манипуляции с Обоими Результатами, каждый из которых мы получили в процессе обработки 1 и 2 байта, так же и 3 и 4 байта.. Только обработав эти два результата, так же, определённым алгоритмом, мы в итоге получим Первое значение.. Затем проделываем ВСЁ тоже самое с 5 и 6 Байтами, и 7 и 8 Байтами, в конце получаем Второе значение.. Далее обрабатываем Первое и Второе значение ещё одним алгоритмом и получаем Конечный Результат, его то и нужно будет записать в конце в Файл, на выходе который мы и получим..(конец Алгоритма) Вот что я имел в виду когда говорил в связке по 8 Байт, но Подвух-байтно.. Алгоритм на этом закончен, и в дальнейшем мы переключаемся на следующие 8 Байт, делаем всё тоже самое и так же в конце должны зафиксировать получившееся значение, записать его в файл...

Затея действительно у меня весьма дурная, но мне это действительно очень нужно, и по этому я прошу у Вас помощи..

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

Буду следовать всем Вашим инструкциям.. Скажите пожалуйста:

1). Какой конкретно Софт для программирования и какой версии мне необходимо установить, чтобы потихонечку было бы можно приступить к работе ?.. У меня Win7 x32 ,, но есть чистый новый мощный ПК, куда я могу установить что-то другое если этого будет требоваться..

AquaTour, 9.10.2018 - 1:25

Цитата | Quote(nokeMoH @ 8.10.2018 - 22:24)
Мм, я ожидал что разница при работе с такими внушительными габаритами может быть крайне высокой, ну там скажем 1 GB бы обрабатывался в одном случае за 15 минут
*


1 Гб в 2018 году это совсем не внушительный объем, его можно весь загрузить в память и там обрабатывать, а с учетом того, что результат будет в 4 раза меньше, то и результат формировать в памяти. Кмк в таком алгоритме, самой медленной частью будет чтение и запись файла.

Цитата | Quote(nokeMoH @ 8.10.2018 - 22:24)
Я не против этого, запихну в папку с утилитой всё что потребуется для её работы по возможности, чтобы она всегда смогла бы работать на Чистой системе..
*

под такие условия попадает только С\С++, ну либо ждать .net core 3.0, но в нем точно не будет XP и будут поддерживаться только обновленные версии win 7, 8.1, win 10, в принципе можно почитать какой .net framework установлен по умолчанию в системе и ориентироваться на него.
Цитата | Quote(nokeMoH @ 8.10.2018 - 22:24)
Я текстовый редактор не осилю (если это блокнот)
*

блокноты бывают и с подсветкой синтаксиса, но в IDE удобнее, да.
Цитата | Quote(nokeMoH @ 8.10.2018 - 22:24)
Что скачать и установить для программирования..
*

если устроит вариант C\C++ или C#, то устанавливать Visual Studio 2017 Community Edition _ttps://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&rel=15
При выборе компонентов выбрать нужные, нет смысла ставить больше чем потребуется.

nokeMoH, 9.10.2018 - 19:12

Цитата | Quote(AquaTour @ 9.10.2018 - 2:05)
1 Гб в 2018 году это совсем не внушительный объем, его можно весь загрузить в память и там обрабатывать

Имеется в виду Оперативная Память RAM ?.. Стало быть если обрабатываться будет 1 GB данных, а RAM памяти установлено всего только 512 MB, то файл на таком слабом компьютере обработать уже не получиться ?..


Цитата | Quote(AquaTour @ 9.10.2018 - 2:05)
1 Гб в 2018 году это совсем не внушительный объем, его можно весь загрузить в память и там обрабатывать, а с учетом того, что результат будет в 4 раза меньше, то и результат формировать в памяти. Кмк в таком алгоритме, самой медленной частью будет чтение и запись файла.

Я не совсем понял о каком результате, который будет в 4 раза меньше, идёт речь ?..


Цитата | Quote(AquaTour @ 9.10.2018 - 2:05)
Кмк в таком алгоритме, самой медленной частью будет чтение и запись файла.

Что такое КмК ?..


Цитата | Quote(AquaTour @ 9.10.2018 - 2:05)
если устроит вариант C\C++ или C#, то устанавливать Visual Studio 2017 Community Edition
При выборе компонентов выбрать нужные, нет смысла ставить больше чем потребуется.

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


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

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

AquaTour, 9.10.2018 - 20:51

Цитата | Quote(nokeMoH @ 9.10.2018 - 19:52)
Имеется в виду Оперативная Память RAM ?.. Стало быть если обрабатываться будет 1 GB данных, а RAM памяти установлено всего только 512 MB, то файл на таком слабом компьютере обработать уже не получиться ?..
*

да, RAM. Не факт, проблемы нехватки памяти решаются виртуальной памятью, в ущерб скорости работы. Если память является ограничивающим ресурсом, то можно изменить алгоритм, обрабатывая файл по кускам. Но мне помнится недавно шла речь о бескомпромиссной гонке за скоростью, а уже появились ограничения.
Цитата | Quote(nokeMoH @ 9.10.2018 - 19:52)
Я не совсем понял о каком результате, который будет в 4 раза меньше, идёт речь ?..
*

я о результирующем файле, ведь как я понял по алгоритму, из четырех байт оригинального файла, получается один байт результата
кмк - как мне кажется
Цитата | Quote(nokeMoH @ 9.10.2018 - 19:52)
пусть говорят что сложный язык, но ведь и он тоже поддаётся обучению..
*

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

nokeMoH, 12.10.2018 - 0:39

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


версия для печати -> Полная версия

SoftoRooM © 2004-2024