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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2011, 18:40   #1
ElfOfDark
 
Регистрация: 01.09.2011
Сообщений: 5
По умолчанию проблема со stringgrid

программа считает функцию с определённым шагом в мемо могу вывести результат а в stringgrid неполучается подскажите пожалуйста
Код:
repeat
               begin
                 if (x+a)>0 then   //если отрицательное то 'недопустимый аргумент функции'
                   begin
                     y[i]:=ln(x+A)/A; //получение значение функции
//memo1.lines.add:=('x='+floatToStr(x)+'   y='+FloatToStr(y[i]))//это вот работает
                     sg.Cells[i,j]:=('x='+floatToStr(x)+'   y='+FloatToStr(y[i]));//вывод полученного значения на экран
                     inc(i);//увеличение индекса массива на 1
                   end
                    else
                     sg.Cells[i,j]:=('недопустимый аргумент функции');
                      x:=x+1;//увеличение переменой х на шаг вычисления - 1.
               end;
             until x>n;
             N4.Enabled:=true;//открытие пункта меню "критерии" для доступа пользователя
          end;
ElfOfDark вне форума Ответить с цитированием
Старый 22.09.2011, 22:28   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А i,j чему равны? Вы мб не с того нумерацию для стринггрида начинаете? (с 1 вместо 0)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.09.2011, 22:39   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А i,j чему равны? Вы мб не с того нумерацию для стринггрида начинаете? (с 1 вместо 0)
+1

либо забыли/не знали, что в стрингриде в индексах сначала идёт столбец, потом строка..

а вообще, давать вырванный из контекста кусок кода - это малоинформативно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.09.2011, 23:48   #4
ElfOfDark
 
Регистрация: 01.09.2011
Сообщений: 5
По умолчанию

Код:
const
    n=5;

var
  Form1: TForm1;
  i:integer;
  x:real;
  y:array[-5..n] of real;
implementation


{$R *.dfm}



procedure TForm1.N3Click(Sender: TObject);
var
a:integer;
i, j: Integer;
begin

//расчет функции
    a:=StrToInt(memo1.text);  //получение введеного пользователем значения

begin
  with SG do
    for i:=1 to RowCount-1 do   //Заголовки строк не трогаем
    for j:=1 to ColCount-1 do   //Заголовки столбцов не трогаем
      Cells[j, i]:='';
end;// прочитал что это обнуляет таблицу чтото на подобие memo1.clear
    //очистка компонента listbox от результатов предыдущих вычислений
    x:=-5;//начальное значение расчета
    i:=-5; //стартовый индекс массива в котором хранятся расчитанные значения функции
    j:=n;
    case a of
    5:  begin //параметр а = 5
         repeat
               begin
                 if (x+a)>0 then   //если отрицательное то 'недопустимый аргумент функции'
                   begin
                     y[i]:=ln(x+A)/A; //получение значение функции
                     sg.Cells[i,j]:=('x='+floatToStr(x)+'   y='+FloatToStr(y[i]));//вывод полученного значения на экран
                     inc(i);//увеличение индекса массива на 1
                   end
                    else
                     sg.Cells[i,j]:=('недопустимый аргумент функции');
                      x:=x+1;//увеличение переменой х на шаг вычисления - 1.
               end;
             until x>n;
             N4.Enabled:=true;//открытие пункта меню "критерии" для доступа пользователя
          end;
    0:  begin //параметр а = 0
          repeat
          y[i]:=sin(x-a);//получение значение функции
          sg.Cells[i,j]:=('x='+floatToStr(x)+'   y='+FloatToStr(y[i]));//вывод полученного значения на экран
          inc(i);//увеличение индекса массива на 1
          x:=x+1; //увеличение переменой х на шаг вычисления - 1.
          until x>n;
         N4.Enabled:=true;//открытие пункта меню "критерии" для доступа пользователя
         end;
     2:  begin  //параметр а = 2
               repeat
                     y[i]:=a-4*x;//получение значение функции
                     sg.Cells[i,j]:=('x='+floatToStr(x)+'   y='+FloatToStr(y[i]));//вывод полученного значения на экран
                     inc(i);//увеличение индекса массива на 1

                      x:=x+1;//увеличение переменой х на шаг вычисления - 1.

             until x>n;
          N4.Enabled:=true;//открытие пункта меню "критерии" для доступа пользователя
          end;
     else
    begin
     application.MessageBox('Значение А должно быть 5, 0 или 2','Ошибка',MB_OK) //если параметр введенный пользователем отличается от -3, 10 или 6 то вывод сообщения об ошибке
    end

   end;
end;

end.
вот весь код
я с этим компонентом не работал, поэтому даже не представляю как вписать в ячейки данные

Последний раз редактировалось ElfOfDark; 22.09.2011 в 23:51.
ElfOfDark вне форума Ответить с цитированием
Старый 23.09.2011, 10:05   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
x:=-5;//начальное значение расчета
i:=-5; //стартовый индекс массива в котором хранятся расчитанные значения функции
А зачем с -5 нумерация массива?
В Стринггриде нумерация с 0. Если без учета 1 Fixed Rows/Cols, которые по умолчанию там стоят, то с 1.

Как-то так, копипаст какого-то моего кода. У Стринггрида тут ColCount 8 И RowCount 7.
Код:
   //номера строк и столбцов
   for i:=1 to 7 do strngrd1.Cells[i, 0]:=IntToStr(i);
   for i:=1 to 6 do strngrd1.Cells[0, i]:=IntToStr(i);

    //заполнение массива случайными числами
    for i:=1  to 7 do
       for j:=1 to 6 do
           strngrd1.cells[i,j]:=IntToStr(Random(50));
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 23.09.2011 в 10:32.
Alex11223 вне форума Ответить с цитированием
Старый 23.09.2011, 10:32   #6
ElfOfDark
 
Регистрация: 01.09.2011
Сообщений: 5
По умолчанию

а зачем рандомить случайным образом если у меня числа все считаются

Последний раз редактировалось ElfOfDark; 23.09.2011 в 10:38.
ElfOfDark вне форума Ответить с цитированием
Старый 23.09.2011, 10:33   #7
ElfOfDark
 
Регистрация: 01.09.2011
Сообщений: 5
По умолчанию

Код:
 if x=-5 then
                     sg.Cells[1,1]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,1]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                       if x=-4 then
                     sg.Cells[1,2]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,2]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                      if x=-3 then
                     sg.Cells[1,3]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,3]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                      if x=-2 then
                     sg.Cells[1,4]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,4]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                      if x=-1 then
                     sg.Cells[1,5]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,5]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                      if x=0 then
                     sg.Cells[1,6]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,6]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                      if x=1 then
                     sg.Cells[1,7]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,7]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                      if x=2 then
                     sg.Cells[1,8]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,8]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                      if x=3 then
                     sg.Cells[1,9]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,9]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                      if x=4 then
                     sg.Cells[1,10]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,10]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
                      if x=5 then
                     sg.Cells[1,11]:=('x='+floatToStr(x)+'');   //вывод полученного значения на экран
                     sg.Cells[2,11]:=('y='+FloatToStr(y[i]));    //вывод полученного значения на экран
вот так выводит всё чётко а в цикл как засунуть не соображу
чтобы код уменьшить
ElfOfDark вне форума Ответить с цитированием
Старый 23.09.2011, 10:42   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так выше же примеры и описание как там идет нумерация. В общем-то заполнение Стринггрида почти ничем не отличается от заполнения двухмерного массива. Если нумерация массива с -5, то видимо в цикле надо +6 или +5 к индексам стринггрида прибавлять.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.09.2011, 12:16   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
вот так выводит всё чётко
1) не верю.
подумайте, чем отличается Ваш код:
Цитата:
Код:
  if x = -5 then
    sg.Cells[1, 1] := ('x=' + floatToStr(x) + ''); //вывод полученного значения на экран
  sg.Cells[2, 1] := ('y=' + FloatToStr(y[i])); //вывод полученного значения на экран
  if x = -4 then
    sg.Cells[1, 2] := ('x=' + floatToStr(x) + ''); //вывод полученного значения на экран
  sg.Cells[2, 2] := ('y=' + FloatToStr(y[i])); //вывод полученного значения на экран
