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

Delphi Sources



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

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

Помогите решить простенькую задачу... ато я в Delphi почтиничего не соображаю

Дано: b=-2.5; db=0.3. Z вычислить по формуле
Z=b^3+ln(2/(b^2+b+2)). Считать Z до тех пор, пока выражение под знаком логорифма больше 0.045. Определить k - количество вычесленных Z. Вывести на экран b, Z, k.

Заранее благодарен!!
  #2  
Старый 04.04.2008, 18:20
Andrevv Andrevv вне форума
Прохожий
 
Регистрация: 03.11.2007
Сообщения: 9
Репутация: 10
Лампочка

Если db - приращение величины b, то текст следующий:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  b,db,log,z:real;
  k:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
b:=-2.5;
db:=0.3;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
k:=0;
log:=1E30;
while log>0.045 do
begin
log:=2/(b*b+b+2);
z:=b*b*b+ln(log);
memo1.Lines.Add('z = '+floattostr(z));
k:=k+1;
b:=b+db;
end;
memo1.Lines.Add('b = '+floattostr(b));
memo1.Lines.Add('k = '+floattostr(k));
end;
end.

Последний раз редактировалось Andrevv, 04.04.2008 в 18:37.
  #3  
Старый 04.04.2008, 19:16
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

Спасибо огромное! Выручил))) Тока можешь мне немного обьяснить - в 2-х словах - ато у меня не хочет работать прога - зависает! - я по ходу дела что-то не добавил - какой -то компонент или фиг его знает -
**procedure FormCreate(Sender: TObject);** - это не понятно немнго - можешь обьяснить что это означает, если не труно... компоненты я тока Memo и Button добавил...

Последний раз редактировалось AndrYxo, 04.04.2008 в 19:47.
  #4  
Старый 04.04.2008, 20:13
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от Andrevv
Если db - приращение величины b, то текст следующий:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  b,db,log,z:real;
  k:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
b:=-2.5;
db:=0.3;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
k:=0;
log:=1E30;
while log>0.045 do
begin
log:=2/(b*b+b+2);
z:=b*b*b+ln(log);
memo1.Lines.Add('z = '+floattostr(z));
k:=k+1;
b:=b+db;
end;
memo1.Lines.Add('b = '+floattostr(b));
memo1.Lines.Add('k = '+floattostr(k));
end;
end.

Предлагаю подправить. Согласно задаче надо вывести Z,b,k. Надо строчку
Код:
 memo1.Lines.Add('z = '+floattostr(z));
вывести из цикла.
  #5  
Старый 04.04.2008, 20:16
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от AndrYxo
Спасибо огромное! Выручил))) Тока можешь мне немного обьяснить - в 2-х словах - ато у меня не хочет работать прога - зависает! - я по ходу дела что-то не добавил - какой -то компонент или фиг его знает -
**procedure FormCreate(Sender: TObject);** - это не понятно немнго - можешь обьяснить что это означает, если не труно... компоненты я тока Memo и Button добавил...
По видимому у Вас не работает потому что Вы заново создали Button и memo. Надо нажать на button и обрновить ссылку на процедуру TForm1.Button1Click(Sender: TObject); И конечно нажать двойным щелчком на форме, чтобы сработала процедура TForm1.FormCreate(Sender: TObject);
  #6  
Старый 04.04.2008, 21:13
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

Andrevv и MegaPiha огромное вам спасибо! Выручили! Не работало потому, что 2-й щелчек на форме не сделал! Спасибо что подсказали - а если строку memo1.Lines.Add('z = '+floattostr(z)); вывести из цикла, то оно считает только одно значение - а по условию надо что бы считало до того, пока не станет меньше 0.045. Еще раз большое спасибо)
  #7  
Старый 04.04.2008, 21:30
Violina Violina вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 8
Репутация: 10
По умолчанию

Добрый вечер! Ребята, помогите плиз..нужно сделать прогу..

Составить подпрограмму, которая в матрице 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).

Заранее благодарю!
  #8  
Старый 04.04.2008, 23:48
Farmazon Farmazon вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 14
Репутация: 10
По умолчанию

Вот, тут создаётся матрица случайным образом заполняется, меняет первый и последний столбец...это в обработке щелчка на Бутон2. я полный код выложу, на форму прикрепиш чё попросит дельфи, глянеш нормально, подредактируеш под своё задание. Тут фишка в том чт что переносимый столбец матрицы в одномерный массив пишется, получается что первый и последний столбцы каждый в свой одномерн массив пишутся, а потом дописываются наоборот в матрицу.
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  a : array [1..50, 1..50] of integer;
  b : array [1..50] of integer;
  c : array [1..50] of integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var n,m,i,j:integer;f:TextFile;
begin
Randomize;
AssignFile (f,'f1.txt');
n:=StrToInt(Edit1.Text);
m:=StrToInt(Edit2.Text);
For i:=0 to n-1 do
    For j:=0 to m-1 do a[i,j]:=Random(100)-50;
StringGrid1.RowCount:=n+1;
StringGrid1.ColCount:=m+1;
With StringGrid1 do
    Begin
        i:=0;
        For j:=1 to RowCount do
            Cells[i,j]:=IntToStr(j);
        j:=0;
        For i:=1 to ColCount do
            Cells[i,j]:=IntToStr(i);
    End;
Rewrite(f);
With StringGrid1 do
    For i:=1 to n do
        For j:=1 to m do
            Begin
                Cells[j,i]:=IntToStr(a[i-1,j-1]);
                WriteLn(f,a[i-1,j-1]);
            End;
CloseFile(f);
end;

procedure TForm1.Button2Click(Sender: TObject);
var n,m,i,j:integer; f:TextFile;
begin
n:=StrToInt(Edit1.Text);
m:=StrToInt(Edit2.Text);
AssignFile (f,'f2.txt');
j:=0;
For i:=0 to m-1 do
    Begin
        b[i]:=a[i,j];
    End;
j:=m-1;
For i:=0 to m-1 do c[i]:=a[i,j];
For i:=0 to m-1 do a[i,j]:=b[i];
j:=0;
For i:=0 to m-1 do a[i,j]:=c[i];
StringGrid2.RowCount:=n+1;
StringGrid2.ColCount:=m+1;
With StringGrid2 do
    Begin
        i:=0;
        For j:=1 to RowCount do
            Cells[i,j]:=IntToStr(j);
        j:=0;
        For i:=1 to ColCount do
            Cells[i,j]:=IntToStr(i);
    End;
Rewrite(f);
With StringGrid2 do
    For i:=1 to n do
        For j:=1 to m do
            Begin
                Cells[j,i]:=IntToStr(a[i-1,j-1]);
                WriteLn(f,a[i-1,j-1]);
            End;
CloseFile(f);
end;

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

end.

Последний раз редактировалось Admin, 05.04.2008 в 12:09.
  #9  
Старый 04.04.2008, 23:50
Farmazon Farmazon вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 14
Репутация: 10
По умолчанию

сори за длинный лист..я незнаю как с лентой прокрутки делать

Admin: Тег CODE (пункт 2.8 правил)

Последний раз редактировалось Admin, 05.04.2008 в 12:12.
  #10  
Старый 05.04.2008, 00:26
Violina Violina вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 8
Репутация: 10
По умолчанию

Farmazon, спасибки огромное! Щас буду пробовать
  #11  
Старый 05.04.2008, 01:07
Violina Violina вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 8
Репутация: 10
По умолчанию

Farmazon, Ну вообщем попробовала я спасибо ещё раз за помощь но я все равно сама не справлюсь с задачей - ну не мое это програмирование - понимать - немного понимаю - но как до дела доходит - так не знаю вообще ничего - помоги мне еще немного... первое по матрице Y(m,n) нужно что бы через Edit вводился номер столбца - k и еще на 3 buttona сделать код на 3 масива А, В и С которые будут заполняться не случайными числами, а по уравнениям и в них на кнопку еще на 3 buttona поменять столбцы как в условии... а .. и ещё надо что бы новые матрицы в новые стринггриды выводились - то есть исходные в одном - а меняешь вдругие - то есть на 8 стрингридов должно быть. Я не соображаю Если можешь напиши плиз.. буду очень благодарна за помощь!
  #12  
Старый 05.04.2008, 09:18
Farmazon Farmazon вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 14
Репутация: 10
По умолчанию

Сори Виол, но у мня самого времени в обрез всю неделю до ночи сижу за своими задачами...вон две задачи выложил, никто неотписывает...наверн кто просмотрели немогут помочь
Я попробую немного пояснить в каком направлении двигаться...
Вот кусок кода из бутон2:
Цитата:
j:=0; {-это мы назначили перед циклом что бы был столбец первый, тебе надо чтоб вводилось, значит будет j:=StrToInt(Edit1.text)-1}
For i:=0 to m-1 do
Begin
b[i]:=a[i,j]; {тут в одномерный массив b[i] записывается столбик, номер которого вёл пользователь}
End;
j:=m-1; {тут назначается поледний столбец, его тоже можеш привязать к переменной как выше...}
For i:=0 to m-1 do c[i]:=a[i,j]; {тут всё так же ток в c[i] пишется последний стлбуц}
For i:=0 to m-1 do a[i,j]:=b[i];{а начиная отсюда из массивов b[i] и c[i] дописываются обратно в матрицу ток на место друг друга}
j:=0;
For i:=0 to m-1 do a[i,j]:=c[i];
Что бы вместо случайных по формуле заполнялась матрица, надо вместо рандомаза подставить формулу твою в буттон1
Цитата:
For j:=0 to m-1 do a[i,j]:=Random(100)-50;
только сверху Randomaize незабудь удалить...
  #13  
Старый 05.04.2008, 09:40
Violina Violina вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 8
Репутация: 10
По умолчанию

Farmazon, спасибо тебе огромное что тратишь своё время и на мою задачу.. сейчас буду пробовать.. надеюсь что получится! спасибо большое!
  #14  
Старый 05.04.2008, 13:51
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

это снова я - немного не получается написать прогу - которую пишут свободно все 10-ти классники - вот условие: Наити произведение положительных элементов масива А={a[i]}, удовлетворяющих условию:
с<=a[i]<=d - где с и d задаем сами через Edit

вот что у меня получилось...

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure Button1Click(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 intejer;
P, c, d: real;
i: intejer;
begin
randomize;
fot i:=0 to 19 do
 begin
 a[i]:=random(50--50+1)-50;
 StringGrid1.Cells[0,i]:=inttoStr(a[i]);
 end;
 c:=StrtoInt(Edit1.Text);
 d:=StrtoInt(Edit2.Text);
 P:=1;
 for i:=0 to 19 do
 if (a[i]>0) and (a[i]>=c) and (a[i]<=d) then
 P:=P*a[i];
 Memo1.Lines.Add(FormatFloat('0.00',P);
 end;


end.

Подскажите плиз...

Последний раз редактировалось Admin, 05.04.2008 в 14:17.
  #15  
Старый 05.04.2008, 15:03
Farmazon Farmazon вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 14
Репутация: 10
По умолчанию

сначала найди все положительные элементы массива a[i], запиши их в массив b[i], затем от туда отфильтруй эти значения условием с<=a[i]<=d
ну чёто типа этого:
Код:
For i:=0 to 19 do 
begin
  if a[i]>=o then b[i]:=a[i]
end;
For i:=0 to 19 do 
begin
  if (b[i]<=d) and (c<=b[i]) then a[i]:=b[i];
end; 
примерно так...потом из a[i] значения присвой например текстовому полю циклом или можеш миную присвоение a[i] сразу подставить вместо него Текстовое поле или куда там ты выводиш. Незабудь сначала создать массив b[i]
Закрытая тема


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter