Инструменты пользователя

Инструменты сайта


bb:lessons:second-basictypes

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bb:lessons:second-basictypes [2016/04/07 21:41]
prospero78 [Массивы]
bb:lessons:second-basictypes [2020/10/29 07:08] (текущий)
Строка 1: Строка 1:
 ====== Урок второй. Базовые типы данных, массивы ====== ====== Урок второй. Базовые типы данных, массивы ======
  
-Что такое //тип данных//? Зачем мы про него говорим, едва ознакомившись с //модулем// и //журналом//? Дело в том, что //типы данных// --- //очень, очень важная штука// в программировании.+[[bb:lessons|]]
  
-Мы знаем, что компьютеры работают с //данными//. А что такое //данные//Данные --- это факты, //сущности// внешнего мирапредставленные таким образом, чтобы компьютер их мог обрабатывать. Ну а типы данных суть множества значений этих данных. Типы данных также вводят ограничения на использование данных.+Что такое тип данныхЗачем мы про него говорим, едва ознакомившись с модулем и журналом? Дело в том, что типы данных --- очень, очень важная штука в программировании.
  
-Например, //числовой тип// данных говорит нам о том, что переменная этого типа может содержать некий //диапазон целых чисел//. Переменную числового типа можно использовать __только__ для числовых вычислений. Нельзя в число записать букву, это ограничение и нарушать его нельзя, иначе мы запутаемся в том, где у нас слова и где числа, где пирожки и где котята.+Мы знаем, что компьютеры работают с данными. А что такое данные? Данные --- это факты, сущности внешнего мира, представленные таким образом, чтобы компьютер их мог обрабатывать. Ну а типы данных суть множества значений этих данных. Типы данных также вводят ограничения на использование данных. 
 + 
 +Например, числовой тип данных говорит нам о том, что переменная этого типа может содержать некий диапазон целых чисел. Переменную числового типа можно использовать только для числовых вычислений. Нельзя в число записать букву, это ограничение и нарушать его нельзя, иначе мы запутаемся в том, где у нас слова и где числа, где пирожки и где котята.
  
 ===== Базовые типы ===== ===== Базовые типы =====
 +
 Это самые простые, неделимые типы. Для них в языке определены базовые операции для вычисления новых значений. Базовыми типами в Обероне являются Это самые простые, неделимые типы. Для них в языке определены базовые операции для вычисления новых значений. Базовыми типами в Обероне являются
-  * ''INTEGER'' (целые числа, точные вычисления) +  * INTEGER (целые числа, точные вычисления) 
-  * ''REAL'' (дробные числа, вычисления с округлением) +  * REAL (дробные числа, вычисления с округлением) 
-  * ''BOOLEAN'' (логические значения) +  * BOOLEAN (логические значения) 
-  * ''CHAR'' (символы для печати) +  * CHAR (символы для печати) 
-  * ''SET'' (последовательности)+  * SET (последовательности)
  
 Попробуем вывести в журнал значения переменных всех типов Попробуем вывести в журнал значения переменных всех типов
  
-<code oberon2> +<code>MODULE MyTypes;
-MODULE MyTypes;+
  
  IMPORT Log;  IMPORT Log;
Строка 31: Строка 33:
  END Do;  END Do;
  
-END MyTypes. +END MyTypes.</code>
-</code>+
  
 Что же мы увидим в журнале после выполнения команды '':!: MyTypes.Do'' ? Посмотрим на результат. Что же мы увидим в журнале после выполнения команды '':!: MyTypes.Do'' ? Посмотрим на результат.
  
-<code> +<code>2014
-2014+
 3.141592920353983 3.141592920353983
 $TRUE $TRUE
Строка 44: Строка 44:
 </code> </code>
  
-Первой строчкой выведен результат вычисления операции сложения. Складываются целые числа, значит и результат будет тоже целочисленным.\\ На второй строчке выводится дробный результат деления двух целых чисел.\\ На третьей строчке мы видим, как выводится значение логического типа (очевидно, что пять больше двух и это истина, то есть ''TRUE'').\\ Символ "А" выведен на четвёртой строчке.\\ И последним выведено перечисление ''SET''. Это множество целых чисел из диапазона 0..31 (подробно на нём мы останавливаться не будем, потому что это выходит за рамки начального курса).+Первой строчкой выведен результат вычисления операции сложения. Складываются целые числа, значит и результат будет тоже целочисленным.\\ На второй строчке выводится дробный результат деления двух целых чисел.\\ На третьей строчке мы видим, как выводится значение логического типа (очевидно, что пять больше двух и это истина, то есть TRUE).\\ Символ "А" выведен на четвёртой строчке.\\ И последним выведено перечисление SET. Это множество целых чисел из диапазона 0..31 (подробно на нём мы останавливаться не будем, потому что это выходит за рамки начального курса).
  
 ===== Составные типы ===== ===== Составные типы =====
Строка 52: Строка 52:
 ===== Массивы ===== ===== Массивы =====
  
-//Массивы// состоят из компонентов //одинаковых// типов. Это означает, что массив - //однородная структура//. Доступ к //любому// компоненту массива производится по //индексу//. Индекс может быть константой, переменной или вообще вычисляться в результате какой-то операции. Конечно же, индекс может быть //только целым числом//. В **Обероне** массивы индексируются с 0. Ну а размер массива задаётся только константой.+Массивы состоят из компонентов одинаковых типов. Это означает, что массив - однородная структура. Доступ к любому компоненту массива производится по индексу. Индекс может быть константой, переменной или вообще вычисляться в результате какой-то операции. Конечно же, индекс может быть только целым числом. В Обероне массивы индексируются с 0. Ну а размер массива задаётся только константой.
  
