Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
programming - Александр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.71 Mб
Скачать

Министерство образования и науки Российской Федерации

Государственное образовательное учреждение высшего профессионального образования

«Московский государственный университет приборостроения и информатики»

Программная инженерия КБ-03

Домашняя работа №1

Программирование

Выполнил:

студент 1 курса

факультета КБ-03

специальности 09.03.04

Смиркин А.А.

Москва 2015

Лабораторная работа № 1

Решение квадратного уравнения.

Рассмотрим квадратное уравнение Ах2 + Вх + С = 0

Сначала следует задать значения коэффициентов А, В, С. В разделе описания опишем А, В и С как переменные: VAR А,В,С: REAL ;

Вводить значения А,В,С будем с помощью оператора ввода READLN (А,В,С);

Известно, что кор­ни квадратного уравнения вычисляются по формуле:

Несмотря на кажущуюся простоту этой формулы, воспользова­ться ею в программе без предварительного анализа нельзя, т.к. она при А = 0 теряет смысл, а при В2 - 4АС<0 корни бу­дут комплексными, а ЭВМ может работать только с действительными числами. Для получения решения в общем случае нужно в алгорит­ме предусмотреть две ветви получения расписания: для случая действительных корней и для случая комплексных. В последнем случае нужно вычислить действительные и мнимые части корней.

Анализ показывает, что рассматриваемая задача допускает 6 вариантов решения в зависимости от численного значения коэф­фициентов:

А = В = С = 0 - решений бесконечно много, х - любое число;

А = В = О, С  0 - решений не существует;

А = 0; В  0 - единственное решение х = - С/В;

А  0; В2 - 4АС = 0 - кратные корни х1 = х2 = - В/2А;

А  0; В2 - 4АС > 0 - два вещественных корня:

А  0; B2 - 4АС<0 - два комплексно-сопряженных корня.

Вариант решения с использованием оператора IF без GOTO

Program lab1_1;

var a, b, c, d, e, d1, x1, x2 : real;

begin

writeln ('введите a, b, c'); readln (a, b, c);

if ((a=0) and (b=0) and (c=0)) then writeln ('x-любое число');

if ((a=0) and (b=0) and (c<>0)) then writeln ('решений нет');

if ((a=0) and (b<>0)) then writeln ('корень один x = ', -c/b);

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

e:= 2*a;

d1:= sqrt(abs(d));

if ((a<>0) and (d=0)) then writeln ('корни кратные x1 = x2 = ', -b/e);

if ((a<>0) and (d>0)) then

begin

writeln ('корни действительные');

writeln ('x1 = ', (-b+d1)/e);

writeln ('x2 = ', (-b-d1)/e);

end;

if ((a<>0) and (d<0)) then

begin

writeln ('корни комплексно-сопряженные');

writeln ('x1 = ', -b/e, ' -i* ', d1/e);

writeln ('x2 = ', -b/e, ' +i* ', d1/e);

end;

end.

А

В

С

результат

0

0

0

x – любое число

0

0

0,8

решений нет

0

16

20

корень один x = -1.25

1

2

1

корни кратные x1 = x2 = -1

2

5

3

корни действительные x1 = -1, x2 = -1.5

2,3

7,65

4,2

корни действительные x1 = -0.693700064364498,

x2 = -2.63238689215724

2,38

1,42

14,26

корни комплексно-сопряженные

x1 = -0.298319327731092 – i * 2.42952715921381

x2 = -0.298319327731092 + i * 2.42952715921381


Результаты выполнения программы для варианта №9

При A = 15,1 B = 40,03 C = 201 вывод:

корни комплексно-сопряженные

x1 = -1.32549668874172 -i* 3.3991641334717

x2 = -1.32549668874172 +i* 3.3991641334717

Вариант решения с использованием оператора CASE без GOTO

Program lab1_2;

var a, b, c, d, e, d1, x1, x2 : real;

begin

writeln ('введите a, b, c'); readln (a, b, c);

case ((a=0) and (b=0) and (c=0)) of

true: writeln ('x - любое число');

false:

case ((a=0) and (b=0) and (c<>0)) of

true: writeln ('решений нет');

false:

case ((a=0) and (b<>0)) of

true: writeln ('корень один x = ', -c/b);

false:

begin

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

e:= 2*a; d1:= sqrt(abs(d));

case ((a<>0) and (d=0)) of

true: writeln ('корни кратные x1 = x2 = ', -b/e);

false:

case ((a<>0) and (d>0)) of

true:

begin

writeln ('корни действительные');

writeln ('x1 = ', (-b+d1)/e);

writeln ('x2 = ', (-b-d1)/e);

end;

false:

case ((a<>0) and (d<0)) of

true:

begin

writeln ('корни комплексно сопряженные');

writeln ('x1 = ', -b/e, ' - i * ', d1/e);

writeln ('x2 = ', -b/e, ' + i * ', d1/e);

end;

end;

end;

end;

end;

end;

end;

end;

end.

Результаты выполнения программы

А

В

С

результат

0

0

0

x – любое число

0

0

0,8

решений нет

0

16

20

корень один x = -1.25

1

2

1

корни кратные x1 = x2 = -1

2

5

3

корни действительные x1 = -1, x2 = -1.5

2,3

7,65

4,2

корни действительные x1 = -0.693700064364498,

x2 = -2.63238689215724

2,38

1,42

14,26

корни комплексно-сопряженные

x1 = -0.298319327731092 – i * 2.42952715921381

x2 = -0.298319327731092 + i * 2.42952715921381

Результаты выполнения программы для варианта №9

При A = 15,1 B = 40,03 C = 201 вывод:

корни комплексно-сопряженные

x1 = -1.32549668874172 -i* 3.3991641334717

x2 = -1.32549668874172 +i* 3.3991641334717

Задание 1. Вычисление выражений. Использование стандартных функций.

Найти значение функции при Х=12.7409. Используя стандартные функции,

вычислить Y11=[Y], где [ ] означают целую часть от числа Y22.

Записать выражение, зависящее от координат точки X1 и Y2 и принимающее значение TRUE, если точка принадлежит заштрихованной области, и FALSE, если не принадлежит. Для заданной точки (0.2;0.9) вычислить это выражение и результат выдать на печать.

Program dz1;

var x, x1, y1, y : real;

begin

writeln ( 'введите x:');

readln (x);

y:= sqrt(abs(x-1)+sin(x));

writeln (' При x = ', x: 2:3, ', y = ', y: 2:4);

writeln (' y11 = ', trunc(y): 2, ', y22 = ', round(y): 2);

writeln ('введите координаты: x1, y1');

readln (x1, y1);

writeln (((y1<1-x1) and (y1<1+x1) and (y1>x1-1) and (y1>-x1-1)));

writeln (' Программу составил Смиркин');

end.

Результаты выполнения программы:

введите x:

12.7409

При x = 12.741, y = 3.4517

y11 = 3, y22 = 3

введите координаты: x1, y1

0.2

0.9

False

Программу составил Смиркин

Задание 2. Построение таблиц функций.

Составить программу вычисления значений функции cos(1/x) на отрезке [ /4, 4/ ] в точках X1= /4+Н, где Н=( 4/ - /4)/20.

Program dz2;

var a, h, x1 : real;

k, m : integer;

begin

m:= 20;

h:=(4/Pi - Pi/4)/m;

a:=Pi/4;

for k:=1 to m-1 do

begin

x1:=cos(a);

a:=a+h;

writeln(' cos(', a, ') = ', x1);

end;

end.

Результаты выполнения программы:

cos(0.809790232464334) = 0.707106781186548

cos(0.83418230153122) = 0.689650349716516

cos(0.858574370598105) = 0.671783615229827

cos(0.882966439664991) = 0.653517207424647

cos(0.907358508731877) = 0.6348619937822

cos(0.931750577798763) = 0.615829073101227

cos(0.956142646865648) = 0.596429768894832

cos(0.980534715932534) = 0.576675622653625

cos(1.00492678499942) = 0.556578386979194

cos(1.02931885406631) = 0.536150018591965

cos(1.05371092313319) = 0.515402671217632

cos(1.07810299220008) = 0.494348688356373

cos(1.10249506126696) = 0.473000595939169

cos(1.12688713033385) = 0.451371094875577

cos(1.15127919940073) = 0.429473053497411

cos(1.17567126846762) = 0.407319499902808

cos(1.20006333753451) = 0.384923614205245

cos(1.22445540660139) = 0.36229872069212

cos(1.24884747566828) = 0.339458279897547

Задание 3. Организация циклов в программе

Используя оператор цикла, найти сумму ряда с точностью , общий член которого

Результат напечатать, снабдив соответствующим заголовком.

Первый вариант программы.

Program dom3_1;

const e=1e-3;

var

n, i:integer;

summa,a_n,chisl,znam, factorial:real;

begin

writeln('a(n)=(n!)/(n^n), e = ',e);

summa:=0;

n:=1;

chisl:=1;

znam:=Power(n,n);

a_n:=chisl/znam;

while abs(a_n)>e do

begin

factorial := 1;

for i:=2 to n do

factorial := factorial * i;

chisl:=factorial;

znam:=Power(n,n);

a_n:=chisl/znam;

summa:=summa+a_n;

writeln ('n = ',n ,', a_n =',a_n ,', summa =', summa);

n:=n+1;

end;

writeln (' Сумма = ', summa, ', Последний член ряда = ', a_n);

writeln ('-------------------------------');

readln;

end.

Результаты выполнения программы:

a(n)=(n!)/(n^n), e = 0.001

n = 1, a_n =1, summa =1

n = 2, a_n =0.5, summa =1.5

n = 3, a_n =0.222222222222222, summa =1.72222222222222

n = 4, a_n =0.09375, summa =1.81597222222222

n = 5, a_n =0.0384, summa =1.85437222222222

n = 6, a_n =0.0154320987654321, summa =1.86980432098765

n = 7, a_n =0.00611989902166614, summa =1.87592422000932

n = 8, a_n =0.00240325927734375, summa =1.87832747928666

n = 9, a_n =0.000936656708416885, summa =1.87926413599508

Сумма = 1.87926413599508, Последний член ряда = 0.000936656708416885

-------------------------------

Второй вариант прораммы.

Program dz3_2;

const e=0.1e-2;

var n: integer; an, summa: real;

begin

summa:=1; n:=1; an:=1;

while an>e do

begin

an:= an * (Power(n,n) * (n+1))/ (Power(n+1,n+1));

summa:= summa + an; n:=n+1;

end;

writeln(' Сумма = ', summa,' Последний член ряда = ',an);

end.

Результаты выполнения программы:

Сумма = 1.87926413599508 , Последний член ряда = 0.000936656708416885

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