Подсчет суммы шестнадцатеричных чисел - 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.
Объяснение кода листинга программы
- Создаются переменные s1, s2, s: string; a, b, c: array[byte] of integer; n, m, i, j, p, k: integer.
- В цикле повторяется:
- 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;
- В цикле повторяется:
- 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;
- Если длина s1 меньше длины s2, то к каждому символу s1 добавляется символ '0'.
- Если длина s1 больше длины s2, то к каждому символу s2 добавляется символ '0'.
- В цикле 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;
- В цикле 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;
- Если c[1] больше 15, то c[1] приводится к модулю 16, а переменная n увеличивается на 1, и все символы c[i] с индексами от n до 2 приводятся к предыдущему символу.
- Если n равно m, то в строке s добавляется символ ' '
- Если n не равно m, то в строке s добавляется символ '$'.
- Выполняется вызов функции val(s, p, k).
- Выводится значение p.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д