Написать программу для подсчёта цифры - 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. - Выводится итоговый результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д