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


Автор: Palladin 18.6.2006, 22:35
Вообщем дан сттринггрид и двумерный массив(квадратная матрица), в стринггрид воожу числа а потом мне нужно соответственно записать его в масив чисел, что я и делаю:

Код

procedure TForm1.Button2Click(Sender: TObject);
var
a,b: array [1..100,1..100] of real;
i,n,j:integer;
begin
n:=strtoint(edit1.text);//размерность
for i:=1 to N do
for j:=1 to n do
a[i,j]:=strtofloat(stringgrid1.cells[i,j]);
........
end;
  

Но массив не создаётся почемуто не считываются какието символы, при начале работы прога даёт ошибку: 
Project1.exe raised exception class EConvertError with '' is not a vaild floating point value 


Помогите считать из стринггрида информацию и занести её в мой массив, в стринггрид вводятся числа как целые так и с плавающей точко(дробные), почемуто не заносятся числа из стринггрида в массив, вроде всё правильно но что-то не тоsmile(( 

Автор: Albinos_x 18.6.2006, 22:58
Код
...
procedure TForm1.Button2Click(Sender: TObject);    
var    
a,b: array [1..100,1..100] of real;    
i,n,j:integer;    
begin    
if Edit1.Text='' then exit;
n:=strtoint(edit1.text);//размерность    
for i:=1 to N do    
   for j:=1 to n do    
      if stringgrid1.cells[j,i]<>'' then
         a[i,j]:=strtofloat(stringgrid1.cells[j,i])
         else
         a[i,j]:=0;    
........    
end;
...
 

Автор: Palladin 19.6.2006, 00:04
Да та же самая ошибка, во первых исчесления должны начинатся с нуля я в том примере смомрозил т.к. в стринггриде первая ячейка имеет номер [0,0]!!!!!! Просто немогу понять вот лёгкий пример который показывает что это не верно, я так тоже делал и не выходит поэтому и спрашиваю, вот код который показывает что это не верно

Код

procedure TForm1.Button2Click(Sender: TObject);
var
a,b: array [1..100,1..100] of real;
i,n,j:integer;
begin
if Edit1.Text='' then exit;
n:=strtoint(edit1.text);//ðàçìåðíîñòü
for i:=0 to N-1 do
for j:=0 to n-1 do
begin
if stringgrid1.cells[j,i]<>'' then
begin
a[i,j]:=strtofloat(stringgrid1.cells[i,j]);
stringgrid2.Cells[i,j]:=floattostr(a[i,j]);
end
else
a[i,j]:=0;
end;

 

Автор: Albinos_x 19.6.2006, 00:11
RooR, ну так stringgrid если у тебя с нуля, то массив-то с 1 начинается

Добавлено @ 00:13 
тогда уж:
Код
...
procedure TForm1.Button2Click(Sender: TObject);    
var    
a,b: array [1..100,1..100] of real;    
i,n,j:integer;    
begin    
if Edit1.Text='' then exit;    
n:=strtoint(edit1.text);    
for i:=0 to N-1 do    
   for j:=0 to n-1 do    
      begin    
      if stringgrid1.cells[i,j]<>'' then    
         a[i+1,j+1]:=strtofloat(stringgrid1.cells[i,j])    
         else    
         a[i+1,j+1]:=0;    
     end;
end;
...
    

Автор: Guedda 19.6.2006, 00:14
Просто напросто ты объявляешь массив с 1 элемента, а перебор идет с нулевого. Так что необходимо сделать так:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
a,b: array [0..100,0..100] of real; //Здесь необходимо единички заменить на нолики
i,n,j:integer;
begin
if Edit1.Text='' then exit;
n:=strtoint(edit1.text);//Размерность
for i:=0 to N-1 do
for j:=0 to n-1 do
begin
if stringgrid1.cells[j,i]<>'' then
begin
a[i,j]:=strtofloat(stringgrid1.cells[i,j]);
stringgrid2.Cells[i,j]:=floattostr(a[i,j]);
end
else
a[i,j]:=0;
end;
 

Автор: Albinos_x 19.6.2006, 00:15
Цитата(Albinos_x @  19.6.2006,  00:11 Найти цитируемый пост)
тогда уж:

или как написал Guedda

Добавлено @ 00:19 
плюс к этому у тебя в коде опечатка:
Цитата(RooR @  19.6.2006,  00:04 Найти цитируемый пост)
cells[j,i]<>''

Цитата(RooR @  19.6.2006,  00:04 Найти цитируемый пост)
strtofloat(stringgrid1.cells[i,j])

проверяешб одну ячейку а читаешь другую... 

Автор: Yanis 19.6.2006, 00:19
RooR
Конечно... Массив то у тебя индексируется начиная с 1, а в StringGrid с 0. Измени деклэйр на 
Код
a,b: array [0..100,0..100] of real;


P. S. Скажу что твой способ не совсем рационален. Но если этого требует задача...

Добавлено @ 00:20 
Ой. Опоздал smile 

Автор: Palladin 19.6.2006, 00:20
[censored 2] как я мог забыть, я ж говорил что что-то наморозил, знал же что ошибка какаята лоховая, сенкс мужики который раз выручили былоб 100 сообщений кинул бы по плюсуsmile smile  smile  smile  

Автор: Albinos_x 19.6.2006, 00:28
Цитата(Yanis @  19.6.2006,  00:19 Найти цитируемый пост)
P. S. Скажу что твой способ не совсем рационален. Но если этого требует задача..

логичней было бы сделать через динамический массив... 

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