Согласие на обработку персональных данных.



04.09.2017
Новая задача Программа вычисления суммы.

03.09.2017
Новое видео Стековый калькулятор и обратная польская запись.

26.08.2017
Новая статья Версии Делфи.

23.08.2017
Новая статья Для кого пишется программа.

13.08.2017
Новая статья Стандарт C++: общие сведения.

Подводные камни

Основы программирования Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

Как я уже говорил, при объявлении переменных в Паскале нужно обязательно указывать их типы. В некоторых других языках, таких как Visual Basic Script, JavaScript и т.п. это делать не обязательно. Но мы тренируемся на Паскале, поэтому вам нужно будет научиться заранее думать, где вы будете использовать объявленную переменную, чтобы выбрать для неё правильный тип.

Что же будет, если вы ошибётесь с выбором типа данных?

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

Однако есть более неприятные ситуации. Допустим, у нас есть такая программа:

Листинг 14.2. Проблемы с типами данных.
program vc;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var x : byte;
    y : integer;

begin
  x := 0;
  y := 300;
  Writeln('x = ', x, ', y = ', y);
  x := x + y;
  Writeln('x + y = ', x);
  Readln;
end.

Как вы думаете, сколько будет 0+300? Правильно, 300. Однако это ваша точка зрения. А вот с точки зрения данной программы, 0 + 300 = 44. Не верите? Посмотрите рис. 14.1.


Результат работы программы

Рис. 14.1. Результат работы программы.

Почему так получилось? Давайте разберёмся.

Итак, переменная x у нас имеет тип Byte. Как вы уже знаете, переменная данного типа может принимать значения ТОЛЬКО в диапазоне 0…255. Поэтому число 300 «впихнуть» в эту переменную никак не получится!

Однако компилятор не выдаёт ошибки! Почему? Да потому что компилятор не знает, чего хочет программист. Может быть программист хочет, чтобы результат был именно 44, а не 300.

Но откуда взялось число 44?

А вот откуда.

Сначала переменная х хранила 0. Мы попытались прибавить к этому значению 300. Но переменная х не может хранить число, значение которого более 255. Поэтому к 0 прибавляется 255, а затем разность между 300 и 255.

Однако 300 – 255 = 45. Почему же тогда результат равен 44? А потому что значения начинаются с нуля. То есть 45-е число в диапазоне 0…255 это и будет 44. Если не верите, то можете посчитать.

Конечно, это упрощённые объяснения для начинающих. Однако пока этого достаточно. Если хотите знать больше, то изучайте информатику и системы счисления. Главное, что вы должны усвоить из этого урока – надо быть внимательным при выборе типов данных, и помнить о том, что результат какой-либо операции может не поместиться в тип данных, который имеет переменная, в которую записывается этот результат. А это, в свою очередь, может привести (и обязательно приведёт) к ошибкам в программе. К тому же такие ошибки довольно трудно искать.

Разумеется, это не все проблемы, с которыми может столкнуться программист. Это только начало проблем)))

Домашнее задание:

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


Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика