Задание№1 (Тема: Программирование линейных алгоритмов) <br /><br /> Условие: Написать программу вычисления значения выражения при заданных исходных данных. Сравнить полученное значение с указанным правильным результатом. формула !ZZZZZZZZZZZZ! при: x = 3,981*10-2; y = –1,625*103; z = 0,512. Ответ: s = 1,26185. <br /><br /> Решение: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit3: TEdit; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var x,y,z,a:extended; begin Memo1.Clear; Memo1.Lines.Add('Исходные данные:'); x:=StrToFloat(Edit1.Text); Memo1.Lines.Add('X= '+FloatToStrF(x,fffixed,8,5)); y:=StrToFloat(Edit2.Text); Memo1.Lines.Add('Y= '+FloatToStrF(y,fffixed,8,0)); z:=StrToFloat(Edit3.Text); Memo1.Lines.Add('Z= '+FloatToStrF(z,fffixed,8,3)); a:=1/exp(ln(2)*x)*Sqrt(x+Sqrt(Sqrt(abs(y))))*exp(ln(Exp(x-1/sin(z)))*1/3); Memo1.Lines.Add('Результат A= '+FloatToStrF(a,fffixed,8,5)); end; procedure TForm1.FormCreate(Sender: TObject); begin Edit1.Text:='3,981E-2'; Edit2.Text:='-1,625E3'; Edit3.Text:='0,512'; Memo1.Clear; end; end. <br /><br /> <br /><br /> Задание№2 (Тема: Программирование разветвляющихся алгоритмов) <br /><br /> Условие: Составить программу вычисления. Предусмотреть вывод информации о выбранной ветви вычислений. В качестве f(x) использовать по выбору: Sin(x), Cos(x) или Tg(x). формула !!!ЯЯЯЯЯЯЯ!!! Решение: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) CheckBox1: TCheckBox; RadioGroup1: TRadioGroup; Label1: TLabel; Label2: TLabel; Label3: TLabel; Memo1: TMemo; Button1: TButton; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var x,q,u,k:extended; begin Memo1.Clear; Memo1.Lines.Add('Лаб. раб. №2 ФЗО ЭСБ 203201 Федосенко А.В.'); x:=StrToFloat(Edit1.Text); q:=StrToFloat(Edit2.Text); Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,8,2)); Memo1.Lines.Add('q='+FloatToStrF(q,ffFixed,8,2)); case RadioGroup1.ItemIndex of 0: u:=sin(x); 1: u:=cos(x); 2: u:=sin(x)/cos(x); end; if u>10 then k:=ln(x+abs(q)) else if u<10 then k:=exp(x+q)+sin(x) else k:=x+3*cos(q); if CheckBox1.Checked then Memo1.Lines.Add('Результат равен '+IntToStr(Round(k))) else Memo1.Lines.Add('Результат равен '+FloatToStrF(k,ffGeneral,8,2)); end; procedure TForm1.FormCreate(Sender: TObject); begin Edit1.text:='1'; Edit2.text:='1'; Memo1.Clear; Memo1.Lines.Add('Лаб. раб. №2 ФЗО ЭСБ 203201 Федосенко А.В.'); RadioGroup1.ItemIndex:=0; end; end. <br /><br /> Задание№3 (Тема: Программирование циклических алгоритмов) <br /><br /> Условие: <br /><br /> Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) для x изменяющихся от xn до xk с заданным количеством шагов n ( !!!ЯЯЯЯЯ!!). Близость значений S(x) и Y(x) во всем диапазоне значений x указывает на правильность вычисления S(x) и Y(x). =0.1, =0.5, S(x)= !!!ЯЯЯ!!! , n=60, Y(x)= !!!ЯЯЯЯ!!! <br /><br /> Решение: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, math; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Button1: TButton; Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Label5: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Edit1.Text:='0,1'; Edit2.Text:='0,5'; Edit3.Text:='0,25'; Edit4.Text:='0,0001'; Memo1.Clear; end; procedure TForm1.Button1Click(Sender: TObject); var xn,xk,x,h,e,a,s,y :extended; n:integer; begin Memo1.Clear; Memo1.Lines.Add('Результаты №3 ФЗО ЭСБ 203201 Федосенко А.В.'); xn:=StrToFloat(Edit1.Text); Memo1.Lines.Add(' xn='+FloatToStrF(xn,ffFixed,6,1)); xk:=StrToFloat(Edit2.Text); Memo1.Lines.Add(' xk='+FloatToStrF(xk,ffFixed,6,1)); h:=StrToFloat(Edit3.Text); Memo1.Lines.Add(' h='+FloatToStrF(h,ffFixed,8,2)); e:=StrToFloat(Edit4.Text); Memo1.Lines.Add(' e='+FloatToStrF(e,ffFixed,8,4)); x:=xn; repeat a:=x; S:=a; n:=0; while (abs(a)>e) do begin n:=n+1; a:=-a*Sqr(x); s:=s+a/(2*n+1); end; y:=ArcTan(x); Memo1.Lines.Add('при x='+FloatToStrF(x,ffFixed,6,2)+' сумма =' + FloatToStrF(s,ffFixed,8,4)+' y =' + FloatToStrF(y,ffFixed,8,4)+' N ='+IntToStr(n)); x:=x+h; until x>(xk+h/4) end; end. <br /><br /> Задание№4 (Тема: Программирование с использованием одномерных массивов) <br /><br /> Условие: Задан двухмерный массив целых чисел A размером M на N. Найти минимальный элемент, расположенный ниже побочной диагонали. Решение: <br /><br /> unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Math, Mxarrays, Grids, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Edit1: TEdit; Edit2: TEdit; Button1: TButton; StringGrid1: TStringGrid; Button2: TButton; StringGrid2: TStringGrid; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const Nmax=10; Type mas2 = array[1..Nmax,1..Nmax] of extended; mas1 = array[1..Nmax,1..Nmax] of extended; var Form1: TForm1; A:mas2; B:mas1; N,M,i,k:integer; max:extended; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin N:=3; M:=3; edit1.Text:=floattostr(N); edit2.Text:=floattostr(M); stringgrid1.RowCount:=N+1; stringgrid1.ColCount:=M+1; stringgrid2.colcount:=M+1; stringgrid1.Cells[0,0]:='Массив À:'; stringgrid2.Cells[0,0]:='Массив B:'; randomize(); for i:=1 to N do begin for k:=1 to M do begin stringgrid1.Cells[k,i]:=inttostr(random(40)-20); end; end; for i:=1 to N do stringgrid1.Cells[0,i]:='i='+inttostr(i); for k:=1 to M do begin stringgrid2.Cells[k,0]:='max'+inttostr(k); stringgrid1.Cells[k,0]:='k='+inttostr(k); end; end; procedure TForm1.Button1Click(Sender: TObject); begin N:=strtoint(edit1.Text); M:=strtoint(edit2.Text); stringgrid1.RowCount:=N+1; stringgrid1.ColCount:=M+1; stringgrid2.colcount:=M+1; for i:=1 to N do stringgrid1.Cells[0,i]:='i='+inttostr(i); for k:=1 to M do stringgrid1.Cells[k,0]:='k='+inttostr(k); end; procedure TForm1.Button2Click(Sender: TObject); begin try for i:=1 to N do for k:=1 to M do A[k,i]:=strtofloat(stringgrid1.Cells[k,i]); except on ERangeError do begin ShowMessage(‘Выход за пределы массива. Уменьшите размер массива’); Exit; end; on EConvertError do begin ShowMessage('В ячейке отсутствует значение либо число введено неправильно'); Exit; end; else begin ShowMessage('Возникла неизвестная исключительная ситуация!'); Exit; end; end; try for k:=1 to M do begin max:=A[k,1]; for i:=1 to N do begin if A[k,i]>max then max:=A[k,i] end; stringgrid2.Cells[k,1]:=floattostr(max); end; except on EOverFlow do begin MessageDlg(‘Перевыполнение при выполнении операции с плавающей точкой’,mtError,[mbCancel],0); Exit; end; else begin MessageDlg('Возникла неизвестная исключительная ситуация!',mtError,[mbCancel],0); Exit; end; end; end; end. <br /><br /> Задание№5 (Тема: Указатели. Программирование с использованием динамических двумерных массивов) Условие: <br /><br /> Составьте программу, оформив вычисления в виде подпрограммы (процедуры или функции). В головной программе произвести ввод исходных данных, вызов подпрограммы и вывод результатов. Дана квадратная целочисленная матрица N-го порядка. Упорядочить элементы в столбцах по убыванию. Решение: <br /><br /> #include <iostream.h> #include <iomanip.h> #include <math.h> int main() { double **a; int i, j, n, m, imin, jmin; cout << "Vvedite razmer: n, m" << endl; cin >> n >> m; a = new double*[n]; // Выделение памяти под массив указателей for(i=0; i<n; i++) // Выделение памяти под соответствующие a[i] = new double[m]; // этим указателям строки матрицы for (i=0; i<n; i++) for (j=0; j<m; j++) // Ввод двумерного массива { cout << "Vvedite a[" << i << "][" << j << "]: " ; cin >> a[i][j]; } cout << "Massiv A:" << endl; // Вывод двумерного массива for (i=0; i<n; i++) { for (j=0; j<m; j++) cout << setw (9) << a[i][j] << " "; cout << endl; } imin=1; // Присваиваем min первому элементу под главной диагональю jmin=0; for(i=2;i<n;i++) // условия сравнения элементов for(j=0;j<i;j++) { if( a[i][j]< a[imin][jmin]) // Поиск минимального значения { imin=i; jmin=j; } } cout << "Min = " << a[imin][jmin]<< endl; for(i=0; i<n; i++) delete[]a[i]; delete[]a; return 0; }