Перейти к содержимому

Фотография

C и C++


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 91

#21 Jabberwocker

Jabberwocker
  • Старожилы
  • PipPipPipPipPipPip
  • Джентльмен удачи

  • Cообщений: 2 790
215
Маленький пони

Отправлено 16 Ноябрь 2014 - 18:39

Если что -- в пресловутой Qt, самой что ни на есть open-source, баг с "промахиванием" кликов в ГУИ, если подключен планшет Wacom -- не правился годами.
Кажется, лет 5 точно.
  • 0

#22 hao10

hao10
  • Старожилы
  • PipPipPipPip
  • Волшебный двурог

  • Cообщений: 779
228
Маленький пони

Отправлено 16 Ноябрь 2014 - 18:57

Фу какой позор! Пошёл устанавливать венду и буду теперь всю жизнь на вижуал бейсике дотнет программировать, в вижуал студии експресс -_-
  • 0

#23 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 19 Ноябрь 2014 - 20:46

Изображение

http://uploads.ru/nBhU3.tiff
http://uploads.ru/ma0cg.tiff
http://uploads.ru/kzKVl.tiff

Здравствуйте, вопрос к знатокам языка C такого плана. Я – разработчик карт Heroes III.
https://www.animefor...ost&pid=2956412
Сначала я установил Heroes III "Возрождение Эрафии". Затем я установил Heroes III "Дыхание смерти". Затем я запустил редактор карт "Дыхание смерти" и открыл в нём карту "Возрождение Эрафии".
И вот, когда я пытаюсь что-то там зарисовать, мне выскакивает ошибка с последующим вылетом из программы редактирования.
1) Если я обращусь к разработчикам, как посоветовала мне ОС, что будет?
2) Допустим, я согласился отладить программу. Что там отладить? Запускается программа Visual C++ 6, редактор hex-кода. Что дальше делать-то?

Кто виноват, ясно: программист. Что делать?
  • 0

#24 Shinsaku-To

Shinsaku-To
  • Старожилы
  • PipPipPipPipPipPipPip
  • ОРЭ ВА ГАНДАМ ДА!!!!

  • Cообщений: 9 041
691
Поняняша

Отправлено 21 Ноябрь 2014 - 01:21

1) Ничего не будет. Поддержка прекращена давным-давно.
2) Ничего не сделаешь. Чтобы чужую программу без исходников перебрать через выхлопную трубу -- сильно хорошо уметь надо.
  • 0

#25 Jabberwocker

Jabberwocker
  • Старожилы
  • PipPipPipPipPipPip
  • Джентльмен удачи

  • Cообщений: 2 790
215
Маленький пони

Отправлено 21 Ноябрь 2014 - 05:52

для начала -- запускать ее в режиме совместимости или в виртуальной машине под вин98
  • 0

#26 hao10

hao10
  • Старожилы
  • PipPipPipPip
  • Волшебный двурог

  • Cообщений: 779
228
Маленький пони

Отправлено 21 Ноябрь 2014 - 07:41

И да, к C/C++ этот вопрос не имеет отношения. Не очевидно даже что программа написана на ком-то из них :unsure:
  • 0

#27 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 21 Ноябрь 2014 - 16:19

Так после установки Visual C++ как раз появляется кнопочка дебаггера. Он же и запускается.
Причём эта кнопочка появляется в любой виндоус (когда раньше её просто не было).
Вот я и задумался несколько лет назад: что бы там такого подправить, чтобы работало?
  • 0

#28 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 07 Май 2015 - 17:30

Я посадил дерево написал программу. Она ничего не делает. Но в неё можно ввести три целых числа. Предлагаю вам попробовать. Программа работает под Windows на 32-битной платформе. (Windows 2000, Windows Vista)
Ещё там работают клавиши <Backspace> и <Enter>.
Прошу заценить.
https://yadi.sk/d/bmwYbfm-gVCDs

У меня сначала была Debug-версия, и там всё работало. Но когда я стал компилировать Release-версию, вылезли ошибки. Помучившись полчаса, я выяснил, что не там определил пару внутренних функций. Это надо было сделать в другом файле, и линковщик сообщал мне об ошибках. Помогла разобрать ситуацию интуиция...

Сообщение отредактировал 初音ミクこんばんは: 07 Май 2015 - 17:31

  • 0

