Подсчет суммы шестнадцатеричных чисел - Pascal ABC

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

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

напишите программу которая получает 2 шестнадцатеричных числа, считает их сумму и выводит ответ в 10 и 16 системе счисления. заранее спаибо очень надо

Решение задачи: «Подсчет суммы шестнадцатеричных чисел»

textual
Листинг программы
var s1,s2,s:string;
    a,b,c:array[byte] of integer;
    n,m,i,j,p,k:integer;
begin
repeat
p:=0;
write('Введите число A в СС 16:');
readln(s1);
s1:=uppercase(s1);
i:=1;
while(i<=length(s1))and(p=0) do
if not(s1[i] in ['0'..'9','A'..'F']) then p:=1
else i:=i+1;
until p=0;
repeat
p:=0;
write('Введите число B в СС 16:');
readln(s2);
s2:=uppercase(s2);
i:=1;
while(i<=length(s2))and(p=0) do
if not(s2[i] in ['0'..'9','A'..'F']) then p:=1
else i:=i+1;
until p=0;
if length(s1)<length(s2) then
while length(s1)<length(s2) do
s1:='0'+s1
else if length(s1)>length(s2) then
while length(s2)<length(s1) do
s2:='0'+s2;
writeln('  ',s1);
writeln(' +');
writeln('  ',s2);
for i:=1 to length(s1)+2 do
write('-');
writeln;
n:=length(s1);
m:=n;
for i:=1 to n do
 begin
  if s1[i] in ['0'..'9'] then  a[i]:=ord(s1[i])-48
  else a[i]:=ord(s1[i])-55;
  if s2[i] in ['0'..'9'] then  b[i]:=ord(s2[i])-48
  else b[i]:=ord(s2[i])-55;
 end;
p:=0;
for i:=n downto 1 do
  begin
   c[i]:=a[i]+b[i]+p;
   if (c[i]>15)and(i>1) then
      begin
       c[i]:=c[i] mod 16;
       p:=1;
      end
    else p:=0;
  end;
if c[1]>15 then
  begin
    c[1]:=c[1] mod 16;
    n:=n+1;
    for j:=n downto 2 do
    c[j]:=c[j-1];
    c[1]:=1;
  end;
if n=m then write('  ')
else write(' ');
for i:=1 to n do
if c[i] in [0..9] then write(c[i])
else write(chr(c[i]+55));
writeln;
s:='';
for i:=1 to n do
if c[i]<10 then s:=s+chr(c[i]+48)
else s:=s+chr(c[i]+55);
s:='$'+s;
val(s,p,k);
writeLn('В СС 10=',p)
end.

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

  1. Создаются переменные s1, s2, s: string; a, b, c: array[byte] of integer; n, m, i, j, p, k: integer.
  2. В цикле повторяется:
    • p := 0;
    • write('Введите число A в СС 16:');
    • readln(s1);
    • s1 := uppercase(s1);
    • i := 1;
    • while(i <= length(s1)) and (p = 0) do
      • if not(s1[i] in ['0'..'9','A'..'F']) then p := 1
      • else i := i + 1;
    • until p = 0;
  3. В цикле повторяется:
    • p := 0;
    • write('Введите число B в СС 16:');
    • readln(s2);
    • s2 := uppercase(s2);
    • i := 1;
    • while(i <= length(s2)) and (p = 0) do
      • if not(s2[i] in ['0'..'9','A'..'F']) then p := 1
      • else i := i + 1;
    • until p = 0;
  4. Если длина s1 меньше длины s2, то к каждому символу s1 добавляется символ '0'.
  5. Если длина s1 больше длины s2, то к каждому символу s2 добавляется символ '0'.
  6. В цикле for повторяется:
    • n := length(s1);
    • m := n;
    • for i := 1 to n do
      • if s1[i] in ['0'..'9'] then a[i] := ord(s1[i]) - 48
      • else a[i] := ord(s1[i]) - 55;
    • end;
  7. В цикле for повторяется:
    • p := 0;
    • for i := n downto 1 do
      • c[i] := a[i] + b[i] + p;
      • if (c[i] > 15) and (i > 1) then
      • c[i] := c[i] mod 16;
      • p := 1;
      • else p := 0;
    • end;
  8. Если c[1] больше 15, то c[1] приводится к модулю 16, а переменная n увеличивается на 1, и все символы c[i] с индексами от n до 2 приводятся к предыдущему символу.
  9. Если n равно m, то в строке s добавляется символ ' '
  10. Если n не равно m, то в строке s добавляется символ '$'.
  11. Выполняется вызов функции val(s, p, k).
  12. Выводится значение p.

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


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

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

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