IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Проблема StringGrid
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Лёха

Репутация: -  0  +


Помогите пожалуйста

Есть стринг грид с такими значениями:

- 600 600 1400 600 3000
- 1500 800 700 1000 4000
- 900 4800 700 600 7000

Вопрос: как поделить первые три столбца на последний т.е 600 на 3000 1500 на 4000 900 на 7000 также нужно поделить и остальные два,и как потом работать с полученными числами


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


циклами поэлементно...
не совсем понятно, в чем проблема.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Мне кажется тут речь о том, что 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.

Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Лёха

Репутация: -  0  +


Цитата(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 возникает ошибка.Как потом данные из каждого из столбоц занести в массив?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Покажи как ты делаешь и станет понятнее откуда ошибка. Допустим мы хотим занести данные из 1го по счёту столбца в массив : for i := 1 to N do massiv[i] := StrToInt (Form1.StringGrid1.Cells[0,i - 1]); То есть проходим по строкам, а столбик константный, если же ты хочешь занести в массив одновременно несколько столбиков со значениями, необходим ещё внешний цикл по столбикам.

Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 52
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Цитата(Tan @ 13.01.2008 0:41) *
Теперь, используя функцию IntToStr , ты можешь из строки получить число типа integer


Вещественный тип надо использовать. Ну и разумеется внимательней смотрим, что пишем. Перевод строки в число делает StrToFloat, а не наоборот.



--------------------
With best regards, Better Kind
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Я просто показал пример как загнать данные в массив. Я же не использовал деление.


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Лёха

Репутация: -  0  +



Вообщем я понял что нужно - поделить 3 столбца на последний, а результаты загнать в массив и вывести в мемо - как?

Ошибок не возникает, но как сделать деление циклами поочередно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Приведи пожалуйста пример исходных данных и данных на выходе, непонятно как заполнять массив. Допустим поделили все элементы первого столбика на последний, записали в массив. Потом поделил второй на последний, после этого продолжаем писать в тот же массив или создаём и заполняем новый?


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата(Better Kind)
Вещественный тип надо использовать.
С чего бы это? Потому, что тебе так хочется? Неправильно хочется, значит... Содержимое ячеек - целочисленное, значит можно использовать StrToInt...

Pirate, все очень просто: 2 вложенных цикла - внешний по строкам, внутренний - по столбцам грида (деление i-го элемента где i = 0 .. n-1 каждой строки на n-ый), и запись результатов в массив, разумеется (хотя можно и сразу записывать в Memo, это уже по желанию)...

Ты бы привел хотя бы наброски своего кода, а то такое ощущение, что ты ждешь, когда все сделают за тебя и выложат здесь все на блюдечке...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 52
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Цитата(volvo @ 15.01.2008 12:11) *
Содержимое ячеек - целочисленное, значит можно использовать StrToInt...
Пардон, повелительное наклонение слова "надо" можно отбросить.
Проще всего избежать исключиния можно используя StrToIntDef.


--------------------
With best regards, Better Kind
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Лёха

Репутация: -  0  +



Вообщем я начал потихоньку разбираться, тип должен быть Реал т.к при 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

Помогите сделать хотя бы деление столбцов на последний
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Лёха

Репутация: -  0  +


Для заполнения

procedure TForm1.Button1Click(Sender: TObject);
begin

StringGrid1.Cells[0,0]:='600';
StringGrid1.Cells[0,1]:='1500';
stringgrid1.Cells[0,2]:='900';
StringGrid1.Cells[1,0]:='400';
StringGrid1.Cells[1,1]:='800';
stringgrid1.Cells[1,2]:='4800';
StringGrid1.Cells[2,0]:='1400';
StringGrid1.Cells[2,1]:='700';
stringgrid1.Cells[2,2]:='700';
StringGrid1.Cells[3,0]:='600';
StringGrid1.Cells[3,1]:='1000';
stringgrid1.Cells[3,2]:='600';
StringGrid1.Cells[4,0]:='3000';
StringGrid1.Cells[4,1]:='4000';
stringgrid1.Cells[4,2]:='7000';
end;

Вот как я сделал:

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]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Лёха

Репутация: -  0  +


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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 31.10.2020 15:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name