Программирования Турбо Паскаль 5



страница8/10
Дата01.08.2016
Размер0.66 Mb.
ТипРеферат
1   2   3   4   5   6   7   8   9   10

Примеры


1) возвести x в пятую степень

x*x*x*x*x или  sqr(x)*sqr(x)*x или sqr(sqr(x))*x, последнее показывает, что результаты одних функций могут быть аргументами других – это называют вложением функций. Разумеется, тип результата, возвращаемый вложенной функцией, должен быть подходящим для аргумента внешней функции.


2) возвести величину a в произвольную степень x

Так как в Паскале нет функции возведения в произвольную степень, воспользуемся формулой ax=ex*ln a

a:=2.5; x:=0.25;

ax:=exp(x*ln(a));

обратите внимание, что все скобки в выражении должны быть парными. Или:

image004 = exp(1/3ln(x)).
3) вычислить sin2x => sqr(sin(x)).

Нельзя писать sin*x или sin x, после имени функции может следовать только аргумент в круглых скобках.


4) вычислить k=tg(t). Т.к. функции tg нет, пишем k:=sin(t)/cos(t);

http://pers.narod.ru/study/pascal.files/image005.gif

5) вычислить:


При необходимости изменить обычное старшинство операций в записи выражения используются круглые скобки.

Правильная запись: y:=(a+b)/2; Неправильно y:=a+b/2, т.к. это означает .



6) В записи выражений нельзя пропускать знак *, как часто делается в математике.

b2-4ac   -> sqr(b)-4*a*c

    1. Тип выражения


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

В программе данные одного типа могут преобразовываться в данные другого типа. Такое преобразование может быть явным и неявным.


При явном преобразовании типов используются вызовы специальных функций преобразования, аргументы которых принадлежат одному типу, а значение – другому. Например, это функции ORD, TRUNC, ROUND и т.д.
Неявное преобразование типов возможно в выражениях, составленных из вещественных и целочисленных переменных. Тип выражения в этом случае определяется старшим из типов входящих в него операндов (т.е. стандартных функций, переменных, констант).
Пример:

var i,j,x:integer;

f:real;

. . .


i+4*j           целый тип выражения, можно записать результат в целую переменную.

f+i*0.5      вещественный, результат пишется в вещественную переменную.

Оператор x:= i+4*j  будет синтаксически правильным, а x:= f+i*0.5 будет неверным. Среда разработчика при компиляции сообщит об ошибке несовместимости типов.

Операция деления / в Паскале всегда дает вещественное число. Для деления целых чисел с целым результатом (остаток отбрасывается) используйте div, для взятия остатка от деления двух целых – mod.

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

  1. Виды вычислительных алгоритмов


Любой алгоритм, реализующий решение задачи на компьютере, может быть разработан в виде комбинации трёх базовых алгоритмических конструкций: линейной, разветвляющейся и циклической.

В линейном алгоритме все действия выполняются в строгом порядке, последовательно одно за другим.

В разветвляющемся алгоритме те или иные действия выполняются в зависимости от выполнения или невыполнения некоего условия.

В циклическом алгоритме повторяются некоторые действия, составляющие тело цикла, при выполнении некоего условия. При этом в цикле содержатся повторяющиеся действия с какой-либо изменяющейся величиной, называемой параметром цикла. Ниже приведены блок-схемы алгоритмов: рис.5.1,а – линейный; рис.5.1,б – разветвляющийся; рис.5.1,в – циклический.



Рисунок 1.
условие

S

да

нет

S1

S2

Sn

S1

S3

да

нет

условие


S2

условие


S

да

нет

а
б


в
S1

S2

да

нет

условие


Здесь S, S1, S2 …. – операторы или блоки операторов языка программирования.

Все алгоритмы имеют общее свойство: один вход и один выход. Именно благодаря этому свойству на их основе можно создавать наглядные алгоритмы, уменьшая тем самым вероятность ошибок при решении сложных информационных задач. Допускается неограниченное соединение структур и их вложение друг в друга. Что позволяет проектировать сложные алгоритмы.


    1. Линейный вычислительный процесс


Линейный вычислительный процесс представляет собой набор операторов, выполняемых последовательно, один за другим. Основу программы линейного вычислительного процесса составляют операторы присваивания, ввода и вывода данных.
      1. Оператор присваивания


Оператор присваивания используется для сохранения результата вычисления выражения в переменной. Общий вид:

переменная := выражение;

Знак := читается как "присвоить".

Работа оператора:

Сначала вычисляется выражение, стоящее справа от знака :=, затем результат записывается в переменную, стоящую слева от знака. Например, после выполнения оператора

k:=k+2;

текущее значение переменной k увеличится на 2.



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

1. Записать оператор присваивания, который позволяет вычислить расстояние между двумя точками на плоскости с координатами (x1, y1) и (x2, y2).



Ответ:                      d:=sqrt(sqr(x1–x2)+sqr(y1–y2));

2. Записать последовательность операторов присваивания, обеспечивающих обмен значениями переменных x и y в памяти компьютера.



Ответ:          c:=x;

                        x:=y;

                        y:=c;

где с – дополнительная переменная того же типа, что x и y, через которую осуществляется обмен. Грубой ошибкой было бы, например, попытаться выполнить обмен операторами x:=y; y:=x; - ведь уже после первого из них мы имеем два значения y, а исходное значение x потеряно.


      1. Операторы ввода и вывода


В данном разделе рассмотрим организацию ввода и вывода данных с терминального устройства. Терминальное устройство - это устройство, с которым работает пользователь, обычно это клавиатура и экран (дисплей).
        1. Ввод данных

Для ввода исходных данных чаще всего используется процедуры Read и ReadLn. Общий вид записи операторов:

Read(A1,A2,...AK);

ReadLn(A1,A2,...AK);
Здесь и далее список данных, передаваемых любому оператору (а позднее и написанным нами подпрограммам), мы будем называть параметрами. Таким образом, параметрами оператора (точней, стандартной процедуры) Read являются имена переменных, описанных ранее в разделе var.

При вводе исходных данных происходит преобразование из внешней формы представления во внутреннюю, определяемую типом переменных. Переменные, образующие список ввода, могут принадлежать либо к целому, либо к вещественному, либо к символьному типам. Чтение исходных данных логического типа в языке Паскаль недопустимо!



Работа операторов:

По достижении оператора ввода выполнение программы останавливается и ожидается ввод данных пользователем. Вводимые с клавиатуры значения переменных разделяются пробелом или нажатием клавиш табуляции и Enter. Не допускается разделение вводимых чисел запятыми!

После ввода значений всех переменных из списка работа программы продолжается со следующего оператора. Процедура производит чтение К значений исходных данных и присваивает эти значения переменным А1, А2, ..., АК.

Readln отличается от Read только тем, что все переменные должны быть введены в одну строку экрана, Enter нажимается один раз в конце. Readln используется в основном для ввода строк текста, для ввода чисел лучше использовать Read, т.к. в этом случае пользователь может вводить данные более свободно (и в одну, и в несколько строк экрана).

Если пользователь вводит данные недопустимого типа (например, строку текста вместо числа), то выводится сообщение об ошибке  и работа программы прерывается.

Пример: нужно ввести данные для решения квадратного уравнения

var a,b,c:real;

. . . .

read (a,b,c);



Например, a=1, b=4, c=2.5 На экране вводим:

1_4_2.5¬                   

_ означает пробел

¬ означает нажатие Enter, переходим на следующую строку

или

1¬                     



2.5¬


или

4_2.5¬


Пробелов может быть и несколько.

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


        1. Вывод данных

Для вывода результатов работы программы на экран используются процедуры:

Write(A1,A2,...AK);

WriteLn(A1,A2,...AK);

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

