|
Вопрос # 599/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Я к примеру хочу высчитать средние значение ( заготовка программы показана)
Но я хочу ввести массив d с помощью элемента StringGrid, как это сделать?
Приложение: Переключить в обычный режим- var
- Form3: TForm3;
- const
- n=5;
-
- var
- d: array[1..n] of integer;
- i:integer;
- k,g,h,a,c:real;
-
-
-
-
- implementation
-
- {$R *.dfm}
- uses math;
-
-
- procedure TForm3.Button1Click(Sender: TObject);
- begin
- Close;
- end;
-
-
-
- procedure TForm3.RadioGroup1Click(Sender: TObject);
- var i,n:integer;
- a:real;
-
-
- begin
- case RadioGroup1.ItemIndex of
- 0: begin
- a:=0;
- for i:=0 to n do a:=a+d[i];
- a:=a/n;
- end;
- 1: begin
- a:=0;
- for i:=0 to n do a:=a+sqr(d[i]);
- a:=sqrt(k/n);
- end;
- 2: begin
- a:=1;
- for i:=0 to n do a:=a*d[i];
- a:=power(g,1/n);
- end;
- 3: begin
- a:=0;
- for i:=0 to n do
- a:=a+1/d[i];
- a:=a/h;
- end;
- 4: begin
- a:=0;
- for i:=0 to n do
- a:=a+d[i]*d[i]*d[i];
- a:=power(c/n,1/3);
- end;
- end;
- LabelEd.EditLabel.Caption:=RadioGroup1.Items[RadioGroup1.ItemIndex];
- LabelEd.Text:=FloattoStr(a);
- end;
-
- procedure TForm3.StringGrid1Click(Sender: TObject);
-
- begin
-
-
-
-
-
- StringGrid1.Options:=[goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine,
- goRangeSelect, goAlwaysShowEditor, goEditing];
- end;
-
- end.
 |
Вопрос задал: Щеколдин Иван Валерьевич (статус: Посетитель)
Вопрос отправлен: 27 мая 2007, 21:33
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Щеколдин Иван Валерьевич!
Мне не понятен ваш обработчик StringgridClick, наверное тот код лучше перенести в FormCreate, но вводить с StrinGrid'a очень просто. У него есть свойство Cells[Col,Row:integer]:string;
тоесть перевожу на русский. в квадратных скобках нужно указать столбец и строку, а на выходе получим содержимое, правда в виде строки. Но функции StrtoInt(s:string):integer и StrToFloat(s:string):float спасут вас.
Также не стоит забывать, что нумерация ячеек идёт с нуля. Но я вижу вы в коде всё это применяете. Почему же вы не смогли написать код для ввода, подобный нижеприведённому.
for i:=1 to n do
d:=StrToInt(StringGrid1.cells[i,1]);
И ещё замечание. Массив обявлен как
d: array[1..n] of integer;
а используется
for i:=0 to n do a:=a+d;
а нулевого элемента то нет!
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 28 мая 2007, 13:59
Оценка за ответ: 4
Комментарий к оценке: я согласен, но почему то d:=StrToInt(StringGrid1.cells[i,1]); или d[i]:=StrToInt(StringGrid1.cells[i,1]);
приводят к ошибке и невозможно сосчитать любое из значений
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 28 мая 2007, 21:52; участников в обсуждении: 3.
|
Иусов Сергей Ник. (статус: 3-ий класс), 28 мая 2007, 06:15 [#1]:
Я так понимаю задача заполнить массив числами из StringGrid из ячеек [i,1] где 1
var
isError:boolean;
i:integer;
begin
isError:=false;
i:=0;
with StringGrid1 do
begin
while i<6 do
begin
try
inc(i);
d[i]:=StrToInt(Cells[1,i]);
except
isError:=true;
end;
end;
if isError then
ShowMessage('Ошибочный ввод!!!');
end;
end;
end;
PS:Могут быть ошибки синтаксиса, не проверял, писал прямо в браузере
|
|
Вадим К (статус: Академик), 28 мая 2007, 20:30 [#2]:
to Щеколдин Иван Валерьевич:
Если код приводит к ошибке, то всегда указывайте что за ошибка, код который её породил и конкретно какая строка (только не строка 34 в моём файле )
А то я гадать на кофейной гуще не могу.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Щеколдин Иван Валерьевич (статус: Посетитель), 28 мая 2007, 21:41 [#3]:
Единственная проблема, это если остается пустая ячейка ввода, тогда он выдает ошибку.
И большое спасибо что указали на i:=0
|
|
Вадим К (статус: Академик), 28 мая 2007, 21:52 [#4]:
ну с пустой ячейкой нужно либо юзать try except
либо функцию Strtointdef(s:string;def:integer):integer;
Для вещественных чисел есть подобная функция. Суть этой функции в следующем. Она пытается преобразовать число и если ей это не удаётся, то она возвращает то число,которое указано в качестве второго параметра. Достаточно предупредить пользователя, что пустые ячейки автоматически считаются нулём.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|