Концепция типов данных в Паскале

Переменная - это ячейка памяти, которая может менять свое значение в ходе выполнения программы.
Объявление переменных происходит в специальном разделе программы после слова Var.
Каждая переменная в ЯП Паскаль имеет имя, значение и тип данных.
Например:
Var
f:integer;
a,v,s:real
Для работы с данными различного вида, требуются переменные разных типов. 
Концепция типов данных является одной из центральных в любом языке программирования. С типом величины связаны три её свойства: форма внутреннего представления, множество принимаемых значений и множество допустимых операций.
Тип данных называется порядковым, если он состоит из счётного количества значений, которые можно пронумеровать. Отсюда следует, что на этом множестве значений существуют понятия «следующий» и «предыдущий». К порядковому типу данных относятся: целочисленный тип, логический, символьный, перечислимый и ограниченный.
Каждый тип имеет свой идентификатор

Целочисленные типы: integer, byte, word, longint
Вещественные типы: real, single, double, extended
Логический тип: boolean
Символьный тип: char
Типы пользователя. Одна из принципиальных возможностей Паскаля состоит в том, что пользователю разрешается определять свои типы данных. Типы пользователя всегда базируются на стандартных типах данных Паскаля. Для описания типов пользователя в Паскале существуетраздел типов, начинающийся со служебного слова Type. К простым типам пользователя относятся перечисляемый и интервальный типы данных.
Перечислимый тип задаётся непосредственно перечислением (списком) всех значений, которые может принимать переменная данного типа.
Определённое таким образом имя типа затем используется для описания переменных. Например:
Type Gaz = (C, O, N, F);
Metal = (Fe, Co, Na, Cu, Zn); Var G1, G2, G3: Gaz;
Metl, Met2: Metall;
Day: (Sun,Mon,Tue,Wed,Thu,Fri,Sat);
Здесь Gaz и Metal — имена перечислимых типов, которые ставятся в соответствие переменным Gl, G2, G3 и Metl, Met2. Переменной Day назначается перечислимый тип, которому не присвоено имени.
Значения, входящие в перечислимый тип, являются константами. Действия над ними подчиняются правилам, применимым к константам. Каждое значение в перечислимом типе занимает в памяти 2 байта, поэтому число значений этого типа не должно превышать 65 535.
Перечислимый тип — упорядоченное множество. Его элементы пронумерованы, начиная от 0 в порядке следования в описании.
В программе, в которой присутствует данное выше описание переменной Day, возможен такой фрагмент:
if Day=Sun then write('ypa! Сегодня выходной!');
Ограниченный тип задаётся как упорядоченное ограниченное подмножество некоторого порядкового типа:
<константа 1> .. <константа 2>
Порядковый номер первой константы не должен превышать номера второй константы в соответствующем базовом типе.
При исполнении программы автоматически контролируется принадлежность значений переменной ограниченного типа установленному диапазону. При выходе из диапазона исполнение программы прерывается.
Пример
Type Numbers = 1..31;
Alf= 'A'..'Z'; Var Data: Numbers; Bukva: Alf;

Структурные типы. Особенностью Паскаля является то, что в нем структуры данных рассматриваются как типы — структурные типы данных. Одна величина простого типа имеет одно значение: целое число, вещественное число, символ и пр. Одна величина структурного типа имеет множество значений; примеры — числовой массив, символьная строка и пр.
Автор Паскаля Вирт придавал большое значение разнообразию типов данных в языке программирования. В своей книге «Алгоритмы и структуры данных» он подчёркивает зависимость алгоритма решения задачи от способа организации данных в программе. Удачно выбранный способ организации данных упрощает алгоритм решения задачи.



Задача. Получить реверсную запись трехзначного числа

Формулировка. Сформировать число, представляющее собой реверсную (обратную в порядке следования разрядов) запись заданного трехзначного числа. Например, для числа 341 таким будет 143.
Решение. Определимся с выбором переменных и их количеством. Ясно, что одна переменная нужна для записи введенного числа с клавиатуры, мы обозначим ее как n. Так как нам нужно переставить разряды числа n в некотором порядке, следует для каждого из них также предусмотреть отдельные переменные. Обозначим их как a (для разряда единиц), b (для разряда десятков) и c (для разряда сотен).
Теперь можно начать запись самого алгоритма. Будем разбирать его поэтапно:
1)      Вводим число n;
2)      Работаем с разрядами числа n. Как известно, последний разряд любого числа в десятичной системе счисления – это остаток от деления этого числа на 10. В терминах языка Pascal это означает, что для получения разряда единиц нам необходимо присвоить переменной aостаток от деления числа n на 10. Этому шагу соответствует следующий оператор:
a := n mod 10;
Получив разряд единиц, мы должны отбросить его, чтобы иметь возможность продолжить работу с разрядом десятков. Для этого разделим число n на 10. В терминах Pascal, опять же, это означает: присвоить переменной n результат от деления без остатка числа nна 10. Это мы сделаем с помощью оператора
n := n div 10;
3)      Очевидно, что после выполнения п. 2 в переменной n будет храниться двухзначное число, состоящее из разряда сотен и разряда десятков исходного. Теперь, выполнив те же самые действия еще раз, мы получим разряд десятков исходного числа, но его уже нужно присваивать переменной b.
4)      В результате в переменной n будет храниться однозначное число – разряд сотен исходного числа. Мы можем без дополнительных действий присвоить его переменной c.
5)      Все полученные в переменных числа – однозначные. Теперь переменная n нам больше не нужна, и в ней нужно сформировать число-результат, в котором a будет находиться в разряде сотен, b – десятков, c – единиц. Легко понять, что для этого нам следует умножить aна 100, прибавить к полученному числу b, умноженное на 10 и c без изменения, и весь этот результат присвоить переменной c. Это можно записать так:
n := 100 * a + 10 * b + c;
6)      Далее остается только вывести полученное число на экран.
Код:
    1.    program ReverseNum;
    2.     
    3.    var
    4.      nabcword;
    5.     
    6.    begin
    7.      readln(n);
    8.      a := n mod 10;
    9.      n := n div 10;
  10.      b := n mod 10;
  11.      n := n div 10;
  12.      c := n;
  13.      n := 100 * a + 10 * b + c;
  14.      writeln(n)
  15.    end.
Проверим работу программы на произвольном варианте введенных данных. Для этого выполним ее «ручную прокрутку», проделав с введенным числом те же действия, которые должен выполнить алгоритм.

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

Комментариев нет:

Отправить комментарий