Вопрос № 132311: Здравствуйте, уважаемые эксперты!
Сегодня две задачки.
Необходимо циклически сдвинуть элементы массива влево на k позиций. Число k задаётся после числовой последовательности.
7
1 2 3 4 5 6 7
3
4 5 6 7 1 2 3
Решите предыдущ...Вопрос № 132321: Уважаемые эксперты!!!Помогите Написать в Турбо Паскале нахождение производной функции (e^-2x)-2x+1=0
Если можно скажите как задать интервал [a,b] в программе.
Cпасибо!!...
Вопрос № 132.311
Здравствуйте, уважаемые эксперты!
Сегодня две задачки.
Необходимо циклически сдвинуть элементы массива влево на k позиций. Число k задаётся после числовой последовательности.
7
1 2 3 4 5 6 7
3
4 5 6 7 1 2 3
Решите предыдущую задачу так, чтобы общее количество парных обменов элементов не превосходило n.
9
2 7 2 9 8 3 4 1 7
6
4 1 7 2 7 2 9 8 3
Обе задачи я решил, но во второй у меня есть ошибка. Подскажите мне её пожалуйста. Код в приложении.
For i := 1 To n Do
Begin
If ((n Mod i = 0) And (k Mod i = 0)) Then
Begin
gcd := i; End;
End;
1) Не ясно чего Вы хотите получить в результате (по сути, код ищет наибольший общий делитель).
2) Нет гарантии, что в результате такого перебора переменной gcd будет присвоено какое-либо значение. Например, если k и n - разные простые числа, переменной gcd не будет присвоено никакого значения.
For i := 1 To gcd Do
Begin
While (t1 <= gcd) Do
Begin
t2 := x[t1];
x[t1] := x[t1+gcd];
x[t1+gcd] := t2;
Inc(t1); End;
End;
1) Учитывая, что gcd может оказаться неопределенной, то этот код уже сам по себе ошибка.
2) Цикл for совершенно здесь не нужен.
3) В результате такого "сдвига" Вы сможете только в единственном варианте сдвинуть весь массив - только если gcd = n / 2. Иначе Вы сдвигаете только часть массива, а оставшуюся часть оставляете нетронутой.
Т.е. в результате, Ваш код будет работать верно только при n = 1, либо при соответствующем заполнении массива будет создаваться ощущение, будто все перемещено верно.
Предлагаю Вам свой вариант решения второй задачи (см. в приложении), который является модификацией Вашего кода (возможно он не самый оптимальный, но вполне удовлетворяет поставленному условию).
Успехов!
Приложение:
--------- Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...
Ответ отправил: Denisss (статус: Профессионал) Россия, Москва ICQ: 281599577 ---- Ответ отправлен: 16.04.2008, 20:07 Оценка за ответ: 3
Вопрос № 132.321
Уважаемые эксперты!!!Помогите Написать в Турбо Паскале нахождение производной функции (e^-2x)-2x+1=0
Если можно скажите как задать интервал [a,b] в программе.
Cпасибо!!
Отвечает: Delph
Здравствуйте, Хмелев Андрей Борисович!
Классическое определение производной - разность значений функции на концах малого отрезка, делёная на длину отрезка (df(x) / dx). В приложении пример того, как можно решить Вашу задачу. В начале определяется функция, потом - расчёт производной от неё (Diff(x)). Константа Diff_Delta задаёт длину отрезка, по которому рассчитывается производная. В программе вводятся с клавиатуры концы интервала [a,b] и шаг изменения переменной x.
Приложение:
--------- Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: Студент)
Ответ отправлен: 16.04.2008, 09:26 Оценка за ответ: 5 Комментарий оценки: Спасибо огромное !!!