Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ekzamen_KhIO_I_semestr_-_shpori.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

3.Запрограмувати метод крамера

program Project2;

{$APPTYPE CONSOLE}

uses

SysUtils;

Type

Matrix = array [1..3,1..3]of real;

Vec = array [1..3]of real;

function det(a:matrix):real;

begin

det:=a[1,1]*a[2,2]*a[3,3]+a[2,1]*a[1,3]*a[3,2]+a[1,2]*a[2,3]*a[3,1]-a[3,1]*a[2,2]*a[1,3]-a[1,1]*a[3,2]*a[2,3]-a[2,1]*a[1,2]*a[3,3];

end;

var dx,dy,dz,x,y,z,k,l1,l2,l3:real;d:matrix;

var a:matrix=((3.2,-1.5,0.5),

(1.6,2.5,-1.0),

(1.0,4.1,-1.5));

var b:vec=(0.90,1.55,2.08);

begin

k:=det(a);

if k=0 then

writeln ('Nemaje roz')

else

begin

d:=a;

d[1,1]:=b[1];

d[2,1]:=b[2];

d[3,1]:=b[3];

dx:=det(d);

d:=a;

d[1,2]:=b[1];

d[2,2]:=b[2];

d[3,2]:=b[3];

dy:=det(d);

d:=a;

d[1,3]:=b[1];

d[2,3]:=b[2];

d[3,3]:=b[3];

dz:=det(d);

x:=dx/k;

y:=dy/k;

z:=dz/k;

writeln('x=',x:3:2);

writeln('y=',y:3:2);

writeln('z=',z:3:2);

//Перевірка

l1:=a[1,1]*x+a[1,2]*y+a[1,3]*z;

l2:=a[2,1]*x+a[2,2]*y+a[2,3]*z;

l3:=a[3,1]*x+a[3,2]*y+a[3,3]*z;

writeln('p1=',l1:3:2);

writeln('p2=',l2:3:2);

writeln('p3=',l3:3:2);

end;

readln;

end.

4.Написати функцію побудови і табулювання ряду Фур’є(за блок схемою)

Фурьє

float T = 0.001;

float w = 2.0 * 3.14 / T;

float kg = 7;

//int n = 200;

float a[100], b[100];

float t;

int i,k;

float x[201], y[201];

float f(float t)

{

if ((t>=0)&&(t<=0.6*T))

{ float f=8;

return f;

}

if ((t>=0.6*T)&&(t<=T))

{ float f=(-8*(t-0.6*T))/(0.4*T)+8;

return f;

}

}

float F(float t)

