Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Ошибка в программе


Автор: Гость_Олег 23.5.2004, 18:02
Здравствуйте, уважаемые единомышленники!
Вопрос «чайника»: уже долгое время не могу написать такую простенькую прогу, условие которой:
В таблицу заносятся сведения о сотрудниках организации по формату: фамилия, имя, отчество, заработная плата. Разработать прогу для сортировки сведений о сотрудниках по заработной плате – в первой строке должен стоять сотрудник с самой высокой з/п. Задачу нужно решить с использованием типа данных Запись и через динамический массив.
Вот код, в котором никак не могу найти ошибку:
{$R *.dfm}
type
TEmploy = record
Familie : string;
Name : string;
Otchestvo : string;
Zp :real;
end;
TEmployArr = array of TEmploy;
//...
var
Re: TEmployArr;


procedure TForm1.N1Click(Sender: TObject);
var
X,Y,K,I:Integer;

begin
for i:=1 to Tab1.RowCount do
if Length(Tab1.Cells[0,i])<>0 then
k:=k+1;
X:=Tab1.FixedCols;// нам не нужны те колонки, которые фиксированы
SetLength(Re,K);
For Y:=Tab1.FixedRows to K do{ Нам не нужны фиксированые строки}
Begin
Re[Y-Tab1.FixedRows].Familie:=tab1.Cells[X+0,Y];
Re[Y-Tab1.FixedRows].Name:=Tab1.Cells[X+1,Y];
Re[Y-Tab1.FixedRows].Otchestvo :=Tab1.Cells[X+2,Y];
Re[Y-Tab1.FixedRows].Zp :=StrToFloat(Tab1.Cells[X+3,Y]);

end;
end;

procedure TForm1.N2Click(Sender: TObject);
var
i,K,m,r:integer;

b:TEmploy;


begin
for i:=1 to Tab1.RowCount do
if Length(Tab1.Cells[0,i])<>0 then
k:=k+1;


for r:=0 to k-1 do
begin
m:=r;
for i:=r to k-1 do
begin
if Tab1.Cells[3,i]>Tab1.Cells[3,m] then
begin
m:=i;
if r<>m Then
begin
b:=Re[r];
Re[r]:=Re[m];
Re[m]:=b;
end;
end;

end;

end;



for i:=0 to K-1 do
begin
Tab2.Cells[0,i+1]:=Re[i].Familie;
Tab2.Cells[1,i+1]:= Re[i].Name;
Tab2.Cells[2,i+1]:=Re[i].Otchestvo;
Tab2.Cells[3,i+1]:=FloatToStr(Re[i].Zp);

end;




end;


end.

Может кто подскажет, где собака зарыта???

Автор: z-END 23.5.2004, 19:45
а где ошибка-то возникает?
Цитата
for i:=1 to Tab1.RowCount do
if Length(Tab1.Cells[0,i])<>0 then ...

по моему вот этот кусок нерабочий т.к. при RowCount=1 последняя ячейка будет являться не первой а нулевой cell[0,0], т.е. логично бы написать цикл так:
Код
for i := 1 to Tab1.RowCount - 1 do
  if Length (Tab1.Cells [0,i]) <> 0 then...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)