Помощь - Поиск - Пользователи - Календарь
Полная версия: Процедуры
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Sir-j
Люди помогите!! Где можно найти как решать задачи через процедуры!!! не понимаю!! wacko.gif
klem4
Найти можно на форуме, заходи в задачи ... с помощью процедур решены сотни задач на любой вкус и цвет ...
Sir-j
Вообще я хочу понять эту тему! когда пойму и буду решать задачу свою! rolleyes.gif
не знаешь ни каких ссылок на эту тему!!!
Fang
Чтобы понять нужно книжку какую нибудь почитать.
Вот отрывок из книги Фаронова:

Цитата
Процедурой в Турбо Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя. Упоминание этого имени в тексте программы приводит к активизации процедуры и называется ее вызовом. Сразу после активизации процедуры начинают выполняться входящие в нее операторы, после выполнения последнего из них управление возвращается обратно в основную программу и выполняются операторы, стоящие непосредственно за оператором вызова процедуры
Orlangur
http://books.dore.ru/bs/f1bid2138.html - Здесь очень хорошая книга. (М. Сухарев - "Turbo Pascal 7.0".
Я по ней учил (и сейчас учу) Pascal. Процедуры понял сразу. Так, что советую.
Напишу один пример, по которому я понял процедуры сразу.
Программа на вычисление корней квадратного уравнения:

Program Roots1;
Uses
Crt;
Var
a, b, c: Real; {Переменные для хранения коэффициентов}
D, x1, x2: Real; {Переменные для дискриминанта и корней ур-ния}
Procedure Writeroots; {Заголовок процедуры, имя процедуры - Writeroots}
begin
D := b*b-4*a*c;
if D < 0 then writeln('Уравнение корней не имеет')
else if D = 0 then
begin
x1 := -b/(2*a);
Writeln('Уравнение имеет один корень: ');
WriteLn('x = ', x1);
end
else
begin
x1 := (-b + sqrt(D))/(2*a);
x2 := (-b - sqrt(D))/(2*a);
Writeln(Уравнение имеет два корня: ');
WriteLn('x1 = ', x1);
WriteLn('x2 = ', x2);
end;
end;
Begin
ClrScr;
a := 2;
b := 12;
c := 11;
Writeroots;
a := 1;
b := 5;
c := 200;
Writeroots;
ReadKey;
End.

неважно
Цитата
я понял процедуры сразу

Ты конечно не обижайся, но код должен обладать массовостью, а не какой-то одной конкретно решеной задачей. Процедуры и функции вообще объединяются в модули, чтоб потом их можно было пользовать в различных программах. Поэтому мой тебе совет, заранее думай на сколько эта процедура применима для решения других задач. А вообще я советую переписать данную процедуру. Ну например только параметры
procedure writeRoots (a, b, c: real; Var x1, x2: real);
тогда хотяб вместо скверного одново вывода можешь получить хотяб значение корней. Можно добавить какой-нибудь flag типа boolean который будет сообщать имеет ли уравнение корни или нет.

А если ты парень хочешь узнать что есть процедура то гляди, щас я тебе объясню. Это фрагмент программы, можно сказать мини программка которая выполняет определенное действие. Например тоже считание корней квадратного уравнения. Соответственно есть понятие входных и выходных параметров. Входными параметрами называется те параметры с помощью которых ты можешь обработать и получить нужную тебе информацию. В данном случае эти параметры a, b, c. Выходные параметры, это те которые получила данная процедура, и готова передать соответствующие значения в основную программу. В данном случае это x1, x2. перел=д выходными параметрами ставится Var.

Используя все вышесказанное могу добавить следующее. Тело программы можно изменить так, отчего это будет наглядней

writeLn ('введите коэф. квадратного уравнения ->');
readLn (a1,b1,c1);
writeRoots (a1, b1, c1, x1, x2); {обращаюсь к данной процедуре, и получаю значения x1 и x2}
{можем еще раз вывести корни этого же уравнения уравнения, можем так же работать с этими корнями}
write (x1:5:2,' ',x2:5:2);
{а можно и так обратиться к этой процедуре}
writeRoots (5, -12, 7, x3, x4); {дело каждого}
volvo
Цитата(неважно @ 21.11.2005 23:10)
Ты конечно не обижайся, но код должен обладать массовостью, а не какой-то одной конкретно решеной задачей.
blink.gif Это такая новая форма бреда? Какой массовостью должен обладать код? Ты сам-то понял, что сказал?

Цитата(неважно @ 21.11.2005 23:10)
Процедуры и функции вообще объединяются в модули, чтоб потом их можно было пользовать в различных программах. Поэтому мой тебе совет, заранее думай на сколько эта процедура применима для решения других задач.
Вот !!! Вот, что я так долго и упорно искал в интернете, и никак не мог найти !!! То-то я смотрю, почти все стандартные процедуры и функции недоделанные какие-то... SetColor() например... Я хотел ее как-то применить для решения другой задачи (ну, музыку какую-нибудь пропиликать на спикере) - ничего не вышло... blink.gif Может не так пробовал?

Цитата(неважно @ 21.11.2005 23:10)
А вообще я советую переписать данную процедуру. Ну например только параметры
procedure  writeRoots (a, b, c: real; Var x1, x2: real);
тогда хотяб вместо скверного одново вывода можешь получить хотяб значение корней. Можно добавить какой-нибудь flag типа boolean который будет сообщать имеет ли уравнение корни или нет.

Угу... Очень эффективное и вообще говоря прямо само собой разумеющееся решение... Особенно про флаг мне понравилось... Исключительно только этим теперь и буду пользоваться... Плевать на то, что корней может быть два, может быть один корень, может вообще не быть... Надо будет - еще один флаг добавим. А чего? Функций же в языке нету, или уважаемый неважно просто не дочитал букварь до той страницы, где про них рассказывается...
неважно
Знаю, чепуху нес... Ночь темная была... Глазки красненькие. И чего ты на меня так накинулся???. Ты уважаемы volvo меня извени, но уж так получилось. А к Вашему сведению, даже знаю что такое рекурсия... Представляете... Даже динамические массивы... Угу.
Честно скажу на паскале давно не программировал, так занесла к Вам поисковая система, вот и решил тряхнуть стариной. Посмотрел, а тут вроде чего-то знакомое пишут... Ну и понеслась, ты уж volvo прости грешников...
Цитата
Особенно про флаг мне понравилось...

и ничего плохого в этом нет. Хорошая штука, иногда помогает... Способ, но суть то сводилась к пояснению процедур...
Вот... И еще раз прошу огромное извинение, за то что задел Ваше самолюбие.
Altair
Цитата
Знаю, чепуху нес... Ночь темная была... Глазки красненькие.

Думать начинаем после того, как делаем... Ясно...

Цитата
А к Вашему сведению, даже знаю что такое рекурсия... Представляете... Даже динамические массивы... Угу.
Нам абсолютно все равно что ты знаешь, мы только знаем, что ты умеешь разводить бессмысленные монологи и беспочвенно критиковать!

Закрыто!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.