#29 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 31 Май 2015 - 08:12

Модификация программы. Теперь приступаем к решению задач (из-за чего всё и затевалось). Скачать программу, текст программы и задачи можно здесь:
https://yadi.sk/d/supY_8Jsgy92y
Задачи записаны в формате программы "Open office 1.0", но вряд ли кто-то будет возражать.

3. (p19-1) Угол задан в градусах, минутах и секундах. Найти его величину в радианах с максимально возможной точностью. Рекомендуется проверить работоспособность программы для углов, больших развёрнутого, а также для отрицательных углов.

4. (p19-3) Длина отрезка задана в дюймах, 1 дюйм = 2,54 см. Перевести значение длины в метрическую систему, то есть выразить её в метрах, сантиметрах и миллиметрах. Так, например, 21 дюйм = 0 м 53 см 3,4 мм.

5. (p20-6) Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на p%. Через сколько лет он накопит сумму s, достаточную для покупки собственного магазина?

Текст программы. Со временем программы будут становиться всё длиннее, длиннее и длиннее.
Скрытый текст

Сообщение отредактировал 初音ミクこんばんは: 31 Май 2015 - 08:16

  • 0

#30 Shinsaku-To

Shinsaku-To
  • Старожилы
  • PipPipPipPipPipPipPip
  • ОРЭ ВА ГАНДАМ ДА!!!!

  • Cообщений: 9 041
691
Поняняша

Отправлено 02 Июнь 2015 - 22:23

Не стоит называть переменные вот так вот. Все вот эти aa, nChar и прочее. Времена с ограничением до 8 букв давно прошли (ну, в языках общего назначения по крайней мере). Имена переменных должны отображать их смысл, даже если это получается длинно. Благо, автокомплит в и в блокнотах нынче бывает.

Без этого тяжело понять, что происходит вообще в программе. Читаемость -- это очень важно для хорошего кода.
  • 0

#31 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 03 Июнь 2015 - 05:43

Я работал со схемотехникой, так там вообще ничего не понятно. И самое главное, никто ничего не объясняет, хотя по работе надо! Так что то, что тут у меня – это ещё по-божески.
А понимать ничего и не надо. Никто не просит вас ковыряться в чужом коде, раз там всё работает. Это же не электротехника, которая может испортиться.
Что касается nChar, так это не я придумал, а Visual C++. Так же как и названия классов – тоже его изобретение. Программа называется по-простому: p3.
А вот представьте, что у вас три независимых задачи, которые никак друг с другом не связаны. Поможет вам там придумывание имён? Оно только запутает. Это всё равно что в одно произведение напихать разные сюжеты. И потом этот винегрет читать.
Автокомплитом не пользуюсь. Пользуюсь языками программирования 1985-го, 1995-го и 2000-го года. Но даже там ограничение на длину переменных, кажется, 32 символа. А может, и больше.
Автокомплит есть в Visual C++ 6.0, на котором написана эта программа. То есть если ввести название класса, автокомплит показывает, какие там переменные-члены и функции, и это очень удобно, так как нет Help'а. А откуда ещё узнать, какие функции в этом стандартном классе. Не все диски можно было достать в далёком 2000-ом. А литература, увы, ограничена... Например, там не сказано было, как ввести число с клавиатуры. Я думал над этим 15 лет. И вот наконец придумал (см. 28-ой пост).

Сообщение отредактировал 初音ミクこんばんは: 03 Июнь 2015 - 05:59

  • 0

#32 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 03 Июнь 2015 - 21:15

1) Меня в группы не допускают. А в тех, в которые допускают, программировать вовсе не нужно.
2) Для меня важно "здесь и сейчас". Будущее не определено, оттого оно и будущее.
3) Ошибка возникала при обработке карты первой версии HOM III (Возрождение Эрафии) в редакторе карт HOM III третьей версии (Тень смерти). Что-то там внутри гд-то неправильно перепаковано. Виноват программист – неверное представление данных. Он, конечно, не ожидал, что его старые карты будут загружать в новом редакторе. Вот и не выявил ошибку при тестировании. Махнул рукой – так сойдёт.

