Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Сортировка и процедуры, Помогите дописать прогу 
V
    Опции темы
kasir
Дата 26.5.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



вот прога

Код
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);

    //procedure StringGrid1DblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);



var
  t: TextFile;
  s: string;
  i,j: integer;

  begin
  StringGrid1.RowCount:=11;
  AssignFile(t,'1.txt'); Reset(t);
  while not eof(t) do
  begin
    for i:=1 to 11 do begin


        for j:=0   to 2    do
        begin
        ReadLn(t,s);
      StringGrid1.Cells[j,i]:=s;
           end;

    end;

  end;

end;


procedure TForm1.Button2Click(Sender: TObject);
var
aa,ab,bb,h,o,ac,bc,cc,x,y,p,u: real;  // вот отсюда
i,j: integer;
begin
  u:=0    ;
  aa:=0  ;
  o:=0  ;
  ab:=0;
  for i:=1 to 10 do
  begin
  u:=strtofloat(StringGrid1.Cells[1,i]) ;
  o:=strtofloat(StringGrid1.Cells[2,i]);

  aa:=aa+u*u ;
  ab:=ab+u;
  ac:=ac-u*o;

  bb:=1 ;
  bc:=bc-o;



  end;
      /// aa*x+ab*y+ac=0     ab*x+bb*y+bc=0
    x:=((bc*ab)-(ac*bb))/((aa*bb)-(ab*ab)) ;
    y:=(-aa*x-ac)/ab ;            //до сюда нужно засунуть в отдельную процедуру а тут чтоб вычислялось только ее вызовом

  

       label1.Caption:='y=' +floattostr(y)+'    x=' +floattostr(x) ;
       label2.Caption:='aa=' +floattostr(aa)+'     ab=' +floattostr(ab)+'     ac=' +floattostr(ac) +'     bb=' +floattostr(bb)+'     bc=' +floattostr(bc)+'     cc=' +floattostr(cc);

   for i:=1 to 10 do begin           // вычисление расч. сопрот.   А ЭТО ЧТОБ ВЫЧИСЛЯЛОСЬ КАК ОТДЕЛЬНАЯ ФУНКЦИЯ и тут только ее вызов

        o:=strtofloat(StringGrid1.Cells[1,i]);
        u:=x*o+y;
       StringGrid1.Cells[3,i]:=floattostr(u) ;
                       end;

      for i:=1 to 10 do begin
   //вычисление относитьельной погрешности
        o:=strtofloat(StringGrid1.Cells[3,i]);
        h:=strtofloat(StringGrid1.Cells[2,i])  ;
        u:=sqr((o-h)/h);
       StringGrid1.Cells[4,i]:=floattostr(u) ;
                       end;


    end;









procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='№';
StringGrid1.Cells[1,0]:='T';
StringGrid1.Cells[2,0]:='R';
StringGrid1.Cells[3,0]:='R расч';
StringGrid1.Cells[4,0]:='R отн. погр.';


end;





procedure TForm1.Button3Click(Sender: TObject);    // округление
var
ss,s1: string;
a,b,j,i,k: integer;
label L1,l2;
begin
a:=0;
b:=0;

for i:=1 to 10 do
begin
a:=0;
ss:=StringGrid1.Cells[3,i];
for j:=1 to 5 do
begin
if ss[j]=',' then goto l1
else a:=a+1 ;

end;

L1: b:=0;
b:=a+3;
s1:='';
for k:=1 to b do
begin
s1:=s1+ss[k];
end;
   StringGrid1.Cells[3,i]:=s1       ;
 label3.Caption:=StringGrid1.Cells[3,i];
end;

//////////////////////////



for i:=1 to 10 do
begin
a:=0;
ss:=StringGrid1.Cells[4,i];
for j:=1 to 5 do
begin
if ss[j]=',' then goto l2
else a:=a+1 ;

end;

L2: b:=0;
b:=a+5;
s1:='';
for k:=1 to b do
begin
s1:=s1+ss[k];
end;
   StringGrid1.Cells[4,i]:=s1       ;

end;
      end;


end.



Пожалуйста напишите код сортировки столбца Т по возрастанию и по убыванию а вместе с ним чтоб сортировались и строчки к которые ему принадлежат ну как в екселе, например на кнопку 4. 
И еще у меня на кнопке есть код который считает x и y помогите его засунуть в отдельную процедуру, и где считается Rras засунуть в отдельную функцию, а в кнопке чтоб они только вызывались.

Еще у меня используется метод наименьших квадратов может кто проверит правильно ли.

Это сообщение отредактировал(а) kasir - 26.5.2007, 12:20
PM MAIL   Вверх
Rodman
Дата 26.5.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122



Цитата(kasir @  25.5.2007,  23:34 Найти цитируемый пост)
где считается Rras

у меня тоже такой вопрос!

Цитата(kasir @  25.5.2007,  23:34 Найти цитируемый пост)
по возрастанию и по убыванию

как можно на одной кнопку обе сортировки реализовать?!
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Label2: TLabel;
    Button3: TButton;
    Label3: TLabel;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  t: TextFile;
  s: string;
  i,j: integer;
begin
  StringGrid1.RowCount:=11;
  AssignFile(t,'1.txt');
  Reset(t);
  while not eof(t) do
  begin
    for i:=1 to 11 do begin
        for j:=0   to 2    do
        begin
          ReadLn(t,s);
          StringGrid1.Cells[j,i]:=s;
        end;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  aa,ab,bb,h,o,ac,bc,cc,x,y,p,u: real;  // âîò îòñþäà
  i,j: integer;
begin
  u:=0;
  aa:=0;
  o:=0;
  ab:=0;
  for i:=1 to 10 do
  begin
    u:=strtofloat(StringGrid1.Cells[1,i]);
    o:=strtofloat(StringGrid1.Cells[2,i]);
    aa:=aa+u*u;
    ab:=ab+u;
    ac:=ac-u*o;
    bb:=1;
    bc:=bc-o;
  end;
      /// aa*x+ab*y+ac=0     ab*x+bb*y+bc=0
  x:=((bc*ab)-(ac*bb))/((aa*bb)-(ab*ab)) ;
  y:=(-aa*x-ac)/ab ;            //äî ñþäà íóæíî çàñóíóòü â îòäåëüíóþ ïðîöåäóðó à òóò ÷òîá âû÷èñëÿëîñü òîëüêî åå âûçîâîì
  label1.Caption:='y=' +floattostr(y)+'    x=' +floattostr(x) ;
  label2.Caption:='aa=' +floattostr(aa)+'     ab=' +floattostr(ab)+'     ac=' +floattostr(ac) +'     bb=' +floattostr(bb)+'     bc=' +floattostr(bc)+'     cc=' +floattostr(cc);
  for i:=1 to 10 do
  begin           // âû÷èñëåíèå ðàñ÷. ñîïðîò.   À ÝÒÎ ×ÒÎÁ ÂÛ×ÈÑËßËÎÑÜ ÊÀÊ ÎÒÄÅËÜÍÀß ÔÓÍÊÖÈß è òóò òîëüêî åå âûçîâ
    o:=strtofloat(StringGrid1.Cells[1,i]);
    u:=x*o+y;
    StringGrid1.Cells[3,i]:=floattostr(u);
  end;
  for i:=1 to 10 do
  begin
   //âû÷èñëåíèå îòíîñèòüåëüíîé ïîãðåøíîñòè
    o:=strtofloat(StringGrid1.Cells[3,i]);
    h:=strtofloat(StringGrid1.Cells[2,i]);
    u:=sqr((o-h)/h);
    StringGrid1.Cells[4,i]:=floattostr(u);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Cells[0,0]:='¹';
  StringGrid1.Cells[1,0]:='T';
  StringGrid1.Cells[2,0]:='R';
  StringGrid1.Cells[3,0]:='R ðàñ÷';
  StringGrid1.Cells[4,0]:='R îòí. ïîãð.';
end;

procedure TForm1.Button3Click(Sender: TObject);
var ss,s1: string;
    a,b,j,i,k: integer;
    label L1,l2;
begin
  a:=0;
  b:=0;
  for i:=1 to 10 do
  begin
    a:=0;
    ss:=StringGrid1.Cells[3,i];
    for j:=1 to 5 do
    begin
      if ss[j]=',' then
        goto l1
      else
        a:=a+1 ;
    end;
    L1: b:=0;
    b:=a+3;
    s1:='';
    for k:=1 to b do
      s1:=s1+ss[k];
    StringGrid1.Cells[3,i]:=s1;
    label3.Caption:=StringGrid1.Cells[3,i];
  end;
//////////////////////////
  for i:=1 to 10 do
  begin
    a:=0;
    ss:=StringGrid1.Cells[4,i];
    for j:=1 to 5 do
    begin
      if ss[j]=',' then
        goto l2
      else
        a:=a+1 ;
    end;
    L2: b:=0;
    b:=a+5;
    s1:='';
    for k:=1 to b do
      s1:=s1+ss[k];
    StringGrid1.Cells[4,i]:=s1;
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var arr:array [1..11,1..3] of integer;
    arr2:array [1..11] of integer;
    ii, j, i, h:Integer;
begin
y
  for i:=1 to 11 do
    for j:=0   to 2    do
      arr[i,j]:=StringGrid1.Cells[j,i];
  for i:=2 to 11 do
    for j:=2 to 10 do
      if(arr[j-1,1]>arr[j-1,1])then//сортировка по 1му столбцу
      begin
        for h:=1 to 11 do
        begin
          arr2[h]:=arr[j-1,h];
          arr[j-1,h]:=arr[j,h];
          a[j,h]:=arr2[h];
        end;
      end;
  for i:=1 to 11 do
    for j:=0 to 2 do
      StringGrid1.Cells[j,i]:=arr[i,j];
end;

end.

без входных данных сложновато проверить!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
kasir
Дата 26.5.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



Вот 1.txt

Цитата

1
19,1
76,3
2
25,0
77,8
3
30,1
79,75
4
36,0
80,80
5
40,0
82,35
6
45,1
83,9
7
50,0
85,1
8
20,1
77,12
9
43,2
82,93
10
33,3
81,1



Rras это расчетное сопротивление я там поставил коммент

Это сообщение отредактировал(а) kasir - 26.5.2007, 12:28
PM MAIL   Вверх
Palladin
Дата 28.5.2007, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Оргвнизоывть 2 процедуры в одной можно, используя глобальные перменные....я думаю вы поняли что я имел ввиду smile 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
kasir
Дата 28.5.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



Да я уже сам все сделал
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1028 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.