Написать программу для подсчёта цифры - Pascal ABC
Формулировка задачи:
Добрый день господа. Мне необходима Ваша помощь для написание небольшой программы, которая сможет произвести вычисления на основе готовых данных и при подстановке определённых символов позволила бы получить ответ в виде числа с остатком (2-3 цифры после запятой).
На 2-й картинке указано задание и необходимые вводные данные (что за что отвечает), на первой картинке показан пример что необходимо вводить, и что должно получится в итоге (вместо прочерка в примере должно получиться то число, которое нужно высчитать).
Очень рассчитываю на Вашу помощь!
Заранее Вам благодарен!
Решение задачи: «Написать программу для подсчёта цифры»
textual
Листинг программы
uses crt; type znach=record c:char; z:byte; end; const cf=['1'..'9']; lb=['A'..'H','j'..'N','P','R'..'Z']; n=17; zn:array[1..23] of znach=((c:'A';z:1),(c:'B';z:2),(c:'C';z:3),(c:'D';z:4), (c:'E';z:5),(c:'F';z:6),(c:'G';z:7),(c:'H';z:8), (c:'J';z:1),(c:'K';z:2),(c:'L';z:3),(c:'M';z:4), (c:'N';z:5),(c:'P';z:7),(c:'R';z:9),(c:'S';z:2), (c:'T';z:3),(c:'U';z:4),(c:'V';z:5),(c:'W';z:6), (c:'X';z:7),(c:'Y';z:8),(c:'Z';z:9)); vk:array[1..n] of byte=(8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2); var ds:set of char; s:array [1..n] of char; c:char; i,j,a,sum,os:integer; pz:array[1..n] of byte; r:real; begin ds:=cf+lb; writeln('Введите ',n,' символов номера, цифры и буквы A..H,J..N,P,R..Z'); writeln('Исходный ИМ'); for i:=1 to n do begin repeat c:=readkey; if c in ds then begin s[i]:=c; if i<>9 then write(s[i]) else write('-'); end else c:=#0; until c in ds; if i=n then writeln; end; s[9]:='-'; for i:=1 to n do if s[i] in cf then pz[i]:=ord(s[i])-48 else if s[i]='-' then pz[i]:=0 else for j:=1 to 23 do if s[i]=zn[j].c then pz[i]:=zn[j].z; sum:=0; for i:=1 to n do sum:=sum+pz[i]*vk[i]; //вычислим по тупрму, как у Вас, но это тоже самое что и os:=sum mod 11 r:=frac(sum/11); os:=round(r*10); writeln('Остаток от деления ',sum,':11=',os); writeln('Измененный ИМ'); if os=10 then s[9]:='X' else s[9]:=chr(os+48); for i:=1 to n do write(s[i]); end.
Объяснение кода листинга программы
- Создается тип данных
znach
, который представляет цифру или букву. - Создается массив
zn
с 23 элементами, каждый из которых представляет определенную цифру или букву. - Создается массив
vk
, который представляет цифры от 0 до 9 и буквы от A до H, J до N, P, R до Z. - Создается переменная
ds
, которая представляет все возможные комбинации цифр и букв. - Создается массив
s
, который будет хранить введенные пользователем символы. - Запускается цикл, в котором пользователь вводит символы, пока не будет введено 10 символов.
- Внутри цикла проверяется, является ли введенный символ допустимым символом. Если да, то этот символ добавляется в массив
s
. - После завершения цикла вычисляется сумма всех элементов массива
s
. - Эта сумма затем делится на 11, чтобы получить десятичную дробь.
- Результат округляется до ближайшего целого числа и сохраняется в переменной
r
. - Затем вычисляется остаток от деления суммы на 11 и сохраняется в переменной
os
. - В зависимости от значения
os
в девятом элементе массиваs
заменяется наX
или на символ, соответствующийos
плюс 48. - Выводится итоговый результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д