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

Rus32
Сообщения: 3
Зарегистрирован: 25 сен 2007, 15:44

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

Сообщение Rus32 » 25 сен 2007, 15: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
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 16:14
Откуда: 71 RUS
Контактная информация:

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

Сообщение somewhere » 26 сен 2007, 08: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, а если бы другая была?
It's a long way to the top if you wanna rock'n'roll

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

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

Сообщение BBB » 26 сен 2007, 11:36

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

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

Или:

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

Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 16:14
Откуда: 71 RUS
Контактная информация:

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

Сообщение somewhere » 26 сен 2007, 12:27

Ну да, я про это и говорю
It's a long way to the top if you wanna rock'n'roll

Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 16:14
Откуда: 71 RUS
Контактная информация:

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

Сообщение somewhere » 26 сен 2007, 14:21

&quot писал(а):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.
It's a long way to the top if you wanna rock'n'roll

Rus32
Сообщения: 3
Зарегистрирован: 25 сен 2007, 15:44

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

Сообщение Rus32 » 26 сен 2007, 19:50

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

Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 16:14
Откуда: 71 RUS
Контактная информация:

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

Сообщение somewhere » 27 сен 2007, 07:54

&quot писал(а):If K <= 0 then summ := 0;
Следует читать:

Код: Выделить всё

If K < 0 then K := 0;
It's a long way to the top if you wanna rock'n'roll

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

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

Сообщение BBB » 27 сен 2007, 10:24

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

Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 16:14
Откуда: 71 RUS
Контактная информация:

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

Сообщение somewhere » 27 сен 2007, 10:29

&quot писал(а):Может, так?
1) for
2) while () begin end;
3) repeat until ();
А какой из них наиболее рациональный? )))))) тут надо дисассемблировать, авось из них будет какой-то, на пару десятков тактов быстрее ))))))
It's a long way to the top if you wanna rock'n'roll

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

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

Сообщение BBB » 27 сен 2007, 16:37

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

Ответить