Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.05.2012, 16:45
Impressive Impressive вне форума
Прохожий
 
Регистрация: 16.05.2012
Сообщения: 10
Репутация: 10
По умолчанию Помогите пожалуйста с StringGrid

Мне нужно в вывести две строчки в таблице. Количество столбцов 15.
первая строка - напряжение U, которое изменяется с каким нибудь шагом
вторая строка - скорость v, которая является функцией от напряжения

Нужно чтобы в серых ячейках U и v было всегда, а остальные ячейки считались по формуле v(u) ... - любая функция
Ответить с цитированием
  #2  
Старый 16.05.2012, 21:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну так и делай как написал. Будут проблемы, тогда и задашь вопрос, что не получилось.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 16.05.2012, 23:53
Impressive Impressive вне форума
Прохожий
 
Регистрация: 16.05.2012
Сообщения: 10
Репутация: 10
По умолчанию Вот,посмотрите пожалуйста..Написал процедуру,но не работает и ошибки есть..Подскажите

Код:
// ЗАПОЛНЕНИЕ ТАБЛИЦЫ 
procedure TForm3.Button3Click(Sender: TObject);
 var i, j: Integer;
     U,v :real;
begin
// расчет значений для графика
  j:=1;
  U:=0;
   StringGRid1.Cells[0,0]:='Напряжение U,МВ';
  U:=-c*sqrt(1-sqr(m0*c*c/(5*q*U+m0*c*c)));
   StringGRid1.Cells[1,0]:='Скорость v,м/c';
  Repeat
       U:=U+100000;
       v:=-c*sqrt(1-sqr(m0*c*c/(5*q*U+m0*c*c)));
       j:=j+1;
          //Записываем напряжение в ячейку:
          StringGRid1.Cells[0,j]:=IntToStr(U);
          //Записывем скорость в ячейку ниже,под соответ.напряжением:
          StringGRid1.Cells[1,j]:= IntToStr(v);
  Until j>StringGRid1.ColCount-1;

end;
Bargest: Не забываем выделять код тегами [ code ] [ /code ]! Кнопка "VAR" в редакторе сообщения.

Последний раз редактировалось Bargest, 16.05.2012 в 23:56.
Ответить с цитированием
  #4  
Старый 16.05.2012, 23:57
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Здесь помочь пока нечем, много неизвестных переменных, которые вы не удосужились указать - какие они и как инициализированы.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 17.05.2012, 00:23
Impressive Impressive вне форума
Прохожий
 
Регистрация: 16.05.2012
Сообщения: 10
Репутация: 10
По умолчанию

Там неуказанные переменные только масса и заряд:
m0 и q - они переносятся из другой формы, их программа видит,проблем нет.
с - скорость света..
___________
С другой стороны можно любую функцию рассмотреть!!!Правильно ведь?
Подскажите на примере хотя бы с y := x*x чтобы понять в чем ошибки,почему не выводят, а дальше я сделаю для своей функции...
Спасибо заранее за любую помощь... Уже не знаю как быть, ничего не получается
Ответить с цитированием
  #6  
Старый 17.05.2012, 00:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Укажи типы остальных переменных и их значения.

Для начала исправьте:
Код:
    StringGrid1.Cells[0, J] := FloatToStr(U);
    // Записывем скорость в ячейку ниже,под соответ.напряжением:
    StringGrid1.Cells[1, J] := FloatToStr(v);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 17.05.2012 в 00:58.
Ответить с цитированием
  #7  
Старый 17.05.2012, 01:47
Impressive Impressive вне форума
Прохожий
 
Регистрация: 16.05.2012
Сообщения: 10
Репутация: 10
По умолчанию

J:=15;

q = 1,6e-19 переносится из другой формы
m0 = 9.1e-27 переносится из другой формы

с=3е8

v, U - переменные для графика
v - функция от U....
Вроде всё указал..
Ответить с цитированием
  #8  
Старый 17.05.2012, 02:13
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Примерно так:
Код:
var
  q  : Single = 1.6e-19;
  m0 : Single = 9.1e-27;
  c  : Single = 3e8;

