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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2009, 20:26   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Смущение Сложение в StringGrid

Вопрос: как сложить в stringgrid-e два числа, которые находятся в одной ячейке и вывести результат сложения в другую ячейку?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.06.2009, 20:46   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Допустим что два числа пишутся, например, так: 10+10
Вот код обработчика onKeyPress у StringGrid'а.
Если нажат Enter, то пишем ответ в соседней справа ячейке:
Код:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
 s: string;
 a, b, c: integer;
begin
 if Key = #13 then
 begin
  s := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
  if Pos('+', s) <> 0 then
  begin
   a := StrToInt(Copy(s, 1, Pos('+', s) - 1));
   b := StrToInt(Copy(s, Pos('+', s) + 1, Length(s)));
   c := a + b;
   StringGrid1.Cells[StringGrid1.Col + 1, StringGrid1.Row] := IntToStr(c);
  end;
 end;
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 20.06.2009, 20:57   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Эээ..не так немного. Смотрите, есть четыре ячейки. В первую и вторую выводятся числа, в третьей их сумма, а в четвертую надо чтобы вывелась уже сумма чисел, которые стоят в третьей ячейке. Например, 10|16|26|8...Так понятнее?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.06.2009, 21:04   #4
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

КроссПост?

То есть сумма цифр в ячейке?
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var i, L, N: Integer; S: String;
Begin
S:=StringGrid1.Cells[1, 1];
L:=Length(S);
N:=0;
For i:=1 To L Do
      N:=N+StrToInt(S[i]);
Form1.Caption:=IntToStr(N);
End;
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 20.06.2009, 21:11   #5
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Вот, например, при нажатии кнопки Вычислить:
Код:
procedure TForm1.bt_1Click(Sender: TObject);
var
 a, b: integer;
 str: string;
 i: integer;
 sum: integer;
begin
 a := StrToInt(StringGrid1.Cells[0, StringGrid1.Row]);
 b := StrToInt(StringGrid1.Cells[1, StringGrid1.Row]);
 StringGrid1.Cells[2, StringGrid1.Row] := IntToStr(a + b);
 str := IntToStr(a + b);
 sum := 0;
 for i := 1 to Length(str) do sum := sum + StrToInt(str[i]);

 StringGrid1.Cells[3, StringGrid1.Row] := IntToStr(sum);
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 20.06.2009, 21:17   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
КроссПост?
Прошу прощения за кросс пост. Брайзер глюкнул. Я не специально...
Что то не получается у меня
Делал я так:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 s: string;
 a1,a2,a3,L,n,i: integer;
begin
 s:=IntToStr(StrToInt(SG4.Cells[2,0]));
 L:=Length(s);
 n:=0;
//здесь считается сумма двух ячеек и результат выводится в третью
//а в четвертой должна быть сумма ЧИСЕЛ в третьей
 a3:=StrToInt(SG3.Cells[0,0]) + StrToInt(SG3.Cells[1,0]) +
     StrToInt(SG3.Cells[2,0]) + StrToInt(SG3.Cells[3,0]);
 Form1.SG4.Cells[0,0]:=IntToStr(StrToInt(SG3.Cells[0,0]) + StrToInt(SG3.Cells[1,0]));
 Form1.SG4.Cells[1,0]:=IntToStr(StrToInt(SG3.Cells[2,0]) + StrToInt(SG3.Cells[3,0]));
 Form1.SG4.Cells[2,0]:=IntToStr(StrToInt(SG4.Cells[0,0]) + StrToInt(SG4.Cells[1,0]));

//проверка на количество цифр в ячейке
//число всегда будет не больше двух
//  if inttostr(length((sg4.Cells[2,0]))) > '2' then
     for i:=0 to L do
      n:=n+StrToInt(s[i]);
      SG4.Cells[3,0]:=IntToStr(n);
еnd;
Как правильно сделать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.06.2009, 21:41   #7
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
число всегда будет не больше двух
Сразу бы сказал...
...а это точно?

И кстати, там несколько StringGrid'ов чтоль?

Код:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
StringGrid1.Cells[2, 0]:=IntToStr(StrToInt(StringGrid1.Cells[0, 0])+StrToInt(StringGrid1.Cells[1, 0])); // в третью ячейку помещаем сумму содержимого первых двух ячеек
StringGrid1.Cells[3, 0]:=IntToStr(StrToInt(StringGrid1.Cells[2, 0][1])+StrToInt(StringGrid1.Cells[2, 0][2])); // в четвёртую ячейку помещаем сумму первых двух цифр содержимого третьей ячейки
End;
Если в 3-й ячейке всегда будет две цифры, то можно в два "действия" делать...
I am the First of Cyber Evolution...
I am the First to Program your Future...

Последний раз редактировалось DomiNick; 20.06.2009 в 21:43.
DomiNick вне форума Ответить с цитированием
Старый 21.06.2009, 05:59   #8
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Да, в ячейке всегда Будет не больше двух чисел. Может одно быть, может два, но больше-нет. А как можно в два действия сделать?:-)

Вот, почти работает как надо:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 a1: integer;
begin
 a1:=StrToInt(SG3.Cells[0,0]) + StrToInt(SG3.Cells[1,0]) +
     StrToInt(SG3.Cells[2,0]) + StrToInt(SG3.Cells[3,0]);
 Form1.SG4.Cells[0,0]:=IntToStr(StrToInt(SG3.Cells[0,0]) + StrToInt(SG3.Cells[1,0]));
 Form1.SG4.Cells[1,0]:=IntToStr(StrToInt(SG3.Cells[2,0]) + StrToInt(SG3.Cells[3,0]));
 Form1.SG4.Cells[2,0]:=IntToStr(StrToInt(SG4.Cells[0,0]) + StrToInt(SG4.Cells[1,0]));
 Form1.SG4.Cells[3,0]:=IntToStr(StrToInt(SG4.Cells[2,0][1]) + StrToInt(SG4.Cells[2,0][2]));
 Form1.SG4.Cells[4,0]:=IntToStr(StrToInt(SG4.Cells[3,0][1]) + StrToInt(SG4.Cells[3,0][2]));
 Form1.Label4.Caption:='Результат сложения = ' +
                        IntToStr(StrToInt(Form1.SG4.Cells[4,0]));
end;
Суть проблемы на скриншоте

Вот, мой проект) Надеюсь, что вы поймете. Если что спрашивайте. Помогите пожалуйста с условиями.
Изображения
Тип файла: jpg Безымянный.JPG (70.5 Кб, 127 просмотров)
Вложения
Тип файла: zip Программа.zip (8.9 Кб, 13 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось Stilet; 22.06.2009 в 10:38.
artemavd вне форума Ответить с цитированием
Старый 21.06.2009, 12:14   #9
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Числа 1988 и 1999 взять в качестве примера
А какие ещё числа там могут быть? Вообще любые или только четырёхзначные? (и я бы для ввода этого числа взял не TStringGrid, а обычный TEdit - оно же там одно)
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 21.06.2009, 12:20   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Числа могут быть любые. Но только четырехзначные. Через Edit? Я хотел через него сделать, но не знал также как сложить в Edit-e числа. А Вы можете сделать с Edit-ами?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложение в StringGrid artemavd Общие вопросы Delphi 1 20.06.2009 20:42
Сложение Droid Общие вопросы Delphi 14 07.05.2008 13:23
Двоичное сложение Юлкунчик Помощь студентам 5 29.02.2008 20:34
Сложение значений Torrenter Компоненты Delphi 2 11.01.2008 19:14
Поразрядное сложение AlexBee Общие вопросы C/C++ 1 26.10.2007 22:45