Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2013, 18:29   #1
Dikey804
 
Регистрация: 03.03.2013
Сообщений: 5
По умолчанию Суммирование столбцов StringGird

Ребят нужна помощь. Программа называется кредитный калькулятор все расчеты выводит в StringGird(6 столбцов и i-тое количество строк.)
Нужно что бы в самом конце таблицы SG закреплялась строка "ИТОГО" и выводилась сумма столбца
(код скину весь сразу)
Код:
Var
  FCalc: TFCalc;
  procedure Annuite(summa, stavka, mesplatej: real; month: integer);
   procedure Dif(summa, stavka, mesplatej: real; month: integer);
implementation
uses Unit1;
{$R *.dfm}
//Расчет аннуитетного платежа и вывод в SG
procedure Annuite(summa, stavka, mesplatej: real; month: integer);
var
 i: integer;
 ostn, ostk, vplpr, pgdolg: real;
begin
  FCalc.SG.RowCount := month + 1; 
  for i := 1 to month do begin
    if i = 1 then ostn := summa else ostn := ostk; 
    vplpr := ostn * stavka / 12;
    pgdolg := mesplatej - vplpr;
    ostk := ostn - pgdolg;
    FCalc.SG.Cells[0,i]:= inttostr(i);
    FCalc.SG.Cells[1,i]:= floattostrf(vplpr,ffFixed,6,2);
    FCalc.SG.Cells[2,i]:= floattostrf(pgdolg,ffFixed,6,2);
    FCalc.SG.Cells[3,i]:= floattostrf(mesplatej,ffFixed,6,2);
    FCalc.SG.Cells[4,i]:= floattostrf(ostn,ffFixed,8,2);
    FCalc.SG.Cells[5,i]:= floattostrf(ostk,ffFixed,8,2);
  end;
end;

procedure TFCalc.BRaschClick(Sender: TObject);
   function PMT(IR, NP, PV: real): real;
   begin
   result := (PV * IR) / (1 - power(1 + IR, -NP));
  end;
 var
  sum, stavka: extended;
  month: integer;
  Ejrasch: extended;
 begin
if (EMonth.Text='') or (EStavka.Text='') or  (Esum.Text='') then ShowMessage ('Íåîáõîäèìî çàïîëíèòü âñå ïîëÿ')
else
begin  SG.visible:=True ;
  sum := StrToFloat(ESum.Text);
  stavka := StrToFloat(EStavka.Text) * 0.01;
  month := StrToInt(Emonth.Text);
    if RBAn.Checked=true then begin  
    Ejrasch := Pmt(stavka / 12, month, sum);
    Annuite(sum, stavka, Ejrasch, month);
  end
  else begin    
  Ejrasch := Pmt(stavka / 12, month, sum);
    Dif(sum, stavka, Ejrasch, month);
  end;
  end;
end;
Dikey804 вне форума Ответить с цитированием
Старый 03.03.2013, 19:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Чет не понял в чем проблема...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.03.2013, 06:46   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Ну добавить вывод строки "итого" в нужную ячейку и добавить в процедуру аннуит цикл считающий по столбцам.
Цикл примерно так:
Код:
//создать и обнулить массив total[1..5] of double;
for i := 1 to month do
for j := 1 to 5 do
total[j] := total[j] + strtofloat(sg.cells[j,i], параметры );
//вывести массив total в нужные строки
Без всего проекта сложно сказать как именно - у Вас там наверное привязка по нумерации строк или ещё какая штука, что может препятствовать решению в общем виде.

Последний раз редактировалось phomm; 04.03.2013 в 06:48.
phomm вне форума Ответить с цитированием
Старый 04.03.2013, 08:45   #4
Dikey804
 
Регистрация: 03.03.2013
Сообщений: 5
По умолчанию

Я правильно переменную присвоил?
total: array[1..5] of double ;
и почему то выводит ошибку на SG
Код:
total[j]:= total[j] + strtofloat(sg.cells[j,i], параметры );
Цитата:
Сообщение от phomm Посмотреть сообщение
Код:
//создать и обнулить массив total[1..5] of double;
for i := 1 to month do
for j := 1 to 5 do
total[j] := total[j] + strtofloat(sg.cells[j,i], параметры );
//вывести массив total в нужные строки
Мне этот код нужно подставить в процедуру или под TFCalc.BRaschClick?

Последний раз редактировалось Stilet; 04.03.2013 в 09:18.
Dikey804 вне форума Ответить с цитированием
Старый 04.03.2013, 09:27   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Цитата:
Сообщение от phomm
добавить в процедуру аннуит цикл считающий по столбцам
Можно и туда добавить и туда, но лучше в процедуру аннуит - там она более к месту, а SG дополнить надо именем формы - как и другие Ваши обращения к гриду в этой процедуре.
Переменная объявлена правильно.

