Учебник по программированию.

Первые шаги. Язык программирования PascalABC.

Предыдущий параграф Назад в содержание Следующий параграф


§2. Переменные. Основы ввода вывода. Имена программ. Комментарии.

Переменные. Основы ввода вывода.

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

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

Дать чёткое определение тому, что такое переменная достаточно трудно. Попробую объяснить общими словами. Переменная это некая субстанция, под которую выделен какой-то кусочек оперативной памяти, и которая имеет какое-то имя. В этом кусочке оперативной памяти может содержаться какая-то информация, которая может быть изменена во время работы программы. Само название «переменная» как раз и происходит от того, что значение информации может меняться. Обратиться к этой информации можно через имя переменной. В дальнейшем при изучении учебника и выполнении задач, к вам придёт более полное понимание того, что такое переменная. Сейчас особо на этом не зацикливайтесь.

Чтобы создать переменную её необходимо объявить. Для этого перед телом программы (перед словом begin) необходимо создать раздел, называемый разделом объявления переменных. Этот раздел начинается со слова Var, а после которого идёт перечисление переменных и их типов. Как это всё выглядит покажем чуть позже, а сейчас есть смысл остановиться на типах данных, которые будут храниться в переменных.

В компьютере данные хранятся в виде единичек и ноликов. Каждая ячейка памяти может принимать значение либо единички, либо нолика. Для того, что бы хранить в памяти какое-либо число от нуля до одного достаточно иметь лишь одну ячейку памяти, которая будет принимать значения или ноль или единица. Если нам нужно хранить число от нуля до трёх, то нам понадобятся две ячейки памяти. Тогда для хранения нуля обе ячейки будут иметь значение ноль. Для хранения единицы первая ячейка будет иметь значения нуль, а вторая единицу. Не будем расписывать весь процесс словами, а для наглядности приведём таблицу:


Число от нуля до трёх

Значение первой ячейки

Значение второй ячейки

0

0

0

1

0

1

2

1

0

3

1

1


Это не что иное, как двоичная система исчисления, в которой для обозначения чисел используются всего две цифры 0 и 1. Здесь стоит остановиться на том, что такое число и что такое цифра. Во всём учебнике данные слова будут использоваться в следующих значениях: число количество чего-либо; цифра символ, с помощью которого можно обозначить число. Т.е. если мы говорим, например, на столе 25 яблок, то 25 это число, обозначающее количество яблок, а вот 2 и 5 цифры, которыми мы обозначаем число 25. Если для обычного человека разница между цифрой и числом не имеет значения, то для программиста в некоторых случаях эта разница очень существенна.

Теперь вернёмся к нашим ячейкам памяти. Для хранения различных видов (типов) данных необходимо различное число ячеек памяти. Например, для хранения целых чисел от ноля до 255 необходимо восемь ячеек памяти. Этот тип данных в Pascal называется Byte. О  различных типах данных речь пойдёт в соответствующем параграфе.

Теперь можно подытожить. Если в тексте программы в разделе объявления переменных объявить переменную типа Byte, программа перед началом своей работы выделит 8 ячеек с определённым адресом в памяти компьютера.

Выглядит это следующим образом:


Var

  A:Byte;


В данном случае мы объявили переменную A типа Byte. Теперь в тексте программы мы сможем использовать эту переменную для хранения какого-либо числа от 0 до 255 и других действий над этим числом. Не забывайте после объявления переменной ставить точку с запятой.

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


Var

  A:Byte;

begin

  Write(A);

end.

___________

0


В этой программе мы объявили переменную А типа Byte. Далее, в теле программы, мы дали команду компьютеру вывести содержимое переменной на экран. В результате получили следующее:

Хочется немного отвлечься и сказать следующее. Прежде чем начать работать с какой-либо переменной необходимо в начале программы присвоить ей какое-либо начальное значение. Данный процесс называется инициализацией. Для чего это нужно сделать. Дело в том, что когда программа выделяет место в памяти компьютера для переменной, она эту память не очищает. В результате значение этой переменной может оказаться не предсказуемым. Если в программе ей не было присвоено начальное значение, то в результате действий над этой переменной можем получить непредсказуемый результат. То, что было сказано, верно для старых версий языков, в современных языках, в том числе и в PascalABC.NET, присвоение нулевых значений переменным при их объявлении происходит автоматически. Тем не менее, рекомендую всегда производить инициализацию самостоятельно. Это сформирует у вас привычку всегда контролировать данные и избавит вас от случайных ошибок, которые всё-таки могут произойти.

Двигаемся дальше. Значение переменной можно ввести с клавиатуры. Для этого используется команда Read, которое в переводе с английского обозначает читать. В скобках после команды Read необходимо поместить имя переменной, в которую необходимо записать данные считанные с клавиатуры. Далее пример программы:


Var

  A:Byte;

begin

  Read(A);

  Write(A);

end.

__________

2

2


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

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

Усовершенствуем нашу программу и предложим пользователю ввести число, затем напишем, что именно выводится на экран:


Var

  A:Byte;

begin

  writeln('Введите число от 0 до 255');

  read(A);

  Write('Вы ввели число ');

  Write(A);

end.


____________________________________________

Введите число от 0 до 255

3

Вы ввели число 3


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

Если в программе используется несколько переменных одного типа, то объявить их можно следующим образом:


Var

  A,B,C:Byte;


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

 

  read(A,B,C);

  Write(A,B,C);


Так же при выводе строк можно строки чередовать с переменными через запятую:

 

  Write ('Xисло A ,','Число В ,',B,'Число С ,',C,'.');


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

 

  Write(A:5,B:5,C:5);


