Смекни!
smekni.com

Программирование 3 (стр. 4 из 5)

Edit31.Text:='';

end

else begin

m:=strtoint(Edit31.Text);

Edit35.Text:=inttostr(m);

end;

Val(Edit32.Text,A,code);

if (code<>0) then begin

Edit32.Text:='';

end

else begin

A:=strtoint(Edit32.Text);

Edit36.Text:=inttostr(A);

end;

Val(Edit33.Text,B,code);

if (code<>0) then begin

Edit33.Text:='';

end

else begin

B:=strtoint(Edit33.Text);

Edit37.Text:=inttostr(B);

end;

{=== Проверка ввода значений и заполнение массива ====================}

if (Edit34.Text<>'') and (Edit35.Text<>'') and (Edit36.Text<>'') and (Edit37.Text<>'')and

(StrToInt(Edit37.Text)>=StrToInt(Edit36.Text)) and (StrToInt(Edit34.Text)>0) and (StrToInt(Edit35.Text)>0)then begin

for i:=1 to n do

for j:=1 to m do M2[i,j]:=A+Random((B+1)-A);

Button37.Click;

end

else begin

Edit30.Text:=''; Edit31.Text:=''; Edit34.Text:=''; Edit36.Text:='';

Edit32.Text:=''; Edit33.Text:=''; Edit35.Text:=''; Edit37.Text:='';

for i:=1 to 4 do

for j:=1 to 4 do

Edit54.Text:=''; Edit55.Text:=''; Edit56.Text:='';

Label102.Visible:=true;

Timer2.Enabled:=True;

end;

if (Edit34.Text<>'') then begin

Button37.Click;

Button31.Enabled:=False;

Button32.Enabled:=False;

end;

end;

procedure TForm1.Button37Click(Sender: TObject);

Var i,j,A,B,n,m,M2i,M2j:integer;

sum:longint;

begin

n:=StrToInt(Edit34.Text);

m:=StrToInt(Edit35.Text);

{=== Нахождение суммы отрицательных элементов столбцов ==============}

for j:=1 to m do begin

sum:=0;

for i:=1 to n do begin

if (M2[i,j]<0) then sum:=sum+M2[i,j];

end;

StringGrid1.Cells[j,0]:=IntToStr(sum);

end;

{=== Нахождение кол-ва отрицательных элементов столбцов ==============}

for j:=1 to m do begin

sum:=0;

for i:=1 to n do begin

if (M2[i,j]<0) then sum:=sum+1;

end;

StringGrid1.Cells[j,1]:=IntToStr(sum);

end;

{=== Нахождение суммы положительных элементов столбцов ==============}

for j:=1 to m do begin

sum:=0;

for i:=1 to n do begin

if (M2[i,j]>0) then sum:=sum+M2[i,j];

end;

StringGrid1.Cells[j,2]:=IntToStr(sum);

end;

{=== Нахождение кол-ва положительных элементов столбцов ==============}

for j:=1 to m do begin

sum:=0;

for i:=1 to n do begin

if (M2[i,j]>0) then sum:=sum+1;

end;

StringGrid1.Cells[j,3]:=IntToStr(sum);

end;

{=== Заполнение заглавных ячеек таблицы =============================}

StringGrid1.Font.Size:=8;

StringGrid1.Cells[0,0]:='Сумма "-"';

StringGrid1.Cells[0,1]:='Кол-во. "-"';

StringGrid1.Cells[0,2]:='Сумма "+"';

StringGrid1.Cells[0,3]:='Кол-во. "+"';

StringGrid1.Cells[0,4]:=' №';

StringGrid1.ColWidths[0]:=65;

{=== Подгонка таблицы под введенные размеры двумерного массива ======}

StringGrid1.RowCount:=n+5;

StringGrid1.ColCount:=m+1;

{=== Нумерация колонок и строк ======================================}

for i:=1 to m+1 do StringGrid1.Cells[i,4]:=IntToStr(i);

for i:=1 to n+5 do StringGrid1.Cells[0,i+4]:=' '+IntToStr(i);

{=== Заполнение таблицы массивом ====================================}

M2i:=0;

M2j:=0;

For i:=5 to n+5 do begin

M2i:=M2i+1;

m2j:=1;

for j:=1 to m+1 do begin

StringGrid1.Cells[j,i]:=IntToStr(M2[M2i,M2j]);

M2j:=M2j+1;

end;

end;

{====================================================================}

end;

procedure TForm1.Button34Click(Sender: TObject);

begin

Panel1.Visible:=true; Panel6.Visible:=False;

Panel2.Visible:=false; Panel5.Visible:=False;

Panel3.Visible:=False; Panel4.Visible:=false;

PageControl1.Visible:=False;

end;

procedure TForm1.Button35Click(Sender: TObject);

vark,n,code:integer;

A,E,S:Extended;

begin

if (copy(Edit38.Text,1,1)='0') and (StrToInt(copy(Edit38.Text,3,1))<6) then begin

E:=StrToFloat(Edit38.Text);

k:=1;

A:=1/2;

s:=0;

{-->}while (abs(A)>=E) do begin

A:=1/((2*k-1)*(2*k+1));

k:=k+1;

s:=s+A;

memo3.Lines[k-2]:=IntToStr(k-1)+' '+FloatToStr(A)+#13+#10;

memo5.Lines[k-2]:=IntToStr(k-1)+' '+FloatToStr(s)+#13+#10;

{-->}end;

Edit39.Text:=IntToStr(k-1);

end else

Edit38.Text:='';

end;

procedure TForm1.Button36Click(Sender: TObject);

begin

memo3.Text:='';

memo5.Text:='';

memo3.Lines[0]:='Шаг / Значение А на шаге i';

memo5.Lines[0]:='Шаг / Значение S на шаге i';

Edit39.Text:='';

Edit38.Text:='0,0001';

end;

procedure TForm1.Button38Click(Sender: TObject);

var s:string;

n:double;

begin

{--- Проверка ввода в окно "Введите E" -------------------------------}

s:=Edit38.Text;

ifTryStrToFloat(s, n) then

begin

if (StrToFloat(s)>0) and (StrToFloat(s)<0.6) then button35.Click

else Edit38.Text:='';

end

else Edit38.Text:='';

{------------------------------------------------------------------}

end;

procedure TForm1.Button39Click(Sender: TObject);

begin

Panel1.Visible:=false; Panel6.Visible:=true;

Panel2.Visible:=false; Panel5.Visible:=False;

Panel3.Visible:=False; Panel4.Visible:=False;

PageControl1.Visible:=False;

end;

procedure TForm1.Button40Click(Sender: TObject);

Vari,j,n,k:integer;

s:string;

begin

k:=0;

for i:=0 to 7 do begin

for j:=1 to 8 do begin

k:=0;

k:=length(StringGrid2.Cells[i,j]);

if (k>15) then begin

Label107.Visible:=true;

Edit41.Text:=IntToStr(i+1);

Edit42.Text:=IntToStr(j);

end;

end;

end;

if (Label107.Visible=False) then

button43.Click;

end;

procedure TForm1.Button42Click(Sender: TObject);

begin

Label107.Visible:=False;

Edit40.Text:='';

Edit41.Text:='';

Edit42.Text:='';

end;

procedure TForm1.Button43Click(Sender: TObject);

vark,i,j,d:integer;

s:string;

begin

Edit40.Text:='Всевведеноверно';

// Сохраняем по выбранному пути

ifsavedialog1.Executethen

SaveStringGrid(StringGrid2, savedialog1.FileName);

end;

procedure TForm1.StringGrid2Click(Sender: TObject);

begin

Label107.Visible:=False;

Edit40.Text:='';

Edit41.Text:='';

Edit42.Text:='';

end;

procedure TForm1.Button41Click(Sender: TObject);

begin

// Открываем по выбранному пути

if opendialog1.Execute then

LoadStringGrid(StringGrid2, opendialog1.FileName);

end;

procedure TForm1.Button44Click(Sender: TObject);

begin

Panel1.Visible:=false; Panel6.Visible:=False;

Panel2.Visible:=false; Panel5.Visible:=true;

Panel3.Visible:=False; Panel4.Visible:=false;

PageControl1.Visible:=False;

end;

procedure TForm1.Button45Click(Sender: TObject);

var t0,t0code,tn,tncode,a,acode,M:integer;

s:string;

h:double;

begin

M:=0; // Накапливаемая метка - правильно ли введены данные

Val(Edit43.Text,t0,t0code);

if (t0code<>0) then Edit43.Text:='' else

if (t0<0) then Edit43.Text:='' else M:=M+1;

Val(Edit44.Text,tn,tncode);

if (tncode<>0) then Edit44.Text:='' else

if (tn<0) then Edit44.Text:='' else M:=M+1;

if (t0 >= tn) then Edit43.Text:='' else M:=M+1;

Val(Edit46.Text,a,acode);

if (a<=0) then Edit46.Text:='' else M:=M+1;

{--- Проверка ввода в окно "Шаг (h)" -------------------------------}

s:=Edit45.Text;

ifTryStrToFloat(s, h) then

begin

Edit48.Text:='Введеноверно';

if (StrToFloat(s)>0) then M:=M+1;

end

else Edit48.Text:='Ошибкаввода';

{------------------------------------------------------------------}

Edit47.Text:=inttostr(M);

if (M=5) then button47.Click;

end;

procedure TForm1.Button46Click(Sender: TObject);

vari,j:integer;

begin

Edit43.Text:='0';

Edit44.Text:='50';

Edit45.Text:='0,007';

Edit46.Text:='4';

Edit47.Text:='';

Edit48.Text:='';

Edit49.Text:='';

Button48.Enabled:=False;

PaintBox1.Visible:=False;

StringGrid3.Visible:=True;

{=== Очисткатаблицы ================================================}

with StringGRid3 do

for i:=0 to RowCount do

for j:=0 to ColCount do

Cells[j, i]:='';

StringGRid3.RowCount:=7;

{=== Задание таблице начального вида =================================}

StringGrid3.Cells[0,0]:=' t';

StringGrid3.Cells[1,0]:=' X=R*Cos(t)';

StringGrid3.Cells[2,0]:=' Y=R*Sin(t)';

end;

procedure TForm1.Button47Click(Sender: TObject);

vari,ks,a:integer;

h,tn,R,x,y:real;

tnE:string;

begin

a:=StrToInt(Edit46.Text); // a - значениедлявычислениярадиуса

h:=StrToFloat(Edit45.Text); // h - шаг

tnE:=Edit43.Text; // t начальная Edit (т.е. не число)

tn:=StrToFloat(Edit43.Text); // t на n-омшаге - число

i:=1; // для записывания в i-ую строку таблицы

ks:=2; // для приращивания кол-ва строк таблицы

// крутить пока не достигнет tk (tk - см. условие задачи)

while (tn<=StrToInt(Edit44.Text)) do begin

StringGrid3.Cells[0,i]:=tnE; // в i-уюстрокузаписатьtnE

R:=a*StrToFloat(tnE)/2; // находим R - по формуле задания

x:=R*Cos(StrToFloat(tnE)); // находим x - по формуле задания

y:=R*Sin(StrToFloat(tnE)); // находим y - по формуле задания

StringGrid3.Cells[1,i]:=FloatToStr(x); // в i-уюстрокузаписать x

StringGrid3.Cells[2,i]:=FloatToStr(y); // в i-уюстрокузаписать y

i:=i+1; // увеличиваем i на 1

tnE:=FloatToStr(StrToFloat(tnE)+h); // Изменяем tnE с учетом шага

StringGrid3.RowCount:=ks; // задаем кол-во строк в таблице

ks:=ks+1; // увеличиваем переменную кол-ва строк

tn:=tn+h; // изменяем t n-ое на заданный шаг

end;

Button48.Enabled:=True;

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

paintbox1.refresh;

OSI;

end;

procedure TForm1.Button48Click(Sender: TObject);

begin

if (Button48.Caption='Показатьграфик') then

begin

StringGrid3.Visible:=false;

PaintBox1.Visible:=true;

Button48.Caption:='Показатьтаблицу';

paintbox1.refresh;

OSI;

Button49.Click;

end else

begin

StringGrid3.Visible:=true;

PaintBox1.Visible:=false;

Button48.Caption:='Показатьграфик';

end;

end;

procedure TForm1.Button49Click(Sender: TObject);

varks,i:integer;

Xt,Yt:real;

begin

RazX:=PaintBox1.Width;

RazY:=PaintBox1.Height;

Xmin:=0-(PaintBox1.Width div 2);

Xmax:=PaintBox1.Width div 2;

Ymin:=0-(PaintBox1.Height div 2);

Ymax:=PaintBox1.Height div 2;

ks:=0;

ks:=StringGrid3.RowCount-1;

Edit49.Text:=IntToStr(ks);

with form1.PaintBox1,canvas do begin

for i:=1 to ks do begin

Xt:=StrToFloat(StringGrid3.Cells[1,i]);

Yt:=StrToFloat(StringGrid3.Cells[2,i]);

Canvas.Pixels[Xs(Xt), Ys(Yt)]:=clRed;

end;

PaintBox1.Canvas.TextOut(10, 10, 'Функция "Спираль"');

PaintBox1.Canvas.TextOut(Xs(0),Ys(0),'0'); // подписываемначалокоординат

PaintBox1.Canvas.TextOut(PaintBox1.Width-10,Ys(-1),'x'); // подписываем y

PaintBox1.Canvas.TextOut((PaintBox1.Width div 2)-10, 5,'y'); // подписываем x

// рисуем стрелку вправо

MoveTo(PaintBox1.Width, PaintBox1.Height div 2);

PaintBox1.Canvas.LineTo(PaintBox1.Width-10, (PaintBox1.Height div 2)-4);

MoveTo(PaintBox1.Width, PaintBox1.Height div 2);

PaintBox1.Canvas.LineTo(PaintBox1.Width-10, (PaintBox1.Height div 2)+4);

// рисуем стрелку вверх

MoveTo(PaintBox1.Width div 2, 0);

PaintBox1.Canvas.LineTo((PaintBox1.Width div 2)-4, 10);

MoveTo(PaintBox1.Width div 2, 0);

PaintBox1.Canvas.LineTo((PaintBox1.Width div 2)+4, 10);

end;

end;

procedure TForm1.PageControl1Change(Sender: TObject);

begin

if PageControl1.ActivePage=TabSheet1 then

begin

Form1.Height:=484;

N8.Visible:=False;

N9.Visible:=False;

end;

if PageControl1.ActivePage=TabSheet2 then

begin

PageControl2.ActivePage:=TabSheet8;

N8.Visible:=true;

N9.Visible:=true;

end;

if PageControl1.ActivePage=TabSheet3 then

begin

PageControl2.ActivePage:=TabSheet9;

N8.Visible:=true;

N9.Visible:=true;

end;

if PageControl1.ActivePage=TabSheet4 then

begin

PageControl2.ActivePage:=TabSheet10;

N8.Visible:=true;

N9.Visible:=true;

end;

if PageControl1.ActivePage=TabSheet5 then

begin

PageControl2.ActivePage:=TabSheet11;

N8.Visible:=true;

N9.Visible:=true;

end;

if PageControl1.ActivePage=TabSheet6 then

begin

PageControl2.ActivePage:=TabSheet12;

N8.Visible:=true;

N9.Visible:=true;

end;

if PageControl1.ActivePage=TabSheet7 then

begin

PageControl2.ActivePage:=TabSheet13;

N8.Visible:=true;

N9.Visible:=true;

end;

end;

procedure TForm1.PageControl2Change(Sender: TObject);

begin

if PageControl2.ActivePage=TabSheet8 then

PageControl1.ActivePage:=TabSheet2;

if PageControl2.ActivePage=TabSheet9 then

PageControl1.ActivePage:=TabSheet3;

if PageControl2.ActivePage=TabSheet10 then

PageControl1.ActivePage:=TabSheet4;

if PageControl2.ActivePage=TabSheet11 then

PageControl1.ActivePage:=TabSheet5;

if PageControl2.ActivePage=TabSheet12 then

PageControl1.ActivePage:=TabSheet6;

if PageControl2.ActivePage=TabSheet13 then

PageControl1.ActivePage:=TabSheet7;

end;

procedure TForm1.Button51Click(Sender: TObject);

begin

n8.Visible:=false;

n9.Visible:=false;

end;

end.


Результаты работы программы

Задача 1.

В программу вводится число Е.

После нажатия на кнопку «вычислить»

программа выводит все члены ряда

и количество итераций.

В разделе программы

«техническая информация…»

отслеживается сумма на

соответствующем шаге.

Задача 2.

Ввод данных можно осуществить как автоматически, так и вручную.Предусмотрена проверка на правильность введенных данных вручную.После заполнения программа подсчитывает, чему равно значение выражения.В «технической информации» можно отследить отдельно сумму квадратов и квадрат суммы. Также можно увидеть последнее число в массиве, или увидеть любой элемент массива по запросу.

Задача 3.