Работа операторов:
Элементы списка выводятся в пользовательское окно программы. Форма представления значений в поле вывода соответствует типу переменных и выражений: величины целого типа выводятся как целые десятичные числа, действительного типа - как действительные десятичные числа с десятичным порядком, символьного типа и строки - в виде символов, логического типа - в виде логических констант TRUE и FALSE.

Вещественные значения выводятся в экспоненциальной форме (с буквой E). Строки выводятся "как есть". После вывода работа программы продолжается со следующего оператора.

Оператор writeln отличается от write лишь тем, что после вывода значения последнего элемента списка выполняется перевод курсора на следующую строку экрана.

Примеры:

1) Нужно дать пользователю возможность ввести с клавиатуры число, затем программа возведет это число в квадрат и выведет результат на экран.

var a,a2:integer;

. . . .

writeln ('Введите целое число:');     {это приглашение к вводу!}



read (a);

a2:=sqr(a);

writeln ('Квадрат числа=',a2);

Если ввести a=2, на экране будет напечатано

Квадрат числа=4

|             ---курсор на следующей строке

 

После вывода результата выполнение программы продолжится, а если оператор writeln был в ней последним, то и завершится. Чтобы пользователь успел прочитать результат, следует в конце программы добавить оператор



readln;

который будет ждать нажатия клавиши Enter.

 

2) Нужно вывести результаты решения квадратного уравнения x1=1.5 и x2=2.5



write ('x1=',x1,'_x2=',x2);

-пробел здесь нужен, чтоб значение x1 не слилось со строкой 'x2='

на экране будет напечатано:

x1= 1.5000000000E+00 x2= 2.5000000000E+00|

                                      -курсор остался в конце строки, т.к. использован write!

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

        1. Управление выводом данных

Оператор вывода позволяет задать ширину поля вывода для каждого элемента списка вывода. В этом случае элемент списка вывода имеет вид

Для целых чисел и строк:
переменная:ширина
где: переменная – выражение или строка,
ширина – выражение либо константа целого типа. Определяет, сколько экранных позиций отводится для вывода всего числа. Если выводимое значение занимает в поле вывода меньше позиций, чем указанное, то перед этим значением располагаются пробелы. Если выводимое значение не помещается в ширину поля К, то для этого значения будет отведено необходимое количество позиций.

Для величин действительного типа элемент списка вывода может иметь вид:
переменная:ширина:точность
где - переменная – переменная или выражение вещественного типа,
ширина - ширина поля вывода,
точность - число цифр дробной части выводимого значения.
Ширина и точность - выражения или константы целого типа. В этом случае действительные значения выводятся в форме десятичного числа с фиксированной точкой. Разумные значения точности – от 0 до ширина-2 включительно. Недопустимые значения ширины и точности не будут учтены при выводе.
Пример: печатаем значения переменных

var x1,p:real;

i:integer;

. . . .


x1:=2.5; p:=-3.175; i:=2;

writeln ('x1=',x1:8:2,'_p=',p:9:4);

write ('I=','_':5,i:2);

На экране будет напечатано:

x1=____2.50_p=__-3.1750

I=______2



_ везде обозначает пробел
        1. Вывод на печать

Иногда требуется, чтобы программа вывела результаты своей работы на принтер. Для этого достаточно выполнения двух условий.

1)Первым оператором программы следует указать оператор


uses printer;
Он подключает стандартную библиотеку для работы с принтером.

2)Первым  параметром оператора write или writeln указать символическое имя принтера lst, описанное в библиотеке printer:


write ('Hello');                               строка 'Hello' выведена на экран,

write (lst,'Hello');                     а здесь – уже на принтер.


Отличие между write и writeln сохраняется при выводе на принтер – то есть, при использовании writeln позиция печати на принтере будет переведена на следующую строку.

Здесь не приводится код, позволяющий проверить, готов ли принтер к печати и удалась ли операция вывода данных на него. Подобные выполняются с помощью стандартной функции IoResult.





    1. Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   10


База данных защищена авторским правом ©uverenniy.ru 2019
обратиться к администрации

    Главная страница