Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Методички. МУ Инф-ка_и_ИТ_в_проф_деятел_Юристы.doc
Скачиваний:
146
Добавлен:
20.02.2016
Размер:
11.74 Mб
Скачать

Лабораторная работа №4Тема: основы программирования на языке turbo pascal

Цель работы:

  1. Ознакомиться со структурой программы, алфавитом языка, типами данных, операторами.

  2. Научиться составлять программы.

Задание: Изучить основные понятия по теме, составить программы по заданию преподавателя.

Литература: [1]-стр. 275-295, [2]-стр. 157-176.

Структура программы:

-заголовок, состоящий из зарезервированного слова program и имени программы. Заголовок несет только смысловую нагрузку и может отсутствовать.

-программный блок, состоящий из раздела описаний и раздела операторов.

Раздел описаний может содержать:

  • описание имен подключаемых библиотечных модулей (uses);

  • описание меток (label);

  • описание констант (const);

  • описание типов данных (type);

  • описание переменных (var);

  • описание процедур и функций (procedure или function).

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

var

al, a2, a3: integer; xl,xl: real;

Раздел операторов начинается служебным словом begin. Далее следуют операторы программы, которые отделяются один от другого символом точка с запятой. Заканчивается раздел служебным словом end, после которого ставится точка.

Пример программы

program Priml;(заголовок программы}

var

а,b,х,у:real;{описание переменных}

begin{начало исполнительной части}

write('введите два числа через пробел');

readln(a,b);{ввод значений а и Ь}

х:=а+Ь; {вычисление суммы}

у:=а*Ь; {вычисление произведения}

