Pascal: Занятие №1. Часть 3: Типы данных в Паскаль
Типы данных в Паскале
Паскаль — это типизированный язык программирования. Это означает, что переменные, в которых хранятся данные, имеют определенный тип данных. Т.е. программе напрямую надо указать, какие данные могут храниться в той или иной переменной: текстовые данные, числовые данные, если числовые — то целочисленные или дробные, и т.п. Это необходимо в первую очередь для того чтобы компьютер «знал», какие операции можно выполнять с этими переменными и как правильно их выполнять.
Например, сложение текстовых данных, или как это правильно называется в программировании — конкатенация — это обычное слияние строк, тогда как сложение числовых данных происходит поразрядно, кроме того, дробные и целые числа складываются тоже по-разному. То же самое касается и других операций.
Рассмотрим наиболее распространенные в Pascal типы данных.
Целочисленные типы данных в Паскаль
| Тип | Диапазон | Требуемая память (байт) |
| byte | 0..255 | 1 |
| shortint | -128..127 | 1 |
| integer | -32768.. 32767 | 2 |
| word | 0..65535 | 2 |
| longint | -2147483648..2147483647 | 4 |
Нужно иметь в виду, что при написании программ в паскале integer (в переводе с англ. целое) является наиболее часто используемым, так как диапазон значений наиболее востребуем. Если необходим более широкий диапазон, используется longint (long integer, в переводе с англ. длинное целое). Тип byte в Паскале используется, когда нет необходимости работать с отрицательными значениями, то же самое касается и типа word (только диапазон значений здесь значительно больше).
Примеры того, как описываются (объявляются) переменные в Паскале:
| Pascal | PascalABC.NET | ||||||||||||||||||
| Pascal | PascalABC.NET | ||||||||||||||||
| ДЕЙСТВИЕ | РЕЗУЛЬТАТ | СМЫСЛ |
|---|---|---|
| 2 + 3 | 5 | плюс |
| 4 — 1 | 3 | минус |
| 2 * 3 | 6 | умножить |
| 17 div 5 | 3 | целочисленное деление |
| 17 mod 5 | 2 | остаток от целочисленного деления |
Порядок выполнения операций
var a: integer; b: real; begin a := 1; writeln(‘a := 1; a = ‘,a); a += 2; // Увеличение на 2 writeln(‘a += 2; a = ‘,a); a *= 3; // Умножение на 3 writeln(‘a *= 3; a = ‘,a); writeln; b := 6; writeln(‘b := 6; b = ‘,b); r /= 2; writeln(‘b /= 2; b = ‘,b); end.
Стандартные арифметические процедуры и функции Pascal
Здесь стоит более подробно остановиться на некоторых арифметических операциях.
Пример операции inc:
Более сложное использование процедуры inc:
Inc(x,n) где x — порядкового типа, n — целого типа; процедура inc увеличивает x на n.
Пример использования функции odd:
begin WriteLn(Odd(5));
Пример использования процедуры sqr в Pascal:
var x:integer; begin x:=3; writeln(sqr(x)); <ответ 9>end.
Однако в компиляторе pascal abc возведение в степень осуществляется значительно проще:
Пример использования процедуры sqrt в Pascal:
var x:integer; begin x:=9; writeln(sqrt(x)); <ответ 3>end.
Преобразование типов данных c++
Лекция по МДК 01.01 «Системное программирование»
setw изменяет ширину поля вывода.
Заголовочный файл IOMANIP > для использования setw
//демонстрирует необходимость применения манипулятора setw
# include iostream >
using namespace std:
long popl = 4789426, pop2 = 274124, рорЗ = 9761;
Вывод программы будет выглядеть следующим образом:
Выравнивание по правому краю
Файл заголовка IOMANIP
Пару слов о беззнаковых типах
Программа умножает обе переменные на 2, а затем делит на 3. Несмотря на то, что правильный результат должен получиться меньше исходного значения, промежуточное вычисление приводит к результату, большему, чем исходное число. Такая ситуация стандартна, но зачастую она приводит к ошибкам.
unsigned char ucharVar ;
// работа со знаковыми / беззнаковыми переменными
#include «stdafx.h»
using namespace std;
int signedVar = 15000000000; // знаковая переменная
unsigned int unsignVar = 15000000000; // беззнаковая переменная
signedVar = (signedVar * 2) / 3; // выход за границы диапазона
unsignVar = (unsignVar * 2) / 3; // вычисления внутри диапазона
cout «Знаковая переменная равна » // ошибка
cout «Беззнаковая переменная равна » // правильно
Явные преобразования типов
Явные преобразования типов, в отличие от неявных, совершаются самим программистом. Явные преобразования необходимы в тех случаях, когда компилятор не может безошибочно преобразовать типы автоматически.
Вот пример оператора, осуществляющего преобразование типа int к типу char :
aCharVar = static_cast char >(anIntVar);
// работа со знаковыми и беззнаковыми переменными
#include
using namespace std ;
int intVar = 1500000000; // 1 500 000 000
intVar = ( intVar * 10) / 10; // слишком большой результат
cout «Значение intVar равно » intVar endl ; // неверный результат
intVar = ( static _ cast double >( intVar ) * 10) / 10; // приведение к типу double
cout «Значение intVar равно » intVar endl ; // верный результат
ans += 10; // то же самое, что ans = ans + 10;
ans *= 2; // то же самое, что ans = ans * 2;
ans /= 3; // то же самое, что ans = ans / 3;
ans %= 3; // то же самое, что ans = ans % 3;
Операция, которую мы сейчас рассмотрим, является более специфичной, нежели предыдущие. При программировании вам часто приходится иметь дело с увеличением какой-либо величины на единицу. Это можно сделать «в лоб», используя
оператор
a = a + 1; или a += 1; или ++ a ; // увеличение count на 1
Операция ++ инкрементирует, или увеличивает на 1, свой операнд.
cout » b = » b endl ; // вывод числа 10
cout «b = » // вывод числа 11 (префиксная форма)
cout «b = » // вывод числа 11
cout «b = » // вывод числа 11 (постфиксная форма)
cout «b = » // вывод числа 12
Формы директивы #include
Двойные кавычки указывают компилятору на то, что поиск файла нужно начинать с текущей директории. Обычно текущей директорией является та, в которой находится исходный файл. Оба указанных способа являются вполне корректными для любого заголовочного файла, однако использование более подходящего из способов ускоряет процесс подключения, поскольку компилятор быстрее найдет нужный файл.