1) Независимые приложения слишком маленькие – шесть строк оригинального кода. Так не пойдёт. Не стоит из-за шести строк программу делать.
Пересечение наблюдается в получении данных, которое занимает львиную долю программы.
А они и есть модули. В виде функций.
Я ещё не научился компоновать программу из разных файлов. В учебнике не написано, а если и написано, то я до этого ещё не добрался.
Вот когда придётся долго перелистывать программу, тогда задумаюсь о многих модулях. Хотя Visual C++ и в этом отношении упрощает жизнь программисту, – он предоставляет "автокомплит" и быстрый переход к нужной функции класса из окна классов.
2) Да. Но нужно кинуть вперёд, чтобы не мешало. Остальные способы подразумевают фигурные скобки, НО! я следую принципу "не усложнять без необходимости". <Надо вперёд? пошли.>
3) Вопрос именования возникает в больших программах. В мелких модулях использую такой способ.

Я уже делал раньше программу под MS-DOS, в которой заключено 50 разных мелких программ, так что опыт имеется. А тут visual-среда, что намного упрощает жизнь.
  • 0

#33 Shinsaku-To

Shinsaku-To
  • Старожилы
  • PipPipPipPipPipPipPip
  • ОРЭ ВА ГАНДАМ ДА!!!!

  • Cообщений: 9 041
691
Поняняша

Отправлено 03 Июнь 2015 - 22:32

А понимать ничего и не надо. Никто не просит вас ковыряться в чужом коде, раз там всё работает.


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

Ты программировать учишься? Ну вот и учись. Базовый синтаксис языка освоить -- это даже не полдела, с этим медведи в цирке на одноколёсном велосипеде справятся. Мало просто решить задачу. От программиста в подавляющем большинстве случаев требуется чтобы его код был (а) легко читаемый (б) легко модифицируемый. Осмысленные имена переменных -- первый шаг к этому.

Собсно, можно по этому повод книгу почитать, к примеру того же МакКоннела, "Совершенный код".


Что касается nChar, так это не я придумал, а Visual C++. Так же как и названия классов – тоже его изобретение. Программа называется по-простому: p3.


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


И потом этот винегрет читать.


Винегрет -- это вот aa и прочее. Со мной программист на AS400 работает, в этой системе нельзя называть переменный длиннее 8 символов. И имена из-за это в духе FCCXMY. Вот он матерится, когда ему нужно программы править. Потому что смотришь на эту загадочную аббревиатуру -- и поди пойми что это и зачем.

Сообщение отредактировал Shinsaku-To: 03 Июнь 2015 - 22:34

  • 1

#34 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 03 Июнь 2015 - 23:09

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

Это имя по умолчанию, которое дала Microsoft. Советуете его исправлять? Я предпочитаю не лезть туда, где я не понимаю.

Я имена не запоминаю. Они уплывают из моей головы. Поэтому мне приходится аниме 3-4 раза пересматривать, чтобы выучить всё досконально и при этом запомнить, кого как зовут.
А когда я вижу 520-ую программу, в которой даётся имя переменной, которая при этом используется всего пару раз... как в моём примере...
Если это важная переменная, которая проходит через всю программу – тогда можно что-то придумать. Но придумать всё равно нужно покороче, иначе строчка растянется очень надолго.

Ну занесите себе в память, что аа - это то, что вы вводите с клавиатуры, ba - это то, что вы из этой строки извлекаете. Легко ведь запомнить - тем более, что я в комментарии записал (для самого себя, чтоб потом не запутаться). А все остальные переменные - временные, используются один-два раза за программу. Их запоминать не надо.
  • 0

#35 Shinsaku-To

Shinsaku-To
  • Старожилы
  • PipPipPipPipPipPipPip
  • ОРЭ ВА ГАНДАМ ДА!!!!

  • Cообщений: 9 041
691
Поняняша

Отправлено 03 Июнь 2015 - 23:16

Это имя по умолчанию, которое дала Microsoft. Советуете его исправлять? Я предпочитаю не лезть туда, где я не понимаю.



Чего именно тут можно не понять? Это просто имя. Оно каким угодно может быть. Но гораздо лучше, если оно будет характеризовать переменную. Ну, например, если у тебя есть переменная, которая хранит номер счёта в формате ЦБ, то разумно назвать её не "dd", а "CBAccount". Потому что ты смотришь на неё -- и тебе ясно что это. Не надо ничего вспоминать, прослеживать, откуда она взялась и прочее.

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