{

float sum = 0.0;

for (int k = 1; k <= kg; k++) {

sum += a[k] * cos((float)k * w * t) + b[k] * sin((float)k * w * t);

}

return sum += a[0] / 2.0;

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

hell.n=200;

hell.h = T / hell.n;

for (i=1; i <= hell.n; i++)

{

x[i]= (float)(i-1) * hell.h;

y[i]= f((float)(i-1) * hell.h);

}

for (i=1; i<=hell.n; i++)

{

Memo1->Lines->Add(x[i]);

Memo2->Lines->Add(y[i]);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{ hell.n=200;

Image1->Canvas->MoveTo(x[0]*100000,y[0]*10-200);

for (i=1; i <= hell.n; i++)

{

Image1->Canvas->LineTo(x[i]*100000,-y[i]*10+200);

}

Image1->Canvas->MoveTo(0,0);

Image1->Canvas->LineTo(0,400);

Image1->Canvas->MoveTo(0,200);

Image1->Canvas->LineTo(500,200);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{ hell.n=200;

float sum = 0.0;

for (i = 1; i <= hell.n; i++) {

sum += y[i];

}

a[0] = sum * 2.0 * hell.h / T;

Edit1->Text=a[0];

b[0] = 0.0;

for (k = 1; k <= kg; k++) {

a[k] = 0.0;

for (i = 1; i <= hell.n; i++) {

a[k] += y[i] * cos((float)k * x[i] * w);

}

a[k] = a[k] * 2.0 * hell.h / T;

b[k] = 0.0;

for (i = 1; i <= hell.n; i++) {

b[k] += y[i] * sin((float)k * x[i] * w);

}

b[k] *= 2.0 * hell.h / T;

}

Image1->Canvas->Pen->Color=clRed;

Image1->Canvas->MoveTo(x[0]*100000,-F(x[0])*10+200);

for (i=1; i <= hell.n; i++)

{

Image1->Canvas->LineTo(x[i]*100000,-F(x[i])*10+200);

}

}

//---------------------------------------------------------------------------

Білет6 1.Записи.ОператорWith. Запис являє собою сукупність обмеженого числа логічно зв'язаних компонент, що належать до різних типів. Компоненти запису називаються полями, кожне з яких визначається ім'ям. Поле запису містить ім'я поля, слідом за яким через двокрапку вказується тип цього поля. Поля запису можуть відноситися до будь-якого типу, допустимого в мові Паскаль, за винятком файлового типу.Опис запису в мові Паскаль здійснюється за допомогою службового слова рекорд, слідом за яким описуються компоненти запису. Завершується опис записи службовим словом кінця.Наприклад, телефонний довідник містить прізвища і номери телефонів, тому окремий рядок в такому довіднику зручно представити у вигляді наступного запису:

type TRec = Record

FIO: String[20];

TEL: String[7]

end;

var rec: TRec;

Опис записів можливий і без використання імені типу, наприклад:

var rec: Record

FIO: String[20];

TEL: String[7]

end;

Звернення до запису в цілому допускається тільки в операторах присвоювання, де ліворуч і праворуч від знака присвоювання використовуються імена записів однакового типу. У всіх інших випадках оперують окремими полями записів. Щоб звернутися до окремій компоненті записи, необхідно задати ім'я запису і через крапку вказати ім'я потрібного поля, наприклад:

rec.FIO, rec.TEL

Звернення до компонентів записів можна спростити, якщо скористатися оператором приєднання With.

Оператор приєднання With – зрунчість, забеспечена Delphi для того, щоб посилатися на елементи складної змінної, запису або об’єкта.

Це спрощує код, забираючи необхідність в префіксі для кожного згаданого елемента змінної зі складним іменем.

Наприклад:

myObject.colour:= clRed;

myObject.size:= 23.5;

myObject.name:= 'Fred';

Може бути перезаписаний:

With myObject do

begin

colour:= clRed;

size:= 23.5;

name:= 'Fred';

end;

Однак будьте обережні, так як його використання може зробити код складнішим для сприйняття.

В межах With, Delphi пробує вирішити ці «неповні» посилання, дивлячись спочатку на адресат, який стоїть після With. Далі переглядаються інші типи даних, типи локальних змінних, параметри підпрограм і т.д. Через це, можуть виникнути деякі проблеми з оператором With.

2. Операції над різними типами даних в С++ Арифметичні операції

В мові програмування вирази складаються з операндів (змінних, Констант, викликів функцій) з’єднаних знаком операції і дужками. Знак операції – це символ, або група символів . які повідомляють компілятору про необхідність виконання певних арифметичних операцій (або логічних, чи ін.).

Розглянемо операції порівняння.

Операція == означає дорівнює, != -не дорівнює, <= -менше або дорівнює, >= -більше або дорівнює.

Операції виконуються у суворій послідовності. Фактор, що визначає перважне право на виконання назив. Пріоритетом.

Розрізняють унарні та бінарні операції. У перших з них 1 операнд, а у других 2.

Унарні :

- арифметичні

- логічні операції і операції відношення

- операції з бітами

Приклад: а=а+5 це те саме що й а+=5

Операції інкременту (++) ти декременту (--).

Операції інкременту ти декременту існують у двох формах – префіксній та постфіксній. Якщо символи ++ (--) записані перед змінною, то це інкремент (декремент) у префіксній формі, а якщо після змінної – то в постфіксній. Операція інкременту має такий вигляд:

++<змінна> або <змінна>++

Значення змінної збільшується на одиницю. Команди а++ та ++а –рівносильні команді а=а+1. Форма інкременту (декременту) впливає тільки на порядок виконання операції у виразах. (тобто - чи спочатку збільшується значення а на 1, А потім обчислюється вираз. Чи спочатку обчислюється вираз. А потім змінюється значення змінної а).

Аналогічно операція декременту має такий вигляд :

--<змінна> або <змінна>--

Значення змінної зменшується на одиницю.

Для вказівників:

&- взяття адреси

*- звернення за адресою

Логічні операції

В мові програмування вирази складаються з операндів (змінних, Констант, викликів функцій) з’єднаних знаком операції і дужками. Знак операції – це символ, або група символів . які повідомляють компілятору про необхідність виконання певних арифметичних операцій (або логічних, чи ін.).

Операції виконуються у суворій послідовності. Фактор, що визначає перважне право на виконання назив. Пріоритетом. Логічні операції мають 4 пріорітет.

Розглянемо операції порівняння.

Операція == означає дорівнює, != -не дорівнює, <= -менше або дорівнює, >= -більше або дорівнює, < -менше, > -більше.

Побітові операції

Ці операції можна застосувати до змінних, що мають тип int, char, та їхніх варіантів (long int і т.д.).

Їх не можна застосовувати до змінних типу float, double, void (до складніших типів).

Ці операції задаються наступними чинами : ~,<<,>>,&,^,|

~ - порозрядне заперечення:

Якщо а=0000 1111, то ~а=1111 0000

^ - заперечне лог. АБО: а=0000 1111 і b =1000 1000 , то а^ b =1000 0111

& -порозрядне лог. І: якщо а=0000 1111 і b =1000 1000, то а& b =0000 1000

| - АБО: якщо а=0000 1111, b =1000 1000, то а| b =1000 1111

<< - зсув ліворуч: а=0000 1111, то а<<1=0001 1110

>> - зсув праворуч: якщо а=0000 1111, то а>>1=0000 0111

! – лог. Заперечення

&& - лог. I

|| - лог. АБО

= - присвоєння (х=1, х=а=у=100)

?: - умовна (тернарна) операція

У виразі у=х?а: b

У=а, якщо х не дорівнює (істинно), У= b, якщо х дорівнює (хибно).

Вираз у=х?а: b дозволяє присвоїти змінній у значення більшої змінної (а або b), тобто у=max(a,b)

3.Квадратне_віконка unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Button1: TButton;

Button3: TButton;

Edit4: TEdit;

Label5: TLabel;

procedure Button1Click(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,b,c:real;

d,x1,x2:real;

s1,s2:string[6];code:integer;

begin

a:=Strtofloat(Edit1.Text);

b:=Strtofloat(Edit2.Text);

c:=Strtofloat(Edit3.Text);

d:=b*b-4*a*c;

if a=0 then Edit4.Text:='Це не квадратне рівняння!';

if d<0 then Edit4.Text:='Немає коренів';

if d=0 then

begin

x1:=-b/(2*a);

Edit4.Text:=FloatToStrF(x1,fffixed,4,2)

end;

if d>0 then

begin

x1:=(-b-sqrt(d))/(2*a);

x2:=(-b+sqrt(d))/(2*a);

Edit4.Text:='x1='+FloatToStrF(x1,fffixed,4,2)+' x2='+FloatToStrF(x2,fffixed,4,2);

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

close

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]