от кода, который, по всей видимости, вы хотели написать:
Код:
  if x = -5 then begin
    sg.Cells[1, 1] := ('x=' + floatToStr(x) + ''); //вывод полученного значения на экран
    sg.Cells[2, 1] := ('y=' + FloatToStr(y[i])); //вывод полученного значения на экран
  end;
  if x = -4 then begin
    sg.Cells[1, 2] := ('x=' + floatToStr(x) + ''); //вывод полученного значения на экран
    sg.Cells[2, 2] := ('y=' + FloatToStr(y[i])); //вывод полученного значения на экран
  end;

второе.
Alex11223 Вам же сказал - сдвигайте индекс массива согласно Вашей переменной (в вашем случае X)

ну очевидно же, что ВЕСЬ Ваш код и поста #7 (с учётом моего замечания из пункта 1) может быть заменён на такие строчки:
Код:
  if (x >= -5) and (x<=5) then begin
    sg.Cells[1, x+6] := ('x=' + floatToStr(x) + ''); //вывод полученного значения на экран
    sg.Cells[2, x+6] := ('y=' + FloatToStr(y[i])); //вывод полученного значения на экран
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2011, 08:45   #10
ElfOfDark
 
Регистрация: 01.09.2011
Сообщений: 5
По умолчанию

зачем мне условие если цикл нужен! там только один результат выводить будет!
сделал! только не так
Код:
procedure TForm1.N11Click(Sender: TObject);
var a:integer;
    g:integer;
    e:real;
begin
e:=2.71;
    x:=-5;
    i:=-5;
    StringGrid1.RowCount:=1;
    StringGrid1.Cells[0,0]:='¹';
    StringGrid1.Cells[1,0]:='x';
    StringGrid1.Cells[2,0]:='y(x)';
    a:=StrToInt(Memo1.Text);
    case a of
    5:  begin
         while x<=5 do
           begin
            if sin(x+a)<>0 then
               begin
                 y[i]:=cos(x+A)/sin(x+a);
                 inc(g);
                 StringGrid1.RowCount:=g+1;
                 StringGrid1.FixedRows:=1;
                 StringGrid1.Cells[0,g]:=IntToStr(g);
                 StringGrid1.Cells[1,g]:=FloatToStr(x);
                 StringGrid1.Cells[2,g]:=FloatToStr(y[i]);
                 inc(i);
                end
            else
              begin
                 inc(g);
                 StringGrid1.RowCount:=g+1;
                 StringGrid1.FixedRows:=1;
                 StringGrid1.Cells[0,g]:=IntToStr(g);
                 StringGrid1.Cells[1,g]:=FloatToStr(x);
                 StringGrid1.Cells[2,g]:='не существует;
              end;
            x:=x+1;
           end;
          N4.Enabled:=true;
          end;
    0:  begin
        repeat
           y[i]:=exp(x*ln(e))-x;
           inc(g);
           StringGrid1.RowCount:=g+1;
           StringGrid1.FixedRows:=1;
           StringGrid1.Cells[0,g]:=IntToStr(g);
           StringGrid1.Cells[1,g]:=FloatToStr(x);
           StringGrid1.Cells[2,g]:=FloatToStr(y[i]);
           inc(i);
           x:=x+1;
          until x>5;
         N4.Enabled:=true;
         end;
     2:  begin
         while x<=5 do
           begin
              y[i]:=sqrt(power(x,a));
              inc(g);
              StringGrid1.RowCount:=g+1;
              StringGrid1.FixedRows:=1;
              StringGrid1.Cells[0,g]:=IntToStr(g);
              StringGrid1.Cells[1,g]:=FloatToStr(x);
              StringGrid1.Cells[2,g]:=FloatToStr(y[i]);
              inc(i);
              x:=x+1;
           end;
          N4.Enabled:=true;
          end;
     else
    begin
     application.MessageBox('значение 5,0,2',MB_OK)
    end;
  end;
end;
ElfOfDark вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
stringgrid. проблема lblondy Компоненты Delphi 10 01.05.2011 12:46
StringGrid проблема Death_moroZ Общие вопросы Delphi 6 20.01.2011 19:43
Проблема с StringGrid HixoH Общие вопросы C/C++ 1 14.12.2010 19:13
Проблема в STRINGGRID !!! WeRsUs Помощь студентам 4 28.10.2010 21:35
проблема в StringGrid kta87 Общие вопросы Delphi 3 12.06.2010 14:42