Контрольная по теории алгоритмов. Контрольная теория алгоритмов. Задача. Вычислить значения по следующим формулам при действительных значениях всех переменных
Скачать 134.29 Kb.
|
Задание №1 Задача. Вычислить значения по следующим формулам при действительных значениях всех переменных Математическая постановка задачи Исходные данные и обозначения: x – вводимое число; y – вводимое число; p – результат; Классификация по группам. Исходные данные: x – вводимое число вещественного типа, y – вводимое число вещественного типа Результат p – число вещественного типа. Создание алгоритма Рисунок 1.1. Блок – схема алгоритма Программа на языке программирования Pascal program lin1; var x, y, p : real; begin writeln('Введите значение x: '); readln(x); writeln('Введите значение y: '); readln(y); p := (Sqrt(Exp(Sqr(x))) + 1) / (Sqr(Sin(y)) + 2); writeln('Полученное p: '); writeln(p); end. Результаты работы программы с тестовыми данными Если x = 1, y = 1, то p = 0.9780832 Задание №2 Задача. Вычислить значение: Математическая постановка задачи Исходные данные и обозначения: x – вводимое число; y – результат; Классификация по группам. Исходные данные: x – вводимое число вещественного типа, Результат y – число вещественного типа. Создание алгоритма Рисунок 1.2. Блок – схема алгоритма Программа на языке программирования Pascal program Vet1; var x, y : real; begin writeln('Введите значение x: '); readln(x); if x <= -5 then begin y := (Exp(x) + 1) / (Exp(-x) + 1); end else begin if ((x > -5) and (x < 5)) then begin y := Sqr(x) - exp(3); end else begin y := Log(2 * x); end; end; writeln('Полученное y: '); writeln(y); end. Результаты работы программы с тестовыми данными Если x = 1, то y = -19.0855369 Если x = -10, то y = 4.53999297624848E-05 Если x = 10, то y = 2.99573227355399 Задание №3 Задача.Составить программу для вычисления суммы бесконечного ряда с использованием оператора цикла. Сравнить полученное на персональном компьютере значение суммы ряда со значением, вычисленным аналитически. Точность вычислений и количество членов ряда вводятся с экрана. Математическая постановка задачи Исходные данные и обозначения: x – вводимое число; eps – точность вычислений; i – счетчик; f – слагаемое ряда; s – сумма ряда. Классификация по группам. Исходные данные: x – вводимое число вещественного типа. Результат s – число вещественного типа. Создание алгоритма На рисунке 1.3 показан алгоритм вычисления суммы бесконечного ряда в виде блок – схемы. Рисунок 1.3. Блок – схема алгоритма вычисления суммы бесконечного ряда Программа на языке программирования Pascal program summ; var i: integer; x,s,f,eps:real; begin writeln('введите переменную x и eps'); Readln(x, eps); s:=0; f:=3*x; i:=2; while abs(f)>eps do begin s:=s+f; Writeln('s=',s:8:5); f:=-f*3*x*(i-1)/i; i:=i+1; end; WriteLn('s=',s:8:5, ' ln(3x+1)=', ln(3*x+1):8:5); end. Результаты работы программы с тестовыми данными Если x = 0.2, eps = 0,001, то s = 0.47040 и ln (3x + 1) = 0.47000. Задание №4 Задача. Дан массив целых чисел (n=20), заполненный случайным образом числами из промежутка [-10,40]: подсчитать количество элементов массива, значения которых больше заданного числа А и кратны 9; найти номер первого отрицательного элемента, делящегося на 5 с остатком 2 Математическая постановка задачи Исходные данные и обозначения: arr – исходный массив целых чисел, состоящий из 20 элементов; i – параметр цикла; count – счетчик значений элементов, которые больше заданного числа А и кратны 9; result – номер первого отрицательного элемента, делящегося на 5 с остатком 2; A – число (вводится пользователем); flag – вспомогательная переменная; Классификация по группам. Исходные данные: A – вводимое число целого типа. Результат: count – число целого типа, result – число целого типа. Рисунок 1.4. Блок – схема алгоритма Программа на языке программирования Pascal program massiv1; const n = 20; var m : array [1..n] of integer; A, i, count, result : integer; f : boolean; begin writeln('Введите значение A: '); readln(A); f := false; for i := 1 to n do begin m[i] := Random(50)-10; if (m[i] > A) and (m[i] mod 9 = 0) then count:=count+1; if (f = false) and (m[i] < 0) and (m[i] mod 5 = -2) then begin f := true; result := i; end; end; writeln('Полученный массив: '); for i := 1 to n do begin write(m[i],' '); end; writeln; writeln('Количество элементов, которые больше A и кратны 9: '); writeln(count); writeln('Номер первого отрицательного элемента делящегося на 5 с остатком 2:'); if result = 0 then begin writeln('нет числа'); end else begin writeln(result); end; end. Результаты работы программы с тестовыми данными Введите значение A: 10 Полученный массив: -8 15 5 28 -4 31 -6 36 24 30 37 -7 18 -3 28 24 1 8 -6 7 Количество элементов, которые больше A и кратны 9: 2 Номер первого отрицательного элемента, делящегося на 5 с остатком 2: 12 Задание №5 Задача. Дан двумерный массив целых чисел размерностью (3х3), заполненный случайным образом числами из промежутка [-10,40]: 1) заменить все симметричные элементы на нули; 2) найти сумму элементов, находящихся на побочной диагонали .Математическая постановка задачи С помощью датчика случайных чисел задать элементы двумерного массива arr. Необходимо просмотреть его, сумму элементов, находящихся на побочной диагонали и заменить все симметричные элементы на нули. Исходные данные и обозначения: arr – исходный двумерный массив целых чисел, состоящий из 9 элементов; i, j, p, q – параметры цикла; n – размер массива; sum – сумму элементов, находящихся на побочной диагонали; Классификация по группам. Исходные данные: arr – исходный двумерный массив целых чисел Результат: sum – число целого типа. Создание алгоритма Рисунок 1.5. Блок – схема алгоритма Программа на языке программирования Pascal program massiv2; const n = 3; var arr : array [1..n, 1..n] of integer; i, j, p, q, sum : integer; begin for i := 1 to n do begin for j := 1 to n do begin arr[i][j] := Random(30)+10; end; end; writeln('Полученный массив: '); for i := 1 to n do begin for j := 1 to n do begin write(arr[i][j]:4); end; writeln; end; j := n; for i := 1 to n do begin sum := sum + arr[i][j]; dec(j); end; for i := 1 to n do begin for j := 1 to n do begin for p := 1 to n do begin for q := 1 to n do begin if (arr[p][q] <> 0) and (arr[p][q] = arr[i][j]) and ((p <> i) or (q <> j))then begin arr[i][j] := 0; arr[p][q] := 0; end; end; end; end; end; writeln; writeln('Сумма элементов на побочной диагонали: '); writeln(sum); writeln('Замена всех симметричных на нули: '); for i := 1 to n do begin for j := 1 to n do begin write(arr[i][j]:4); end; writeln; end; end. Результаты работы программы с тестовыми данными Полученный массив: 26 39 17 39 12 39 34 37 20 Сумма элементов на побочной диагонали: 63 Замена всех симметричных на нули: 26 0 17 0 12 39 34 37 20 |