Тут есть несколько ошибок: 1. Отсутствует ключевое слово begin в основной программе. Насколько я понял, оно должно стоять перед k:=0.
2. Внутри функции ODD не объявлена локальная переменная i, которая используется в цикле.
3. В основной программе вы вызываете функцию ODD и передаете ей аргумент с[i], хотя в описании функции аргумент не обозначен.
4. В функции ODD происходит обработка глобального массива C, что делать нельзя.
5. Функция должна возвращать какое-то значение. В описании вы указали integer, а в основной программе в строке if Odd(c[i])... вы подразумеваете, что оно должно быть булевым, т.е. или True или False.
Исправьте, и может быть (если ошибок больше нет) программа заработает.
Первые 2 слагаемых при переводе в с. сч. 3 дадут числа вида "10000...00", и количество нулей будет равно величине степени. (Можешь сам у в этом убедиться для чисел с небольшой степенью). Поэтому первые два слагаемых переведутся в число "100...0010000...00", кол-во нулей между единицами равно 66-45 = 21, правее средней единицы = 44.
Число гораздо меньше. Поэтому при вычитании мы будем занимать разряд до тех пор, пока не дойдем до средней единицы, которая станет после этого 0, а все, что правее - двойками (было "100..00100..00", стало "100..00022..22", но только после заёма единицы, ещё нужно довычистывать). Затем проведем вычитание и посмотрим, сколько двоек пришлось убрать для этого.
Переводим . Вычитаем "100..00100..0000" - 110 = "100..00022..2120" Кол-во двоек между маркерованными цифрами = 44 - 3 = 41. Добавим ещё одну 2 правее маркерованной единицы = 42 - ответ
1. Отсутствует ключевое слово begin в основной программе. Насколько я понял, оно должно стоять перед k:=0.
2. Внутри функции ODD не объявлена локальная переменная i, которая используется в цикле.
3. В основной программе вы вызываете функцию ODD и передаете ей аргумент с[i], хотя в описании функции аргумент не обозначен.
4. В функции ODD происходит обработка глобального массива C, что делать нельзя.
5. Функция должна возвращать какое-то значение. В описании вы указали integer, а в основной программе в строке if Odd(c[i])... вы подразумеваете, что оно должно быть булевым, т.е. или True или False.
Исправьте, и может быть (если ошибок больше нет) программа заработает.
Преобразуем выражение
Первые 2 слагаемых при переводе в с. сч. 3 дадут числа вида "10000...00", и количество нулей будет равно величине степени. (Можешь сам у в этом убедиться для чисел с небольшой степенью). Поэтому первые два слагаемых переведутся в число "100...0010000...00", кол-во нулей между единицами равно 66-45 = 21, правее средней единицы = 44.
Число гораздо меньше. Поэтому при вычитании мы будем занимать разряд до тех пор, пока не дойдем до средней единицы, которая станет после этого 0, а все, что правее - двойками (было "100..00100..00", стало "100..00022..22", но только после заёма единицы, ещё нужно довычистывать). Затем проведем вычитание и посмотрим, сколько двоек пришлось убрать для этого.
Переводим .
Вычитаем "100..00100..0000" - 110 = "100..00022..2120"
Кол-во двоек между маркерованными цифрами = 44 - 3 = 41. Добавим ещё одну 2 правее маркерованной единицы = 42 - ответ