Написать программу для подсчёта цифры - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Добрый день господа. Мне необходима Ваша помощь для написание небольшой программы, которая сможет произвести вычисления на основе готовых данных и при подстановке определённых символов позволила бы получить ответ в виде числа с остатком (2-3 цифры после запятой). На 2-й картинке указано задание и необходимые вводные данные (что за что отвечает), на первой картинке показан пример что необходимо вводить, и что должно получится в итоге (вместо прочерка в примере должно получиться то число, которое нужно высчитать). Очень рассчитываю на Вашу помощь! Заранее Вам благодарен!

Решение задачи: «Написать программу для подсчёта цифры»

textual
Листинг программы
  1. uses crt;
  2. type znach=record
  3.            c:char;
  4.            z:byte;
  5.            end;
  6. const cf=['1'..'9'];
  7.       lb=['A'..'H','j'..'N','P','R'..'Z'];
  8.       n=17;
  9.       zn:array[1..23] of znach=((c:'A';z:1),(c:'B';z:2),(c:'C';z:3),(c:'D';z:4),
  10.                                 (c:'E';z:5),(c:'F';z:6),(c:'G';z:7),(c:'H';z:8),
  11.                                 (c:'J';z:1),(c:'K';z:2),(c:'L';z:3),(c:'M';z:4),
  12.                                 (c:'N';z:5),(c:'P';z:7),(c:'R';z:9),(c:'S';z:2),
  13.                                 (c:'T';z:3),(c:'U';z:4),(c:'V';z:5),(c:'W';z:6),
  14.                                 (c:'X';z:7),(c:'Y';z:8),(c:'Z';z:9));
  15.       vk:array[1..n] of byte=(8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2);
  16. var ds:set of char;
  17.     s:array [1..n] of char;
  18.     c:char;
  19.     i,j,a,sum,os:integer;
  20.     pz:array[1..n] of byte;
  21.     r:real;
  22. begin
  23. ds:=cf+lb;
  24. writeln('Введите ',n,' символов номера, цифры и буквы A..H,J..N,P,R..Z');
  25. writeln('Исходный ИМ');
  26. for i:=1 to n do
  27.  begin
  28.   repeat
  29.    c:=readkey;
  30.    if c in ds then
  31.     begin
  32.      s[i]:=c;
  33.      if i<>9 then write(s[i])
  34.      else write('-');
  35.     end
  36.    else c:=#0;
  37.   until c in ds;
  38.   if i=n then writeln;
  39.  end;
  40. s[9]:='-';
  41. for i:=1 to n do
  42. if s[i] in cf then pz[i]:=ord(s[i])-48
  43. else if s[i]='-' then pz[i]:=0
  44. else
  45.  for j:=1 to 23 do
  46.  if s[i]=zn[j].c then pz[i]:=zn[j].z;
  47. sum:=0;
  48. for i:=1 to n do
  49. sum:=sum+pz[i]*vk[i];
  50. //вычислим по тупрму, как у Вас, но это тоже самое что и os:=sum mod 11
  51. r:=frac(sum/11);
  52. os:=round(r*10);
  53. writeln('Остаток от деления ',sum,':11=',os);
  54. writeln('Измененный ИМ');
  55. if os=10 then s[9]:='X'
  56. else s[9]:=chr(os+48);
  57. for i:=1 to n do
  58. write(s[i]);
  59. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы