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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2008, 15:11   #1
AndrYxo
Пользователь
 
Регистрация: 04.04.2008
Сообщений: 15
Вопрос Нужна помощь в решении задачи в Delphi

В общем такое у меня дело - нужно сделать мне прогу а как ее делать у меня даже нет ни малейшего представления... может кто поможет! Буду очень благодарен... вот задание:

Составить подпрограмму, которая в матрице Y(m,n) меняет местами 1-й и k-й столбец (1<m). C помощью подпрограммы поменять местами первый и последний столбцы матриц A(12,9), C(7,11), и третий и пятый столбц матрицы B(8,15). Исходные и преобразованные матрицы вывести на экран дисплея. Элементы входных матриц вычисляются по формулам:
A(c индексом i,j)=tg(j)+e^cos(i);
B(c индексом i,j)=sin(3.2j+4.2)+e^tg(1.5i);
C(c индексом i,j)=cos(12.4j+1).

Заранее благодарен
AndrYxo вне форума Ответить с цитированием
Старый 04.04.2008, 17:53   #2
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Ну и в чем, собственно говоря, у Вас загвоздка вышла? Что непонятно? Что именно не получается? Выложите свои наработки (хотя бы как Вы себе представляете алгоритм решения), будут проблемы - обязательно поможем, но только при условии, что Вы сами хоть что-то захотите сделать.
Xardas вне форума Ответить с цитированием
Старый 06.04.2008, 14:03   #3
AndrYxo
Пользователь
 
Регистрация: 04.04.2008
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Xardas Посмотреть сообщение
Ну и в чем, собственно говоря, у Вас загвоздка вышла? Что непонятно? Что именно не получается? Выложите свои наработки (хотя бы как Вы себе представляете алгоритм решения), будут проблемы - обязательно поможем, но только при условии, что Вы сами хоть что-то захотите сделать.
В это то и все суть - что я в этой задче даже не знаю с чего начать - я итак туго соображаю в Delphi, но ладно... придумаю что-то с задачей - у меня тут новый вопрос по школьной задаче - написал прогу - работает вроде - вот по условию: Наити произведение положительных элементов масива А={a[i]}, удовлетворяющих условию:
с<=a[i]<=d

Но блин - считает произведение - а оно отрицательное иногда получается - плиз - посмотрите прогу и скажите что не так...

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Memo1: TMemo;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Button3: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a:array [0..19] of integer;
P:integer;
i:integer;
c,d:real;
begin
randomize;
for i:=0 to 19 do
begin
a[i]:=random(50--50+1)-50;
StringGrid1.Cells[i,0]:=InttoStr(a[i]);
end;
P:=1;
c:=StrtoInt(Edit1.Text);
d:=StrtoInt(Edit2.Text);
for i:=0 to 19 do
if (a[i]>=c) and (a[i]<=d) and (a[i]>0) then
P:=P*a[i];
Memo1.Lines.Add(FormatFloat('0.00',P));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
Edit1.Clear;
Edit2.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;

end.
AndrYxo вне форума Ответить с цитированием
Старый 06.04.2008, 14:43   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Происходит переполнение, т.к. integer слишком мал для хранения произведения.
alexBlack вне форума Ответить с цитированием
Старый 06.04.2008, 15:05   #5
AndrYxo
Пользователь
 
Регистрация: 04.04.2008
Сообщений: 15
По умолчанию

Спасибо! Сделал через real все работает нормально! Спасибо)

Последний раз редактировалось AndrYxo; 06.04.2008 в 16:02.
AndrYxo вне форума Ответить с цитированием
Старый 06.04.2008, 15:29   #6
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Можно попробовать Int64
Хотя кто его знает лучше наверно применять числа с плавающей запятой
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 06.04.2008 в 15:31.
SNUPY вне форума Ответить с цитированием
Старый 06.04.2008, 15:58   #7
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

По тому как написан random, диапазон -50 .. 50
В худшем случае все 20 чисел = 50, т.е. произведение = ~10^34
т.е.

var P:Double;
alexBlack вне форума Ответить с цитированием
Старый 11.04.2008, 23:15   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Разъяснение для Ol'KA.
Правила форума гласят:
"Новый вопрос - новая тема"
А вы вообще нагло влезли в чужую тему...
Хотите, чтобы после первого же поста вас штрафанули?
Создавайте свою тему и задавайте вопрос...
mihali4 вне форума Ответить с цитированием
Старый 28.04.2008, 15:46   #9
AndrYxo
Пользователь
 
Регистрация: 04.04.2008
Сообщений: 15
По умолчанию

Здравствуйте, это снова я... получилось у меня решить эту задачу - C помощью подпрограммы поменять местами первый и последний столбцы матриц A(12,9), C(7,11), и третий и пятый столбц матрицы B(8,15). Исходные и преобразованные матрицы вывести на экран дисплея. Элементы входных матриц вычисляются по формулам:
A(c индексом i,j)=tg(j)+e^cos(i);
B(c индексом i,j)=sin(3.2j+4.2)+e^tg(1.5i);
C(c индексом i,j)=cos(12.4j+1). -

но у меня код слишком большой вышел... боюсь я не рационально решил - никто не подскажет как я могу свой код упростить - атот у меня идет повторение в принципе 3-х почти одинаковых процеду - тока числа в них разные - нельзя ли это как-то одной сделать? Вот мой код:

Код:
unit Unit6;

interface

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

type
  TForm6 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Button6: TButton;
    Button10: TButton;
    Label9: TLabel;
    Label10: TLabel;
    StringGrid2: TStringGrid;
    StringGrid3: TStringGrid;
    StringGrid4: TStringGrid;
    StringGrid5: TStringGrid;
    StringGrid6: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;

    procedure Button1Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);



    procedure Button10Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);


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

var
  Form6: TForm6;
  Y:array of array of real;
  C:array of array of real;
  A:array of array of real;
  B:array of array of real;
  n:integer;
  m:integer;
  k:integer;
  l:integer;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm6.Button1Click(Sender: TObject);
begin
Form1.Show;
Form6.Close;
end;

procedure TForm6.Button6Click(Sender: TObject);
var i,j,t:integer;
tmp:real;
begin
begin
n:=7;
m:=11;
setlength(C,n,m);
stringgrid3.RowCount:=n;
stringgrid3.ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
  begin
  C[i,j]:=cos(14*j+1);
  stringgrid3.Cells[j,i]:=FormatFloat('0.00',C[i,j]);
  end;
end;
begin
m:=stringgrid3.ColCount;
k:=0;
l:=10;
for i:=0 to n-1 do
  begin
  tmp:=C[i,k];
  C[i,k]:=C[i,l];
  C[i,l]:=tmp;
  end;
for t:=0 to n-1 do
for j:=0 to m-1 do
stringgrid6.Cells[j,t]:=FormatFloat('0.00',C[t,j]);
end;
begin
n:=8;
m:=15;
setlength(B,n,m);
stringgrid2.RowCount:=n;
stringgrid2.ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
  begin
  B[i,j]:=sin(3.2*j+4.2)+power(exp(1),tan(i));
  stringgrid2.Cells[j,i]:=FormatFloat('0.00',B[i,j]);
  end;
end;
begin
m:=stringgrid2.ColCount;
k:=2;
l:=4;
for i:=0 to n-1 do
  begin
  tmp:=B[i,k];
  B[i,k]:=B[i,l];
  B[i,l]:=tmp;
  end;
for t:=0 to n-1 do
for j:=0 to m-1 do
stringgrid5.Cells[j,t]:=FormatFloat('0.00',B[t,j]);
end;
begin
n:=12;
m:=9;
setlength(A,n,m);
stringgrid1.RowCount:=n;
stringgrid1.ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
  begin
  A[i,j]:=sin(j)/cos(j)+exp(cos(i));;
  stringgrid1.Cells[j,i]:=FormatFloat('0.00',A[i,j]);
  end;
end;
begin
m:=stringgrid1.ColCount;
k:=0;
l:=8;
for i:=0 to n-1 do
  begin
  tmp:=A[i,k];
  A[i,k]:=A[i,l];
  A[i,l]:=tmp;
  end;
for t:=0 to n-1 do
for j:=0 to m-1 do
stringgrid4.Cells[j,t]:=FormatFloat('0.00',A[t,j]);
end;
end;
procedure TForm6.Button10Click(Sender: TObject);
var
i,j:integer;
begin
begin
  for i:=0 to StringGrid6.ColCount-1 do
  for j:=0 to StringGrid6.RowCount-1 do
  StringGrid6.Cells[i,j]:='';
end;
begin
  for i:=0 to StringGrid5.ColCount-1 do
  for j:=0 to StringGrid5.RowCount-1 do
  StringGrid5.Cells[i,j]:='';
end;
begin
  for i:=0 to StringGrid4.ColCount-1 do
  for j:=0 to StringGrid4.RowCount-1 do
  StringGrid4.Cells[i,j]:='';
end;
begin
  for i:=0 to StringGrid3.ColCount-1 do
  for j:=0 to StringGrid3.RowCount-1 do
  StringGrid3.Cells[i,j]:='';
end;
begin
  for i:=0 to StringGrid2.ColCount-1 do
  for j:=0 to StringGrid2.RowCount-1 do
  StringGrid2.Cells[i,j]:='';
end;
begin
  for i:=0 to StringGrid1.ColCount-1 do
  for j:=0 to StringGrid1.RowCount-1 do
  StringGrid1.Cells[i,j]:='';
end;
end;
Это часть кода (весь не влез в сообщение) - заполнение и очистка стринггридов

Последний раз редактировалось AndrYxo; 28.04.2008 в 15:49.
AndrYxo вне форума Ответить с цитированием
Старый 28.04.2008, 15:52   #10
AndrYxo
Пользователь
 
Регистрация: 04.04.2008
Сообщений: 15
По умолчанию

А это процедура сохранения данных стринггрида в файл и вывода данных из файла - может это проще можно как-то сделать - подскажите пожалуйста..
Код:
procedure TForm6.BitBtn1Click(Sender: TObject);
var
   s :TStringlist;
   j:Integer;
   Str:String;
   posy, posx, i : Integer;

Begin
    with TSaveDialog.Create(Owner) do
    begin
       DefaultExt:='.txt';
       Filter:= 'файлы проекта|*.txt';
       if not Execute then exit;
       s:=TStringList.Create;
       s.Clear;
       for i:=0 to StringGrid1.RowCount-1 do
       begin
          Str := '' ;
          for j:=0 to StringGrid1.ColCount-1 do
              str:=str+StringGrid1.Cells[j, i]+' ';
          s.Add(Str);
       end;
       s.Add('T2');
       for i:=0 to StringGrid2.RowCount-1 do
       begin
          Str := '' ;
          for j:=0 to StringGrid2.ColCount-1 do
              str:=str+StringGrid2.Cells[j, i]+' ';
          s.Add(Str);
       end;
       s.Add('T3');
       for i:=0 to StringGrid3.RowCount-1 do
       begin
          Str := '' ;
          for j:=0 to StringGrid3.ColCount-1 do
              str:=str+StringGrid3.Cells[j, i]+' ';
          s.Add(Str);
       end;

       S.SaveToFile(FileName);
end;
    s.Free;
end;

procedure TForm6.BitBtn2Click(Sender: TObject);
var
   s :TStringlist;
   i,j,yd:Integer;
   Str:String;
   posy, posx, py: Integer;
   t1,t2,t3:boolean;


Begin
    t1:=true;
    t2:=false;
    t3:=false;
    with TOpenDialog.Create(Owner) do
    begin
    py:=0;
       DefaultExt:='.txt';
       Filter:= 'файлы проекта|*.txt';
       if not Execute then exit;
       s:=TStringList.Create;
       S.LoadFromFile(FileName);
       For posy := 1 to S.Count do
       begin
           posx := 0;
           Str := '';
           For i := 1 to Length(S.Strings[posy-1]) do
           begin
              if S.Strings[posy-1][i] <> ' ' then
              begin
                  Str := Str + S.Strings[posy-1][i];
                  if Str = 'T2' then
                  begin
                     t1:=false;
                     t2:=true;
                     py:=posy;
                  end;
                  if Str = 'T3' then
                  begin
                     t1:=false;
                     t2:=false;
                     t3:=true;
                     py:=posy;
                  end;
              end
              else
              begin
                 if t1= true then StringGrid1.Cells[posx, posy-1] := Str;
                 if t2 = true then StringGrid2.Cells[posx, posy-1-py] := Str;
                 if t3 = true then StringGrid3.Cells[posx, posy-1-py] := Str;
                 Str := '';
                 inc(posx);
              end;
           end;
       end;
    end;
    S.Free;
    end;
AndrYxo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi.Задачи.Нужна помощь SkaStud Помощь студентам 10 30.05.2011 23:26
Нужна помощь в решении нескольких задач KpeHDeJIb Помощь студентам 16 28.06.2008 13:17
Нужна помощь по решению задачи .(Delphi) Nora Помощь студентам 4 24.05.2008 07:29
DELPHI две задачи очень нужна помощь. MARGO Помощь студентам 2 01.11.2007 22:35