procedure TForm2.Button2Click(Sender: TObject);
var
  I, J : Integer;
  U, v : Single;
begin
  // расчет значений для графика
  J := 1;
  U := 0;
  StringGrid1.Cells[0, 0] := 'Напряжение U, МВ';
  U := -c * sqrt(1 - sqr(m0 * c * c / (5 * q * U + m0 * c * c)));
  StringGrid1.Cells[1, 0] := 'Скорость v, м/c';
  repeat
    U := U + 100000;
    v := -c * sqrt(1 - sqr(m0 * c * c / (5 * q * U + m0 * c * c)));
    inc(J);
    // Записываем напряжение в ячейку:
    StringGrid1.Cells[0, J] := FloatToStr(U);
    // Записывем скорость в ячейку ниже,под соответ.напряжением:
    StringGrid1.Cells[1, J] := FloatToStr(v);
  until J > StringGRid1.ColCount - 1;
end;
только алгоритм у вас составлен не для колонок, а для строк.
а вот так, как вы хотели:
Код:
var
  q  : Single = 1.6e-19;
  m0 : Single = 9.1e-27;
  c  : Single = 3e8;

procedure TForm2.Button2Click(Sender: TObject);
var
  I, J : Integer;
  U, v : Single;
begin
  // расчет значений для графика
  J := 1;
  U := 0;
  StringGrid1.Cells[0, 1] := 'Напряжение U, МВ';
  U := -c * sqrt(1 - sqr(m0 * c * c / (5 * q * U + m0 * c * c)));
  StringGrid1.Cells[0, 2] := 'Скорость v, м/c';
  repeat
    U := U + 100000;
    v := -c * sqrt(1 - sqr(m0 * c * c / (5 * q * U + m0 * c * c)));
    // Записываем напряжение в ячейку:
    StringGrid1.Cells[J, 1] := FloatToStr(U);
    // Записывем скорость в ячейку ниже,под соответ.напряжением:
    StringGrid1.Cells[J, 2] := FloatToStr(v);
    inc(J);
  until J > 16;//StringGRid1.ColCount - 1;
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 17.05.2012 в 02:18.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Impressive (19.05.2012)
  #9  
Старый 17.05.2012, 02:45
Impressive Impressive вне форума
Прохожий
 
Регистрация: 16.05.2012
Сообщения: 10
Репутация: 10
По умолчанию

Сейчас попробую всё исправить, как Вы подсказали...Спасибо огромное за помощь!
Ответить с цитированием
  #10  
Старый 19.05.2012, 17:00
Impressive Impressive вне форума
Прохожий
 
Регистрация: 16.05.2012
Сообщения: 10
Репутация: 10
По умолчанию

Сейчас таблица хорошо работает,спасибо вам большое за подсказка..
Можно еще такой вопрос.. У меня названия серых ячеек выводится после нажатие кнопки:

StringGrid1.Cells[0, 0] := 'Напряжение U, МВ';
StringGrid1.Cells[1, 0] := 'Скорость v, м/c';

