program teisendaja; type arvud=array[0..100] of integer; { arvude jaoks } stringid=array[0..100] of string(12); { kahendkoodi ja kaheksandkoodi jaoks } arvurida=record { arvude jaoks } n:integer; arv:arvud; end; stringirida=record { koodide jaoks } n:integer; kood:stringid; end; procedure sisestus(var rida:arvurida); { loeb failist arvud eraldi ridadelt } var fail:string(32); p:text; i:integer; begin write("Sisendfail: "); readln(fail); reset(p, fail); { loeme } while not EOF(p) do begin readln(p, rida.arv[rida.n]); rida.n:=rida.n+1; end; close(p); end; function aste(i, j:integer): integer; { votab arvu astme } var k, l:integer; begin l:=1; for k:=1 to j do begin l:=l*i; end; aste:=l; end; procedure kahendkood(rida:arvurida; var kahend:stringirida); { teisendab kahendkoodi } var i, r:integer; begin kahend.n := rida.n; { arve on sama palju } for i:=0 to rida.n do begin if rida.arv[i] > 0 then { vaatame mis margiga on } begin kahend.kood[i] := "+"; end else begin kahend.kood[i] := "-"; rida.arv[i] := -rida.arv[i]; end; for r:=8 downto 0 do { teeme 9 bitti et oleks hea kaheksandkoodi parast muuta } begin if rida.arv[i]-aste(2, r) >= 0 then { vaatame, kas arv on suurem voi vaiksem kui see bitt } begin rida.arv[i]:=rida.arv[i]-aste(2, r); { kui ta on suurem, siis lahutame biti } kahend.kood[i] := kahend.kood[i] + "1"; { kirjutame selle koha peale 1 } end else begin kahend.kood[i] := kahend.kood[i] + "0"; { kui vaiksem, siis ei lahuta } end; end; end; end; procedure kaheksandkood(kahend:stringirida; var kaheksand:stringirida); { kaheksandkoodi } var i,j,k:integer; abi:string(3); begin kaheksand.n := kahend.n; { arve on sama palju } for i:=0 to kahend.n do begin kaheksand.kood[i] := kahend.kood[i][1]; { margid on samad } for j:=0 to 2 do { 9 bitti on 3 kaheksandnumbrit } begin abi:=kahend.kood[i][j*3+2] + kahend.kood[i][j*3+3] + kahend.kood[i][j*3+4]; { votame selle kolmese jupi } k:=0; { esialgu on meil null } if abi[1]='1' then k:=k+4; { kui koige korgem bitt kolmikust on 1, siis liidame 4 } if abi[2]='1' then k:=k+2; { liidame 2 } if abi[3]='1' then k:=k+1; { vaiksema vaartus on ainult 1 } str(k, abi); { muudame saadud arvu stringiks } kaheksand.kood[i] := kaheksand.kood[i] + abi; { ja paneme kaheksandkoodi otsa } end; end; end; procedure valjastus(rida:arvurida; kahend, kaheksand:stringirida); { valjastame tulemused } var i:integer; fail:string(32); p:text; begin write("Valjundfail: "); readln(fail); rewrite(p, fail); { kirjutame } for i:=0 to rida.n-1 do begin writeln(rida.arv[i]:4, " ", kahend.kood[i], " ", kaheksand.kood[i]); { ekraanile } writeln(p, rida.arv[i]:4, " ", kahend.kood[i], " ", kaheksand.kood[i]); { ja ka faili } end; close(p); end; var rida:arvurida; kahend:stringirida; kaheksand:stringirida; i:integer; begin sisestus(rida); kahendkood(rida, kahend); kaheksandkood(kahend, kaheksand); valjastus(rida, kahend, kaheksand); end.