Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2010, 21:57   #1
zDevil
 
Регистрация: 17.12.2010
Сообщений: 2
По умолчанию востановление данных в матрице

Нужна помощь по курсавой
Есть задача: Нужно создать матрицу 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.

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Востановление данных!!! PARtiZAN1988 Софт 5 21.05.2012 13:52
Востановление данных в матрице zDevil Помощь студентам 0 23.12.2010 18:24
Востановление данных Хом Операционные системы общие вопросы 1 04.10.2010 14:30
Востановление системы! stenl1 Операционные системы общие вопросы 3 23.10.2009 00:25