Вопрос: как поделить первые три столбца на последний т.е 600 на 3000 1500 на 4000 900 на 7000 также нужно поделить и остальные два,и как потом работать с полученными числами
мисс_граффити
12.01.2008 22:01
циклами поэлементно... не совсем понятно, в чем проблема.
Tan
13.01.2008 0:41
Мне кажется тут речь о том, что Pirate не знает как обратиться к ячейкам StringGrid и получить оттуда нужные данные. Form1.StringGrid1.Cells[i,j] - так ты обращаешься к элементу стрингрида, где i - номер столбика (0..n), а j - номер ряда (0..n) - заметь, что отличается от массивов. Так как ты работаешь со строкой, можешь объявить переменную типа string (например s) и присвоить ей значение ячейки StringGrid, например s := Form1.StringGrid1.Cells[0,0] - верхний левый элемент. Теперь, используя функцию StrToInt, ты можешь из строки получить число типа integer (с вещественными аналонично StrToFloat), а можно и сделать сразу a := StrToInt (Form1.StringGrid1.Cells[0,0]), где а - переменная типа integer. Теперь, используя цикл for, можно производить различные манипуляции с данными ячеек StringGrid, что тебе и требуется. Отредактировано -> см. пост Better Kind.
Pirate
13.01.2008 20:49
Цитата(Tan @ 13.01.2008 0:41)
Мне кажется тут речь о том, что Pirate не знает как обратиться к ячейкам StringGrid и получить оттуда нужные данные. Form1.StringGrid1.Cells[i,j] - так ты обращаешься к элементу стрингрида, где i - номер столбика (0..n), а j - номер ряда (0..n) - заметь, что отличается от массивов. Так как ты работаешь со строкой, можешь объявить переменную типа string (например s) и присвоить ей значение ячейки StringGrid, например s := Form1.StringGrid1.Cells[0,0] - верхний левый элемент. Теперь, используя функцию IntToStr, ты можешь из строки получить число типа integer, а можно и сделать сразу s := IntToStr (Form1.StringGrid1.Cells[0,0]); Теперь, используя цикл for, можно производить различные манипуляции с данными ячеек StringGrid, что тебе и требуется.
Уважаемый Тан не могли бы вы мне привести примерчег с моими данными ,у меня при делении 600 на 3000 возникает ошибка.Как потом данные из каждого из столбоц занести в массив?
Tan
14.01.2008 12:54
Покажи как ты делаешь и станет понятнее откуда ошибка. Допустим мы хотим занести данные из 1го по счёту столбца в массив : for i := 1 to N do massiv[i] := StrToInt (Form1.StringGrid1.Cells[0,i - 1]); То есть проходим по строкам, а столбик константный, если же ты хочешь занести в массив одновременно несколько столбиков со значениями, необходим ещё внешний цикл по столбикам.
Better Kind
14.01.2008 13:06
Цитата(Tan @ 13.01.2008 0:41)
Теперь, используя функцию IntToStr , ты можешь из строки получить число типа integer
Вещественный тип надо использовать. Ну и разумеется внимательней смотрим, что пишем. Перевод строки в число делает StrToFloat, а не наоборот.
Tan
14.01.2008 14:01
Я просто показал пример как загнать данные в массив. Я же не использовал деление.
Pirate
14.01.2008 20:22
Вообщем я понял что нужно - поделить 3 столбца на последний, а результаты загнать в массив и вывести в мемо - как?
Ошибок не возникает, но как сделать деление циклами поочередно?
Tan
14.01.2008 23:13
Приведи пожалуйста пример исходных данных и данных на выходе, непонятно как заполнять массив. Допустим поделили все элементы первого столбика на последний, записали в массив. Потом поделил второй на последний, после этого продолжаем писать в тот же массив или создаём и заполняем новый?
volvo
15.01.2008 12:11
Цитата(Better Kind)
Вещественный тип надо использовать.
С чего бы это? Потому, что тебе так хочется? Неправильно хочется, значит... Содержимое ячеек - целочисленное, значит можно использовать StrToInt...
Pirate, все очень просто: 2 вложенных цикла - внешний по строкам, внутренний - по столбцам грида (деление i-го элемента где i = 0 .. n-1 каждой строки на n-ый), и запись результатов в массив, разумеется (хотя можно и сразу записывать в Memo, это уже по желанию)...
Ты бы привел хотя бы наброски своего кода, а то такое ощущение, что ты ждешь, когда все сделают за тебя и выложат здесь все на блюдечке...
Better Kind
15.01.2008 14:03
Цитата(volvo @ 15.01.2008 12:11)
Содержимое ячеек - целочисленное, значит можно использовать StrToInt...
Пардон, повелительное наклонение слова "надо" можно отбросить. Проще всего избежать исключиния можно используя StrToIntDef.
Pirate
16.01.2008 22:12
Вообщем я начал потихоньку разбираться, тип должен быть Реал т.к при StrToInt возникает ошибка Я со стринггридом не дружу честно говоря но и не жду пока сделают всё за меня как препдположил Volvo Набросков вот именно что нет, я не могу понять как всё это дело после деления присвоить массиву Volvo два вложенных цикла т.е For i:=0 to StringGrid.ColCount-1 do For i:=0 to StringGrid.RowCount-1 do Так ещё в чем проблема предпоследний столбец не используется,что делать?
Добавлено через 9 мин. У меня это только первый пункт решения моей задачи
Какой массив должен быть в результате :
A= 0,2 0,375 0,12 0,13 0,2 0,68 0,2 0,25 0,85 100 Потом мне необходимо отнять получ массив от массива 010 т.е от еденичной матрицы и найти определитель 001
Помогите сделать хотя бы деление столбцов на последний
Pirate
17.01.2008 20:14
Для заполнения
procedure TForm1.Button1Click(Sender: TObject); begin
procedure TForm1.Button2Click(Sender: TObject); var A:array [0..3] of real; B:array [0..3] of real; C:array [0..3] of real; i : integer;
begin try for i:=0 to StringGrid1.RowCount-1 do begin A[i] := strtofloat(StringGrid1.Cells[0,i]) / strtofloat(StringGrid1.Cells[StringGrid1.ColCount-1,i]); B[i]:=strtofloat(StringGrid1.Cells[1,i]) / strtofloat(StringGrid1.Cells[StringGrid1.ColCount-1,i]); C[i]:=strtofloat(StringGrid1.Cells[2,i]) / strtofloat(StringGrid1.Cells[StringGrid1.ColCount-1,i]);
здесь набросок вычитания единичной матрицы из полученой можно как цикл оформить это всё?
A[0]:=1-A[0]; A[1]:=0-a[1]; A[2]:=0-a[2];
B[0]:=0-b[0]; B[1]:=1-b[1]; B[2]:=0-b[2];
C[0]:=0-c[0]; C[1]:=0-c[1]; C[2]:=1-c[2];
Memo1.Lines[i]:=FloatTostr(c[i]); end; except on EConvertError do MessageBox(Form1.Handle,'Неправильный ввод данных!',nil,0); on EZeroDivide do MessageBox(Form1.Handle,'Деление на ноль нах!',nil,0); end;
А можно сделать чтбы после запятой было две цифры т.е вместо 0,1333333333333333 было 0,13 и ещё как в мемо сделать вывод построчно чтобы Первая строка была равна a[i] вторая b[i] 3 c[i]
Pirate
17.01.2008 22:14
var A:array [0..3,0..3] of real; i : integer;
begin try for i:=0 to StringGrid1.RowCount-1 do begin Вот сделал двумерный массив помогите транспанировать или сделать вывод в Мемо построчно A[i,0] := strtofloat(StringGrid1.Cells[0,i]) / strtofloat(StringGrid1.Cells[StringGrid1.ColCount-1,i]); A[i,1]:=strtofloat(StringGrid1.Cells[1,i]) / strtofloat(StringGrid1.Cells[StringGrid1.ColCount-1,i]); A[i,2]:=strtofloat(StringGrid1.Cells[2,i]) / strtofloat(StringGrid1.Cells[StringGrid1.ColCount-1,i]);
Memo1.Lines[i]:=FloatTostr(A[i,0]); end; except on EConvertError do MessageBox(Form1.Handle,'Неправильный ввод данных!',nil,0); on EZeroDivide do MessageBox(Form1.Handle,'Деление на ноль нах!',nil,0); end;
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.