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

Объяснение кода листинга программы

  1. Создается тип данных znach, который представляет цифру или букву.
  2. Создается массив zn с 23 элементами, каждый из которых представляет определенную цифру или букву.
  3. Создается массив vk, который представляет цифры от 0 до 9 и буквы от A до H, J до N, P, R до Z.
  4. Создается переменная ds, которая представляет все возможные комбинации цифр и букв.
  5. Создается массив s, который будет хранить введенные пользователем символы.
  6. Запускается цикл, в котором пользователь вводит символы, пока не будет введено 10 символов.
  7. Внутри цикла проверяется, является ли введенный символ допустимым символом. Если да, то этот символ добавляется в массив s.
  8. После завершения цикла вычисляется сумма всех элементов массива s.
  9. Эта сумма затем делится на 11, чтобы получить десятичную дробь.
  10. Результат округляется до ближайшего целого числа и сохраняется в переменной r.
  11. Затем вычисляется остаток от деления суммы на 11 и сохраняется в переменной os.
  12. В зависимости от значения os в девятом элементе массива s заменяется на X или на символ, соответствующий os плюс 48.
  13. Выводится итоговый результат.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы