Главная страница

Лабы. ЛабРаб_С_Шафеева. Методические указания к лабораторным работам Омск 2008 Составители Ольга Павловна Шафеева, канд техн наук, доцент


Скачать 0.93 Mb.
НазваниеМетодические указания к лабораторным работам Омск 2008 Составители Ольга Павловна Шафеева, канд техн наук, доцент
Дата17.12.2020
Размер0.93 Mb.
Формат файлаdoc
Имя файлаЛабРаб_С_Шафеева.doc
ТипМетодические указания
#161701
страница3 из 8
1   2   3   4   5   6   7   8

Задание 1 (программа 1_1)




x1

x2

a

b

c

Вычислить

1

2

3

4

5

6

7

1

1

2

1.5

2

-0.7



2

1

2

0.7

-

2.1



3

0

2

2

1.2

1



4

1

2

4.1

-2.3

-



5

-1

1

0.5

2

1.5



6

2

4

0.5

1.3

-



7

0

2

0.5

1

-



8

-1

1

2.7

1.7

-



9

0

π/2

2

0.7

0.5



10

1

0

0.5

2.9

1.5



11

1

2

1.5

-1.2

-



12

1

2

0.5

1.7

2



13

-1

1

0.5

1.2

-



14

1

2

0.5

3.1

-



1

2

3

4

5

6

7

15

1

2

0.5

3.2

-



16

0

1

1

2

4



17

0

1

1

3

-



18

-1

2

1

2

-



19

1

2

2

3

1



20

-1

1

2

π/6

0,5




Задание 2 (программа 1_2)

  1. Идет k секунда суток. Определить, сколько целых часов (h) и целых минут (m) и секунд (s) прошло к этому моменту.

  2. Определить площадь трапеции с основаниями а, b, высотой h и объем усеченного конуса, если считать а, b - площадями оснований.

3. Определить координаты центра тяжести трех материальных точек с массами m1,m2,m3 и координатами (x1,y1), (x2,y2), (x3,y3).

4. Вычислить по заданному радиусу R объем шара и площадь круга, найти соотношение между ними.

5. Вычислить медианы треугольника по заданным сторонам a, b, c.

6. Вычислить площадь поверхности и объем конуса по заданным радиусам и высоте h.

7. По заданному радиусу найти объем шара и площадь поверхности.

8. Вычислить, какая идет секунда суток при положении стрелок в h часов, m минут и s секунд, а также угол (в градусах) между положением часовой стрелки в начале суток и ее положением в указанный момент.

9. Ввести двузначное целое число х<15. Написать программу перевода его в восьмеричную систему счисления.

10. Ввести координаты двух точек (х1, y1), (x2,y2). Найти расстояние между ними.

Лабораторная работа 2

Программирование разветвленных алгоритмов.

Операторы передачи управления
Структура условного оператора передачи управления:

if (<выражение>) <оператор 1> else <оператор 2>;

(Если) (иначе) - ключевые слова,

где <условие> - это произвольное выражение логического типа, которое может принимать два значения: истина (TRUE) и ложь (FALSE);

<оператор> - любой оператор языка СИ, заканчивается точкой с запятой.

Сокращенная форма условного оператора:

if (<выражение>) <оператор>;

Оператор безусловного перехода: goto <идентификатор-метка>;

Меткой является идентификатор. Метка размещается перед оператором С/С++, к которому выполняется переход и отделяется двоеточием (:).

Пример 1. Составить программу для начисления базовой зарплаты согласно следующему правилу: если стаж работы сотрудника менее трех лет, то зарплата равна 100$, при стаже работы от трех до 5 лет - 150$, свыше 5 лет зарплата повышается с каждым годом на 10$, причем при стаже, превышающем 20 лет, она составляет 300$.

Для программирования решения этой задачи определим математичес­кую формулировку задачи:

100, если ST < 3;

ZP= 150, если 3 ≤ST  5;

150+ (ST -5)*10, если 5 < ST≤ 20;

300, если ST > 20;

где ZP - зарплата, ST - стаж работы. Далее построим СА (рис.2,а), ей соответствует следующая программа:

#include

#include

void main ()

{ int ST; // ST - стаж (байтовый (целый) тип беззнаковый)

float ZP; // ZP - зарплата (плавающий тип)

printf ("\n Введите стаж ");

scanf ("%d",&ST);

if (ST<3) ZP = 100;

else if (ST<5) ZP = 150;

else if (ST>=20) ZP=300;

else ZP=150+(ST- 5)*10;

printf ("\n Зарплата = %10.2f$\n",ZP);

getch();

}

Оператор выбора switch позволяет в зависимости от значения ка­кой-либо переменной или выражения (ключа выбора) выполнить те или иные операторы, помеченные соответствующими константами.

Структура оператора:

switch (<выражение> )

{

case <константа 1>: <группа операторов 1>;

case <константа 2>: <группа операторов 2>;

. . .

case <константа N>: <группа операторов N>

default: <операторы>;


}

где <выражение> - выражение (переменная) любого порядкового типа;

<константа> - константа того же типа, что и <выражение>;

<оператор> - произвольный оператор C/C++.
Пример 2.Напечатать в зависимости от числа углов название фигуры (треугольник, четырехугольник, пятиугольник, шестиугольник, многоугольник).

Вариант реализации задачи с применением оператора выбора представлен СА (рис.2,б) и следующей программой:

#include

#include

void main ()

{

int T; // T – число углов

clrscr(); // очистка экрана

printf ("Введите число углов ");

scanf ("%d",&T);

switch (T)

{

case 1: case 2 : printf ("Это не фигура\n "); break;

case 3: printf ("С %d углами - треугольник\n ", T); break;

case 4: printf ("С %d углами - четырехугольник\n ", T); break;

case 5 : printf ("С %d углами - пятиугольник\n ", T ); break;

case 6: printf ("С %d углами - шестиугольник\n ", T ); break;

default : printf ("С %d углами - многоугольник\n ", T );

}

getch();

}

Задание 1 (программа 2_1)

Вычислить значение функции в зависимости от интервала, в который попадает вводимый с клавиатуры аргумент:

1 . Для t [0,3], a t2 ln t при 1 ,

где a=-0.5,b=2 z = 1 при t<1,

e a t cos b t при t>2,
2 . Для x [0,4], при x2,

где а=2.3 f = х при 0.3< x  2,

cos(x-a) при x ,
3 . Для x [0,7], (a+b)/(ex+cosx) при 0  x2.3,

где a=-2.7,b=-0.27 z = (a+b)/(x+1) при 2.3 x5,

ex+sinx при 7 ,
4 . Для i [7,12], a i4 + b i при i< 10,

где a=2.2,b=0.3. y = tg(i + 0.5) при i = 10,

e2i + при i >10,
5 . Для x [0.9,5], x2 - 7/x2 при x<1.3,

где a=1.5 y = ax3 + 7 при 1.3  x3,

lg(x + 7 ) при x ,
6 . Для t [-1.4], при t<0.1,

где a=2.1,b=0.37. z = at + b при 0.1 t 2,

при t ,

7 . Для x [0,6], a esin x +2.5 при x<0.3,

где a=1.5. y = ecos x + a при 0.3 x<4,
(sin x)/ (a + ex) при x  4,

8. Для x [1,2], y = a/x + b x2 - c при x ,

где a=1.8,b=-0.5, c=3.5 (a + bx)/ при x>1.2,

9 . Для t [1,5], t при t>a,

где a=2.5 z = t sin a t при t=a,

e-at cos a t при t



10. Для x [0,4], e-bx sin b x при x<2.3,

где a=1,b=3. y= сos bx при 2.3 ,

e-ax cos b x при x
1 1. Для t [0.5,3], a t2 – b при t
где a=1.3,b=6.5 z= a - b при a

a t2/3 - при t>b,




12. Для x [0,2], |e-2x sin bx| при x >1,

где b=-2.9 y = cos bx при x = 1,

e-x cos bx при x < 1,




13. Для x [0.5,2] sin (cos a x) при x >1,

где a=-0.8 z = tg ax при x = 1,

a2 x при x < 1,
1 4. Для x [1,2], ln bx - 1/(bx+1) при x < 1.3,

где b=1.3. y = bx + 1 при 1.3  x  1.7,

ln bx +1/(bx+1) при x > 1.7,




15. Для x [-1,1], ax2+bx2/3 при x<0.1,

где a=2.5,b=-0.9. z= a x2 при x=0.1,

b x2/3 при x>0.1.
16. Ввести координаты точки (x, y). Напечатать, в каком квадранте или на какой оси координат находится эта точка.

17. Ввести радиусы R1, R2 и высоту. Вычислить объем усеченного конуса: , где S- площадь оснований. Если R1 = R2 - объем и площадь цилиндра, если R1 = 0 или R2 = 0 - объем (hπr2) и площадь πr( ) поверхности конуса.

18. Ввести с клавиатуры цифру. Определить, какой системе счисления она может принадлежать.

19. Ввести число. Определить, делится ли оно нацело на два, три или пять.

20. Ввести a, b, h. Если h=0, вычислить площадь прямоугольника; при a = b, найти площадь квадрата; в противном случае подсчитать площадь трапеции.
Задание 2 (программа 2_2)

1. Определить остаток от деления на восемь введенного числа х и написать восьмиричную цифру прописью.

2. По цифре, введенной с клавиатуры, напечатать название этой цифры.

3. С клавиатуры ввести число k (1..30). Определить, какому дню недели оно соответствует, если первое число - понедельник.

4. Ввести число и номер месяца. Напечатать дату прописью.

5. Идет k секунда суток. Вычислить, сколько прошло часов и полных минут к этому моменту, при этом согласовать со значением слова (час, часа, часов, минута, минуты, минут).

6. В зависимости от номера (N) типа фигуры, организовать ввод необходимых данных и вычислить при N = 1 - площадь круга, N = 2 - объем шара (4/3πR3), N=3 -объем цилиндра, N = 4 - площадь поверхности сферы 4πr2.

7. Ввести число N (0 ≤ N ≤ 15). Определить и напечатать шестнадцатеричную цифру, ему соответствующую.

8. Для целого числа К (1…99) напечатать фразу « Мне К лет », при определенных значениях К слово «лет» заменить словом «год» или «года».

9. В зависимости от номера (N) типа фигуры, организовать ввод необходимых данных и вычислить при N = 1 - площадь прямоугольника, при N=2 - площадь параллелограмма, при N = 3 - площадь трапеции 1/2(a+b)h. В последнем случае напечатать: является ли трапеция параллелограммом или ромбом.

10. Перевести число 0 ≤ х ≤ 31 в шестнадцатеричную систему счисления.

11. Напечатать прописью остаток от деления любого целого числа на пять.

12. По введенному номеру напечатать нужный цвет в радуге.

13. Спроектируйте программу, которая показывает, что, если сумма цифр двузначного числа кратна трем, то и само число делится на три без остатка.

14. Разработайте программу, которая доказывает, что квадрат двузначного числа k5 (последняя цифра - 5), равен k * (k + 1) * 100 + 25 (т.е. может быть получен умножением старшей цифры k на следующую по порядку и припиской «25»). Например, 35 * 11 = 3*4*100 + 25.

Для задания 2 номер варианта определяется остатком от деления индивидуалного варианта на число 12.

Лабораторная работа 3

Программирование циклических алгоритмов с заданным

числом повторений

Оператор цикла с счетчиком:

for (<выражение1> ; <условие выполнения> ; <выражение2>) <оператор>;

где <выражение1> - это выражение инициализации цикла (может содержать несколько операторов, разделенных запятыми);

<выражение2> - изменение параметра цикла (не обязательно целое).
Пример 1. Вычислить сумму элементов s=1+1/4+1/9+1/16+... .

На основе анализа изменения параметра знаменателя определим алгоритм решения за­дачи (pис. 3) и напишем программу:

#include

# include

void main ()

{

float s = 0, r;

int i,N;

clrscr(); //очистка экрана

printf ("\n Введите N ");

scanf ("%d",&N);

for ( i=1; i<=N; i++ )

{

r = 1.0/ (i*i);

s+ = r; // s = s + r

}

printf ("Сумма = %6.2f\n ",s);

getch();

}

Пример 2. Вычислить значения двух функций F1(x) = tg(x) и F2(x) = sin(x) в n точках, рав­номерно распределенных на интервале a ≤ x ≤ b, где a = -π/4, b = π.

Для реализации первого варианта данной задачи разработана СА (pис. 4) и cледующая программа:

# include

#include

#include

# define b 3.1415

void main ()

{

float F1, F2, x, dx, a = - b/4; // dx - шаг изменения x

int i, n; // i - переменная цикла

clrscr(); // очистка экрана

printf ("Введите число точек \n");

scanf ("%d", & n);

dx = fabs(b-a)/(n-1);

x = a;

printf (" ___________________ \n");

printf ("| I | X | F1 | F2 | \n");

printf ("|---|--------|--------|--------|\n");

for ( i=1; i<=n; ++i ) // оператор цикла

{ F2 = sin(x);

F1 = tan(x); // вычисление tg x

printf (" |%3d| %8.3f |%8.4f| %8.4f|\n", i, x, F1, F2);

x=x+dx; // x += dx

}

printf (" ____________________ \n");

getch();

}

Если точки не нумеровать, можно в цикле применить параметр х и шаг изменения dx. Тогда во втором варианте программы оператор цикла имеет вид: for ( x = a; x <= b + dx/2; x+ = dx ) { . . . }
Задание 1 (программа 3_1)

Для заданных с клавиатуры значений переменных x и n вычислить

1. X = 1 + 1/2 + 1/3 + ... + 1/10. 2. Z = 2. 4. 6. 8. ... .20.

3. Y = -x + 4x - 9x + ... - 81 x.. 4. Y = x + x/3 + x/5 + ... + x/17.

5. Y = n! = 1. 2 . 3 .....n. 6. Y = 1 - 3 + 32 - 33 + . . . + 310.

7. Y= x2/(2i-1). 8. Z = (x+i)/i. 9. Y= x2/i.

10. Y = 1 + x/2 + x2/4 + x3/6 + ... + xi/2i + ... + x9 /18 .

11. Y = 1 + x2/1! + x4/2! + x6/3! + … + x20/10! = 1 + x2i/i!.

12. Y = 1 - x +x3/3! -x5/5!+ ...+(-1)n x2n-1/(2n-1)!+ ... +x11/11!.

13. е = 1 + 1/1! + 1/2! + ... + 1/n! + ... (сравнить результат со значением функции EXP(1), определенной в Паскале).

14. π = 4(1-1/3+1/5-1/7+…+(-1)n/(2n+1)+…) (результаты сравнить с определенным в языке Паскаль числом Pi).

15. Y = arctg x = x - x3/3 + x5/5- ... + (-1)n x2n+1/(2n+1)+ ... (|х|<1).

16. Z = LN(1+x) = x - x2/2 + x3/3 - ... + (-1)n-1 xn/n + ... (|x|<1).

17. S = x - x3/3! + x5/5! - ... +(-1)n x2n+1/(2n+1)! + ... .

18. Вычислить суммы положительных и отрицательных значений функции z = cos(nx + a) sin(nx-a), где n = 1,2,...,5, a и x - вещественные числа.

19. Вычислить сумму четных и сумму нечетных чисел натурального ряда до N.

20. Найти сумму факториала M= i !.

Задание 2 (программа 3_2, программа 3_3)

Вычислить значения двух функций в n равномерно распределенных в диапазоне а≤x≤b точках. Результаты оформить в виде таблицы.


№ п/п

a

b

n

F1(х)

F2(х)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

0

1

-1

-2

0

-

-1

-4

1

1

0

-

0

1

2

2

0

1

3

1


2

2

5

5





3

4

3

4

2





2

4

4

5

2

4

3


20

18

15

14

16

20

20

12

15

20

20

18

16

12

10

16

18
15

18


sin x cos x

1+2x+5

4e-|x|-1

| x+10|5

2 sin 2x +1

2-cos x

2-x/100

x3e2x



1/(1+ )

5-3 cos x

|sinx|+|cosx|

e-x+cos2x

e-x lg

x cos x/2

2x lg x - 3x lg x

3-x/50

e2x - sin x

2x arctg x - 5


sin x + cos x -1

(x-1)3

cos x

e-(x+5)

(x+5)3 (1+sin2x)

20/(1+x2)

ex sin x

x ln2 x

2x/(1-4x)



|sin x| - |cos x|

e -2x

x + sin x

+ e -x

ctg x

x e -x +ln x

10/(2+x2)

e axx

е2x lg x - 33x
Лабораторная работа 4

Программирование циклических алгоритмов с предусловием
Цель работы: научиться разрабатывать и отлаживать программы с неразветвленными и разветвленными циклами, управляемыми условиями.

Структура оператора цикла с предусловием (с предварительной про­веркой условия):

while ( <выражение>) <оператор>;

где <выражение> - это любое логическое выражение, <оператор> - это про­извольный оператор Си, в том числе и составной.

Пример. Для трех значений а = 0.1, 0.2, 0.3 протабулировать функцию y=a.tg(x/4) при изменении аргумента x на интервале [0.5,0.9] с шагом, равным a.

Д ля СА (рис.5) решения данной задачи программа может быть следующей:

#include

#include

#include

void main ()

{

float a,x,y;

clrscr();

printf ("-------------------------------\n");

printf (" a| x| y |\n");

printf ("-------------------------------\n");

a=0.1;

while (a<=0.31)

{ printf ("%5.2f\n",a);

x = 0.5;

while (x<=0.91)

{

y=a*tan(x/4);

printf (" %12.2f| %10.2f\n",x,y);

x=x+a; // x+=a;

}

printf("-------------------------------\n");

a=a+0.1; // a+=0.1;

}

getch();

}

Второй вариант программы можно реализовать через циклы ….

Задание 1 (программа 4_1)

Начертите структурную схему алгоритма, напишите и отладьте про­грамму для табуляции следующих функций:

1. S = a e-xsin ax+ при -1 <= x <=1 с шагом 0.2,

a = 0.75, 1<=y <=5 с шагом 1.5.

2. Z = + 1,3 sin(x-a) при 2 <=x <=5 с шагом 0.5,

a = 1.9, -1<=y<=1 с шагом 0.5.

3. S = e2 t ycos(t-a) при 1<=t<=2 с шагом 0.2,

a = -2.1, 2<= y<=3 с шагом 0.3.

4. Z = bx (tx+2.1) при 1<= x<=2 с шагом 0.2,

b = 3.5 0<= t<=1 с шагом 0.2.

  1. , если 0 <= x <= 2, a = 0.50; 0.75,

Z= если 2 < x <= 3.6, шаг dx=a/2.
6 . sin ax - , если 0.1 <=x <= 0.4,

Y= a cos2(px), если 0.4 < x <= 1.2, a = 1.0; 1.5,

2 - sin ax, если 1.2 < x <=1.6, шаг dx=a/5.

7 . Z= ln(a+x2/ ) , если 0 <=x <= 2, a=1.0; 1.3; 1.6,

2 e2x , если 2 < x <= 3.6, шаг dx=a/4.

8 . a(ex+2a+e-(x-3a), если 0.1 <= x < 0.5,

Z = sin x, если x = 0.5, a = 2; 2.1,

a + a cos(x+3a), если 0.5 < x <= 1.5, шаг dx=a/10.

9 . -a ex-3a, если 0 < x<= 3, a = 1; 1.5,

Z= -a(1+ln(x-3a)), если 3 < x <= 4, шаг dx=a/2.

1 0. - (x+3a)2 - 2a, если -1 <=x <= 0, a = 0.7; 1,

Y = a cos(x+3a) - 3a, если 0 < x < 1, dx=(a+0.2)/2.

a ex, если x = 1,

1 1. a(x-a)3/2, если 1 <= x <= 2.5, a = 0.5; 1.0,

Z= a/2(ex/a+e-x/a), если 2.5 < x <= 4, шаг dx=a/2.

1 2. , если 0.5 <= x < 1.5, a=0.1; 0.2; 0.3,

Y = a cos x, если x = 1.5, шаг dx=2a.

(a x2 + 1)x, если 1.5 < x <= 3,

1 3. (sin2x +a)2 ea sinX , если 0.1<=x<= 0.5, a=0.1;0.2;0.3,

Z = tg(x/4), если 0.5 < x <=0.9, шаг dx=a.

1 4. tg(a2 +sin px), если 0 <= x <= 1,

Y = a sin(p- cos px), если 1 < x <= 2, a=0.5; 0.75; 1;

lg x, если 2 < x < 3, шаг dx=a/4.

1 5. Z= ecos x -a sin2(px), если 0.5 <= x <= 1.5 a=0.1;0.7;1.3,

a x2 - cos px, если 1.5 < x <= 2 шаг dx= a/4.

1 6. 1/x, если 0.1 <= x <= 0.4

Y = ln(x2+ ax), если 0.4 < x <= 1.2 a = 1.0; 1.5,

x2, если 1.2 < x < 1.6 шаг dx = a/5.

17. Дана непустая последовательность различных натуральных чи­сел, за которой следует нуль (признак конца последовательности). Оп­ределить порядковый номер наименьшего из них и его значение.

18. Найти первый отрицательный член последовательности cos (ctg), где n = 1,2,3,... . Напечатать его номер и значение. Распечатать всю последовательность

19. Вычислить наибольший общий делитель (k) натуральных чисел d и f. Оператор FOR не использовать.

20. Дан ряд неотрицательных вещественных чисел. Определить, сколько из них больше своих «соседей»: предыдущего и последующего чисел. Признаком окончания ряда чисел считать появление отрицательно­го числа.
Задание 2 (программа 4_3)

Модифицировать (изменить) программу 3_2 для вычисления функций F1(x) и F2(x) с применением вместо счетного цикла оператора цикла с предусловием. Выполнить ее и сравнить результаты с полученными в пре­дыдущей работе.
Лабораторная работа 5

Программирование циклических алгоритмов

с постусловием
Стpуктуpа оператора цикла с постусловием

do {<операторы>} while (<условие выполнения>);

Пример. Вычислить 15 значений функций y1(x) = tg(x); и y2(x) = ctg(x) при a ≤ x ≤ b, a=0.6*Pi, b=0.7*Pi.

Для вычислений разработана СА (рис.6) и следующая программа:

#include

#include

#include

void main()

{

int n=14;

float a=0.6*M_PI, b=0.7*M_PI;

float x, y1, y2, dx;

clrscr();

dx=fabs((a-b)/n);

x=a;

do

{

y1=tan(x);

y2=1/y1;

printf ("x= %6.4f y1= %7.4f y2= %7.4f\n",x,y1,y2);

x=x+dx;

}

while (x<=b);

getch();

}
Пример 2. Вычислить сумму элементов

s = 1+1/4+1/9+1/16+... c точностью до

E = 0.00001 (рис. 7).

#include

#include

void main ()

{

float E=0.00001;

float s, r; // s- сумма, r-слагаемое

int i; // счетчик слагаемых

s = 0;

i = 1;

do

{

r = 1.0/(i*i); // вычисление слагаемых

s = s + r; // s+ = r;

i++ ; // i = I +1;

}

while (r>E); // сравнение слагаемых с Е

printf ("Сумма=%9.5f\n",s); // вывод суммы

getch();

}

Задание 1 (программа 5_1)
1   2   3   4   5   6   7   8


написать администратору сайта