- •Алещенко а.С.
- •2 Раздел
- •Раздел 1
- •1.1. Алгоритмы и формы описания алгоритмов. Блок-схемы линейных алгоритмов
- •1.2. Типовая структура алгоритмического языка
- •Программные единицы
- •1.3. Операторы ввода и вывода данных. Оболочка Турбо-Паскаля
- •Операторы ввода и вывода.
- •1.4. Циклические алгоритмы и организация циклов
- •Использование псевдографики для оформления результатов
- •1.5. Разветвляющиеся алгоритмы и их реализация
- •1.6. Обработка массивов. Индексированные переменные
- •Правила использования вложенных циклов
- •1.7. Вспомогательные алгоритмы. Нестандартные функции
- •Раздел 2
- •2.1. Типы циклических алгоритмов
- •2.2. Структуры разветвляющихся алгоритмов
- •Практическая часть.
- •2.3. Обработка индексированных переменных
- •Псевдографика в Турбо-Паскале
- •Масштабирование графиков
- •2.4. Обработка символьной информации на Турбо-Паскале
- •2.5. Вспомогательные алгоритмы: процедуры
Использование псевдографики для оформления результатов
Для изображения таблиц результатов широко используются символы псевдографики в сочетании с операторами вывода и форматированием.
Например, чтобы оформить результаты вычисления функции у=sin(x) для x=[0,1;1] с шагом h=0,1, можно написать программу
program prim2;
var i:integer; x,y:real;
begin
x:=0.1;
{рисуем заголовок таблицы}
write('|');
for i:=1 to 21 do write('-'); writeln('|');
writeln ('|','x':5,'|':6,'y':5,'|':6);
write('|');
for i:=1 to 21 do write('-'); writeln('|');
{заполняем таблицу}
for i:=1 to 10 do begin
y:=sin(x);
writeln('|',x:6:2,'|':5,y:6:3,'|':5);
x:=x+0.1;
end;
{закрываем рамку таблицы}
write('|');
for i:=1 to 21 do write('-'); writeln('|');
end.
1.5. Разветвляющиеся алгоритмы и их реализация
Как известно, разветвляющиеся алгоритмы отличаются наличием блоков принятия решения и предназначены для выполнения тех или иных действий в зависимости от истинности определенных условий. Например, до выполнения операции деления для любых значений аргумента (или аргументов), следует выполнить проверку, не является ли делитель нулевым.
Вычислим значение
для a = 0,5; x = [0,3;1] с шагом Δx = 0,1
тогда требуется проверить условие x-a = 0, и если оно истинно, то вывести сообщение «деление невозможно», иначе вычислить Y и вывести его на экран.
Для этого используются условные операторы, которые имеются во всех алгоритмических языках. В Паскале условных операторов 2. Полный условный оператор имеет вид
IF {условие} THEN {оператор 1} ELSE {оператор 2};
где { условие } – это логическое выражение, в простейшем случае это – операция сравнения,
{оператор 1} – выполняется, если {условие} истинно,
{оператор 2} – выполняется, если {условие} ложно.
Например,
If x > 0 then y := SQRT(x) else writeln (‘результата нет’);
Краткая форма условного оператора не содержит альтернативного варианта и имеет вид
IF {условие} THEN {оператор 1};
Тогда в случае невыполнения условия никаких действий не производится и выполняется следующий оператор. Например, при использовании оператора
If x > 0 then y := SQRT(x);
Сообщения об отрицательном подкоренном выражении не будет. Заметим, если не использовать условный оператор, то при отрицательном значении x ошибку обнаружит ПК и прервет выполнение программы.
Тогда для приведенного примера блок-схема и программа будут иметь вид (см. рис.1.4).
Вычислим число проходов цикла N = (1-0,3)/0,1+1 = 8.
Начало Program VETVI;
a=0,5 x=0,3 var a,x,y: real; I: integer;
i от 1 до 5 begin a:=0.5; x:=0,3;
x ≠ a for I := 1 to 8 do BEGIN
IF x< > a THEN
Y =(x+a)/(x-a) BEGIN y := (x+a)/(x-a);
Вывод x, Y writeln ( ’ x = ’,x:5:1, ’ y = ’,y:6:3);
END ELSE
Деление невозможно writeln (’ Деление невозможно ’);
x = x + 0,1 x := x + 0.1;
END;
Конец end.
Рис 1.4
Для случая, когда необходим выбор из трех более ветвей, используется оператор выбора, имеющий вид:
CASE {} of
{константа 1}: {оператор 1};
{константа 2}: {оператор 2};
…
{константа N}: {оператор N};
END;
Например, вычислим значения функции
для b = 0,8; a = [0,2;1,4] с шагом Δa = 0,2
Предварительно вычислим число проходов цикла N = 7 и определим, на каких шагах должны выполняться определенные вычисления. Если ввести счетчик цикла i от 1 до 7, тогда:
- при a=0,2; 0,4; 0,6 вычисление производится по первой формуле, т.е. при i=1,2,3;
- аналогично при i=4 вычисление производится по второй формуле,
- а при i=5,6,7 вычисление производится по третьей формуле.
Тогда программа будет иметь вид:
Program VETV2;
Const b=0.8;
Var i:integer; a,y:real;
Begin a:=0.2;
For i:=1 to 7 do begin
Case i of
1,2,3: y:= ;
4: y := a*sqr(a) ;
5,6,7: y:=cos (a-b);
end; {конец оператора выбора}
writeln (‘ a= ’, a:5:1, ‘ y=’,y:6:3);
a := a + 0.2; end; {конец цикла}
end.
Схема алгоритма для этой программы приведена на рис. 1.5
Начало
b=0,8 a=0,2
i от 1 до 7
i
1 ,2,3 4 5,6,7
y = a sin(b-a) y = a3 y = cos(a-b)
Вывод а, у
a = a + da
Конец
Рис. 1.5