![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#21 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Не знаю, сработает ли сложение. В глаза бросается отрицательный Adr2.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#22 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
А то на что ориентироваться ? какая должна быть правильная сумма ? Попробовал по вашему методу, выходит другая сумма, а как узнать правильную? Онлайн калькулятор, думаю не поможет ? Сделал по вашему так : Код:
Сложение срабатывает и выводит сумму, вопрос в другом, а правильная ли она ? Надо знать точную , правильную сумму, тогда можно вывод сделать, а так , получается разными методами, на выходе разные суммы, какая из них правильная ? Последний раз редактировалось BDA; 11.11.2021 в 20:18. |
|
![]() |
![]() |
![]() |
#23 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Не знаю, зачем вы отказались от использования "TBytes = array of Byte;" в пользу string (как было в старой программе bin->hex).
Когда я говорю "сработает", то имею ввиду, что программа корректна и выдает правильный результат. Цитата:
Конечно можно. Просто удалите в файле ненужный байт и считайте контрольную сумму этого файла чем хотите (хоть онлайн, хоть редакторами). Еще можно избежать сложения буферов, чуть изменив функцию: Код:
Опять же, лучший подход сложно выбрать, не зная, куда выведет фантазия преподавателя по части выдумывания новых усложнений. Если он предложит еще парочку байтов выколоть, то устанешь кусочками читать.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 11.11.2021 в 20:20. |
|
![]() |
![]() |
![]() |
#24 | ||||
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
Не совсем понял, а что в коде исправить adr2.? Цитата:
Код:
Этот вариант не выводит правильную сумму, хотя вариант был бы оптимальным. Нет, думаю, что больше не должен препод изголитса чтоб по байтно группу. Цитата:
Цитата:
при чём в функции и так делал ; Result :=Len; и так Result :=0; оба результата не верны. Значит функцией не получается. Последний раз редактировалось BDA; 11.11.2021 в 21:30. |
||||
![]() |
![]() |
![]() |
#25 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Нет.
В файле "Тест-3" байт 0E находится по адресу 2B, а не 2C. Перепроверьте в своем коде adr, adr2 и выставление position перед чтением. В старой апрельской программе. Так и не надо редактировать Init.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#26 | ||
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]()
Так это когда было, я забыл давно, что там , делалось и как.
Цитата:
Сейчас вот новый код, но он в ошибку уходит, не компилируется . Код:
ругается на эту строку, не пойму, в чём проблема? Код:
BDA, Вы изначально были правы , надо было, в функцию добавить : Код:
Код:
Вот я тормоз, перекурил, отдохнул и меня осенило сразу. Вот полный, рабочий код : Код:
Делов оказалось на 5 минут и в 2 строки. А воды море вышло..... Всё отлично получилось и просто. Огромное спасибо BDA за помощь. Цитата:
Да, BDA Вы правы оказались поднял старые архивы и нашёл. Можно и так : Код:
Код:
Код:
Сейчас и этот вариант отработаю. Подзабывается старое, хорошо , что напомнили. Ещё раз огромная благодарность BDA за помощь !. Последний раз редактировалось BDA; 13.11.2021 в 03:52. |
||
![]() |
![]() |
![]() |
#27 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Ну хорошо, что разобрались.
Но с ошибками компилятора лучше научиться разбираться самому, чем ждать ответов. У вас переменные и функция по-другому названы, вот компилятор и не находит их. И стоит проверять на неравенство, чтобы и меньшие по объему файлы не пропускать: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 13.11.2021 в 03:54. |
![]() |
![]() |
![]() |
#28 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
BDA, Вы наверное пророк? препод приматался к функции, говорит что она работает только, если с 0 адреса подсчитывать : Код:
конструкция перестаёт работать нормально Код:
пытался изменить адрес в константе, на $05E- $20; Подсчитывает неправильно из чего сделал вывод: что проблема в функции function CRC16XMODEM(P: PChar; Len: Word): Word; Изменение адреса в константе и в коде не помогает. Отсюда вопросы : 1)как изменить функцию, чтоб при заданном адресе скажем с 10, или с20 адреса функция правильно подсчитывала ? 2) вопрос у нас есть константа, это фиксированный адрес для массива const Adr=$05E-$0; а можно ли сделать так, чтоб адрес задавался в ручную, скажем из edit ? Сижу, всю ночь, так и не разобрался, в инете не нашёл ни чего, такое делать, раньше не приходилось. Почитал, что то типа так делают :b := Strtoint('$' + Edit4.Text); FS.Position :=Strtoint('$' + edit5.Text) ; Но не понятно как задавать адрес с10 скажем по 100 как в tdit вводить const Adr=$05E-$0;? Мне кажется это не реально. Весь мозг сломал, не могу даже подступится. Слёзно прошу объяснить. p.s Тему тогда продолжим, ведь всё относится к теме. Последний раз редактировалось sergey.serg-72; 13.11.2021 в 06:26. |
|
![]() |
![]() |
![]() |
#29 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]() Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#30 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
BDA я чуток не допонял это всё функция ? или к функции только это относится? Код:
А вот эта часть кода. уже к процедуре? Код:
Как я понимаю что skip_addr := // забрать из эдита это должно быть в функции, а вот begin_addr := // забрать из эдита end_addr := // забрать из эдита в процедуре, а зачем три едита? двумя не обойтись? Дальше вот эта строка :// проверить, что 0 <= begin_addr <= end_addr < 96 это в функции должна быть, или в процедуре? Вот делаю так : но не в функции. не в процедуре компилятор ругается Код:
С функцией кажется разобрался наверное так : Код:
Код:
Последний раз редактировалось BDA; 19.11.2021 в 18:47. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Opendialog завис | DimOn4Ik | Общие вопросы Delphi | 12 | 02.11.2018 16:08 |
Реализация суммы в простом варианте. | Mariolka | PHP | 8 | 10.11.2016 15:50 |
С++ сортировка в текстовом файле. (Задание на курсовик никак не получается) | Evg888 | Помощь студентам | 1 | 02.06.2012 19:37 |
Житейская задачка о простом копировании | mephist | Помощь студентам | 11 | 16.05.2009 20:42 |