Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Управление позициями и цветом вывода




 

К программам в языке Паскаль можно подключать библиотечные модули, в которых находятся множество процедур для работы с экраном в текстовом режиме, реализации графических возможностей Паскаля и др. Модули поставляются вместе с системой программирования Паскаль, а также могут создаваться программистом для собственных программ. Один из модулей, к которому вы часто будете обращаться − это модуль CRT, который содержит процедуры для работы с экраном в текстовом режиме. Для подключения модуля после заголовка программы запишите оператор использования Uses и после него используемый модуль, например Uses CRT.

В модуле CRT имеется процедура позиционирования курсора, который позволяет установить координаты вывода информации на экран (номер строки y и номер столбца x). Экран при этом представляется в виде прямоугольной сетки знакомест размером 80 столбцов и 25 строк с началом отсчета в левом верхнем углу.

Оператор позиционирования имеет следующий вид:

GotoXY(x,y).

Этот оператор устанавливается непосредственно перед выводом информации.

Для изменения цвета выводимой информации в модуле CRT реализованы операторы изменения параметров цвета символов и знакомест:

TextColor(c1); TextBackGround(c2).

Здесь с1 означает цвет символа (может менять значение от 0 до 15), с2 − цвет фона этого символа (0...7) из стандартной таблицы цветов. В Паскале эти значения могут задаваться как встроенными константами (yellow, red,...), так и их числовыми эквивалентами (14, 4) (кодами).

Цвет Константа Код
Черный Синий Зеленый Бирюзовый Красный Малиновый Коричневый Светло-серый Темно-серый Светло-синий Светло-зеленый Светло-бирюзовый Светло-красный Светло-малиновый Желтый Белый Black Blue Green Cyan Red Magenta Brown LightGray DarkGray LightBlue LightGreen LightCyan LightRed LightMagenta Yellow White 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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

Program Proizvedenie_1;

Uses CRT;

Var a,b,rez: Integer;

Begin

ClrScr;

TextColor(Yellow);

TextBackGround(Red);