Если количество символов необходимое для вывода значения переменной меньше заданного количества, то добавляются пробелы. Например, если мы задали количество символов 5, а число нам надо вывести 22, то перед 22 добавятся 3 пробела. Однако если мы задали количество символов 3, а число необходимо вывести 1234, то число не обрежется, и будет занимать 4 символа.

Для чего это нужно? Раньше в операционной системе DOS использовался шрифт, в котором ширина любого символа была одинаковая. Даже если это точка, то всё равно ширина пространства занимаемого точкой такое же как и буквы, например «Ж». Зачастую информацию удобно выводить в форме таблиц. Так как не известно заранее, какие значения будет принимать та или иная переменная то столбцы в таблице могут начать смещаться.

Что бы было понятно, приведу пример таблицы с использованием шрифта с одинаковой шириной всех символов:


    ФИО      | Оклад | Премия | На руки |

  Иванов Д.А.|     40|      20|       60|

  Петров С.С.|    120|      80|      200|

 Сидоров М.В.|      9|       3|       12|


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


    ФИО      | Оклад | Премия | На руки |

  Иванов Д.А.|     40|      20|       60|

  Петров С.С.|    120|      80|      200|

  Сидоров М.В.|      9|       3|       12|


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

Далее приведём пример, иллюстрирующий вышесказанное. Постарайтесь в нём внимательно разобраться. Можете написать свою подобную программу и поэкспериментировать с ней.


Var

  A,B,C:Byte;

begin

  writeln('Введите числа А,В,С от 0 до 255');

  read(A,B,C);

  Writeln('Число A ','Число В ','Число С');

  Write(A:7,' ',B:7,' ',C:7);

end.

____________________________________________

Введите числа А,В,С от 0 до 255

255

0

123

Число A Число В Число С

    255       0     123


Имена программ.

Мы рассмотрели несколько программ. Встаёт логичный вопрос как их можно отличать друг от друга? Для этого в Pascal у каждой программы может быть имя, которое пишется в первой строчке текста программы после слова Programm. Например:


Program Demo;

begin

  Writeln('Эта программа называется Demo.');

end.

________________________________________________

Эта программа называется Demo.


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


Комментарии.

Очень важный аспект в программировании  это понимание чужих текстов. Иногда после длительного перерыва можно ничего не понимать даже в своём собственном тексте. Для того, что бы разбираться в текстах программ, в Pascal существуют комментарии. Комментарии предназначены для пояснения текста программы. Вставить комментарий в текст программы можно тремя способами. Первый комментарий заключается в фигурные скобки {}. Всё, что будет находиться в этих скобка будет считаться комментарием и выполняться не будет. В этих скобках можно писать любые символы в любой последовательности, причём в этих скобках могут находиться несколько строчек. Второй способ  такой же как и первый, только вместо фигурных скобок используются обычные круглые скобки со звёздочками (*Комментарий*). Третий способ если в строчке встречаются две косые черты подряд, то до конца строчки всё, что находится далее после них, считается комментарием.

В PascalABC.NET комментарии выделяются зелёным цветом. Пример:


Program Commentariy;

{Объявление переменных}

Var

  x:byte;

(*Тело основной программы*)

Begin

  x:=3;//Инициализация переменной

  Writeln(x);//Вывод переменной на экран

end.

_________________________________________

3


Как видно из результата работы программы, комментарии не оказывают влияния на работу программы.


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



Задачи:

1. Написать программу ввода даты рождения и вывода её на экран в виде таблицы. Программа должна иметь своё имя и в ней должны быть комментарии. Примечание: при вводе и выводе года рождения имейте ввиду, что переменная типа Byte может содержать в себе число только от 0 до 255, соответственно, например, год 2013 вы в неё не введёте. Сделать это можно в два подхода: вначале число 20, затем 13.

2. Вывести дату, введённую с клавиатуры в следующем виде:


--------------

|  Сегодня   |

| 29.03.2013 |

--------------


3. Вывести на экран с помощью символов какой-либо рисунок, например:


  ___

0|___|0

 |   |

 |___|

0|___|0



Решение.

1.

Program DataRojd;

{Программа выводит дату рождения, введённую с клавиатуры, в виде таблицы}

Var

  Ch,//Число

  M,//Месяц

  G1,//Первые две цифры года

  G2//Вторые две цифры года

  :Byte;

begin

  Write('Введите число рождения ');//Предлагаем ввести число

  read(Ch);//Считываем число

  Write('Введите месяц рождения ');//Предлагаем ввести месяц

  read(M);//Считываем месяц

//Предлагаем ввести год - первые две цифры

  Write('Введите год рождения (первые две цифры)');

  read(G1);//Считываем первые две цифры года

//Предлагаем ввести вторые две цифры года

  Write('Введите год рождения (последние две цифры)');

  read(G2);//Считываем вторые две цифры года

  {Выводим дату в виде таблицы}

  Writeln('Вы ввели следующую дату рождения');

  Writeln;//Вставляем пустую строку

  Writeln('Число Месяц  Год');

  Writeln(Ch:5,M:6,G1:3,G2:2);

end.

_________________________________________________________________________

Введите число рождения 30

Введите месяц рождения 10

Введите год рождения (первые две цифры)19

Введите год рождения (последние две цифры)81

Вы ввели следующую дату рождения


Число Месяц  Год

   30    10 1981


Примечание: обратите внимание, что в 13 строке используется команда Writeln без скобок. В данном случае эта команда вставляет просто пустую строку.


2.3. Эти задания решите самостоятельно.


Предыдущий параграф Назад в содержание Следующий параграф