Некорректный результат в файле при переводе из 8СС в 16СС - Free Pascal

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

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

привет. Помогите пожалуйста найти ошибку в паскале:при переводе из 8СС в 16СС в файле кроме ответа появляются лишние символы.
program kurs_1;
uses
  crt;
const
d:array[0..15] of string=('0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','1010','1011','1100','1101','1110','1111');
 c:array[0..15] of string=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
b:array[0..7] of string=('000','001','010','011','100','101','110','111');
var
  s,s2,s16,a,str1,dk:string;
  i,n,j,z,f:integer;
  s10,s8:longint;
  k:byte;
  f1,f2:text;
  b1:array of integer;
  r:longint;
 
procedure cod(s:string; a:string; var s2:string);
const
s0='00000001';
d8:array[0..7] of string = ('000','001','010','011','100','101','110','111');
var
ss,str1:string;
 x,k,c,i,r,z,f:integer;
f1,f2:text;
begin
 val(s,x);
if s[1]='-' then
begin z:=1; Delete(s,1,1) end
else z:=0; { знак }
s2:='';
 for k := 1 to length(s) do
 s2:=s2+d8[ord(s[ k])-48];
if z=0 then s2:='0'+s2
else begin
 for c :=length(s2) downto 1 do
 if s2[c]='1' then s2[c]:='0'
 else s2[c]:='1';
for i:=8 downto 1 do
begin
if s2[i] <>'0' then
s2[i]:='0'
else
begin
s2[i]:='1';
break
end;
end;
s2:='1'+s2;
end;
f:=Length(s2);
if f>7 then Delete(s,1, f-7)
else if f<7 then Insert(Copy('0000000',1,7-f),s2,1);
 
end;
 
procedure to16(s:string;var a:string; var s16:string);
var
i,j:integer;
 begin
   val(s,s8);
if s[1]='0' then
      begin
        a:='1';
        delete(s,1,1) end
    else a:='0';
  repeat
    i:=s8 mod 10 ;
    s2:=b[i]+s2;
    s8:=s8 div 10;
    until s8=0;
while length(s2)mod 4<>0 do
s2:='0'+s2;
    for i:=length(s2) downto 1 do
         if i mod 4=1 then
            begin
              a:=copy(s2,i,4);
              for j:=0 to 15 do
                 if d[j]=a then
                   s16:=c[j]+s16;
            end;
   end;
 
procedure to10(s:string;var a:string; var r:longint);
var
  i,f:integer;
begin
    if s[1]='-' then
      begin
        a:='-';
        delete(s,1,1)
      end
    else a:=''; 
  r:=0; f:=1;
  for i:=length(s) downto 1 do
    begin
      r:=r+f*(ord(s[i])-48);
      f:=f*8;
    end;
end;
 
procedure open;
begin
  assign(f1,'dano.txt');
  reset(f1);
  read(f1,str1);
  close(f1);
  assign(f2,'rezult.txt');
  rewrite(f2);
end;
BEGIN
clrscr;
open;
  for i:=1 to length(str1) do
    begin
     if str1[i]<>',' then s:=s+str1[i];
     if (i=length(str1)) or (str1[i]=',') then
       begin
         n:=0;
         repeat
         writeln('Vvedite 1-esli 10 CC,   2-esli 16 CC,   3-esli dop.kod,   4-sled chislo:',n);
         readln(n);
    case n of
   1: begin
      to10(s,a,r);
      write(f2,s,'=',a,r,' ')
      end;
   2: begin
      to16(s,a,s16);
      write(f2,s,'=',s16,' ')
      end;
   3: begin
      cod(s,a,s2);
      write(f2,s,'=',s2,' ')
      end;
   4: break
   end;
   until n=4;
   s:='';
   end;
   end;
   close(f2);
END.

56=2E 5=52E2E 11=0952E52E2E 4=40952E0952E52E2E

Решение задачи: «Некорректный результат в файле при переводе из 8СС в 16СС»

textual
Листинг программы
s16 := '';

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

  1. Объявляется пустая строковая переменная s16.

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


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

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

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