writeln('А+В=',х,А*В=',у);{вывод результата}

end.{конец программы}

В программе вычисляется сумма и произведение двух чисел. Числа обозначены именами а, b, результаты вычислений - именами х, у.

Алфавит языка TURBO PASCAL составляют:

  • прописные и строчные буквы латинского алфавита: А, В, C...Y, Z , a, b, с,...у, z ;

  • десятичные цифры: 0 , 1, 2,...9;

  • специальные символы: + - */ ><=;# х , . : {} [] ( )

  • комбинации специальных символов, которые нельзя разделять пробелами, если они используются как знаки операций: « : =», « . . », « >< », «< =», «> =».

Данные, типы данных. Задача любой программы состоит в обработке данных. В языке TURBO PASCAL данные могут быть представлены в виде констант и переменных. Константы не изменяют своих значений в процессе выполнения программы, переменные могут изменять значения. Переменная определяется именем. Имя переменной состоит их латинских букв и цифр, начинается с буквы. Например, Alfa, Mas2 - имена переменных; 20, 'pascal' - константы.

Для описания множества допустимых значений величины и совокупности операций, в которых участвует данная величина, используется указание типа данных. Каждый тип имеет свой диапазон значений и специальное зарезервированное слово для описания.

Целочисленные типы данных используются для представления целых чисел. Основной тип Integer представляет целые числа в диапазоне: -32768...32767.

Вещественные (действительные) типы данных представляют собой значения, которые используются в арифметических выражениях и могут быть представлены двумя способами: с фиксированной и с плавающей точкой. Основной вещественный тип real, представляет числа с дробной частью, содержащей 11-12 знаков после запятой.

Действительные числа с фиксированной точкой записываются по обычным правилам арифметики, только целая часть от дробной отделяется точкой, например 32.5. Числа могут быть представлены в экспоненциальном виде (с плавающей точкой). Например

0.518Е+2 = 0.518 * 102= 51.8

0.518Е-2 = 0.518 * 10 2 = 0.00518


Логический (булевский) тип boolean определяется двумя значениями: true (истина) и false(ложь). Он применяется в логических выражениях.

Над числовыми данными могут выполняться арифметические операции, которые приведены в таблице 5.

Таблица 5

Арифметические операции

Операция

Действие

Тип операндов

Тип результата

+

Сложение

Целый, вещественный

Целый, вещественный

-

Вычитание

Целый, вещественный

Целый, вещественный

*

Умножение

Целый, вещественный

Целый, вещественный

/

Деление

Целый, вещественный

Вещественный

D1V

Целочисленное деление

Целый

Целый

MOD

Остаток от деления

Целый

Целый

Например, для нахождения целой части результата деления а на z, где а и z- целые, следует записать a DIV z. Если а=17, z=5, то результат равен 3.

Для нахождения остатка от деления а на z, где а и z - целые, следует записать a MOD z . Если а=17, z=5, то результат равен 2.

Примечание

Возведение числа х в целую степень, т. е. вычисление у=хn для п целого типа (integer), заменяется операцией умножения: xn = х*х*...х - п раз.

Для возведения положительного числа х в нецелую степень n (real), расчет производится по формуле:

Для выполнения некоторых заранее предопределенных действий в языке TURBO PASCAL разработаны и используются стандартные функции. В таблице 6 приведены некоторые часто используемые стандартные функции. При использовании стандартных функций в программе необходимо учитывать следующее:

  1. после имени стандартной функции в скобках записывается аргумент, который может быть арифметическим выражением cos (х+у) , константой cos (1.3), переменной cos (х), стандартной функцией cos (In (х) ) .

  2. аргумент тригонометрической функции должен быть задан в радианах.

Таблица 6

Стандартные математические функции

Обращение

Тип аргумента

Тип результата

Функция

Abs(x)

Целый, вещественный

Целый, вещественный

Модуль аргумента

Arctan(x)

Целый, вещественный

Вещественный

Арктангенс

Cos(x)

Целый, вещественный

Вещественный

Косинус

Ехр(х)

Целый, вещественный

Вещественный

ех- экспонента

Frac(x)

Вещественный

Вещественный

Дробная часть х

lnt(x)

Вещественный

Вещественный

Целая часть х

Trunc(x)

Вещественный

Целый

Ближайшее целое, не превышающее х по модулю

Kound(x)

Вещественный

Целый

Округление до ближайшего целого

Ln(x)

Целый, вещественный

Вещественный

Натуральный логарифм

Kandom(x)

Целый

Целый

Псевдослучайное число [0,х]

Sin(x)

Целый, вещественный

Вещественный

Синус

Sqr(x)

Целый, вещественный

Вещественный

Квадрат числа х

Sqrt(x)

Целый, вещественный

Вещественный

Корень квадратный из числа X

Pi

Вещественный

3.1415...

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

Правила записи арифметических выражений:

  • все знаки операций проставляются;

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

  • последовательность вычислений в выражении определяется в соответствии с приоритетами:

  1. вычисление стандартных функций,

  2. *, /, DIV, MOD,

  3. +,-.

Пример арифметического выражения:

(In(х)*ln(х)-cos(а*а)+sqrt(у-х*х))/х

соответствует алгебраическому выражению

Логические выражения образуются из логических переменных, арифметических, строковых выражений, операций отношения (>,< и т. д.) и логических операторов not, and, or. Результатом вычисления логического выражения является true (истина) или false(ложь).

Примеры логических выражений:

(а>0) and (b>0) - имеет значение true, если а >0 и b>0;

(a>0)or(b>0) - имеет значение true, если а>0 или b>0 или (а>0 и b>0);

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

Read (<список переменных>);

Readln (<Список переменных>);

В списке переменных перечисляются имена переменных. Значения этих переменных вводятся через пробел с клавиатуры при выполнении программы. После ввода данных для одной процедуры Read нажимается клавиша ввода <Enter>. Процедура чтения Readln аналогична процедуре Read, единственное отличие в том, что после считывания последнего в списке значения курсор переходит на начало новой строки.

Например, при выполнении оператора read (i , k); следует ввести с клавиатуры два числа через пробел, затем нажать клавишу <Enter>.

Вывод данных - обратный процесс, когда данные передаются после обработки из оперативной памяти на внешний носитель (экран монитора, принтер, дискету или винчестер и другие устройства). Выполнение этих операций в программе производится с помощью стандартных процедур Write, Writeln. Общий вид вызова процедур:

Write(<список вывода>); Writeln(<Список вывода>);

В списке вывода могут быть представлены переменные, выражения и произвольный текст, заключенный в апострофы. Например, Write('Привет'); Write(34.7); Write(45+55); Write(b, d);

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

Оператором TURBO PASCAL называется предложение языка программирования, задающее полное описание некоторого действия, которое необходимо выполнить. Основная часть программы на языке TURBO PASCAL представляет собой последовательность операторов. Разделителем операторов служит точка с запятой. Операторы, не содержащие других операторов, называются простыми. К ним относятся операторы присваивания, безусловного перехода, вызова процедуры, пустой оператор. Структурные операторы представляют собой конструкции, построенные из других операторов по строго определенным правилам.

Оператор присваивания используется для присваивания значений переменным. В его левой части указывается имя переменной, правая часть представляет собой выражение, тип которого совместим с типом переменной в левой части. Символ «:=» означает «присвоить значение». Оператор присваивания выполняется в два этапа: сначала вычисляется значение выражения в правой части, затем выполняется присваивание результата левой части, т.е. результат записывается в ячейку, отведенную переменной, указанной в левой части оператора. Например,

х:= 1;

а:= 5.02;

b:= 32*a+Sin(х);

s:= 'Иван Иваныч';

Пример

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

Программа

program Prim2;

var

a,b,r: real;

begin

write('Введите два числа '); readln(a,b);

r: =a; {значение переменной а записывается в переменную r}

а: =b; {значение переменной b записывается в переменную а}

b:=r; {значение переменной r записывается в переменную b}

write ('а=' , а, 'b=' , b);

end.

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

begin

<оператор 1>;

<оператор 2>;

<оператор N>

end;

Условный оператор if используется в программе для организации ветвлений в зависимости от выполнения некоторого условия. Структура оператора:

if <условие> then <оператор 1> ;

или

if <условие> then <оператор 1> else <оператор 2>;

Здесь <условие> это некоторое логическое выражение;

<оператор 1>, <оператор 2> простые или составные операторы.

Действие оператора: если <условие > выполняется (логическое выражение равно true) , то выполняется <оператор 1>, если < условие> не выполняется (логическое выражение равно false), то выполняется <оператор 2>. Если в структуре этого оператора else отсутствует и <условие> не выполняется, то управление передастся оператору, следующему за оператором if.

Рассмотрим примеры использования условного оператора if.

Пример 1

if a>b then write (a) else write (b); если a>b;

то будет выполнена процедура вывода значения переменной а, в противном случае - процедура вывода значения переменной b.

Пример 2

if (a>b) and (а>с) then write (a);

по этому оператору будет выполнена процедура вывода значения переменной а только в том случае, если а>b и а>с.

Пример 3

if а < 0 then

begin

b:=2 * а;

write(b);

end

else

с: = sqr(a);

если значение переменной а меньше 0, то будет вычислено значение переменной b и выведено на экран, если значение переменной а больше либо равно 0, то будет вычислено значение переменной с.

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

Структура оператора цикла с предусловием:

while< условие > do <оператор>;

Здесь

<условие> - некоторое логическое выражение;

<оператор> - простой или составной оператор внутри цикла (тело цикла).

Тело цикла будет выполняться до тех пор, пока <условие> имеет значение true, прекращает выполняться, если <условие> принимает значение false.

Структура оператора цикла с постусловием:

repeat

< тело цикла >

until < условие>;

Здесь

<тело цикла> - может содержать любые допустимые операторы языка TURBO PASCAL, разделенные символом точка с запятой. Но этому оператору <тело цикла> выполняется до тех пор, пока не выполнится заданное < условие >.

Структура оператора цикла с параметром for

for i:=n to nk do <оператор>;

или

for і: =n downto nk do <оператор>;

Здесь

і - параметр цикла; n, nk- соответственно начальное и конечное значения параметра цикла. Шаг изменения параметра цикла равен 1 для первой формы оператора и равен минус 1 для второй формы оператора.

<оператор> - простой или составной оператор (тело цикла).

Оператор for применяют в тех случаях, когда число повторений цикла заранее известно.

Пример

Вычислить значение переменной у при заданном значении n.

program РгіmЗ;

var

і,n:integer;

у:real;

begin

writeln(1 введите число n1);

readln(n);

{1 способ организации цикла с помощью оператора WHILE}

у:=0;

i:=l;

while i<=n do

begin

у:=у+1/і;

і:=і+1;

end;

writeln('у=' , у) ;

{2 способ организации цикла с помощью оператора REPEAT}

у:=0;

і: =1 ;

repeat

у:=у+1/і;

і:=і + 1;

until i>n;

writeln(1y=',y);

{3 способ организации цикла с помощью оператора FOR}

у:=0;

for i:=l to n do

у:=у+1/і;

writeln('у=',у);

end.

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

Одномерный массив - это массив, у которого в описании указан только один индекс. Например, а (і) значение элемента массива а с номером і . Массивы, используемые в программе, должны быть объявлены в разделе описаний следующим образом:

а: array [l..n ] of<тип >;

Здесь а - имя массива; п - максимально допустимое количество элементов в массиве; < тип > - тип данных в массиве (real, integer и т.д.).

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

В явном виде

program Mas;

var

a: array[1..20] of real;

begin

end.

С помощью константы

program Mas;

const n=20;

var

a: array[l..n] of real;

begin

end.

Доступ к каждому конкретному элементу массива осуществляется по имени с указанием значения индекса (номера) элемента. Например: а [1] - элемент массива с номером 1; а [3] - элемент массива с номером 3; а [ і ] - элемент массива с номером і.

Двумерный массив - это массив, у которого в описании указаны два индекса. Двумерный массив можно рассматривать как матрицу или таблицу, в которой каждый элемент однозначно определяется номером строки и столбца, па пересечении которых он находится. При этом первый индекс определяет номер строки, второй - номер столбца. Например, если в массиве количество строк равно количеству столбцов и равно 3, то массив можно представить в виде:

а[1,1]

а[1,2]

а[1,3]

а[2,1]

а[2,2]

а[2,3]

а[3,1]

а[3,2]

а[3,3]

Доступ к каждому конкретному элементу массива осуществляется по имени с указанием значений индексов элемента. Например:

а[1,2] - элемент массива, расположенный на пересечении строки с номером 1 и столбца с номером 2;

a[i,k] - элемент массива расположенный на пересечении строки с номером і и столбца с номером к.

Двумерный массив можно описать следующим образом:

a: array [1 ..n,1..m] of< тип >;

Здесь п максимально допустимое количество строк, m - максимально допустимое количество количество столбцов массива.

Например: a: array[1. .10 ,1. .10] of integer;

Объявляется двумерный массив, содержащий данные типа integer, состоящий из 10 строк и 10 столбцов.

Ввод и вывод значений элементов массива рассмотрим на примерах. Массив а - одномерный, состоит из 10 элементов. Массив b - двумерный, состоит из 10 строк и 10 столбцов. Массив а заполняется значениями полностью, т.е. всем элементам массива присваиваются значения с клавиатуры. При вводе значений элементов массива b сначала вводится количество строк и столбцов (меньше либо равно 10), которые будут использованы при выполнении программы. Значения элементов массива а выводятся в одну строку. Значения элементов двумерного массива b выводятся в виде таблицы.

program Prim4; var

а:array[1..10] of real;

b:array[1..10, 1..10] of real;

i,j,m,n: integer;

begin

{ввод элементов одномерного массива с клавиатуры}

for і:=1 to 10 do

begin

writeln(' ввести' ,і, ' - элемент массива ') ;

readln(а[і]);

end;

{ввод элементов двумерного массива с клавиатуры построчно}

writeln('введите количество строк n<=10');

readln(n);

writeln('введите количество столбцов m<=10');

readln(m);

for i:=l to n do

for j:=1 to m do

begin

writeln ( 'введите' ,і, ' , ',j, 'элемент массива') ;

readln(b[і,j]);

end ;

{вывод элементов одномерного массива на экран}

for i:=l to 10 do write(а[і]);

{вывод на экран элементов двумерного массива b в виде таблицы}

for i:=l to n do

begin

for j:=l to m do write(b[i,j]);

writeln;

end;

Примеры решения типовых задач

Задача 1. Вычислить значение функции y=b-sin2x*cos(ax). Значения а, b и х вводить с клавиатуры.

Таблица 7

Таблица обозначений в программе

Наименование

Обозначение

Тип данных

Функция

У

real

Аргумент

X

real

Коэффициенты

а, b

real

Программа:

program Prim5;

var х,у,a, b:real;

begin

writeln('Введите значения a,b,x');

readln (a,b,х) ; {вводим исходные данные с клавиатуры}

у : =b-sin (2*х) *cos (а*х) ; {вычисляем у}

writeln (у) ; {выводим на экран вычисленное значение }

end.

Задача 2. Составить программу расчета значений функции f(x)=sin(2x) * е * на интервале изменения х, равном [а,b] в n равноотстоящих точках. Вычисленные значения функции сохранить в массиве с. Определить: 1) сумму вычисленных значений функции, 2) произведение отрицательных значений функции из числа вычисленных, 3) количество значений функции среди вычисленных, целая часть которых делится на 2 без остатка, 4) наибольшее из вычисленных значений функции. Значения a, b, n вводить с клавиатуры (а<b и n>1).

