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

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


bb:lessons:second-basictypes

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bb:lessons:second-basictypes [2014/11/23 21:48]
admin
bb:lessons:second-basictypes [2020/10/29 07:08] (текущий)
Строка 1: Строка 1:
 ====== Урок второй. Базовые типы данных, массивы ====== ====== Урок второй. Базовые типы данных, массивы ======
  
-Что такое тип данных? Зачем мы про него говорим, едва ознакомившись с модулем и журналом? Дело в том, что типы данных - очень, очень важная штука в программировании.+[[bb:lessons|]]
  
 +Что такое тип данных? Зачем мы про него говорим, едва ознакомившись с модулем и журналом? Дело в том, что типы данных --- очень, очень важная штука в программировании.
  
-Мы знаем, что компьютеры работают с данными. А что такое данные? Данные - это факты, сущности внешнего мира, представленные таким образом, чтобы компьютер их мог обрабатывать. Ну а типы данных суть множества значений этих данных. Типы данных также вводят ограничения на использование данных. +Мы знаем, что компьютеры работают с данными. А что такое данные? Данные --- это факты, сущности внешнего мира, представленные таким образом, чтобы компьютер их мог обрабатывать. Ну а типы данных суть множества значений этих данных. Типы данных также вводят ограничения на использование данных.
  
 Например, числовой тип данных говорит нам о том, что переменная этого типа может содержать некий диапазон целых чисел. Переменную числового типа можно использовать только для числовых вычислений. Нельзя в число записать букву, это ограничение и нарушать его нельзя, иначе мы запутаемся в том, где у нас слова и где числа, где пирожки и где котята. Например, числовой тип данных говорит нам о том, что переменная этого типа может содержать некий диапазон целых чисел. Переменную числового типа можно использовать только для числовых вычислений. Нельзя в число записать букву, это ограничение и нарушать его нельзя, иначе мы запутаемся в том, где у нас слова и где числа, где пирожки и где котята.
Строка 67: Строка 67:
  
 Как видите, разница просто бросается в глаза. В разделе VAR объявлена сотня целочисленных переменных и их так много, что они не умещаются в экран. Как видите, разница просто бросается в глаза. В разделе VAR объявлена сотня целочисленных переменных и их так много, что они не умещаются в экран.
-Следом объявлен массив a размером тоже в сотню целых чисел, но это объявление куда компактнее. И, главное, использовать эту сотню гораздо удобнее. Можно передавать её как переменную, можно вычислять индекс доступа, можно выбирать любой элемент как если бы это была одна переменная.+Следом объявлен массив ''a'' размером тоже в сотню целых чисел, но это объявление куда компактнее. И, главное, использовать эту сотню в виде массива гораздо удобнее. Можно передавать её как переменную, можно вычислять индекс доступа, можно выбирать любой элемент как если бы это была одна переменная
 + 
 +Конечно же, массивы могут состоять не только из целых чисел. Пожалуйста, любой базовый тип к вашим услугам. Делайте массивы типа REAL, и храните в них дробные числа. Можно хранить логические значения BOOLEAN. Можно хранить символы CHAR, в таком случае у нас образуются символьные цепочки, в которых можно хранить имена, названия и даже тексты. 
 + 
 +Но элементами массива могут быть не только базовые типы, но и другие массивы. Вот пример многомерного массива: 
 + 
 +''matrix: ARRAY 10 OF ARRAY 10 OF ARRAY 10 OF ARRAY 10 CHAR;'' 
 + 
 +Как этот четырёхмерный массив должен выглядеть, довольно сложно представить. Надо что-то попроще. Давайте попробуем увидеть, как выглядит содержимое двумерного массива символов из 10 строк и 10 столбцов 
 + 
 +''matrix10x10: ARRAY 10 OF ARRAY 10 OF CHAR;'' 
 + 
 +Если такой двумерный массив заполнить произвольными символами и затем вывести в журнал, то получится что-то вроде этого: 
 +<code> 
 +Q Q T A A I E I U X  
 +V A D Y A O O O V B  
 +T P A H B [ L [ \ X  
 +Z L H K V E J I F \  
 +N W J J U R O G Q A  
 +] E O Y P T V U [ Y  
 +X B K S A T R T ^ J  
 +P Y A H D E L J Q Y  
 +S C F L Z J Q M W Q 
 +C U J Z I I Y F ] C</code> 
 + 
 +Программа, заполняющая двумерный массив и выводящая его в журнал так, как показано, выглядит так: 
 + 
 +<code>MODULE MyArrays; 
 + 
 + IMPORT ObxRandom, Log; 
 + 
 + VAR 
 + matrix10x10: ARRAY 10 OF ARRAY 10 OF CHAR; 
 +  
 + PROCEDURE Do*; 
 + VAR i, j: INTEGER; s: ARRAY 10 OF CHAR; 
 + BEGIN 
 + FOR i := 0 TO 9 DO 
 + FOR j := 0 TO 9 DO 
 + matrix10x10[i, j] := CHR(ORD('A') + ENTIER(ObxRandom.Uniform() * 30)) 
 + END 
 + END; 
 + FOR i := 0 TO 9 DO 
 + FOR j := 0 TO 9 DO 
 + Log.Char(matrix10x10[i, j]); Log.Char(' ') 
 + END; 
 + Log.Ln 
 + END 
 + END Do; 
 + 
 +END MyArrays.</code> 
 + 
 +Как видите, здесь уже используется вычисление индексов массива для доступа к его элементам. Причём это вычисление делается внутри двух циклов. Циклы мы рассмотрим на следующем уроке, а тут стоит прокомментировать использование модуля ObxRandom для вычисления случайного дробного числа в диапазоне 0..1. Мы увеличиваем это число в 30 раз, чтобы получить диапазон 0..30, затем используем встроенную в язык функцию ENTIER для преобразования числа из дробного в целое. После чего прибавляем результат к коду символа "A" и из полученного числа генерируем символ. 
 + 
 +Индексация к двумерному массиву, естественно, делается с помощью двух индексов. Будь у нас трёхмерный массив, индексов бы понадобилось три и так далее.
bb/lessons/second-basictypes.1416768509.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)