Ну и почему бы не назвать её, например, "userInput"? И не нужно правил никаких придумывать. Осмысленные имена как раз для того, чтобы НЕ запоминать и при необходимости НЕ разбираться.


  • 0

#36 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 03 Июнь 2015 - 23:28

Ну и почему бы не назвать её, например, "userInput"?

Когда я писал программу, в которой было 50 мелких программ (из учебника по C), я впервые столкнулся с конфликтом имён, когда в одной программе переменная означает одно, в другой другое, и у неё другой тип. Так вот чтобы "развести" этот конфликт, я такую систему и придумал. А в дальнейшем лишь слегка модифицировал под текущие нужды.
Твоё предложение разумно, но я уже привык, и ещё от этого увеличивается длина строки. Программа по стилю (в вашем случае) становится ближе к литературному произведению. "Вася пошёл туда-то..."

Например.
Попробуйте в этой строке заменить все aa на userInput. Что получится? Многоэтажный... слог.
while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;
В результате длина программы увеличивается раза в четыре.

Сообщение отредактировал 初音ミクこんばんは: 03 Июнь 2015 - 23:49

  • 0

#37 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 03 Июнь 2015 - 23:45

У меня пока планы на будущее. Я не могу прочитать ни одну книгу по программированию. попытаюсь хоть что-то закончить.
У меня есть задачник по программированию, но под MS-DOS его нет смысла заканчивать, с ним я уже лет 15 мучаюсь. Надо переходить под Windows. Только в этом году я понял, как туда вводить переменные.
А полкниги Visual C++ 6.0 посвящено непонятно чему, с задачником никак не связан. Осваивается интерфейс Windows, кнопки, переключатели и прочее. Не очень-то полезно для решения математических задач, неправда ли?
  • 0

#38 ЛЕГЕНДАРНЫЙ Несущий Ересь

ЛЕГЕНДАРНЫЙ Несущий Ересь
  • Старожилы
  • PipPipPipPipPipPipPip
  • JUST MONIKA

  • Cообщений: 5 449
1 072
Понивластелин

Отправлено 04 Июнь 2015 - 00:05

Для программирования под Windows можно начать читать Питзольда "Программирование для Виндовс 95". Плюсы изучаю по Шилдту, вроде неплохо, хотя Дейтелы лучше.
  • 0

#39 初音ミクこんばんは

初音ミクこんばんは
  • Старожилы
  • PipPipPipPipPipPip
  • балдёж

  • Cообщений: 2 821
47
Няшка

Отправлено 04 Июнь 2015 - 00:26

Литературы у меня навалом. Ни одну прочитать не могу.
Хотя пару книжек прочитал лет 10 назад. Реализовал под MS-DOS на C и C++.
На ООП нормальных задачек нашёл только две, остальные из пальца высосаны.
Одна из задач была похожа на игру "жизнь". Кролики и волки. И у меня работало. Я даже параметры подбирал.
  • 0

#40 Shinsaku-To

Shinsaku-To
  • Старожилы
  • PipPipPipPipPipPipPip
  • ОРЭ ВА ГАНДАМ ДА!!!!

  • Cообщений: 9 041
691
Поняняша

Отправлено 04 Июнь 2015 - 01:08

while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;


Ну смотри например (по-моему, после char в объявлении должна быть звёздочка, но не помню -- давно очень C++ не трогал. Ну да не суть):

        while (userInput[index]) {
            char* currentSymbol = userInput[index];
            if ('0' <= currentSymbol && currentSymbol <= '9')
                break;
            if (currentSymbol == '-')
                break;
            index++;
        }

То есть да, какбэ длинно. Но: мы смотрим на этот цикл и просто его читаем, не напрягаясь. Пока не кончился массив userInput (тут у нас, я так понимаю, null-terminated string?) проверяем. Эта цифра от 0 до 9? Если да, нашли нужное место. Иначе: это дефис? Если да, нашли нужное место. Если не нашли -- переходим к следующему символу.

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

Так что не надо стесняться. Можно писать длинно, экономия места ни к чему.

Сообщение отредактировал Shinsaku-To: 04 Июнь 2015 - 21:53

  • 0




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных