Программирование. Вариант 10 Задание 1
Скачать 93.81 Kb.
|
Вариант 10 Задание 1. Ввести значения четырех чисел x1, x2, x3, x4. Вычислить значения переменных y1, y2, y3, z (если это возможно) при условии, что: ; ; ; . Значения y1, y2, y3, z вывести на экран. Решение. Для решения поставленной задачи, прежде всего, определимся с областью допустимых значений аргументов и выражений всех заданных функций. Ясно, что функция y1 будет иметь смысл только тогда, когда x1>0 Функция y2 существует при (x2-x3x4) >0, поскольку логарифм отрицательных чисел и нуля не существует. Для вычисления логарифма на языке Pascal необходимо подключить дополнительно модуль Math. Функция y3 существует только когда существует функция tg(x3-x4) Функция тангенса на языке паскаль может быть вычислена через отношение tg(x3-x4) = Sin(x3-x4)/Cos(x3-x4). Таким образом, функция y3 имеет смысл только тогда, когда Cos(x3-x4) ≠ 0. Функция z имеет смысл только тогда, когда y1+y2+y3 ≥ 0. Реализуем данные вычисления на языке Pascal и в качестве проверки работоспособности программы приведем несколько тестовых примеров, показывающих правильные вычисления, производимые нашей программой. Для тестовых примеров возьмем: Все нулевые значения аргументов x1-x4. Любые числа x1-x4 такие, чтобы функция z была неопределена. Любые числа x1-x4 такие, чтобы функция z была определена. Program lab2; uses crt,Math; var x1,x2,x3,x4,y1,y2,y3,y4,z:real; t:boolean; begin writeln('Enter x1: '); Readln(x1); writeln('Enter x2: '); Readln(x2); writeln('Enter x3: '); Readln(x3); writeln('Enter x4: '); Readln(x4); t:=true; if (x1>0) then begin y1:=1/Sqrt(x1); writeln('y1= ',y1); end else begin t:=false; writeln('y1 doesnt exist'); end; writeln; if ((x2-x3*x4)>0) then begin y2:=ln(x2-x3*x4); writeln('y2 = ',y2); end else begin t:=false; writeln('y2 does not exist'); end; writeln; if (Cos(x3-x4)<>0) then begin y3 := Sin(x3-x4)/Cos(x3-x4); writeln('y3= ',y3); end else begin t:=false; writeln('y3 does not exist'); end; writeln; if (t=true) then begin if ((y1+y2+y3)>=0) then begin z:=Sqrt(y1+y2+y3); writeln('z= ',z); end; end else writeln('z does not exist'); writeln; readln; end. Рисунок 1 – Тестовый пример 1 Рисунок 2 – Тестовый пример 2 Рисунок 3 – Тестовый пример 3 Задание 2. Составить программу нахождения первого положительного члена последовательности an = (n3 – 14n)/n!, n = 1, 2, 3,… . Вывести его значение и номер. Найти произведение всех отрицательных членов последовательности. Вывести результат на экран. Решение Сначала напишем программу вывода первого отрицательного члена последовательности. Для этого воспользуемся оператором цикла while(условие) do… Для вычисления факториала числа воспользуемся циклом for i:=1 to n do. Поскольку в нашем случае число n не может быть отрицательным, нулевым или вещественным, то дополнительных проверок для числа n проводить не нужно. Проанализируем заданную последовательность an = (n3 – 14n)/n! Совершенно очевидно, что n! не может быть отрицательным числом. Тогда отрицательной может быть только часть n3 – 14n Понятно, что при целых положительных n мы имеем: А поскольку n – это целое положительное число, то ближайшее n, при котором последовательность станет положительной, является n=4 (заметим также, что при n≥4 члены последовательности будут всегда положительными). Проверим данное утверждение на программе lab3. program lab3; uses crt; var n,i:integer; faktor,a:real; begin clrscr; a:=0; n:=0; while (a<=0) do begin faktor:=1; inc(n); for i:=1 to n do faktor:=faktor*i; a:=(n*n*n-14*n)/faktor; end; writeln('An = ',a); writeln('n= ',n); readln; end. Рисунок 4 – проверка выполнения программы Проверка правильности расчета A4: Далее модифицируем программу так, чтобы на каждой итерации цикла while() в случае, если значение члена последовательности An отрицательное, то мы его умножаем на число p, где p – это произведение всех отрицательных членов последовательности. program lab31; uses crt; var n,i:integer; faktor,a,p:real; begin clrscr; a:=0; n:=0; p:=1; while (a<=0) do begin faktor:=1; inc(n); for i:=1 to n do faktor:=faktor*i; a:=(n*n*n-14*n)/faktor; if (a<=0) then p:=p*a; end; writeln('An = ',a:1:3); writeln('n = ',n); writeln('P = ',p:1:3); readln; end. Рисунок 5 – проверка выполнения программы В результате, мы получаем произведение всех отрицательных членов последовательности равным p= - 325. Задание 3. Заполнить матрицу 10х10 следующим образом: Вывести заполненную матрицу на экран компьютера или на принтер. Найти сумму нечетных элементов матрицы, вывести полученный результат. Решение Для выполнения данного задания мы используем двумерный массив, в котором последовательно выводим все элементы сначала по строкам, а затем по столбцам на экран. Затем, проверяем для каждого элемента массива – является ли оно нечетным. Если нечетное, то прибавляем к общей переменной sum. program lab4; uses crt; var A:array[1..10,1..10] of integer; i,j,sum:integer; begin clrscr; sum:=0; writeln('Enter the matrix 10x10'); writeln(''); for i:=1 to 10 do for j:=1 to 10 do begin if i=j then A[i,j]:=i else begin if i>j then A[i,j]:=j else A[i,j]:=i; end; end; for i:=1 to 10 do begin for j:=1 to 10 do write(A[i,j]:3); writeln; writeln; end; for i:=1 to 10 do begin for j:=1 to 10 do if (A[i,j]<>0) and (A[i,j] mod 2=1) then begin sum:=sum+A[i,j]; end; end; writeln('summa nechetnyh = ',sum); readln; end. Рисунок 6 – проверка выполнения программы Проверим, правильно ли программа сосчитала сумму нечетных элементов. Для этого сложим все числа 1, 3, 5, 7, 9: Результат расчета совпадает с результатом ,выдаваемым программой, следовательно, программа ведет верный расчет. |