Языковое программирование

Автор работы: Пользователь скрыл имя, 01 Мая 2014 в 10:17, лекция

Краткое описание

Основные типы переменных, используемые в Паскале:
Integer – целый тип. Переменные этого типа могут хранить целые числа в диапазоне от −2147483648 до 2147483647 (это −231 и 231−1).
Real – вещественный тип. Так называемые числа с плавающей точкой. Может быть обычной десятичной дробью (например, 1234.543), но может также содержать порядок – символ «е» и какое-либо число за ним, например, 1.2345е3. Такая запись означает, что число 1.2345 нужно умножить на 103. Максимальное количество цифр в числе 15, порядок может быть в диапазоне от −308 до 308.
Char – символьный тип. Значением этой переменной может быть одиночный символ – буква латинского алфавита (большие и малые буквы здесь различаются), цифра или какой-либо из специальных символов.
String – строка. Значения — наборы символов.
Boolean – логический тип. Переменная может принимать два значения: true (истина) и false (ложь). Такие значения могут быть, например, у логических выражений наподобие «x>2». Если Истинно, что x>2, то выражение принимает значение true иначе значение false.

Прикрепленные файлы: 1 файл

Языковое программирование.docx

— 212.81 Кб (Скачать документ)

Правильно:

?

var  {Слово var на отдельной строке без отступа слева}    

x, y: real;  {Описания переменных с новой строки.                 

Отступ слева в два пробела}    

i: integer;  {Переменная другого типа на отдельной строке,                 

с тем же отступом}


 

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

3) Слова begin и end, ограничивающие раздел операторов пишутся без отступа. Весь же текст программы между ними снова пишется с отступом в два пробела.

4) На одной строке должен  располагаться только один оператор. Так, хотя допустимо писать, например:

begin    

x:=1; y:=2; z:=3; writeln(x, y, z);  

end.


 

следует все же писать:

begin    

x:=1;    

y:=2;    

z:=3;    

writeln(x, y, z);  

end.


 

5) Условный оператор записывается  следующим образом:

begin    

...    

{Первая строка с отступом  в два пробела}    

if <условие> then    

{слов begin с тем же отступом, что и слово if}    

begin      

<Операторы 1>{Отступ на  два пробела больше, чем у if и begin}     

{end обязательно с тем  же отступом, что и соответствующий begin}    

end else    

begin      

<Операторы 2>{Отступ на  два пробела больше, чем у if и begin}     

end;


 

Пример правильного оформления:

1

2

3

4

5

6

7

8

9

10

11

12

13

var  

x, y: real;

begin  

readln(x, y);  

if x > y then  

begin    

writeln('Max(x, y) = ', x);  

end else  

begin    

writeln('Max(x, y) = ', y);  

end;  

readln;

end.


 

Пример НЕправильного оформления:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{Переменные на той же  строке, что и var}

var  x, y: real;

begin  

readln(x, y);  

{Оператор на той же  строке, что и if}  

if x > y then writeln('Max(x, y) = ', x)  

else    

{begin с отступом относительно if}    

begin    

writeln('Max(x, y) = ', y);    

end; 

{readln без отступа}

readln;

end.


 

Данная «неправильная» программа будет работать совершенно также, как и приведенная выше «правильная», однако использовать надо именно правильный вариант.

6) Внутри условного оператора  могут располагаться любы другие  операторы, в том числе и другие  условные операторы. То, что находится  внутри них, пишется с еще большим  отступом.

Например:

1

2

3

4

5

6

7

8

9

10

11

12

{Переменные на той же  строке, что и var}

begin  

readln(x, y, z);  

if x > y then  

begin     

if x > z then     

begin        

{writeln с еще большим отступом}         

writeln(x);     

end;  

end;

end.


 

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

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

Контрольная работа №2

1. Вычислите, какое значение  будет присвоено логической переменной b.

a)

x := 2;

y := 5;

b := not((x>=2)and(x*y<5));


б)

x := 2;

y := 55;

b := not(not(2*x>4)and(y mod 2<>1));



2. Составьте логическое  выражение, которое истинно, когда  точка с координатами (x, y) попадает в заштрихованную область на рисунке

(а)

(б)

(в)

(г)


 

3. Какое значение примут  переменные после выполнения  следующих операторов

a)

x := 5;

y := 10;

if sqr(x) > sqrt(y) then  

x:=sqr(x)

else  

y:= sqr(y);


б)

x := 5;

y := 10;

if sqr(x) > sqrt(y) then  

x := sqr(x)

else  

y := sqr(y);  

x := sqr(x);



Задание 2: Составление логических выражений, условный оператор

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

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

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

4. Даны три числа a, b, c. Если среди них есть отрицательные, возведите их в квадрат. Если после возведения в квадрат число стало больше 20, умножьте его на 2.

