Некорректный результат в файле при переводе из 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 := '';
Объяснение кода листинга программы
- Объявляется пустая строковая переменная
s16
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д