Таблица 8

Таблица обозначений в программе

Наименование

Обозначение

Тип

Аргумент функции

X

real

Границы интервала изменения х

а, b

real

Кол-во точек

n

integer

Шаг изменения аргумента х

d

real

Сумма значений функции

s

real

Произведение отрицательных значений функции

Р

real

Количество значений функции, целая часть которых делится на 2 без остатка

kol

integer

Наибольшее из вычисленных значений функции

max

real

Массив, содержащий вычисленные значения функции

с

real

Текший номер расчетной точки

і

integer

Комментарий к программе. Для вычисления значений функции организуем цикл, в котором при изменяющемся значении аргумента функции х будем вычислять значения функции и записывать эти значения в массив с. Аргумент х изменяется от а до b с шагом d, который равен длине интервала изменения х, деленной на количество расчетных точек минус 1, т.е. d: = (b-a)/ (n-1).

Таким образом, значение элемента массива с [1] равно значению функции в точке а (точка с номером 1), значение элемента с [2] равно значению функции в точке a+d (точка с номером 2) и т.д. Сумма вычисленных значений функции сеть сумма значений всех элементов массива с. Произведение отрицательных значений функции из числа вычисленных есть произведение элементов массива с, имеющих отрицательные значения. Количество значений функции среди вычисленных, целая часть которых делится на 2 без остатка есть количество элементов массива с, удовлетворяющих этому условию. Наибольшее из вычисленных значений функции есть наибольший по значению элемент в массиве с.

