Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа2_КОС_2ч.doc
Скачиваний:
19
Добавлен:
16.04.2015
Размер:
430.59 Кб
Скачать

Описание констант

В этом разделе производится присваивание идентификатором констант постоянных значений.

Формат:

Const <идентификатор>=<значение>;

Например:

One=1;

Limit=-One;

Separator=’******’;

High=-1000;

Будучи определенной в программе, любой идентификатор константы может входить во все конструкции, в которых может присутствовать связанное с ним значение, например: Diar:= (x-High)/2+One;

Не допускаются ситуации, когда идентификатору константы предлагается изменить значение, например: High:= (x+y)*2;

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

Const

Min=0; Max=100;

Center= (Max-Min)/2; Message=’ Out of memory’;

Error_Txt=’Error:’+Message+’.’;

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

Описание типов

Тип данных может быть описан либо в разделе описания типов, либо в разделе описания переменных. Выбор описания типа зависит только от программиста и специфики программы.

Формат:

Type <имя типа>=<значение типа>;

Например:

Type

Positive=word;

Diapason=1..20;

Var

LoopGoup: Positive;

Index: real;

Ind: Diapason;

First_Letter; ‘a’..’z’;

Описание переменных

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

Формат:

Var <идентификатор,…>;<mun>;

Например:

Var

А,B,C : integer;

Result, Summa: real;

Vxod: boolean;

Описание операторов

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

Формат:

Begin

<оператор;>

<оператор>

End.

Выражения

Операции в языке Паскаль подразделяются на арифметические, отношения, логические, строковые и др. Выражения соответственно называются арифметические, отношения, логические и т.д.

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

«+» сложение;

«» вычитание;

«*» умножение;

«/» деление;

div целочисленное деление;

mod взятие остатка от целочисленного деления

Например: 9/4=2.25; 9div 4=2; 9 mod 4=1.

Тип результата выражения зависит от типов операндов, участвующих в операции. Операции div и mod допустимы только над значениями целого типа.

операции отношения:

= равно;

<> не равно;

> больше;

< меньше;

>=, => больше или равно;

<=, =< меньше или равно;

in принадлежность.

Например: А in М

Результат всегда имеет булевский тип и принимает одно из двух значений: True – если значение выражения истинно; и False – если значение выражения ложно.

логические операции:

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

Результат равен True, если аргументы одновременно равны True. В остальных случаях результат выражения будет равен False.

Например: А and В

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

Результат равен True, если хотя бы один аргумент равен True. В остальных случаях результат выражения будет равен False.

Например: А or В

  1. XOR (исключающее или).

Результат равен True, если аргументы одновременно равны False. В остальных случаях результат выражения будет равен False.

Например: А xor В

  1. NOT (логическое отрицание).

Результат равен True, если аргумент равен False, и результат равен False, если аргумент равен True.

Например: not А

Вычисление выражений производится по следующим правилам:

  1. запись выражения производится в одну строку без каких-либо подстрочных или надстрочных знаков с использованием только круглых скобок;

  2. выполняются операции внутри скобок. Если имеется несколько пар скобок, вычисления начинаются с самых внутренних;

  3. порядок вычислений внутри скобок определяется приоритетом (старшинством) операций:

а) вычисление значений функций;

б) not;

в) возведение в степень;

г) операции типа умножения (*, /, div, mod, and);

д) операции типа сложения (+, - , or, xor);

е) операции отношения.

Операция, имеющая высший приоритет, выполняется первой.

  1. при наличии нескольких операций одного приоритета вычисления выполняются слева направо.

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

Таблица 5

Название функции

Обозначение в математике

Обозначение в Паскале

Примечание

Синус

sin (x)

SIN (x)

Аргумент имеет целый или вещественный тип, а результат только вещественный

Косинус

cos (x)

COS (x)

То же

Арктангенс

arctg (x)

ARCTAN (x)

То же

Экспонента

exp (x)=ex

EXP (x)

То же

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

ln (x)

LN (x)

То же

Десятичный логарифм

lg (x)

0.4343*LN (x)

То же

Квадратный корень

√x

SQRT (x)

То же

Возведение в квадрат

x2

SQR (x)

Результат имеет тот же тип, что и аргумент, который может быть целого или вещественного типа

Абсолютное значение

|х|

ABS (x)

То же

Возвращает ближайшее целое число, меньшее или равное х, если х≥0, и большее или равное х, если х<0

-

INT (x)

Аргумент имеет целый или вещественный тип, а результат только вещественный

Выделение дробной части х

-

FRAC (x)

То же

Возвращает ближайшее целое число, меньшее или равное х, если х≥0, и большее или равное х, если х<0

-

TRUNC (x)

Аргумент и результат могут иметь целый либо вещественный тип

Возвращает значение х, округленное до ближайшего целого числа

-

ROUND (x)

То же

Число π

π

PI

Π=3.14

Генерация случайного числа с равномерным законом распределения

-

RANDOM

Тип результата вещественный

Возвращает значение булевского типа, равное True, если х нечетное, и False, если х четное

-

ODD (x)

Аргумент имеет целый или вещественный тип, а результат - булевский

Возведение в n-ую степень

xn

xn=exp(n*LN(x))

Примеры:

у:= sin (60*pi/100); {y=8.6602540387E-01} y:=int(-1.2); {y= -1}

y:= cos (45*pi/100); {y=5.0000000E-01} y:=int(-1.5); {y= -1}

y:= arctan (180/pi); {y=1.553354}

Оператор присваивания

Формат:

< идентификатор>:=< выражение >;

Предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, идентификатор которой расположен в левой части. Переменная и выражение должны иметь один и тот же тип, исключение,когда переменная вещественная, а выражение целочисленное. Пример: Rezalt:=l+sin(A)

Процедуры ввода READ и READLN

Обеспечивают ввод информации с клавиатуры для последующей обработки ее программой.

Формат:

read(x1,x2, ...,xn);

readln1, х2, .. хn);

где x1,x2,. .,Хn - имена переменных, значения которых вводятся .

Значения переменных набираются минимум через 1 пробел на клавиатуре. После набора данных для одной процедуры read или readln нажимается клавиша -«.Enter». Значения, вводимые с клавиатуры, должны иметь тот же тип, что и соответствующие им переменные, указанные в процедуре read или readln. Если соответствие нарушено, возникает ошибка ввода-вывода.

Пример:

Var

I : real ; J : integer; B : char;

Begin

Read( I ,J , B);

END.

Так, правильный набор данных с клавиатуры для данной процеду­ры read будет выглядеть, например:

235.98 100 ‘G’

а неправильный набор, например:

‘G’ 235.98 100

Процедуры read и readln аналогичны, их единственное отличие в следующем:

read (X,Y); readln (X,Y);

read (A, В); readIn (A, B);

ввод данных: ввод данных:

5 10 <Enter> 15 20 <Enter> 5 10 <Enter> 15 20 <Enter>

Данные для нескольких процедур read набираются на одной стро­ке, т.к. после нажатия клавиши <Enter> перехода к началу следующей строки не происходит.

Данные для нескольких процедур readln набираются на разных строках, т.к. после набора данных для одной процедуры readln и на­жатия клавиши <Enter> курсор переходит к началу новой строки, где набираются данные для следующей процедуры readln.

Процедура readln, записанная без параметров, вызывает перевод строки.

Процедуры вывода WRITE и WRITELN

Производят вывод информации на экран монитора.

Формат:

write 12,…,yn);

writeln (y1,y2,…,yn);

где y12,...n-имена переменных, значения которых выводятся.

Процедуры write и writeln аналогичны, их единственное отличие заключается в следующем:

write(X, Y); writeln(X,Y);

write(A, B) ; writeln(A, B) ;

вывод данных: вывод данных:

5 10 15 20 5 10

15 20

Данные для нескольких процедур write выводятся в одну строку, а данные для нескольких процедур writeln выводятся в разных строках.

Процедура writeln, записанная без параметров, вызывает перевод строки.

В процедурах вывода можно записывать комментарий, например:

write ('А=',А,' В=',В,' результат вычислений=',А*В/25);

На экране увидим следующее сообщение:

А=5 B=20 результат вычислений=1

Форматы вывода

В процедурах вывода write и writeIn имеется возможность записи выражения, определяющего ширину поля вывода.

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

I -целочисленное выражение;

р -целочисленное выражение;

g -целочисленное выражение;

R -выражение вещественного типа;

В -выражение булевского типа;

Сh -выражение символьного типа;

S -выражение строкового типа;

# -цифра;

* -знак "+" или "-";

- - пробел.

I - выводится десятичное представление величины I,

