Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 599

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Я к примеру хочу высчитать средние значение ( заготовка программы показана)
Но я хочу ввести массив d с помощью элемента StringGrid, как это сделать?

Приложение:
  1. var
  2. Form3: TForm3;
  3. const
  4. n=5;
  5.  
  6. var
  7. d: array[1..n] of integer;
  8. i:integer;
  9. k,g,h,a,c:real;
  10.  
  11.  
  12.  
  13.  
  14. implementation
  15.  
  16. {$R *.dfm}
  17. uses math;
  18.  
  19.  
  20. procedure TForm3.Button1Click(Sender: TObject);
  21. begin
  22. Close;
  23. end;
  24.  
  25.  
  26.  
  27. procedure TForm3.RadioGroup1Click(Sender: TObject);
  28. var i,n:integer;
  29. a:real;
  30.  
  31.  
  32. begin
  33. case RadioGroup1.ItemIndex of
  34. 0: begin
  35. a:=0;
  36. for i:=0 to n do a:=a+d[i];
  37. a:=a/n;
  38. end;
  39. 1: begin
  40. a:=0;
  41. for i:=0 to n do a:=a+sqr(d[i]);
  42. a:=sqrt(k/n);
  43. end;
  44. 2: begin
  45. a:=1;
  46. for i:=0 to n do a:=a*d[i];
  47. a:=power(g,1/n);
  48. end;
  49. 3: begin
  50. a:=0;
  51. for i:=0 to n do
  52. a:=a+1/d[i];
  53. a:=a/h;
  54. end;
  55. 4: begin
  56. a:=0;
  57. for i:=0 to n do
  58. a:=a+d[i]*d[i]*d[i];
  59. a:=power(c/n,1/3);
  60. end;
  61. end;
  62. LabelEd.EditLabel.Caption:=RadioGroup1.Items[RadioGroup1.ItemIndex];
  63. LabelEd.Text:=FloattoStr(a);
  64. end;
  65.  
  66. procedure TForm3.StringGrid1Click(Sender: TObject);
  67.  
  68. begin
  69.  
  70.  
  71.  
  72.  
  73.  
  74. StringGrid1.Options:=[goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine,
  75. goRangeSelect, goAlwaysShowEditor, goEditing];
  76. end;
  77.  
  78. 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;
Для вещественных чисел есть подобная функция. Суть этой функции в следующем. Она пытается преобразовать число и если ей это не удаётся, то она возвращает то число,которое указано в качестве второго параметра. Достаточно предупредить пользователя, что пустые ячейки автоматически считаются нулём.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:02
Выполнено за 0.02 сек.