У природы нет плохой погоды. (с)
К 22 числу надо написать три программы... Казалось бы мелочь... Ха! А у меня слезы...



1. Перевод чисел из 10-ой системы счисления в р-ичную (при том что р принадлежит [2;16]) и обратно.

2. Представление с одинарной точностью туда и обратно

3. Реализовать алгоритмы сложения и вычитания длинных чисел, т.е. чисел формата longint.



:alles:



И еще надо будет объяснить каждую строчечку и буковку в программе!

Если кто-нить (косится на длинный список ПЧ из 7ми человек) знает паскаль настолько хорошо, чтобы решить хоть одну задачу полностью и полностью ее объяснить, то ПОМОГИТЕ ПОЖАЛУЙСТА!!!!

Комментарии
12.05.2007 в 11:43

с третьей могу помочь. А первые две нужно переводить в другой формат. мну такое не любит :)
12.05.2007 в 12:32

Нашла прогу трёхгодичной давности. Похожее на твоё третье, за исключением того, что формат не longint, a float.

Выкладываю пока. Посмотри, может что понравится :)



program stolbik;

type

st=string;

arr=array[1..255] of integer;

tom1=object

a,b:st;

procedure init(a1:st;var c:arr;var ss,i,s_:integer);

procedure dop(var zz,i:integer;ss,j,s_,z_:integer;var c,d:arr);

procedure sum(zz,i:integer;c,d:arr;var rr:st);

procedure raz(zz,i:integer;c,d:arr;var rr:st);

procedure vvod(var rr:st);

end;

var a1,rr:st;

stl,aa,bb:tom1;

c:arr;

ss,i,f,s:integer;

procedure tom1.init(a1:st;var c:arr;var ss,i,s_:integer);

var s,osh:integer;

h:st;

begin

s:=length(a1);

i:=0;

ss:=0;

s_:=s;

while s>=1 do

begin

h:=copy(a1,1,1);

s:=s-1;

i:=i+1;

a1:=copy(a1,2,s);

if h='.' then

begin

ss:=length(a1);

h:=copy(a1,1,1);

s:=s-1;

a1:=copy(a1,2,s);

end;

val(h,c[i],osh);

end;

s_:=s_-ss

end;

procedure tom1.dop(var zz,i:integer;ss,j,s_,z_:integer;var c,d:arr);

var i_,j_:integer;

begin

If s_<>z_ then begin

if s_<z_ then

begin

while s_<z_ do begin

i:=i+1;

for i_:=i downto 2 do C[i_]:=c[i_-1];

s_:=s_+1;

c[1]:=0

end

end

else

begin

while s_>z_ do begin

j:=j+1;

for j_:=j downto 2 do d[j_]:=d[j_-1];

z_:=z_+1;

d[1]:=0

end

end

end;

if ss<>zz then begin

if ss<zz then

begin

while ss<zz do begin

i:=i+1;

c[i]:=0;

ss:=ss+1

end

end

else

begin

while ss>zz do begin

j:=j+1;

d[j]:=0;

zz:=zz+1

end

end

end

end;

procedure tom1.sum(zz,i:integer;c,d:arr;var rr:st);

var v1,v2,r:st;

s:arr;

k,g1,osh,n,t:integer;

begin

k:=i;

g1:=0;

t:=1;

while k>=1 do

begin

n:=(c[k]+d[k]+g1);

str(n,v1);

if length(v1)=1 then v1:='0'+v1;

v2:=copy(v1,2,1);

v1:=copy(v1,1,1);

val(v1,g1,osh);

val(v2,s[t],osh);

t:=t+1;

k:=k-1

end;

s[t]:=g1;

rr:=' ';

for k:=1 to t do begin

str(s[k],r);

rr:=r+rr

end;

insert('.',rr,(t-zz+1));

while (copy(rr,1,1)='0') and (copy(rr,2,1)<>'.') do delete(rr,1,1)

end;

procedure tom1.raz(zz,i:integer;c,d:arr;var rr:st);

var k,t:integer;

s:arr;

r:st;

begin

k:=i;

t:=1;

while k>=1 do

begin

if c[k]<d[k] then begin c[k]:=10+c[k]; c[k-1]:=c[k-1]-1 end;

s[t]:=(c[k]-d[k]);

t:=t+1;

k:=k-1

end;

rr:=' ';

for f:=1 to t-1 do begin

str(s[f],r);

rr:=r+rr

end;

insert('.',rr,(t-zz));

while (copy(rr,1,1)='0') and (copy(rr,2,1)<>'.') do delete(rr,1,1);

end;

procedure tom1.vvod(var rr:st);

var b0,b1,b2,w:boolean;

x,y,p:st;

s,m1,m:real;

zz,ss,i,j,s_,z_,osh:integer;

c,d:arr;

begin

b0:=false;b1:=false;b2:=false;

readln(x);

{x:='123.66363453643646';}

val(x,s,osh);

if s<0 then begin b1:=true;delete(x,1,1) end;

readln(p);if p='+' then b0:=true;

readln(y);

{y:='53.1168413544165456686165454545';}

{if ((i+j)/2)>=20 then write ('error');}

val(y,s,osh);

if s<0 then begin b2:=true;delete(y,1,1) end;

w:=false;

val(x,m,osh);

val(y,m1,osh);

if m1>m then begin

p:=y;

y:=x;

w:=true;

x:=p

end;

tom1.init(x,c,ss,i,s_);

tom1.init(y,d,zz,j,z_);

tom1.dop(zz,i,ss,j,s_,z_,c,d);

if (b0 and b1 and b2) or ((not b0) and b1 and (not b2))

then begin

tom1.sum(zz,i,c,d,rr);

rr:='-'+rr

end;

if (b0 and b1 and (not b2)) or ((not b0) and b1 and b2)

then begin

tom1.raz(zz,i,c,d,rr);

if not w then rr:='-'+rr

end;

if (b0 and (not b1) and b2) or ((not b0) and (not b1) and (not b2))

then begin

tom1.raz(zz,i,c,d,rr);

if w then rr:='-'+rr

end;

if (b0 and (not b1) and (not b2)) or ((not b0) and (not b1) and b2)

then tom1.sum(zz,i,c,d,rr);

end;

begin

stl.vvod(rr);

write(rr);

readln

end.
12.05.2007 в 12:35

комменты по проге напишу позже. Сейчас пока времени нет. Сорь.
12.05.2007 в 18:40

У природы нет плохой погоды. (с)
Эл, солнышко! Я тебя люблю и обожаю! У меня нет слов благодарности!!

:hash2:
14.05.2007 в 09:21

У природы нет плохой погоды. (с)
эмм... Эл... я...это... я... эм.. Не дописала условие третьей задачи... Там нуна для всех систем счисления... От двоичной до 16тиричной... (((
14.05.2007 в 17:02

*упала в обморок*

так... а теперь пиши все эти системы. потому что мну их считать лень) Примерно до 50-го числа)