Программирование на С++, помогите научиться..
|
nokeMoH
профи!
Группа: Пользователи Сообщений: 1.076 Регистрация: 23.08.2008 Пользователь №: 1.040.887
Респектов: 124
Предупреждений:
| Добрый вечер, у меня есть странная затея, которая интересна пожалуй будет только мне одному, но не смотря на это, под себя, я бы хотел Создать определённую программу, чья работоспособность бы имела около 10-15 разных функций (поиск, замена, сравнение и т.д)..
Назначение утилиты я продумываю не как работу с текстом, а работу непосредственно с Кодом файла (всеми значениями от 00-ff), то есть хочу сделать что-то вроде Hex-редактора, чтобы Утилита открывала файл, меняла одни нужные мне значения на другие, искала позиции определённых символов, относительно их делала какие-то последующие операции...
Я попытался научиться этому сам, и уже третий вечер смотрю обучающие ролики с ютуба, всё в действительности очень понятно и доходчиво раскладывают по полочкам, но чем больше я смотрю разных роликов, тем больше понимаю, что не весь для меня материал нужный.. Я не хочу научиться программированию в целом всеобъемлющему, а мне нужны только исключительно определённые операции, которые я бы и хотел реализовать в Утилитке..
Просмотреть весь доступный материал у меня просто не хватит на это время физически, и затем вычерпнуть из него только то, что мне действительно нужно, мне было бы проще Задать вопрос, и получить на него ответ.. Сам принцип программирования я вроде уловил (написания программы), устанавливается нужная Среда программирования, а в ней просто чередуется последовательность определённых кодов, значений, функций, которые в последствии компилируются в *.exe файл... Так вот помощь с этими Кодами мне и нужна только..
Если есть добрые люди на этом форуме, отзовитесь пожалуйста и в вступите со мною в долгий диалог, я не хочу чтобы кто-то написал мне программу по моим инструкциям, я хочу сделать её сам чтобы примерно понять как это всё работает, предвижу, что вопросы мною заданные часто будут из категории "нуб".. Сроков ни каких у меня нету, за неделю, за месяц, за полгода, лишь бы написать...
Если кто-то отзовётся, то у меня сразу есть первый вопрос.. Я узнал, что языков программирования оказывается уже существует более 8.000 штук, к моему удивлению, я думал штук 10 их всего, потому что на слуху столько.. Для меня самое важное и первостепенное - СКорость РАботы ПРограммы в той области применения, о которой я писал в первом и во втором абзацах.. Пусть программа занимает места на компьютере большего объёма чем должна была бы, пусть подъедает побольше RAM, пусть ещё что-нибудь, но чтобы Большой Жирный Плюс всегда был в сторону её Скорости Работы.. А вопрос такой, из всех сред программирования, я правильно определился с тем, что нужно мне это делать именно на C++ или нет ?.. | |
| |
8.10.2018 - 14:14 |
nokeMoH
профи!
Группа: Пользователи Сообщений: 1.076 Регистрация: 23.08.2008 Пользователь №: 1.040.887
Респектов: 124
Предупреждений:
| Советуете попробовать на Java потому, что её знаете сами и сможете подсказать как реализовать программу с помощью её кодов ?, или же знаете разницу между С++ по этому и советуете Java ?..
Я бы конечно ради интереса приложение создал бы на разных средах программирования, если появиться такая возможность, и проверил бы каждую из них на быстродействие, мне нужна утилита, которая бы работала с файлами разных размеров, от 1 MB до хотя бы 1 GB, а если и больше 1 GB раза в 2-4 получиться то даже и лучше будет, а если и меньше, до 400-500 MB получиться реализовать, то ни чего страшного, буду разбивать файлы на необходимые куски размера и обрабатывать каждую часть по отдельности, потом соединять их обратно в один большой кусок..
Не обязательно всё должно быть именно так как я написал с разбивками и слиянием, я не знаю возможностей программирования, может быть удастся обойтись и без этого, по этому я просто предположил заранее как один из вариантов решения обхода ограничения работы с файлами большого размера..
Я буду рад любой помощи по принципу Вопрос-> Ответ ,, так как я не хочу научиться всеобъемлющему программированию, а мне интересны исключительно только конкретные цели (работать с Шестнадцатеричным кодом файла в диапазонах от 00 по ff, поиск символа, их замена, их позиционирование, зависимость одного символа от другого, и немного остальных прочих условий).. Я знаю про существование Hex-редакторов с поддержкой скриптов, мне это не подходит, там не всё можно сделать что мне нужно.. По этому...
Я буду рад любой помощи по принципу Вопрос-> Ответ | |
| |
8.10.2018 - 15:12 |
AquaTour
Специалист
Группа: Пользователи Сообщений: 417 Регистрация: 4.07.2005 Пользователь №: 27.183
Респектов: 50
Предупреждений: 0
| 1) С++ как язык для обучения программированию так себе, он слишком сложный. Конечно могут набежать те, кто скажет что ничего сложного там нет, но не факт, что они смогут с легкостью ответить на несколько вопросов почему кусок кода на С++ работет так, а не иначе 2) Оптимизировать скорость можно только понимая, как работает программа, классический пример, что будет быстрее, обход матрицы по строкам или по столбцам и почему? 3) Обработать файл в несколько Гб нет проблемы, какую скорость обработки будем считать приемлемой? 4) Для того, чтобы спрашивать конкретной помощи, хорошо бы тщательно сформулировать вопросы. 5) По принципу вопрос-ответ и работает stackoverflow.com, хочется программировать - этот сайт в закладки. 6) Скрипты скорее всего могут сделать все что нужно, не может пользователь. Но это не точно. 6) Ну и язык - C# | |
| |
8.10.2018 - 16:45 |
nokeMoH
профи!
Группа: Пользователи Сообщений: 1.076 Регистрация: 23.08.2008 Пользователь №: 1.040.887
Респектов: 124
Предупреждений:
| AquaTour, спасибо.. 1) Из всех просмотренных мною роликов за последние дни по С++, пока не ощущаю такой сложности как об этом могут сказать, я конечно ни чего сам не умею, но у меня сформировалось такое мнение - что умение программировать - это просто знание нужных кодов и их применение, от сюда вытекает следующее, другой Язык Программирования - просто другие коды на те же самые операции, очевидно, что где-то должны быть уникальные коды, по функциональности, где-то коды, делающее одно и тоже... 2) Я точно пока не могу знать ответа на этот вопрос(.. 3) Приемлемая скорость работы - максимально высокая, так как я решил замахнуться на файлы большого объёма.., разумеется для того, чтобы сократить Время обработки файла.. 5) Спасибо, запомню его и уже сохранил, буду обращаться по случаю.. Надеюсь с переводчиком языкового барьера возникнуть не должно.. 6) 7) Я не знаю чем отличаются языки [C], [C++] и [C#] друг от друга, но на слуху почему-то С++, что он мол самый лучший, по этому им и начал интересоваться.. 4). Если начать с малого, то хотел бы поинтересоваться, Какой софт для программирования посоветуете ?, вероятней всего одну из последних версий, так как в них должно быть больше сокращений (команд), это я из роликов запомнил.. Хотелось бы, чтобы будущая Созданная программа умела работать на Системах WinXP, Windows 7, Win8.1 ну и Win10 разумеется, x32 и x64 редакциях разумеется, если это имеет какое-то значение при выборе метода программирования... Цель проекта - полноценная работа с Шестнадцатеричным кодом файла в диапазонах от 00 по ff ,, то есть с любым его значением от 0 до 255 включительно, поиск символов, замена одного на другое при разных условиях, вставка определённого символа в нужное место, тоже по условию, все операции расписать сразу тяжело, это по ходу движения поезда только получиться сделать.. С чего посоветуете начать чтобы можно было потихонечку начинать приступать к работе ?.. Какой-то софт для программирования... | |
| |
8.10.2018 - 17:31 |
kostya-chist
профи!
[SoftoRooMTeaM]
Группа: Модераторы Сообщений: 1.211 Регистрация: 20.04.2006 Из: Ростов Великий Пользователь №: 152.532
Респектов: 193
| Цитата | 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 таким подходом к программированию получаем то, что имеем, т.е. индийский код. | |
| |
8.10.2018 - 19:10 |
AquaTour
Специалист
Группа: Пользователи Сообщений: 417 Регистрация: 4.07.2005 Пользователь №: 27.183
Респектов: 50
Предупреждений: 0
| Цитата | Quote(kostya-chist @ 8.10.2018 - 18:11) Почитайте Дональда Кнута "Искусство программирования" крайне ошибочный совет. Сам то читал? Помогло? Не надо учить физику с квантовой механики, результата не будет. Цитата | Quote(kostya-chist @ 8.10.2018 - 18:11) C таким подходом к программированию получаем то, что имеем, т.е. индийский код. в данном случае это не критично, топикстартер хочет решать свои задачи, т.е. писать код для себя, а не для других. | |
| |
8.10.2018 - 19:33 |
AquaTour
Специалист
Группа: Пользователи Сообщений: 417 Регистрация: 4.07.2005 Пользователь №: 27.183
Респектов: 50
Предупреждений: 0
| 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 был бы другим. Сообщение отредактировал AquaTour - 8.10.2018 - 19:37 | |
| |
8.10.2018 - 21:44 |
nokeMoH
профи!
Группа: Пользователи Сообщений: 1.076 Регистрация: 23.08.2008 Пользователь №: 1.040.887
Респектов: 124
Предупреждений:
| Цитата | 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 ,, но есть чистый новый мощный ПК, куда я могу установить что-то другое если этого будет требоваться.. | |
| |
9.10.2018 - 1:25 |
AquaTour
Специалист
Группа: Пользователи Сообщений: 417 Регистрация: 4.07.2005 Пользователь №: 27.183
Респектов: 50
Предупреждений: 0
| Цитата | 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 При выборе компонентов выбрать нужные, нет смысла ставить больше чем потребуется. | |
| |
|
|