начиная с позиции расположения курсора.

Значение I Выражение Результат

134 write(I); 134

5671 write(I); 5671

287 write(I,I,I); 287287287

I:р - выводится десятичное представление величины I в крайние правые позиции поля шириной р.

Значение I Выражение Результат

134 write(I:6); __134

1 write(I:10); __________1

312 write(I+I:7); _____624

R - в поле шириной 18 символов выводится десятичное представ­ление величины R в формате с плавающей точкой. Если R > 0.0, ис­пользуется формат _#.######### Если R < 0.0, формат имеет вид _-#.#########E*##

Значение R Выражение Результат

715. 432 write(R); __7 15438OOOOOE+O2

-1.919Е+01 write(R); _-1.9190000000E+01

567.986 write(R/2); _2.8399300000E+02

R:p - в крайние правые позиции поля шириной р символов выво­дится десятичное представление значения R в формате с плавающей точкой.

Если R > 0.0, используется формат __..._#.##...#Е*#й, причем

минимальная длина поля вывода составляет 7 символов. Если R < 0.0, формат имеет вид __ .._-#.#*...#£*##. Минимальная длина поля выво­дится 8 символов. После десятичной точки выводится по крайней мере одна цифра.

Значение R Выражение Результат

511,04 write(R:15); -5.110400000E+02

-511.04 write(R:15); -5.11040000E+02

46.78 write(-R:12); -4.67800E+01

R:p:g - в крайние правые позиции поля шириной р символов вы­водится десятичное представление значения R в формате с фиксиро­ванной точкой, причем после десятичной точки выводится g цифр (0 <= g <= 24), представляющих дробную часть числа. Если g=0, ни дробная часть, ни десятичная точка не выводится. Если g > 24, то при выво­де используется формат с плавающей точкой.

Значение R Выражение Результат

511.04 write(R:8:4); 511.0400

-46.78 write(R:7:2); _-46.78

-46.78 write(R:9:4); _-46.7800

