Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Управление позициями и цветом вывода
К программам в языке Паскаль можно подключать библиотечные модули, в которых находятся множество процедур для работы с экраном в текстовом режиме, реализации графических возможностей Паскаля и др. Модули поставляются вместе с системой программирования Паскаль, а также могут создаваться программистом для собственных программ. Один из модулей, к которому вы часто будете обращаться − это модуль 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) (кодами).
Теперь перепишем первую нашу программу, используя операторы управления цветом и позициями вывода. В эту программу добавим также процедуру 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 особенно полезны в больших массивах, если их элементы принимают значения из ограниченного диапазона. Их применение в этом случае позволяет уменьшить требования программы к оперативной памяти.
К данным целого типа можно применять операции "+" − сложение, "—" − вычитание, "*" − умножение и некоторые другие. Так как в результате деления одного целого числа на другое не всегда получается целое число, то имеются операции: 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. Примечание. Переменной целого типа присваивать значение, получаемое в результате выполнения обычной операции деления "/", нельзя, так как при делении одного целого числа на другое целое число результат не всегда является целым числом.
Вещественный тип данных
В Паскале имеется несколько типов вещественных данных.
Константа действительного типа может быть представлена в двух видах: числом с фиксированной и плавающей точкой. Число с фиксированной точкой изображается десятичным числом с дробной частью (дробная часть может быть нулевой). Дробная часть отделяется от целой с помощью точки, например: 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.
Логические операции, операции отношения и арифметические операции часто встречаются в одном выражении. При этом отношения, стоящие слева и справа от знака логической операции, должны быть заключены в скобки, поскольку логические операции имеют более высокий приоритет. Вообще принят следующий приоритет операций: • 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; просмотров: 229. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |