Информатика. 8 класс

Урок 14. Запись линейных алгоритмов на языке программирования

Одним из важных моментов, который выполняется при составлении программы на языке программирования –  это вопрос о памяти, занимаемой данными. В программе необходимо предусмотреть место в памяти компьютера под все используемые данные. Заметим, что в разных версиях языка Паскаль типы данных могут отличаться по названиям и отводимому под них объему памяти. Рассмотрим некоторые основные типы данных на примере языка PascalABC.net.

Некоторые типы данных в Паскале

Название

Обозначение

Допустимые значения

Область памяти

Целочисленный

Byte

0..255

1

 
 

Integer

-2 147 483 648..2 147 483 647

4

Вещественный

Real

-1.8∙10308 .. 1.8∙10308

8

Логический

Boolean

true и false

1

Символьный

Char

Один произвольный символ

2

Строковый

String

Последовательность символов

К целочисленным типам относится тип Byte, это неотрицательные целые числа, не превышающие 255 (количество учеников класса, количество этажей в доме, номер квартиры). Под тип Integer в памяти отводится 4 байта. Этот тип можно использовать для работы с большими, как отрицательными, так и положительными целыми числами (количество жителей в городе, температура на улице, количество дней года).

Вещественные числа имеют в своей записи не более 16 разрядов. Отдельно от самого числа записывается положение десятичной точки, которую можно передвинуть на 300 позиций влево или вправо. Например, тип real можно использовать для таких данных, как плотность, скорость, расстояние, температура человека.

Под логический тип Boolean отводится один байт памяти. Он имеет всего два разных значения. Значение True (истина) и значение False (ложь). Используется для работы с признаками, имеющими только два возможных значения.

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

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

К строкам, как и к числовым типам, можно применять действие сложение (склеивание).

Операция сложения на строках не подчиняется переместительному закону, так как на строках

‘1’ + ‘2’ = ‘12’, а ‘2’ + ‘1’ = ‘21’

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

Рассмотрим задачу.

На фабрике автомат складывает карандаши в коробки. В одну коробку входит 7 карандашей. К концу рабочего дня в автомате осталось 30 карандашей. Сколько полных коробок сможет заполнить автомат? Сколько карандашей останется?

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

30 div 7 = 4

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

30 mod 7 = 2

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

На фабрике имеются N готовых карандашей. В одну коробку помещается K карандашей.  Сколько получится полных коробок?

Сколько карандашей в незаполненной коробке?

Сколько надо добавить карандашей в последнюю неполную коробку?

Все переменные в задаче целые. После записи заголовка программы определимся с именами переменных, используемых в программе. Для удобства в код добавляют комментарии. Текст после двойного слэш не проверяется компилятором, он необходим только для программиста. Назначение N и K оговорено в условии задачи. Количество заполненных коробок будем хранить в переменной B. Переменные p и d будут означать, сколько карандашей в последней неполной коробке и сколько необходимо добавить в последнюю коробку, чтобы она стала полной.

programPencil;

var

  N, K: integer; // N – всего, K - в одной коробке

  B: integer; // B - количество коробок

  p, d: integer;// p – в последней, d - добавить

Количество заполненных коробок определяется как неполное частное. Действие NdivK определяет ответ на первый вопрос задачи.

B := NdivK;

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

p := N mod K;

Добавив вывод ответа, получим программу:

program Pencil;

var

  N, K: integer; // N – всего, K - воднойкоробке

  B: integer; // B - количество коробок

  p, d: integer;// p – в последней, d - добавить

begin

  readln(N, K);

  B := N div K;

  writeln ('Получилось ', B, ' коробок(и)');

  p := N mod K;

  writeln ('В последней неполной коробке ', p, ' карандаша(ей)');

end.

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

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

Например, в решенной задаче про карандаши, количество коробок можно найти, применив функцию нахождения целой части числа trunc(x).

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

Стандартные функции Pascal

Функция

Назначение

Тип аргумента

Тип результата

abs(x)

Модуль x

integer, real

Такой же, как у аргумента

sqr(x)

Квадрат x

integer, real

Такой же, как у аргумента

sqrt(x)

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

integer, real

real

round(x)

Округление x до ближайшего целого

integer, real

integer

trunc(x)

Целая часть числа x

integer, real

integer

frac(x)

Дробная часть x

integer, real

real

random

случайное число

0 ≤ Random < 1

real

random(x)

Случайное целое число
0
random(x) < x

integer

integer

Предметы

По алфавиту По предметным областям

Классы

1 2 3 4 5 6 7 8 9 10 11
angle-skew-bottom mix-copy next-copy-2 no-copy step-1 step-2 step-3 step-4 step-5 step-6 step-6 angle-skew-bottom mix-copy next-copy-2 no-copy step-1 step-2 step-3 step-4 step-5 step-6 step-6