Последний раз редактировалось phomm; 04.03.2013 в 09:38.
phomm вне форума Ответить с цитированием
Старый 04.03.2013, 09:38   #6
Dikey804
 
Регистрация: 03.03.2013
Сообщений: 5
По умолчанию

спасибо сейчас попробую
Dikey804 вне форума Ответить с цитированием
Старый 04.03.2013, 09:56   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от phomm
Можно и туда добавить и туда, но лучше в процедуру аннуит - там она более к месту, а SG дополнить надо именем формы - как и другие Ваши обращения к гриду в этой процедуре.
Можно и так, но, обычно, если в процедуре/функции нужно обрабатывать контролы формы, то, желательно или передавать их в эту процедуру/функцию в качестве параметров, либо (это наиболее простой и ожидаемый способ) сделать данную процедуру/функцию методом формы (надо написать её там же, где описаны другие методы формы TFCalc, например, сразу после BRaschClick:

примерно вот так (я выделил изменения):
Код:
type
  TFCalc = class(TForm)
    .....
    BRasch: TButton;
    SG: TStringGrid;
    procedure BRaschClick(Sender: TObject);
    procedure Annuite(summa, stavka, mesplatej: real; month: integer);

......
  private
......


implementation
uses Unit1;
{$R *.dfm}
//Расчет аннуитетного платежа и вывод в SG
procedure TFCalc.Annuite(summa, stavka, mesplatej: real; month: integer);
var .....
Какой способ выбрать - зависит от разных деталей (и, в первую очередь, предназначения данной процедуры/функции, где и для чего её планируется использовать).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.03.2013, 09:59   #8
Dikey804
 
Регистрация: 03.03.2013
Сообщений: 5
По умолчанию

Прописал вот так
Код:
procedure Annuite(summa, stavka, mesplatej: real; month: integer);
var
 i,j: integer;
 ostn, ostk, vplpr, pgdolg: real;
 total: array[0..5] of double ;
begin
  FCalc.SG.RowCount := month + 1;     for i := 1 to month do
  for j := 1 to 5 do
  total[j]:= total[j] + strtofloat(FCalc.SG.Cells[j,i]);
   begin
    if i = 1 then ostn := summa else ostn := ostk; 
    vplpr := ostn * stavka / 12;
    pgdolg := mesplatej - vplpr;
    ostk := ostn - pgdolg;


    FCalc.SG.Cells[0,i]:= inttostr(i); // <--- (2) - âûâîäèòü òåêóùèé ìåñÿö, à íå ñêîëüêî âñåãî ìåñÿöåâ
    FCalc.SG.Cells[1,i]:= floattostrf(vplpr,ffFixed,6,2);
    FCalc.SG.Cells[2,i]:= floattostrf(pgdolg,ffFixed,6,2);
    FCalc.SG.Cells[3,i]:= floattostrf(mesplatej,ffFixed,6,2);
    FCalc.SG.Cells[4,i]:= floattostrf(ostn,ffFixed,8,2);
    FCalc.SG.Cells[5,i]:= floattostrf(ostk,ffFixed,8,2);
  end;
при нажатии на кнопку расчет он ошибку кидает is not a valid floating point value
Кстати
Код:
total[j]:= total[j] + strtofloat(FCalc.SG.Cells[j,i]);
пытался и после begin прописывать

Последний раз редактировалось Dikey804; 04.03.2013 в 10:03.
Dikey804 вне форума Ответить с цитированием
Старый 04.03.2013, 10:11   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

запакуйте исходники программы (проект) в архив, архив выложите на любой файлообменник, сюда ссылочку на скачивание). Не хочется тратить время и пересобирать по кусочкам ваш проект с нуля.

Цитата:
при нажатии на кнопку расчет он ошибку кидает is not a valid floating point value
в какой-то из ячеек у Вас НЕ число (скорее всего, натыкаетесь на пустую ячейку).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.03.2013, 10:27   #10
Dikey804
 
Регистрация: 03.03.2013
Сообщений: 5
По умолчанию

Полностью сама программа
Dikey804 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
надо сложить две матрицы и вывести в третий StringGird mozg2011 Общие вопросы Delphi 9 16.02.2012 18:34
вывод номеров столбцов матрицы и подсчитать количество этих столбцов Vitalina69 Помощь студентам 2 15.02.2011 21:52
динамическое суммирование столбцов Goga777 Microsoft Office Excel 3 13.07.2009 19:05
суммирование столбцов в запросе с union kate158 БД в Delphi 9 21.05.2009 14:49