| 
| 
 | Вопрос # 599/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Я к примеру хочу высчитать средние значение ( заготовка программы показана)
 Но я хочу ввести массив d с помощью элемента StringGrid, как это сделать?
 Приложение:Переключить в обычный режим varForm3: TForm3;constn=5; vard: array[1..n]  of integer;i:integer;k,g,h,a,c:real;    implementation {$R *.dfm}uses math;  procedure TForm3.Button1Click(Sender: TObject);beginClose;end;   procedure TForm3.RadioGroup1Click(Sender: TObject);var i,n:integer;a:real;  begincase 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;
 Для вещественных чисел есть подобная функция. Суть этой функции в следующем. Она пытается преобразовать число и если ей это не удаётся, то она возвращает то число,которое указано в качестве второго параметра. Достаточно предупредить пользователя, что пустые ячейки автоматически считаются нулём.
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |