не поможете?

Автор smoke, 13 июня 2010, 11:06:48

0 Пользователи и 1 Гость просматривают эту тему.

ScaN

[offtop]И вообще, вместо этого безобразия лучше бы научили парня глаголы спрягать.[/offtop]

smoke

Scan,ну,если бы я учил паскаль,я бы составил программу,просто надобности пока в этом не было.А теперь появилась,буду осваивать.Не получится же сделать что-то,если ты не знаешь в этой сфере ничего :)
В следующий раз, когда ты подумаешь что совершенен, попробуй ходить по воде...

smoke

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

AntonFox

Вот тебе к примеру программа для расчета квадратного корня.
Используя структурный подход делаем функции для расчета детерминанта и двух корней
Для функции детерминанта входной информацией будут коэффициенты a,b,c, а выходной информацией - само значение детерминанта.
Для расчета корней соответственно входная инфа - коэффициенты и детерминант, выходная - корни уравнения.

Поскольку расчет корней идет по одной и той же схеме и разница лишь в одном знаке, то можно использовать одну и туже функцию, только добавить в нее коэффициент Х. При Х=1 получим один корень, при Х=-1 получим второй корень.

Как быть с остальным - хз. Слишком много воды в лекции и слишком мало конкретики.
Кто цяй не пьет, тот цьмо. (с) Конфуций<br />...уж лучше слыть нулями и стебаться, чем гением не быть, но называться! © bob@ kрnemо.ru<br />

x3mal

#19
Цитата: AntonFox от 20 июня 2010, 10:02:34
Вот тебе к примеру программа для расчета квадратного корня.
Используя структурный подход делаем функции для расчета детерминанта и двух корней
Для функции детерминанта входной информацией будут коэффициенты a,b,c, а выходной информацией - само значение детерминанта.
Для расчета корней соответственно входная инфа - коэффициенты и детерминант, выходная - корни уравнения.

Поскольку расчет корней идет по одной и той же схеме и разница лишь в одном знаке, то можно использовать одну и туже функцию, только добавить в нее коэффициент Х. При Х=1 получим один корень, при Х=-1 получим второй корень.

Как быть с остальным - хз. Слишком много воды в лекции и слишком мало конкретики.
Сурово...
Во 1ых квадратный корень числа а - это решение уравнения х*х = а... А вы говорите про уравнение a*x^2 + b*x + c = 0, где a не равно 0,  т.е. квадратное уравнение...

Во 2ых не детерминант, а дискриминант...

В 3х вычисление дискриминанта делать отдельной функцией совсем не нужно, так как она вызывается ровно 1 раз во всем коде, т.е. получаем проигрыш в размере кода и немного при компиляции и выполнении...

В 4ых в случае, если функция должна возвращать больше чем одно значение, следует делать процедуру с выходными параметрами (в паскале, если память не изменяет, это делается словом var перед именем параметра)

procedure FindRoots(a, b, c: integer; var x1, x2: integer)
begin
...
end;

А еще лучше сделать функцию типа boolean, которая возвращает true, если корни найдены, false, если действительных корней нет...

function FindRoots(a, b, c: integer; var x1, x2: integer) : boolean
begin
...
end;

А еще лучше типа integer, и возвращает 0 при успешном нахождении действительных корней, в противном случае код ошибки.. например, 1, если нет действительных корней, 2, если a = 0, т.е. уравнение не квдратное, при этом в x1 записывать решение получившегося линейного уравнения для последующей обработки...

В общем даже в такой, казалось бы, тривиальной задаче есть простор для творчества=)

PS возможно в синтаксисе паскаля накосячил, поправьте если что...

AntonFox

Цитата: x3mal от 21 июня 2010, 15:39:30
Сурово...
Во 1ых квадратный корень числа а - это решение уравнения х*х = а... А вы говорите про уравнение a*x^2 + b*x + c = 0, где a не равно 0,  т.е. квадратное уравнение...

Во 2ых не детерминант, а дискриминант...
Ну да,  с утра пораньше встал и еще не совсем проснулся )))) Сорри.
Цитата: x3mal от 21 июня 2010, 15:39:30
В 3х вычисление дискриминанта делать отдельной функцией совсем не нужно, так как она вызывается ровно 1 раз во всем коде, т.е. получаем проигрыш в размере кода и немного при компиляции и выполнении...
В данном случае это не важно, поскольку идет обучение и в конкретном случае необходимо показать использование функций и процедур как метод программирования чтоли.
Кроме того, каждую программу можно рассматривать как заготовку для решения последующих более сложных задач, таким образом даже дискриминант может понадобится неоднократно.

Цитата: x3mal от 21 июня 2010, 15:39:30
В 4ых в случае, если функция должна возвращать больше чем одно значение, следует делать процедуру с выходными параметрами (в паскале, если память не изменяет, это делается словом var перед именем параметра)

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

Цитата: x3mal от 21 июня 2010, 15:39:30
В общем даже в такой, казалось бы, тривиальной задаче есть простор для творчества=)

Любую задачу можно решить как минимум двумя способами. В программировании  же для каждого решения есть несколько вариантов реализации с использованием разных операторов. Если добавлять функции и процедуры - вариантов "решения" могут быть десятки, если не сотни. И чем больше программа, тем больше различных решений можно найти.
Правда "правильных" решений не так уж и много. Под "правильными" я  понимаю с оптимальным кодом (нет лишних строк кода, переменных и вычислений).
Еслиб был только один вариант - не было бы смысла в интерпретаторах различных языков, не  было бы программистов и т.д.

PS я одно время немного преподавал Паскаль на первом курсе, поэтому смотрю на задачу именно сточки зрения наглядности конкретных решений, конкретных способов, а не оптимальности кода. Там жешь главное чтоб поняли как и что надо делать, а затем уже красоту наводили.
Одна девушка мне написала прогу для решения квадратных уравнений - вся кафедра была в шоке!
1 . Вывод на экран " ахх+бх+с=0"
2. Д=бб-4ас
3. Введите Х1.Х2:
4. Корни уравнения Х1, Х2
Ну там чуть красивше было, но смысл такой же - никаких коэффициентов, пользователь сам вводит корни и потом их же и получает назад ))) Когда я пытался добится от девушки объяснений как эта программа работает (построчно) она разрыдалась и убежала.
А  я до сих пор жалею что не сохранил текст той проги.....
Кто цяй не пьет, тот цьмо. (с) Конфуций<br />...уж лучше слыть нулями и стебаться, чем гением не быть, но называться! © bob@ kрnemо.ru<br />