Программа:

program Ргіm6;

var

x,a,b,s,d,p,max:real;

і,n,kol:integer;

c:array [1..100] of real;

begin

writeln ('Введите a,b (a<b)');

readln (a,b); writeln('Введите l<n<=100');

readln (n); d: = (b-a)/ (n-1) ; {вычисляем шаг изменения x}

{Вычисляем значения функции и сохраняем их в массиве}

х:=а; і:=1;

while i<=n do

begin

с [і] : =sin (2*x) *exp (x); {вычисляем значение f(x) }

writeln (x, c[i]); {вывод на экран значения х и f (х) }

і : =і + 1; х : =x+d; {переходим к следующей расчетной точке }

end;

{Определяем сумму, произведение, количество и наибольшее значение}

s:=0; р:=1; kol:=0; тах:=с[1];

for i:=l to n do

begin

s : =s+c [i] ; {накапливаем сумму в цикле}

if c[i]<0 then p : =p*c [ і ];{накапливаем произведение}

if trunc(c[i]) mod 2 =0 then kol:=kol + l; {накапл. кол-во}

if c[i]>max then max:=c[i] ; {определяем наиб, зн-е}

end;

{Выводим результаты расчета на экран}

writeln( сумма =',s);

writeln(‘произведение = ',р);

writeln(количество значений функции =' ,kol) ;

writeln(наибольшее значение функции =' ,тах) ;

end.

Задача 3. Найти минимальный по значению элемент в двумерном массиве а, состоящем из n строк и m столбцов, значения n,m вводятся с клавиатуры.

Таблица 9

Таблица обозначений в программе

Наименование

Обозначение

Тип

Массив

а

real

Кол-во строк и столбцов в массиве

n, m

integer

Минимальное значение

min

real

Индекс

і/ j

integer

Программа:

program Prim7;

var

a:array[l..10,1..10] of real;

i,j,n,m: integer;

min: real;

begin

writeln('вводим размеры массива') ;

write('число строк n='); readln(n);

write('число столбцов m=');

readln(m);

{вводим значения элементов массива с клавиатуры}

for i:=l to n do

for j:=1 to m do

readln(a[i,j ]);

{находим наименьший по значению элемент массива}

min:=а[1,1];

for i:=l to n do

for j:=1 to m do

if a[i,j]< min then min:=a[i,j];

writeln('минимальное значение=',min);

end.

Тестовые задания:

        1. Для типа данных REAL в языке программирования Pascal не определена операция …

          1. ^ (возведение в степень)

           

          1. / (деление)

           

          1. * (умножение)

           

          1. + (сложение)

        2. Принципиальным отличием языков программирования от естественных человеческих языков является …

  1. однозначность

 

  1. ограниченность

 

  1. универсальность

 

  1. простота

3.Стандартной процедурой языка программирования, преобразующей данные из внутреннего представления в символы, выводимые на экран, является …

  1. вывод

 

  1. ввод

 

  1. присваивание

 

  1. печать

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

  1. тип данных

 

  1. подпрограмма

 

  1. оператор

 

  1. модуль

5.Структурированный тип данных из однородного упорядоченного набора величин одного и того же типа, объединенных одним общим именем, называется …

  1. массивом

 

  1. записью

 

  1. файлом

 

  1. множеством

6.Языки программирования, для которых имеются компиляторы, работающие более чем на одной аппаратной платформе или операционной системе, называются …

  1. кроссплатформенными

 

  1. универсальными

 

  1. многоуровневыми

 

  1. гетерогенными

7.Операцией отношения языка программирования Pascal, является …

  1. < > (не равно)

 

  1. and (логическое и)

 

  1. / (деления)

 

  1. + (сложения)

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

  1. записи

 

  1. массивы

 

  1. интервалы

 

  1. множества

9.Среди представленных имен переменных неправильным является …

  1. 100%_praviljnoe_imya

 

  1. Nepraviljnoe_imya

 

  1. Nevernyj_identificator

 

  1. Identifikator_100%_vernyj

10.В программе на языке программирования Pascal раздел операторов начинается со служебного слова …

  1. BEGIN

 

  1. REPEAT

 

  1. OPERATOR

 

  1. PROCEDURE

11.В языке программирования Pascal оператор GOTO является оператором …

  1. безусловного перехода

 

  1. условного перехода

 

  1. ветвления

 

  1. выбора

12.Языки программирования высокого уровня по отношению к аппаратным средствам компьютера являются …

  1. машинно-независимыми

 

  1. машинно-зависимыми

 

  1. аппаратно-ориентированными

 

  1. процессорно-совместимыми