Writeln('Введите два числа через

пробел');

Readln(a, b);

rez:=a*b;

Writeln('Их произведение равно ', rez);

GotoXY(30,15);

Writeln('Нажмите <Enter>');

Readln;

End.

 

Арифметический квадрат.Абсолютная величина

 

Функция SQR(х) возвращает квадрат значения аргумента, то есть SQR(х)=х2=х*х.

 

Примеры:

sqr(4)=42=16;

при х=13, sqr(х)=sqr(13)=132=169;

npu d=2, e=5, sqr(d+e)=sqr(2+5)=sqr(7)=49;

при x=3, sqr(sqr(x))=sqr(sqr(3))=sqr(9)=81.

 

Функция ABS(х) возвращает абсолютную величину значения аргумента.

Примеры:

abs(12)=12;

abs(-12)=12;

при х=3, у=-5;

abs(x+y)=abs(3+(-5))=abs(-2)=2;

abs(x)+abs(у)=abs(3)+abs(-5)=3+5=8.

Примечание. В Паскале большие и маленькие буквы в именах (переменных, функциях и пр.) не различаются. Не различаются они и при записи служебных слов.

 

Типы данных

     

Использование переменных − основной способ представления информации в процедурном программировании. Любые сложные структуры данных, массивы, указатели, объекты можно рассматривать как разновидности переменных. Основные свойства переменных − это его имя, тип, вид и значение.

Для человека имя переменной − это ее обозначение в программе. Формально выбор имени не имеет значения, но каждому программисту можно посоветовать помнить слова капитана Врунгеля: «Как Вы яхту назовете, так она и поплывет». Удачное имя переменной, соответствующее ее сути, способно облегчить понимание программы.

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

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

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

Переменная в программе может иметь какое−либо значение. Для человека значение − это информационное содержание, а для компьютера − это код в памяти.

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

Порядковые типы называются так потому, что их допустимые значения представляют собой множество, состоящее из конечного числа элементов. В этом множестве есть первый и последний элементы. Кроме того, каждый элемент порядкового типа имеет предшествующий ему и следующий за ним элементы. Так, например, у целого значения 12 есть предшественник (значение 11) и преемник (значение 13). Очевидным исключением являются первый (у него нет предшественника) и последний (нет преемника) элементы.

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

функция Pred(x) определяет значение, предшествующее х;

функция Succ(x) определяет значение, следующее за х;

функция Ord(x) возвращает порядковый номер величины х.

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

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

К структурным типам данных относятся массив (Array), множество (Set), файл (File) и запись(Record).

Понятие типа есть практически во всех языках программирования. При этом можно выделить два принципиально разных подхода: статические и динамические типы.

В языках со статическими типами тип указывается при описании переменной, он связан с ее именем. Если, например, переменная описана как целая, то в дальнейшем ей нельзя присвоить вещественное или символьное значение. К языкам со статическими типами относятся Паскаль, Си, Бейсик, КуМир.

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

 

Целый тип данных

 

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

 

Целочисленные типы

Тип Диапазон возможных значений Формат
Shortint -128...127 1 байт со зн.
Integer -32768...32767 2 байта со зн.
Longint -2147483648..2147483647 4 байта со зн.
Byte 0…255 1 байт без зн.
Word 0...65535 2 байта без зн.

 

К данным целого типа можно применять операции "+" − сложение, "—" − вычитание, "*" − умножение и некоторые другие.

Так как в результате деления одного целого числа на другое не всегда получается целое число, то имеются операции:

div − целая часть от деления;

mod − остаток от деления.

Примеры:

19 div 4=4;           12 div 4=3;

-21 div 4=-5;      -7 div (-4)=1;

19 mod 4=3;           12 mod 4=0;

-21 mod 4=-1;      -7 mod (-4)=-3.

Для быстрой работы с целыми числами определены процедуры:

  

Inc(X) X:=X+1

Inc(X,N) X:=X+N

Dec(X) X:=X-1

Dec(X,N) X:=X-N

Пример 1

Дано целое трехзначное число а. Написать программу выделения количества сотен и количества единиц этого числа.

ProgramExample_1;

Vara, a1, c: integer;

Begin

Writeln('Введите трехзначное число');

Readln(a);

a1:=a mod 10;

c:=a div 100;

Writeln('Количество единиц=', a1,'Количество сотен=', c);

End.

Пример 2

Даны два числа x и y. Написать программу выдачи на печать меньшего из них, пользуясь формулой

min(x, y)=(x+y-(x-y))/2

ProgramExample_2;

Varx, y, c: integer;

Begin

writeln('Введите два числа');

readln(x,y);

c:=(x+y-abs(x-y)) div 2;

writeln('меньшее из двух чисел',x, 'и',y, 'равно', c);

End.

Пример 3

Ввести с клавиатуры 2 целых числа m, n>0. Если m делится на n или n делится на m, то вывести 1, в противном случае – любое другое число.

ProgramExample_3;

Varm, n, c: integer;

Begin

write('Введите 2 натуральных числа:');

readln(m,n);

c:=(m mod n)*(n mod m)+1;

writeln('Ответ: ', c);

End.

Пример 4

Ввести с клавиатуры 2 целых числа m, n>0. Если n≤m, то вывести 1, в противном случае – любое другое число.

Примечание: основная идея решения: n div m=0, если n<m, и n-m=0, если n=m.

ProgramExample_4;

Var n, m ,r: integer;

Begin

write('Введите 2 натуральных числа:');

readln(m,n);

r:=(n div m)*(n-m)+1;

writeln(r);

readln;

End.

Пример 5

Если в четырехзначном числе, введенном с клавиатуры, есть одинаковые цифры, то вывести 1, в противном случае – любое другое число.

Примечание: в переменных a, b, c, d находятся цифры введенного числа, начиная со старшей (разряд тысяч).

ProgramExample_5;

Varm, n, a, b, c, d: integer;

Begin

write('Введите четырехзначное число: ');

readln(m);

a:=m div 1000; {первая цифра}

b:=m mod 1000 div 100;

c:=m mod 100 div 10;

d:=m mod 10; {последняя цифра}

n:=(a-b)*(b-c)*(c-d)*(d-a)*(a-c)*(b-d)+1;

writeln('Ответ:', n);

readln;

End.

Пример 6

Если четырехзначное число, введенное с клавиатуры, является симметричным (например, 1331, 0550), то вывести 1, в противном случае – любое другое число.

Примечание: в переменных a, b, c, d находятся цифры введенного числа, начиная со старшей (разряд тысяч).

ProgramExample_6;

Var m,a,b,c,d,a1,b1,c1,v,n:integer;

Begin

writeln('Введите четырехзначное число:');

readln (m);

a:= m div 1000; {первая цифра}

b:=m mod 1000 div 100;

c:=m mod 100 div 10;

d:=m mod 10; {последняя цифра}

n:=1000*d+100*c+10*b+a;

{переставляем цифры в обратном порядке}

v:=m-n+1;

writeln('Ответ:',v);

readln;

End.

Пример 7

Ввести с клавиатуры 4 целых числа m, n, k, p>0. Если остаток от деления m на n равен k или p, то вывести 1, в противном случае – любое другое число.

ProgramExample_7;

Var m, n, k, p, a, b, c: integer;

begin

write('Введите 4 целых числа:');

readln(m, n, k, p);

a:=1 div (1+abs(n));

b:=m mod (n+a);

{исключаем деление на ноль}

c:=(b-p)*(b-k)+a+1;  

writeln('Ответ:',c);

readln;

End.                                                                                                                                                                                                                                 

Пример 8

Часовая стрелка образует угол α с лучом, проходящим через центр и через точку, соответствующую 12 часам на циферблате, 0≤α<3600. Ввести с клавиатуры значение α и определить значения угла для минутной стрелки, а также количество часов и полных минут.

Примечание: решение задачи основано на использовании следующих фактов: на 3600/12=300 поворачивается часовая стрелка, передвигаясь между двумя соседними цифрами. За это время минутная стрелка проходит целый круг, т.е. 60 минут. Таким образом, пока часовая стрелка поворачивается на 10, минутная проходит 2 минутных деления. Одно же минутное деление соответствует 3600/60=60.

ProgramExample_8;

Varha, h, ma, m: integer;

Begin

write('Введите угол:');

readln(ha);

h:=(ha div 30);

m:=(ha mod 30)*2;

ma:=m*6;

writeln('количество часов= ',h);

writeln('количество минут= ',m);

writeln('угол минутной стрелки= ',ma);

readln;

End.

Примечание. Переменной целого типа присваивать зна­чение, получаемое в результате выполнения обычной операции деления "/", нельзя, так как при делении одного целого числа на другое целое число результат не всегда является целым числом.

 

Вещественный тип данных

 

В Паскале имеется несколько типов вещественных данных.

Вещественные типы

Тип Диапазон возможных значений Точность Формат
Real 2.9E-39..1.7E38 11-12з. 6 байт
Single 1.5E-45..3.4E38 7-8з. 4 байта
Double 5.0E-324..1.7E308 15-16з. 8 байт
Extended 3.4E-4932..1.1E4932 19-20з. 10байт
Comp -9.2E18..9.2E18 19-20з. 8 байт

 

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

Число с фиксированной точкой изображается десятичным числом с дробной частью (дробная часть может быть нулевой). Дробная часть отделяется от целой с помощью точки, например: 127.3, 25.0, -16.003, 200.59, 0.54.

Число с плавающей точкой имеет вид mЕр, где mмантисса, а р− порядок числа. В качестве m могут быть целые числа и действительные числа с фиксированной точкой, в качестве р − только целые числа. Как мантисса, так и порядок могут содержать знаки "+" и "−".

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

Abs(x) абсолютное значение х

Sqr(х)     квадрат х

Sqrt(x) квадратный корень из х

Sin(х) синус х

Cos(х) косинус х

Arctan(х) арктангенс х

Ехр(х) еx

Ln(х) натуральный логарифм х

Trunc(х) целая часть х

Round(х) ближайшее к х целое число

 Примечание. В тригонометрических функциях синус и косинус аргумент задается только в радианах.

Выводить данные вещественного типа можно по формату и без него. Если при выводе данных вещественного типа не указан формат, то число выводится с плавающей точкой − мантисса и порядок. На число отводится 17 позиций, при этом в целой части мантиссы присутствует только одна значащая цифра. Изменить стандартную форму вывода можно, используя формат Write(x: m: n), где х − выводимое данное вещественного типа; m − общее количество позиций для вывода числа (включая знак числа, целую часть, точку и дробную часть); n − количество позиций для вывода дробной части. В качестве типа могут быть целые константы, переменные, выражения. Так, использование формата Write(r: 8: 4) для вывода значения r, равного -35,245367, приводит к выводу значения -35.2454.

Пример 1

Даны первый член, разность и число членов арифметической прогрессии. Написать программу вычисления суммы ее членов.

ProgramExample_9;

Vara1, d, n: integer;

s: real;

Begin

writeln('Введите первый член, разность и

число членов арифм. прогрессии');

readln(a1, d, n);

s:=(2*a1+d*(n-1))*n/2;

writeln('Сумма членов арифметической

   прогрессии=', s);

End.

Пример 2

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

 

Program Example_10;

Var a, b, c, p, s: real;

begin

Writeln('Введите длины сторон

треугольника');

readln(a, b, c);

p:=(a+b+c)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c));

Writeln('Площадь треугольника=',s);

end.

Пример 3

Написать программу нахождения среднего арифметического и среднего геометрического двух чисел.

 

Program Example_11;

Var a, b, sa, sq: real;

begin

Writeln('Введите два числа');

readln(a,b);

sa:=(a+b)/2;

sq:=sqrt(a*b);

writeln('среднее арифметич.=',sa,'среднее геометрическое=', sq);

end.

Пример 4

Написать программу нахождения площади и гипотенузы прямоугольного треугольника по двум катетам.

 

Program Example_12;

Var a, b, s, g: real;

begin

Writeln('Введите длины двух катетов');

readln(a,b);

s:=a*b/2;

g:= sqrt(a*a+b*b);

Writeln('площадь=', s,' гипотенуза= ',g);

end.

Пример 5

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

 

Program Example_13;

Var a, b, c, m1, m2, m3: real;

begin

Writeln('Введите длины сторон

треугольника');

readln(a, b, c);

m1:=aqrt(2*a*a+2*b*b-c*c)/2;

m2:=sqrt(2*a*a+2*c*c-b*b)/2;

m3:=sqrt(2*b*b+2*c*c-a*a)/2;

Writeln('медианы равны ', m1,

' ', m2,' ', m3);

end.

Пример 6

Смешали V1 литров воды, имеющей температуру Т1 градусов по Цельсию, с V2 литрами воды, имеющей температуру Т2 градусов по Цельсию. Написать программу вычисления температуры и объема полученной смеси.

 

Program Example_14;

Var v1, t1, v2, t2, v, t: real;

begin

Writeln('Введите значения v1,t1,v2,t2');

readln(v1, t1, v2, t2);

v:=v1+v2;

t:=(v1*t1+v2*t2)/(v1+v2);

Writeln('Объем смеси = ', v,'Температура смеси= ', t);

end.

Пример 7

Написать программу определения давления на грунт опоры, форма основания которой – круг радиуса r с вырезанным из его центральной части квадратом со стороной а. Масса опоры равна m.

 

Program Example_15;

Var m, r, a, d: real;

begin

Writeln('Введите массу опоры, радиус

основания опоры, длину стороны

вырезанного квадрата');

readln(m, r, a);

d:=9.8*m/(pi*r*r-a*a);

Writeln('Давление на грунт= ',d);

end.

Пример 8

Написать программу вычисления площади параллелограмма по двум сторонам и углу между ними, заданному в градусах.

Program Example_16;

Var a, b, l, s: real;

begin

writeln('Введите длины двух сторон

параллелограмма и величину угла междуми');

readln(a, b, l);

l:=l*pi/180;

s:=a*b*sin(l);

writeln('площадь параллелограмма= ', s);

end.

 

Логический тип данных

 

Переменные логического типа описываются посредством идентификатора Boolean.

Они могут принимать только два значения − FALSE (ложь)иTRUE (истина).

Переменные логического типа обычно получают значения в результате выполнения операций сравнения (отношения): "<" (меньше), ">" (больше), "≤" (меньше или равно), "≥" (больше или равно), "<>" (не равно), "=" (равно). Результат операции отношения равен TRUE, если отношение удовлетворяется для значений входящих в него операндов, и FALSE в противном случае.

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

Значения

операндов

Результат операции

X Y not X X and Y X or Y X xor Y
false false true false false false
false true true false true true
true false false false true true
true true false true true false

 

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

not;

•and,*,div,mod;

•or,xor,+,;

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

Кроме того, порядок выполнения операций определяется скобками. Например, в логическом выражении A or В and not (A or В) сначала выполняется заключенная в скобки операция or, а затем операции not,and, or.

В языке Паскаль нет возможности ввода логических данных с помощью оператора Read. Однако предусмотрен вывод значений переменных логического типа с помощью оператора Write. При вводе для идентификаторов FALSE и TRUE отводится по 6 позиций, а сами идентификаторы прижимаются к правому краю поля вывода.

Условный оператор

If <условие> Then <оператор 1>

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

 

Выполнение условного оператора начинается с вычисления значения логического выражения, записанного в условии. Если условие истинно, то выполняется <оператор 1>, в противном случае − <оператор 2>. Если в качестве оператора должна выпол­ниться серия операторов, то они заключаются в операторные скобкиBegin-End.

Разбор условного оператора можно выполнить на следующем простом примере.

 

Пример 1

Вывести на экран большее из двух данных чисел.

 

ProgramExample_17;

Var x,y: Integer;

Begin

Writeln('введите 2 числа');

{вводим два целых числа через пробел}

Readln(x,у) ;

If x>y Then Writeln(x)

{если (If) x больше у, то (Then)

выводим x,}

 Else Writeln(у);

{иначе (Else) выводим у}

 Readln;

End.

Введем два числа − 5 и 7. Переменная х получит значение 5, а переменная у − значение 7 (х=5, у=7). Условие х>у не выполняется, так как 5 не больше 7. Управление передается на оператор, стоящий после Else, то есть Writeln(y), а следовательно, на экране появится 7.

Примечание. Обратите внимание на то, что перед служебным словом Else разделитель − точка с запятой − не ставится.

 

Неполный условный оператор

 

If <условие>Then <оператор>;

ВетвьElse может отсутствовать, если в случае невыполнения условия ничего делать не надо. Например, рассмотрим следующую задачу: если значение переменной х меньше 0, то поменять его на противоположное. Задача решается с помощью такого условного оператора:

If x<0 Then x:=-x;

Если в условном операторе имеется ветка Else, он называется полным, в противном случае − неполным.

 

Пример 2

Написать программу, проверяющую, принадлежит ли число, введенное с клавиатуры, интервалу (0;5) .

Решение

Обозначим через х число, вводимое с клавиатуры пользователем (это переменная целого типа). х принадлежит заданному интервалу лишь в том случае, если одновременно выполняются оба условия: (х>0) и (х<5).

Prugram Example_18;

Var x: Integer;

Begin

Writeln('Введите число х');

Readln(х);

If (x>0) and (x<5) Then

Writeln (х,' принадлежит (0,5)')

Else

Writeln(x,' не принадлежит (0,5)');

Readln;

End.

 










Последнее изменение этой страницы: 2018-05-31; просмотров: 182.

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