Написать программу для подсчёта цифры - 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. - Выводится итоговый результат.