А как мне сделать чтобы, они(именно названия "напряжение" и "скорость" появлялись сразу,когда открываешь формы, скомпилировав программу??.. А не по нажатию кнопки.
Ответить с цитированием
  #11  
Старый 19.05.2012, 21:22
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Прописать эти ячейки в событии OnCreate формы.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #12  
Старый 19.05.2012, 21:32
Impressive Impressive вне форума
Прохожий
 
Регистрация: 16.05.2012
Сообщения: 10
Репутация: 10
По умолчанию

Не могу найти в событиях таблицы OnCreate ... только свойство OnClick...

А если прописываю в коде создание формы, то почему-то не получается..Сможете подсказать где ошибка в коде:
Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart, Grids;

type
    TForm3 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    StringGrid1: TStringGrid;
    Button3: TButton;
    Button4: TButton;
    Panel2: TPanel;
    Panel3: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Panel4: TPanel;
    StringGrid2: TStringGrid;
    Button5: TButton;

    procedure OnCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
   // procedure Button5Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
   c  : Single = 3e8;
   massa,zariad: real;
   q:byte;

implementation

uses Unit2,Unit1;

{$R *.dfm}
Procedure TForm3.OnCreate(Sender: TObject);
 begin
  StringGrid1.Cells[0,0] := 'Напряжение U, МВ';
  StringGrid1.Cells[0,1] := 'Скорость v, м/c';
end;

Последний раз редактировалось Impressive, 19.05.2012 в 23:25.
Ответить с цитированием
  #13  
Старый 19.05.2012, 21:37
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Сколько ячеек у StringGrid изначально? Скорее всего некуда писать.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #14  
Старый 19.05.2012, 22:09
Impressive Impressive вне форума
Прохожий
 
Регистрация: 16.05.2012
Сообщения: 10
Репутация: 10
По умолчанию Теперь 150 ячеек... Это координаты точек (u,v) для графика.

Вроде место есть куда писать, но не получается...
ПОЛНЫЙ КОД:

Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart, Grids;

type
    TForm3 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    StringGrid1: TStringGrid;
    Button3: TButton;
    Button4: TButton;
    Panel2: TPanel;
    Panel3: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Panel4: TPanel;
    StringGrid2: TStringGrid;
    Button5: TButton;

   procedure OnCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);



  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
   c  : Single = 3e8;
   massa,zariad: real;
   q:byte;

implementation

uses Unit2,Unit1;

{$R *.dfm}

Procedure TForm3.OnCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0] := 'Напряжение U, МВ';
StringGrid1.Cells[0,1] := 'Скорость v, м/c';
end;

// КНОПКА НАЗАД
procedure TForm3.Button1Click(Sender: TObject);
begin
Form3.Hide;
Form2.Show;
end;
// КНОПКА ВЫХОД
procedure TForm3.Button2Click(Sender: TObject);
begin
Form3.Hide;
end;


// ЗАПОЛНЕНИЕ ТАБЛИЦЫ 
procedure TForm3.Button3Click(Sender: TObject);
var
  I, J : Integer;
  U, v : Single;
  dU : Single;
begin
  Q:=form1.combobox1.itemindex;
  massa:= P[q].m0;   // определяем массу из первой формы по выбору Combobox1
  zariad:= P[q].q0;  // определяем заряд из первой формы по выбору Combobox1
  // расчет значений для графика
  J:= 1;
  StringGrid1.Cells[0,0]:='Напряжение U, МВ';
  StringGrid1.Cells[0,1]:='Скорость v,10^8 м/c';
  U:= 0;
  StringGrid1.Cells[J,0]:=FloatToStr(U);
  v:=c*sqrt(1 - sqr(massa*c*c/(5*zariad*U*1e6 + massa*c*c)))/1e8; //*1e6 т.к. МВ
  StringGrid1.Cells[J,1]:= FloatToStr(v);
  dU:= StrToFloat(Edit1.Text);
  repeat
    U:=U+dU;
    v:=c*sqrt(1 - sqr(massa*c*c/(5*zariad*U*1e6 + massa*c*c)))/1e8;
    // Записываем напряжение в ячейку:
    StringGrid1.Cells[J+1,0]:= FloatToStr(U);
    // Записывем скорость в ячейку ниже,под соответ.напряжением:
    StringGrid1.Cells[J+1,1]:= FloatToStr(v);
    inc(J);
  until J > 151;//StringGRid1.ColCount - 1;
end;

//ОЧИСТКА ТАБЛИЦЫ
procedure TForm3.Button4Click(Sender: TObject);
var i, j :integer;
begin
with StringGRid1 do
    for i:=0 to RowCount do   //Заголовки строк не трогаем
    for j:=0 to ColCount do   //Заголовки столбцов не трогаем
      Cells[j, i]:=' ';
end;

end.

Последний раз редактировалось Impressive, 19.05.2012 в 23:23.
Ответить с цитированием
  #15  
Старый 19.05.2012, 22:18
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
Злость

Думаю, кнопку для вставки тегов [code] - [ /CODE] нужно сделать ОГРОМНОЙ, а то сложно заметить. Сори, что немного не в тему
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025