Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 2489
∙ повысить рейтинг »
star9491
Статус: Профессионал
Рейтинг: 2222
∙ повысить рейтинг »
Евгений/Genia007/
Статус: Профессионал
Рейтинг: 989
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Delphi и Lazarus

Номер выпуска:1539
Дата выхода:08.06.2010, 17:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:319 / 189
Вопросов / ответов:1 / 2

Вопрос № 178834: Добрый день, вообщем моя задача состоит в том, чтобы в StringGrid'e с 1 столбцом и N строк(1 Фиксированная) найти максимум из элементов (чисел) и занести его в лэйбл...Использовав написанную функцию макс. Не пойму где и в чём ошибка...


Вопрос № 178834:

Добрый день, вообщем моя задача состоит в том, чтобы в StringGrid'e с 1 столбцом и N строк(1 Фиксированная) найти максимум из элементов (чисел) и занести его в лэйбл...Использовав написанную функцию макс. Не пойму где и в чём ошибка...

Код:
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
Function Max(A:TStringGrid; Count:integer):extended;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

Function TForm1.Max(A:TStringGrid; Count:integer):extended;
var
M : extended;
j: integer;
begin
M:=StrToFloat(A.Cells[count,0]);
for j:=0 to A.RowCount-1 do
if StrToFloat(A.Cells[count,j])>M then
M:= StrToFloat(A.Cells[count,j]);
result:=M;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='FIX';
StringGrid1.Cells[0,1]:='-1';
StringGrid1.Cells[0,2]:='2';
StringGrid1.Cells[0,3]:='-3';
StringGrid1.Cells[0,4]:='4';
StringGrid1.Cells[0,5]:='-5';
StringGrid1.Cells[0,6]:='6';
StringGrid1.Cells[0,7]:='-7';
StringGrid1.Cells[0,8]:='8';
StringGrid1.Cells[0,9]:='-9';
StringGrid1.Cells[0,10]:='10';
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
For j:=0 to StringGrid1.ColCount do
label1.Caption:=FloatToStr(max(StringGrid1,j));
end;

end.

Отправлен: 03.06.2010, 17:16
Вопрос задал: Fred Johnson, Посетитель
Всего ответов: 2
Страница вопроса »


Отвечает Евгений/Genia007/, Профессионал :
Здравствуйте, Fred Johnson.
Вот исправил Ваши ошибки:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
begin
For j:= 1 to StringGrid1.ColCount do
label1.Caption:= FloatToStr(max(StringGrid1, j));
end;

Function TForm1.Max(A:TStringGrid; Count:integer):extended;
var
M: extended;
j: integer;
begin
M:=StrToFloat(A.Cells[0, Count]);
for j:= 1 to A.RowCount-1 do
if StrToFloat(A.Cells[0, j])>M then
M:= StrToFloat(A.Cells[0, j]);
result:=M;
end;

-----
Помогли тебе, помоги и ты.

Ответ отправил: Евгений/Genia007/, Профессионал
Ответ отправлен: 03.06.2010, 17:58
Номер ответа: 261852

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261852 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Victor Pyrlik, Модератор :
    Здравствуйте, Fred Johnson.
    вот пример вашей задачи.
    Код:

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Grids;

    type
    TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    function maxVal(rows:TStrings):double;
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
    for i:= 1 to StringGrid1.RowCount -1 do // просто в цикле случайно заполняем значениями стринггрид
    begin
    StringGrid1.Cells[0,i] := FloatToStr(random*10.0);
    end;
    end;

    function TForm1.maxVal(rows: TStrings): double;
    var i:integer;
    x:double;
    begin
    result := 0;
    if rows.Count < 2 then exit // если данных нет - уходим и возвращаем 0
    else result := StrToFloatdef(rows[1],0); // получам значение 1 строки
    for i:= 2 to rows.Count-1 do // начиная со второй строки пока не закончится строки
    begin
    x := StrToFloatDef(rows[i],0); // получаем значение очередной строки
    if x > result then // если оно больше максимального значение
    result := x; // то берем мак. это значение
    end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Label1.Caption := Format('максимальное значение = %.4f',[maxVal(StringGrid1.Cols[0])]);
    end;

    end.



    старай тесь не использовать для своих целей возможные общепринятые обозначения, как например max - такая функция уже есть, страшного ничего, но тон дурной да и ошибки кроются потенциальные в этом случае.

    -----
    Жизнь игрушка – пока играешь сам..

    Ответ отправил: Victor Pyrlik, Модератор
    Ответ отправлен: 03.06.2010, 20:11
    Номер ответа: 261856
    Россия, Екатеринбург
    Тел.: 89043822027
    ICQ # 490191733
    Абонент Skype: stells00

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261856 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.16 от 26.05.2010

    В избранное