-Массив сам по себе интересная штука. Он сильно облегчает программисту жизнь. Подумайте сами, что легче - тысячу раз объявить переменную типа ''INTEGER'' или один раз объявить массив из тысячи элементов //типа// ''INTEGER''**Конечно**, второе. Вот пример:+Массив сам по себе интересная штука. Он сильно облегчает программисту жизнь. Подумайте сами, что легче - тысячу раз объявить переменную типа INTEGER или один раз объявить массив из тысячи элементов типа INTEGER? Конечно, второе. Вот пример:
  
-<code oberon2> +<code>MODULE MyArrays;
-MODULE MyArrays;+
  
  VAR  VAR
Строка 65: Строка 64:
  a: ARRAY 100 OF INTEGER;  a: ARRAY 100 OF INTEGER;
  
-END MyArrays. +END MyArrays.</code>
-</code>+
  
-Как видите, разница просто бросается в глаза. В разделе ''VAR'' объявлена **сотня** целочисленных переменных и их так много, что они не умещаются в экран.+Как видите, разница просто бросается в глаза. В разделе VAR объявлена сотня целочисленных переменных и их так много, что они не умещаются в экран.
 Следом объявлен массив ''a'' размером тоже в сотню целых чисел, но это объявление куда компактнее. И, главное, использовать эту сотню в виде массива гораздо удобнее. Можно передавать её как переменную, можно вычислять индекс доступа, можно выбирать любой элемент как если бы это была одна переменная. Следом объявлен массив ''a'' размером тоже в сотню целых чисел, но это объявление куда компактнее. И, главное, использовать эту сотню в виде массива гораздо удобнее. Можно передавать её как переменную, можно вычислять индекс доступа, можно выбирать любой элемент как если бы это была одна переменная.
  
-Конечно же, массивы могут состоять //не только// из целых чисел. Пожалуйста, любой базовый тип к вашим услугам. Делайте массивы типа ''REAL'', и храните в них //дробные// числа. Можно хранить //логические// значения ''BOOLEAN''. Можно хранить символы ''CHAR'', в таком случае у нас образуются символьные цепочки, в которых можно хранить имена, названия и даже тексты.+Конечно же, массивы могут состоять не только из целых чисел. Пожалуйста, любой базовый тип к вашим услугам. Делайте массивы типа REAL, и храните в них дробные числа. Можно хранить логические значения BOOLEAN. Можно хранить символы CHAR, в таком случае у нас образуются символьные цепочки, в которых можно хранить имена, названия и даже тексты.
  
 Но элементами массива могут быть не только базовые типы, но и другие массивы. Вот пример многомерного массива: Но элементами массива могут быть не только базовые типы, но и другие массивы. Вот пример многомерного массива:
Строка 92: Строка 90:
 P Y A H D E L J Q Y  P Y A H D E L J Q Y 
 S C F L Z J Q M W Q S C F L Z J Q M W Q
-C U J Z I I Y F ] C +C U J Z I I Y F ] C</code>
-</code>+
  
 Программа, заполняющая двумерный массив и выводящая его в журнал так, как показано, выглядит так: Программа, заполняющая двумерный массив и выводящая его в журнал так, как показано, выглядит так:
  
-<code oberon2> +<code>MODULE MyArrays;
-MODULE MyArrays;+
  
  IMPORT ObxRandom, Log;  IMPORT ObxRandom, Log;
Строка 121: Строка 117:
  END Do;  END Do;
  
-END MyArrays. +END MyArrays.</code>
-</code>+
  
-Как видите, здесь уже используется //вычисление индексов массива// для доступа к его элементам. Причём это вычисление делается внутри двух //циклов//. Циклы мы рассмотрим на следующем уроке, а тут стоит прокомментировать использование модуля ''ObxRandom'' для вычисления случайного дробного числа в диапазоне 0..1. Мы увеличиваем это число в 30 раз, чтобы получить диапазон 0..30, затем используем встроенную в язык функцию ''ENTIER'' для преобразования числа из дробного в целое. После чего прибавляем результат к коду символа "A" и из полученного числа генерируем символ.+Как видите, здесь уже используется вычисление индексов массива для доступа к его элементам. Причём это вычисление делается внутри двух циклов. Циклы мы рассмотрим на следующем уроке, а тут стоит прокомментировать использование модуля ObxRandom для вычисления случайного дробного числа в диапазоне 0..1. Мы увеличиваем это число в 30 раз, чтобы получить диапазон 0..30, затем используем встроенную в язык функцию ENTIER для преобразования числа из дробного в целое. После чего прибавляем результат к коду символа "A" и из полученного числа генерируем символ.
  
 Индексация к двумерному массиву, естественно, делается с помощью двух индексов. Будь у нас трёхмерный массив, индексов бы понадобилось три и так далее. Индексация к двумерному массиву, естественно, делается с помощью двух индексов. Будь у нас трёхмерный массив, индексов бы понадобилось три и так далее.
bb/lessons/second-basictypes.1460054503.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)