Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Задачи на паскале. (http://www.tehnari.ru/f41/t45851/)

aizkil 17.01.2011 21:10

Задачи на паскале.
 
Здравствуйте, помогите решить плз задачи, Не было времени понять паскаль, сейчас сижу читаю, но думаю к завтрашнему не успею понять=( завтра последний день можно будет получить допуск к экзамену, заранее спасибо!

№1
Ввести с клавиатуры x,y и вычислить, используя метод промежуточного аргумента:
z=2^sin(x+5y)-e^-x-5y

№2
Вычислить вводя соответствующую функцию в разделе Function:
y=ArcCos(ArcCos(x))-ArcCos(x^3)

№3
Вычислить для треугольника ABC все стороны, все углы(в градусной мере), периметр и площадь, если известны сторона BC и углы BAC, ACB.
Замечания: Программа должна содержать ввод известных величин с клавиатуры, вычисление неизвестных с использованием раздела Function и вывод результатов вычисления на экран.

№4
Ввести некоторое число N. Определить является ли оно числом:
Неотрицательным? Кратным 6? Меньшим -1? Степенью 4?

№5
Составить программу, которая определяет для двух вводимых натуральных чисел M и N их наибольший делитель.

№6
Вычислить максимальную сумму квадратов натуральных чисел, кратных (3,6,9...), меньшую 3000.
Замечание: Провести решение 2мя способами - используя цикл с предусловием WHILE_DO и цикл с полусловием REPEAT_UNTIL.

shrek=) 18.01.2011 08:33

Цитата:

Сообщение от aizkil (Сообщение 448201)
№4
Ввести некоторое число N. Определить является ли оно числом:
Неотрицательным? Кратным 6? Меньшим -1? Степенью 4?

Код:

var
n,m:integer;
begin
write ('n=');
readln (n);
if n>0 then writeln ('НЕ отрицательное');
if n mod 6=0 then writeln ('кратное 6') else writeln ('Не кратное 6');
if n<-1 then writeln ('меньше -1') else writeln ('больше -1');
m:=1;
repeat
m:=m*4;
until m>=n;
if m=n then writeln ('степень 4') else writeln ('НЕ степень 4');
readln
end.


shrek=) 18.01.2011 08:42

Цитата:

Сообщение от aizkil (Сообщение 448201)
№5
Составить программу, которая определяет для двух вводимых натуральных чисел M и N их наибольший делитель.

Код:

var M, N: integer;
begin
writeln('Введите М и N');
readln(M, N);
while M<>N do
begin
if M>N
then M:=M-N
else N:=N-M
end;
write('Н0Д=',М)
end.


shrek=) 18.01.2011 08:58

Цитата:

Сообщение от aizkil (Сообщение 448201)
№2
Вычислить вводя соответствующую функцию в разделе Function:
y=ArcCos(ArcCos(x))-ArcCos(x^3)

Думаю решение такое:
Код:

var
x,y:real;
function arccos(x:real):real;
begin
arccos:=arctan(sqrt(1-sqr(x))/x);
end;
function func(x:real):real;
var y:real;
begin
y:=arccos(arccos(x)-arccos(sqr(x)*x));
func:=y;
end;
begin
write ('x=');
read(x);
func(x);
write ('y=',y);
readln
end.


Vladimir_S 18.01.2011 10:49

Shrek, я думаю, такое
Код:

function arccos(x:real):real;
begin
  arccos:=arctan(sqrt(1-sqr(x))/x);
end;

задание функции arccos - "не есть хорошо", и вот почему:
1. При х=0 возникнет ошибка деления на ноль, а должно быть возвращено Pi/2.
2. Как при х=1, так и при х=-1 такая функция вернет arccos(х)=0, в то время как должно быть при x=1 arccos(x)=0, a при x=-1 arccos(x)=Pi.
Могу предложить такой вариант (он "зашит" в мои библиотеки):
Код:

function ArcCos(X:Real):Real;
BEGIN
    IF ROUND(X*10000)=10000 THEN ArcCos:=0 ELSE
    IF ROUND(X*10000)=-10000 THEN ArcCos:=Pi ELSE
    ArcCos:=(Pi/2)-ArcTan(X/SQRT(1-X*X));
END;


shrek=) 18.01.2011 11:10

Цитата:

Сообщение от aizkil (Сообщение 448201)
№1
Ввести с клавиатуры x,y и вычислить, используя метод промежуточного аргумента:
z=2^sin(x+5y)-e^-x-5y

Возможно это должно выглядеть вот так:
Код:

var
a,x,y,z:real;
function func(x,y:real):real;
begin
a:=x+5*y;
z:=exp(ln(2)*sin(a)-exp(ln(2.7)*(-a)));
end;
begin
write ('x=');
readln(x);
write ('x=');
readln(x);
func(x,y);
write ('z=',z);
readln
end.



Часовой пояс GMT +4, время: 23:56.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.