(Ch - начиная с позиции курсора, выводится значение Ch.

Значение Ch Выражение Результат

‘x’ write(Ch); x

‘y’ write(Ch); y

‘I’ write(Ch,Ch,Ch); I I I

Ch:p - в крайнюю правую позицию поля шириной р выводится зна­чение Ch.

Значение Ch Выражение Результат

xwrite(Ch:3); _x

y’ write(Ch:5); __y

i’ write(Ch:2,Ch:4); _i__i

В - выводится результат выражения B True или False, начиная с текущей позиции курсора.

Значение B Выражение Результат

True write(B); True

False write(B, not B); FalseTrue

B:p - л крайние правые позиции поля шириной р символов выво­дится результат булевского выражения В Irue или False

Значение В Выражение Результат

True write(B:6); _True

False write(B:10); ___False

True write(B:5,not B:7): _True__False

S - начиная с позиции курсора, выводится значения S (строка или массив символов, если его длина соответствует длине строки)

Значение S Выражение Результат

'Day N' write(S); Day N

‘Ведомость 11’ write(S); Ведомость 11

'RRRDDD' write(S,S); RRRDDDRRRDDD

S:p - значение S выводится в крайние правые позиции поля ши­риной р символов.

Значение S Выражение Результат

'Day N' wrjte(S:10); ____Day N

'Ведомость 11' write(S:13); _ Ведомость 11

RRRDDD’ write(S:7,S:7); RRRDDD_RRRDDD

Если значение короче формата, излишек будет заполнен пробела­ми Если формат мал, то значение будет выводиться, игнорируя спе­цификацию, ошибки при этом не возникает Можно задавать выравнива­ние по левому краю, для этого надо ближайшую к значению спецификацию формата задать отрицательной, например

Выражение Результат

write(123. 456:6:1,22:4); 123.5 22

write(123.456:-6:1,22:-4); 123.522

Задание. Вычислить и вывести на экран значения переменных y и d, используя расчетные формулы:

;

;

где a=3.2; b=17.5; x=-4.8.

Блок-схема алгоритма решения.

Текст программы:

Program Lab1;

Var

a,b,x,y,d: real;

Begin

Writeln ('Введите a, b, x');

Read (a, b, x);

y:=b*sqr(sin(x)/cos(x))-a/sqr(sin(x/a));

d:=a*exp(-a*x)*cos(b*x/a);

Writeln ('y=',y:8:3, 'd=',d:8:3);

End.

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

y(3.2;17.5;-4.8)=2265.051

d(3.2;17.5;-4.8)=6569529.085

ПРИМЕР ВЫПОЛНЕНИЯ РАБОТЫ

Вычислить на ЭВМ значения у и р, используя расчетные формулы-

у=а 3x2+

p=ln(a+x2)+sin2

при значениях а=0,59, z=-4.8, х=2,1

Схема алгоритма решения представлена на рис. 3. В блоке 2 вводятся исходные данные а, х, z. В блоке 3 вычисляется значение тангенса. В блоках 4 и 5 вычисляются значения функций у и р. а в блоке 6 осуществляется вывод вычисленных значений.

Рисунок

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

Program lab_1(input,output);

{ лабораторная работа №2}

{СТУДЕНТА ГРУППЫ ___ ИВАНОВА И.И.}

var

a,x,z,y,p,c: real;

begin

writeln(‘введите a,x,z’);

read(a,x,z);

c:=sin(x*x)/cos(x*x);

y:=a*c*c*c*sqr(sin(z*z/(a*a+x*x)));

p:=ln(a+x*x)+sqr(sin(z/a));

writeln(‘y=’,y:8:3,’p=’,p:8:3);

end.

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

Методические рекомендации к выполнению лабораторной работы

Отчет к лабораторной работе должен содержать:

  1. Постановка задачи

    1. Список входных данных

    2. Список выходных данных

    3. Список промежуточных переменных

  2. Разработка алгоритма решения задач

    1. Разработка блок-схемы решения задачи.

    2. Список функций

3. Разработка программного кода к алгоритму.

4. Проверка алгоритма (листинг)

  1. Рассмотрение всех не стандартных ситуаций

  2. Ограничения и допущения, если имеются

5. Ответы на контрольные вопросы.

Задание к лабораторной работе

Разработать алгоритм решения задачи (по вариантам) и написать программы на языках Си и ТР.

Вариант задания

Расчетные формулы

Значения исходных данных

1

a=2cos(x-/6)/1/2+sin2y

b=1+z/3+z2/5

x=1.426

y=-1.220

z=3.5

2

b= xy/x

y-z/(y-x)

g=(y-x)(y-z /(y-x)) /1+(y-x)2

x=1.825

y=18.225

z=-3.298

3

Y=e-btsin(at+b)-

S=bsin(at2cos2t)-1

a=-0.5

b=1.7

t=0.44

4

W=-b2sin3(x+a)/x

Y=cos2x3-x

a=1.5

b=15.5

x=-2.9

5

S=x3tg2(x+b)2+a/

Q=bx2-a/eax-1

a=16.5

b=3.4

x=0.61

6

R=x2(x+1)/b-sin2(x+a)

S=+cos2(x+b)3

a=0.7

b=0.05

x=0.5

7

Y=sin3(x2+a)2-

Z=(x+b)3

a=1,1

b=0,004

x=0,2

8

F=

Z=m cos (bt sin t)+c

m=2

c=-1

t=1,2

b=0,7

9

y=b tg2x-

d=ae-axcos(bx/a)

a=3,2

b=17,5

x=-4,8

10

f=ln(a+x2)+sin2(x/b)

z=e-cx

a=10,2

b=9,2

x=2,2

c=0,5

11

y=

r=-b2sin3(x+a)/x

a=0,3

b=0,9

x=0,61

12

Z=cos2 x 3-x/

a=0,5

b=3,1

x=1,4

13

U=

F=e2x ln (a+x) -b3xln(b-x)

a=0,5

b=2,9

x=0,3

14

Z=-c m ln (b-x)

S =e-ax+e –b x

m=0,7

c=2,1

x=1,7

a=0,5

b=1,08

15

M=/1+tg3(n-k)

H =sin k2-e-nk

n=3,8

k=0.9

1=0,78

16

S=

M=cos2t3-x/

v=1,72

t=-1,5

w=0.3

Контрольные вопросы

  1. Опишите особенности линейной алгоритмической конструкции.

  2. В чем сходства и различия языков Си/С++ и Turbo Pascal?

  3. Сравните структуры программ, названия основных типов данных, описание раздела подключения библиотек, раздел описания переменных, функции ввода-вывода данных. Оформите в таблице сравнений:

Си

Turbo Pascal

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

Основные типы данных:

Целый Вещественный….