Как написать алгоритм в паскале
Воспользуемся известными формулами:
Угол выразим в градусах.
var a,b,c, alf, bet:real;
writeln(‘ гипотенуза = ’, c:5:2);
writeln(‘ угол а = ’, alf*180/pi:2:1);
writeln(‘ угол b= ’, bet*180/pi:2:1);
write (‘Введите значение косинуса ’);
writeln(‘ угол в радианах ’,alfa);
writeln (‘угол в градусах ’, grad );
writeln (‘Введите аргумент и степень ’);
А теперь покажем возможные типичные ошибки начинающих программистов в программах с линейными алгоритмами.
Неверное написание
Сообщение компилятора ИСР
Все используемые переменные должны быть предварительно описаны в разделе описаний var
Identifier not found “S”
Отсутствующая точка с запятой (;)
Очень частая ошибка у начинающих
Несовместимость типов при присваивании
S:=1.31; <нельзя преобразовать вещественное в целое>
Incompatible types: got “Extended” expected “SmallInt”
Отсутствие одного из апострофов строковой константы
Закрыть апостроф надо на этой строке, где расположен открывающий апостроф
writeln (‘Сумма равна =, x + y ); <не хватает апострофа>
Fatal: String exceeds line
Ошибки расстановки запятых и апострофов при выводе строк и выражений
запятые разделяют разные элементы вывода
все, что находится в апострофах, будет выведено на экран без изменений
Fatal: String exceeds line
read ( x ); <введите в программе текст и будет ошибка>
Ошибка неинициализированной переменной
Перед использованием любую переменную надо ввести или присвоить ей начальное значение.
< Забыли инициализировать или ввести x >
writeln(‘Квадрат числа ‘,x,’ = ‘,r);
Ошибки как таковой не будет, но переменная r получит значение равно 0
Во время исполнения программа выполнит деление на ноль (в частности из-за неинициализированной переменной х) и завершится с ошибкой.
y :=1/ x ; <деление на ноль!>
Корень из отрицательного числа
В Паскале возникает ошибка времени выполнения
Алгоритмы. Алгоритм Евклида. Часть 1
Приветствуем читателей и посетителей нашего сайта! Сегодня на learnpascal.ru открывается новая рубрика — Алгоритмы. В этой рубрике мы с вами будем разбирать различные алгоритмы, а также их реализацию на Паскале.
Для освоения материала сегодняшнего урока вам понадобится знание циклов и ветвлений.
Сегодня мы рассмотрим три алгоритма(из пяти) на нахождение наибольшего общего делителя двух целых чисел, два из которых непосредственно связывают с именем Евклида. Еще два мы рассмотрим в следующей части.
Наибольший общий делитель (НОД) двух чисел a и b — наибольшее целое число, которое делит их оба.
Пример: НОД(25, 5) = 5; НОД(12, 18) = 6.
Переборный алгоритм
Начинаем перебор с d — наименьшего из двух чисел. Это первый, очевидный кандидат на роль их наибольшего общего делителя. А затем, пока d не делит оба числа, уменьшаем его на единицу. Как только такое деление будет обеспечено, останавливаем уменьшение d.
Обратимся к этой программе, например, с числами 30 и 18. Тогда на пути к ответу(числу 6) ей придется перебрать числа: 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6.
Алгоритм Евклида «с вычитанием»
Пусть a и b — целые числа, тогда верны следующие утверждения:
Доказанная формула(3) позволяет свести вычисление наибольшего делителя одной пары к вычислению наибольшего общего делителя другой пары, в которой числа уже меньше. Очевидная же формула (4) дает нам понять, когда надо остановиться.
Вкратце алгоритм Евклида «с вычитанием» будет таким. Вычитаем из большего числа меньшее и заменяем большее на разность до тех пор, пока одно из чисел не обратится в нуль. Тогда оставшееся ненулевое число — наибольший общий делитель.
Пример. Пусть а = 82 и b = 60. НОД(82, 60) = НОД(22, 60) = НОД(22, 38) = НОД(22, 16) = НОД(6, 16) = НОД(6, 10) = НОД(6, 4) = НОД(2, 4) = НОД(2, 2) = НОД(2, 0) = 2.
На предпоследнем шаге алгоритма, перед появлением 0, оба числа равны, иначе не мог возникнуть 0. Поэтому мы будем извлекать НОД именно в этот момент.
Блок — схема алгоритма Евклида «с вычитанием»
Программа
Алгоритм Евклида с «делением»
Пусть a и b — целые числа, а r — остаток от деления a на b. Тогда НОД(a, b) = НОД(b, r).
Эта формула также позволяет свести вычисление наибольшего общего делителя одной пары чисел к вычислению наибольшего обшего делителя другой пары чисел.
Пример. НОД(82, 60) = НОД(22, 60) = НОД(22, 16) = НОД(6, 16) = НОД(6, 4) = НОД(2, 4) = НОД(0, 2) = 2.
На сегодня все! Еще несколько модификаций алгоритма Евклида и способов нахождения НОД вы узнаете на следующих уроках.
Pascal: Занятие № 7. Подпрограммы: процедуры в Pascal
Процедуры в Паскале
Подпрограмма — это фрагмент кода, который имеет свое имя и создается в случае необходимости выполнять этот код несколько (много) раз. Подпрограмма описывается единожды перед началом основной программы (до begin ). Компилятор пропускает данный фрагмент кода, пока в основной программе не встретит «вызов» подпрограммы, который выглядит как обращение к ней по имени (возможно, имени с аргументами, указанными в скобках).
Во многих языках программирования подпрограммы существуют только в виде функций. Однако в Паскале подпрограмма — и функция и процедура. Разница между ними станет очевидна в данном уроке.
Итак, рассмотрим синтаксис объявления и описания процедуры в Паскале
procedure pr; var i:integer; begin for i:=1 to 60 do begin <тело подпрограммы>write(‘*’); writeln; end; end; <конец подпрограммы>begin pr; <вызов процедуры>end.
В данном примере работы с процедурой в Паскале очевидно, что компилятор пропустит блок описания процедуры и дойдет до основной программы (9 строка кода). И только после того, как встретится вызов процедуры (10 строка), компилятор перейдет к ее выполнению, вернувшись к строке 1.
Процедуры с параметрами. Фактические и формальные параметры
Рассмотрим пример необходимости использования процедуры.
Особенность: Три похожие фигуры.
Алгоритм решения:
Решение на паскале:
Процедура:
uses GraphABC; procedure Tr( x, y: integer; color:system.Drawing.Color); begin MoveTo(x, y); LineTo(x, y-60); LineTo(x+100, y); LineTo(x, y); FloodFill(x+20, y-20,color); end; begin SetPenColor(clBlack); Tr(100, 100, clBlue); Tr(200, 100, clGreen); Tr(200, 160, clRed); end.
Рассмотрим синтаксис объявления и описания процедуры с параметрами в Паскале.
Параметры процедуры (в некоторых языках они называются аргументами) указываются в скобках после ее имени (в объявлении).
В данном примере в качестве введенного символа будем использовать параметр процедуры. Формальный параметр процедуры указывается в скобках при ее описании. Обязательно необходимо указать тип формального параметра через двоеточие.
Фактический параметр — это то значение, которое указывается в скобках при вызове процедуры. Фактическим параметром может быть конкретное значение (литерал: число, символ, строка…) либо переменная, которые компилятор подставит вместо формального параметра. Поэтому тип данных у формального и фактического параметра процедуры должен быть одинаковым.
Pascal | PascalABC.NET |