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

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

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

привет. Помогите пожалуйста найти ошибку в паскале:при переводе из 8СС в 16СС в файле кроме ответа появляются лишние символы.
Листинг программы
  1. program kurs_1;
  2. uses
  3. crt;
  4. const
  5. d:array[0..15] of string=('0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','1010','1011','1100','1101','1110','1111');
  6. c:array[0..15] of string=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
  7. b:array[0..7] of string=('000','001','010','011','100','101','110','111');
  8. var
  9. s,s2,s16,a,str1,dk:string;
  10. i,n,j,z,f:integer;
  11. s10,s8:longint;
  12. k:byte;
  13. f1,f2:text;
  14. b1:array of integer;
  15. r:longint;
  16. procedure cod(s:string; a:string; var s2:string);
  17. const
  18. s0='00000001';
  19. d8:array[0..7] of string = ('000','001','010','011','100','101','110','111');
  20. var
  21. ss,str1:string;
  22. x,k,c,i,r,z,f:integer;
  23. f1,f2:text;
  24. begin
  25. val(s,x);
  26. if s[1]='-' then
  27. begin z:=1; Delete(s,1,1) end
  28. else z:=0; { знак }
  29. s2:='';
  30. for k := 1 to length(s) do
  31. s2:=s2+d8[ord(s[ k])-48];
  32. if z=0 then s2:='0'+s2
  33. else begin
  34. for c :=length(s2) downto 1 do
  35. if s2[c]='1' then s2[c]:='0'
  36. else s2[c]:='1';
  37. for i:=8 downto 1 do
  38. begin
  39. if s2[i] <>'0' then
  40. s2[i]:='0'
  41. else
  42. begin
  43. s2[i]:='1';
  44. break
  45. end;
  46. end;
  47. s2:='1'+s2;
  48. end;
  49. f:=Length(s2);
  50. if f>7 then Delete(s,1, f-7)
  51. else if f<7 then Insert(Copy('0000000',1,7-f),s2,1);
  52. end;
  53. procedure to16(s:string;var a:string; var s16:string);
  54. var
  55. i,j:integer;
  56. begin
  57. val(s,s8);
  58. if s[1]='0' then
  59. begin
  60. a:='1';
  61. delete(s,1,1) end
  62. else a:='0';
  63. repeat
  64. i:=s8 mod 10 ;
  65. s2:=b[i]+s2;
  66. s8:=s8 div 10;
  67. until s8=0;
  68. while length(s2)mod 4<>0 do
  69. s2:='0'+s2;
  70. for i:=length(s2) downto 1 do
  71. if i mod 4=1 then
  72. begin
  73. a:=copy(s2,i,4);
  74. for j:=0 to 15 do
  75. if d[j]=a then
  76. s16:=c[j]+s16;
  77. end;
  78. end;
  79. procedure to10(s:string;var a:string; var r:longint);
  80. var
  81. i,f:integer;
  82. begin
  83. if s[1]='-' then
  84. begin
  85. a:='-';
  86. delete(s,1,1)
  87. end
  88. else a:='';
  89. r:=0; f:=1;
  90. for i:=length(s) downto 1 do
  91. begin
  92. r:=r+f*(ord(s[i])-48);
  93. f:=f*8;
  94. end;
  95. end;
  96. procedure open;
  97. begin
  98. assign(f1,'dano.txt');
  99. reset(f1);
  100. read(f1,str1);
  101. close(f1);
  102. assign(f2,'rezult.txt');
  103. rewrite(f2);
  104. end;
  105. BEGIN
  106. clrscr;
  107. open;
  108. for i:=1 to length(str1) do
  109. begin
  110. if str1[i]<>',' then s:=s+str1[i];
  111. if (i=length(str1)) or (str1[i]=',') then
  112. begin
  113. n:=0;
  114. repeat
  115. writeln('Vvedite 1-esli 10 CC, 2-esli 16 CC, 3-esli dop.kod, 4-sled chislo:',n);
  116. readln(n);
  117. case n of
  118. 1: begin
  119. to10(s,a,r);
  120. write(f2,s,'=',a,r,' ')
  121. end;
  122. 2: begin
  123. to16(s,a,s16);
  124. write(f2,s,'=',s16,' ')
  125. end;
  126. 3: begin
  127. cod(s,a,s2);
  128. write(f2,s,'=',s2,' ')
  129. end;
  130. 4: break
  131. end;
  132. until n=4;
  133. s:='';
  134. end;
  135. end;
  136. close(f2);
  137. END.

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

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

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

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

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

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


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

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

5   голосов , оценка 3.8 из 5

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

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

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