5. Напишите программу, которая  запрашивает значение  , а затем выводит значение следующей функции от  :

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

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

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

9. Пользователь вводит  три числа. Сообщите ему, упорядочены  ли введенные числа по возрастанию.

10. Пользователь вводит  три числа – длины сторон  треугольника. Программа должна  сообщить пользователю:

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

11. «Узник замка Иф» 
За многие годы заточения узник замка Иф проделал вилкой в стене прямоугольное отверстие размером d x e. Замок Иф сложен из кирпичей размером a x b x c. Узник хочет узнать, сможет ли он выбрасывать кирпичи в море из этого отверстия, чтобы сделать подкоп. Снабдите его необходимым для решения задачи софтом. На вход программе подаются 5 чисел (a, b, c, d, e), программа должна давать ответ YES или NO.

12. Напишите программу, которая  в зависимости от введенного  возраста добавляет слова «год», «года» или «лет». Например, при  вводе возраста 1, программа сообщает  «1 год», при числе 2 – «2 года», при  числе 125 – «125 лет».

3.1. Цикл for

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

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

Рис. 1. Блок-схемы циклов.

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

?

var    

i: integer;


 

Схема его записи выглядит следующим образом:

?

for i := <начальное значение> to <конечное значение> do  

begin    

<операторы>  

end;


 

Здесь i – так называемая переменная-счетчик (разумеется, ее не обязательно называть именно i, это может быть любая переменная целого типа). Начальное и конечное значение это любые выражения, имеющее значение целого типа. Когда оператор цикла начинает работу переменная счетчик принимает начальное значение, затем выполняются <операторы>, после этого счетчик увеличивается на единицу, и снова выполняются операторы. Процесс повторяется, пока счетчик не окажется больше конечного значения. Например, если начальное значение 2, а конечное 3, то <операторы> будут выполнены 2 раза. Область между словами begin и end, где располагаются повторяющие в цикле операторы, называется телом цикла.

На рис. 2 показана блок-схема работы этого цикла.

Рис. 2. Схема работы цикла с параметром (for).

Пример 1: Напечатать слово Hello на экране 100 раз.

Один раз слово Hello можно напечатать с помощью процедуры

?

writeln('Hello');


 

Чтобы напечатать его 100 раз, надо эту инструкцию поместить внутрь оператора цикла, который выполнится нужное количество раз. А именно:

?

for n := 1 to 100 do  

begin    

writeln('Hello');  

end;


 

Переменной счетчику n будет присвоено начальное значение 1. Затем Hello будет напечатано 1-й раз. Счетчик увеличится на 1 и Hello напечатается 2-й раз и т.д.

Перечислим в одном месте все правила, касающиеся работы цикла с параметром:

1) Переменная-счетчик должна  быть обязательно целого типа (например, integer).

2) Начальное и конечное  значения задаются выражениями, значение которых также имеет  целый тип.

Нельзя, например, записать цикл

?

for x := 0 to 2*Pi do …


 

Но можно, например:

?

for k := 2*round(n*1000) to trunc(2*pi)+1 do …


 

3) Если конечное значение  меньше начального цикл не  выполнится ни разу.

4) После окончания работы  переменная-счетчик «портится». Глядя  на блок-схему можно предположить, что после окончания работы  цикла она на единицу больше  конечного значения. На практике  это не так и она может  иметь любое значение. Отсюда  правило: если переменная используется, как счетчик шагов в цикле  не следует обращаться к ней  после того, как цикл завершил  свою работу.

5) Если в теле цикла  содержится всего один оператор, то слова begin и end, ограничивающие тело цикла можно опустить. Такая ситуация у нас была в примере 1. Там можно было написать:

?

for n := 1 to 100 do    

writeln('Hello');


 

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

7) Тело цикла может содержать  любые операторы. Следовательно, туда  можно поместить другой оператор  цикла. Переменные-счетчики в этом  случае у циклов должны быть  разные. Если их сделать одинаковыми  это нарушит предыдущее правило  – внутренний цикл изменит  значение переменной-счетчика внешнего.

8) Еще одно стилистическое  правило: все операторы тела цикла  должны быть дополнительно сдвинуты  на 2-3 пробела вправо (см. запись программы  в примере 1 и последующих примеров  ниже по тексту). 
Итак, одни и те же действия мы можем выполнять сколько угодно раз, но что полезного это дает? Печатать 100 раз Hello не очень важное приложение. Чтобы сделать что-то полезное, надо чтобы действия на каждом шаге цикла чем-то различались. Первый способ добиться этого состоит в использовании переменной счетчика, которая на каждом шаге принимает различные значения.

Информация о работе Языковое программирование