PDA

Просмотр полной версии : Помогите пожалуйста с задачами.(Pascal)



Rus32
25.09.2007, 16:50
Здравствуйте.Помогите пожайлуста решить задачи.))
1.Задана периодическая функция f(x), период которой равен 2. На отрезке[-1;1] функция f(x) совпадает с функцией sqr(x)+1. Вычислить значение f(x) в точке x0.(задача на ветвление).:)

2.Рассмотреть решение предложенной задачи с использованием всех трех видов циклов. Отладить программу с наиболее рациональным вариантом цикла. Обосновать выбор.
Найти сумму первых k чисел последовательности Фибоначи. Последовательность определяется законом: F0=F1=1; Fn=Fn-1+Fn-2 для n>= 2.(задача на циклы).
Заранее благодарен.

somewhere
26.09.2007, 09:33
Если на отрезке [-1;1] функция совпадает с sqr(x)+1 и ее период равен 2, то значит на интервалах [-3;-1], [1;3], [3;5] и т.д. она также совпадает с sqr(x)+1. Достаточно свести x0 к интервалу [-1;1], например так
x0 := x0 - 2*trunc(x0/2) - 1
а потом просто значение функции подсчитать sqr(x0)+1
НО, стоит еще один важный вопрос! Берем к примеру два интервала [-1;1] и [1;3] - они пересекутся в точке (1). Т.е. как считать значение функции в этом случае? Это хорошо, что функция такая sqr(x)+1, а если бы другая была?

BBB
26.09.2007, 12:36
НО, стоит еще один важный вопрос! Берем к примеру два интервала [-1;1] и [1;3] - они пересекутся в точке (1). Т.е. как считать значение функции в этом случае? Это хорошо, что функция такая sqr(x)+1, а если бы другая была?По идее, в условии задачт один из интервалов отрезка должем быть открытым. Т.е. формулировка:

На отрезке [-1;1[ функция f(x) совпадает...

Или:

На отрезке ]-1;1] функция f(x) совпадает...

somewhere
26.09.2007, 13:27
Ну да, я про это и говорю

somewhere
26.09.2007, 15:21
2.Рассмотреть решение предложенной задачи с использованием всех трех видов циклов. Отладить программу с наиболее рациональным вариантом цикла. Обосновать выбор.
Найти сумму первых k чисел последовательности Фибоначи. Последовательность определяется законом: F0=F1=1; Fn=Fn-1+Fn-2 для n>= 2.(задача на циклы).
Заранее благодарен.
Я никак не могу понять о каких трех видах здесь говорится. Лично мне приходит в голову только один:


uses crt;

var
f1, f2, fn, Summ : Longint;
k, x : Integer;

begin
Clrscr;
Write('Input K : ');
Readln(k);
Writeln;
If K <= 0 then summ := 0;
If K < 3 then summ := k else
begin
summ := 2;
f1 := 1;
f2 := 1;
For x := 1 to k-2 do
begin
fn := f1 + f2;
f1 := f2;
f2 := fn;
summ := summ + fn;
Write(fn:8);
end;
end;
Writeln;
Writeln;
Writeln('Summ = ',Summ);
end.

Rus32
26.09.2007, 20:50
На счет второй задачи там надо с любым одним циклом.))Спасибо за ее решение.
Вот первая задача на самом деле с условием туповатая,я сам без понятий как там что.Спасибо за помощь.)

somewhere
27.09.2007, 08:54
If K <= 0 then summ := 0;
Следует читать:


If K < 0 then K := 0;

BBB
27.09.2007, 11:24
Я никак не могу понять о каких трех видах здесь говорится. Может, так?
1) for
2) while () begin end;
3) repeat until ();

somewhere
27.09.2007, 11:29
Может, так?
1) for
2) while () begin end;
3) repeat until ();
А какой из них наиболее рациональный? )))))) тут надо дисассемблировать, авось из них будет какой-то, на пару десятков тактов быстрее ))))))

BBB
27.09.2007, 17:37
Может, так?
1) for
2) while () do begin end;
3) repeat until ();А какой из них наиболее рациональный? )))))) тут надо дисассемблировать, авось из них будет какой-то, на пару десятков тактов быстрее )))))) Ну, это ж учеьная задача. Так что, обосновывать выбор (c), возможно, также надо исходя именно из теории (красоты получаеммого исходного текста), а не быстродействия :)
Например. Если перед выполнением цикла ясно, сколько именно раз его нужно выплонить, то выбираем for.
Если алгоритм таков, что по крайней мере один раз тело цикла надо выполнить, а после этого смотреть (по какому-либо условию), продолжать цикл дальше или прерывать, то берем repeat until () (Пример: делаем что-то, затем запрашиваем пользователя, хочет ли он повторить операцию)
Ну а если алгоритм таков, что, возможно, цикл будет не выполнен вообще ни разу, то берем while () do begin end;. (Классический пример будет чтение из файла:
while (not EOF ()) do begin end;)

Rus32
28.09.2007, 21:57
Помогите пожалуйста еще несколько задач решить.))))))

1.Решить задачу, организовав итерационный цикл. Вычислить длину кривой на участке xЭ[0,4], если она задана уравнением:y=x^3/2(x в степени три вторых) . Вычисления произвести с точностью eps=10^-3, 10^-2, считать точным значением 9,073415289388. Определить, как изменяется число итераций при изменении точности.

2.Написать программу на обработку одномерного массива. Определить число инверсий в массиве из 40 целых чисел (инверсия - это пара элементов, в которой большее число расположено слева от меньшего).

3.Решить поставленную задачу, используя средства управления вводом/выводом Турбо Паскаля. Дан массив литер L(8,6,4). Вывести его элементы на экран строками по 12 литер в виде параллелограмма.

Заранее благодарен. :)

Хыиуду
08.10.2007, 12:28
2.
inverces:=0;
for i:=1 to 39 do
if a[i]>a[i+1] then inc(inverces);

MorS
20.11.2010, 23:59
Здравствуйте. Помогите, пожалуйста, решить задачи
1.Дано действительное число а. Вычислить f(x), где f - периодическая функция, период которой равен 2. На отрезке[-1;1] функция f(x) совпадает с функцией, график которой изображён на рисунке. На рисунке изображён график, состоящий из двух функций: 1) x+1, 2) 1-sqr(x)*x.
Непонятно как сделать, если заданы 2 функции, а не одна!!!!! Заранее спасибо!