
- •Задание 1. Вычисление выражений. Использование стандартных функций.
- •Задание 2. Построение таблиц функций.
- •Задание 3. Организация циклов в программе
- •Задание 4. Работа с массивами чисел.
- •Задание 5. Работа с множественными типами данных
- •Задание 6. Операции над множествами
- •Задание 7. Работа с комбинированными типами данных
- •Задание 8. Работа с внешними файлами
- •Задание 9. Работа с упорядоченными файлами
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение высшего профессионального образования
«Московский государственный университет приборостроения и информатики»
Программная инженерия КБ-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