Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Востановление данных в матрице (http://forum.oszone.net/showthread.php?t=194285)

zDevil 17-12-2010 22:35 1568475

Востановление данных в матрице
 
Вопрос таков: Нужно создать матрицу 3х3 разработать схему контрольных сумм для востановления данных в матрице.
Зарание спасибо

lxa85 18-12-2010 03:26 1568583

zDevil, Это не вопрос, это задание.
Вопрос то в чем? Какие требования к матрице, к контрольным суммам, к степени "восстанавливаемости"?
Какие собственные мысли по реализации?

zDevil 19-12-2010 18:22 1569724

Хорошо скажу по другому. Нужна помощь с этой задачей

lxa85 19-12-2010 18:48 1569752

zDevil, ок, поменяем ответ. Ты можешь мне помочь построить дачу?

zDevil 24-12-2010 21:58 1573929

востановление данных в матрице
 
Нужна помощь по курсавой
Есть задача: Нужно создать матрицу 3х3 разработать схему контрольных сумм для востановления данных в матрице.
Есть код:
Код:

program DataCheck;

{$APPTYPE CONSOLE}

uses
SysUtils;
var data: array of array of integer;
var sum,ind,check,tsum: array of integer;
ldata,i,j:integer;

procedure zero(m_zero:array of integer;length:integer);
begin
for i := 0 to (2*length+1) do begin
m_zero[i]:=0;
end;
end;

procedure data_check;
begin
for i := 0 to (2*ldata+1) do begin
ind[i]:=0;
check[i]:=0;
tsum[i]:=0;
end;

for i := 0 to ldata-1 do begin
for j := 0 to ldata-1 do begin
if data[i,j]=0 then begin
ind[i]:=j;
ind[ldata+j]:=i;
inc(check[i]);
inc(check[ldata+j]);
if i=j then begin
ind[2*ldata]:=i;
inc(check[2*ldata]); end;
if i+j=ldata-1 then begin
ind[2*ldata+1]:=i;
inc(check[2*ldata+1]); end; end;
end; end;

for i := 0 to ldata-1 do
for j := 0 to ldata-1 do begin
if check[i]=1 then begin
tsum[i]:=tsum[i]+data[i,j];
end;
end;

for i := 0 to ldata-1 do
for j := 0 to ldata-1 do begin
if check[ldata+j]=1 then begin
tsum[ldata+j]:=tsum[ldata+j]+data[i,j];
end;
end;

if check[2*ldata]=1 then begin
for i := 0 to ldata-1 do
for j := 0 to ldata-1 do begin
if i=j then
tsum[2*ldata]:=tsum[2*ldata]+data[i,j];
end;
end;

for i := 0 to ldata-1 do
for j := 0 to ldata-1 do begin
if check[2*ldata+1]=1 then begin
if i+j=ldata-1 then
tsum[2*ldata+1]:=tsum[2*ldata+1]+data[i,j];
end;
end;

for i := 0 to ldata-1 do
begin
if tsum[i]<>0 then
data[i,ind[i]]:=sum[i]-tsum[i];
end;

for j := 0 to ldata-1 do
begin
if tsum[ldata+j]<>0 then
data[ind[ldata+j],j]:=sum[ldata+j]-tsum[ldata+j];
end;

for i := 0 to ldata-1 do begin
for j := 0 to ldata-1 do begin
if tsum[2*ldata]<>0 then
data[ind[2*ldata],ind[2*ldata]]:=sum[2*ldata]-tsum[2*ldata];
if tsum[2*ldata+1]<>0 then
data[ind[2*ldata+1],ldata-1-ind[2*ldata+1]]:=sum[2*ldata+1]-tsum[2*ldata+1];
end;
end;
end;

begin
randomize;
ldata:=3;
setlength(ind,2*ldata+2);
setlength(check,2*ldata+2);
setlength(tsum,2*ldata+2);
setlength(sum,2*ldata+2);

setlength(data,ldata);
for i := 0 to ldata-1 do
setlength(data[i],ldata);

for i := 0 to ldata-1 do
for j := 0 to ldata-1 do begin
data[i,j]:=random(9)+1;
end;

for i := 0 to (2*ldata+1) do begin
sum[i]:=0;
end;

for i := 0 to ldata-1 do
for j := 0 to ldata-1 do begin
sum[i]:=sum[i]+data[i,j];
sum[ldata+j]:=sum[ldata+j]+data[i,j];
if i=j then
sum[2*ldata]:=sum[2*ldata]+data[i,j];
if i+j=ldata-1 then
sum[2*ldata+1]:=sum[2*ldata+1]+data[i,j];
end;

for i := 0 to ldata-1 do begin
for j := 0 to ldata-1 do begin
write(data[i,j],' '); end; writeln; end;

for i := 0 to 2*ldata+1 do begin
write(sum[i],' '); end;

for i := 0 to 5 do
data[random(ldata),random(ldata)]:=0;

writeln;
for i := 0 to ldata-1 do begin
for j := 0 to ldata-1 do begin
write(data[i,j],' '); end; writeln; end;

for i := 0 to ldata do begin
data_check();
data_check();
data_check();
end;

writeln;
for i := 0 to ldata-1 do begin
for j := 0 to ldata-1 do begin
write(data[i,j],' '); end; writeln; end;

readln;
end.

в чем нужна помощь: в том что мне надо рассмотреть тему более открыто. А точнее я прошу как бы написали её вы; нужно несколько решений одной задачи


Время: 08:33.

Время: 08:33.
© OSzone.net 2001-