Мобильные персональные компьютеры: виды, варианты исполнения, их сравнение
Автор работы: Пользователь скрыл имя, 27 Февраля 2013 в 13:59, контрольная работа
Описание работы
Ноутбук (англ. notebook – блокнот, блокнотный ПК) – портативный персональный компьютер, в корпусе которого объединены типичные компоненты ПК, включая дисплей, клавиатуру и устройство указания (обычно сенсорная панель, или тачпад), а также аккумуляторные батареи. Ноутбуки отличаются небольшими размерами и весом, время автономной работы ноутбуков изменяется в пределах от 1 до 15 часов.
Содержание работы
1. Настольные ПК: комплектующие, варианты конструктивного исполнения, их сравнение.
2. Типы данных языков программирования, структуры данных.
Практическая часть
Список литературы
Файлы: 1 файл
контрольная по информатике.docx
— 120.75 Кб (Скачать файл)Тип целых чисел в общем
случае включает подмножество целых
чисел, определяемое числом разрядов,
которое используется для внутреннего
представления значений. При определении
типа целых чисел обычно стремятся
к тому, чтобы множество его
значений было симметрично относительно
нуля (собственно, это стимулируется
и стандартными свойствами машинной
целочисленной арифметики). Поэтому
приходится тратить один бит на значение
знака числа и при
В языках, ориентированных на 32-разрядные компьютеры, в частности, в стандартных Си и Си++ для рационального использования памяти допускаются модификации целого типа short integer (обычно 16-разрядные), integer (обычно то же самое, что и long integer) и long integer (обычно 32-разрядные), а также байтовые целые (char). При этом поддерживаются автоматические преобразования значений типов меньшего размера к значениям типов большего размера. Пока не очень понятно, какие встроенные целые типы будут зафиксированы в будущем "64-разрядном" стандарте языка Си, но многие компании считают разумным использовать модель под названием LP64, в которой предполагается размер char - 8 бит, размер short integer - 16 бит, размер integer - 32 бита и размер long integer и long long integer - 64 бита.
Наряду со знаковыми целыми типами в языках часто поддерживаются беззнаковые целые. Такие типы в линии языков Паскаль называются CARDINAL, а в линии языков Си именуются путем добавления модификатора unsigned к названию соответствующего целого типа. Таким образом, в последнем случае существуют типы unsigned char, unsigned short integer, unsigned integer и unsigned long integer. Поскольку множество значений типа unsigned в два раза мощнее множества значений соответствующего целого типа, то поддерживается их автоматическое преобразование только к целым типам большего размера.
Наконец, для поддержки
численных вычислений в языках обычно
специфицируется встроенный тип
чисел с плавающей точкой с
базовым названием REAL или FLOAT. Обычно
в описании языков не фиксируется
диапазон и точность значений такого
типа. Они уточняются в реализации
и обычно существенно зависят
от особенностей целевого процессора.
В языках семейства Си (32-разрядных)
специфицированы три
Уточняемые типы данных
Никлас Вирт называет такие типы ограниченными (restricted). На самом деле, ни этот термин, ни тот, который употребляем мы в этой книге, не являются абсолютно правильно отражающими суть соответствующего механизма. Все же, по нашему мнению, термин "уточняемый тип" немного ближе по смыслу.
Суть состоит в том,
что для любого значения любого встроенного
(и перечисляемого) типа существует
его внешнее литеральное
Почему мы предпочитаем использовать
термин "уточняемый тип"? Основная
причина состоит в том, что "ограниченные
типы" в том смысле, в котором
они используются в языках линии
Паскаль, являются частным случаем
более общего понятия, используемого
в языках баз данных и именуемого
"доменом". При определении
домена тоже накладывается некоторое
ограничение на значения базового типа,
но это ограничение может
Основной проблемой уточняемых типов является потребность в динамическом контроле значений, формируемых при вычислении выражений и возвращаемых функциями. Если для значений базовых типов (по крайней мере, числовых) такой контроль, как правило, поддерживается аппаратурой компьютера, то для уточняемых типов, вообще говоря, требуется программный контроль, вызывающий серьезные накладные расходы. В развитых компиляторах обычно поддерживаются два режима компиляции - отладочный со всеми возможными контролирующими действиями во время выполнения программы и "боевой", в котором контроль отключается. Однако, если учесть, что в любой серьезной программе ошибки сохраняются на протяжении всей ее жизни, бесконтрольное выполнение программ очень затрудняет нахождение таких ошибок.
Перечисляемые типы данных
Перечисляемый тип состоит из конечного числа упорядоченных именованных значений. В классическом варианте, свойственном, например, языкам линии Паскаль, определение типа состоит из перечисления имен значений (поэтому справедливо называть такой тип перечисляемым), эти имена в дальнейшем играют роль имен литеральных констант этого типа и должны отличаться от литерального изображения констант любого другого типа. Поскольку значения типа задаются путем перечисления, каждому значению можно однозначно сопоставить натуральное число от 1 до n, где n - число значений перечисляемого типа.
Обычно для любого перечисляемого типа предопределяются операции получения значения по его номеру и получения номера по значению. Кроме того, для перечисляемого типа предопределяются операции сравнения и получения следующего и предыдущего значения. По причине однозначного сопоставления значению перечисляемого типа натурального числа, возможно неявное преобразование этих значений к значению любого числового типа данных.
В языках линии Си под тем же термином "перечисляемый тип" понимается нечто другое, поскольку при определении такого типа можно явно сопоставить имени значения некоторое целое (не обязательно положительное) число; при отсутствии явного задания целого первому элементу перечисляемого типа неявно соответствует 0, а каждому следующему - целое значение, на единицу большее целого значения предыдущего элемента. При этом (a) использование имени перечисляемого типа для объявления переменной эквивалентно использованию типа integer, и такая переменная может содержать любое целое значение; (b) имена значений перечисляемого типа на самом деле понимаются как имена целых констант, и к этим значениям применимы все операции над целыми числами, даже если они выводят за пределы множества целых значений элементов перечисляемого типа. Так что перечисляемый тип в смысле языка Си - это не совсем тип в строгом смысле этого слова, а скорее удобное задание группы именованных констант целого типа.
Конструируемые типы данных
Мы переходим к рассмотрению группы разновидностей типов данных, которые в литературе часто называют "составными", поскольку любое значение любого из этих типов состоит из значений одного или нескольких других типов. Мы предпочитаем использовать термин "конструируемый тип", поскольку для каждой разновидности типов этой группы в языке программирования специфицируются средства построения (конструирования) нового типа на основе встроенных и/или ранее определенных типов, и для каждой разновидности предопределяются операции, позволяющие извлечь компонент составного значения. К наиболее распространенным конструируемым типам относятся тип массива, тип записи и тип множества.
Массивы
Как и в ряде предыдущих разделов, понятия массива и типа массива сильно различаются в сильно и слабо типизированных языках. Начнем с классического понятия в сильно типизированных языках (например, в языке Паскаль). Тип массива в таких языках определяется на основе двух вспомогательных типов: типа элементов массива (базового типа) и типа индекса массива. В языке Паскаль определение типа массива выглядит следующим образом: type T = array [I] of T0, где T0 - базовый тип, а I - тип индекса. T0 может быть любым встроенным или ранее определенным типом. Тип индекса I должен состоять из конечного числа перечисляемых значений, т.е. быть уточненным, перечисляемым, символьным или булевским типом. В языках линии Паскаль допускается и неявное определение уточненного типа массива. Например, допустимы следующие определения типа массива: type T = array [2..6] of integer или type T = array ['a'..'e'] of real.
Если мощность множества значений типа индекса есть n, то значение типа массива - это регулярная структура, включающая n элементов базового типа. Соответствующим образом устроены и переменные типа массива. Для любого сконструированного типа массива предопределены две операции - операция конструирования значения типа массива и операция выборки элемента массива. Если x - переменная типа массива T, а i - значение соответствующего типа индекса, то для конструирования значения используется языковое средство x:= T (c1, c2, ..., cn), где c1, c2, ..., cn - значения базового типа. Для выборки элемента массива используется конструкция x[i], значением которой является значение i-того элемента массива (вместо i в квадратных скобках может содержаться любое допустимое выражение, значение которого принадлежит множеству значений типа индекса). Эта же конструкция может использоваться в левой части оператора присваивания, т.е. элементы массива могут изменяться индивидуально. Кроме того, при подобной строгой типизации массивов допустимы присваивания значений переменных типа массива, функции, возвращающие значение типа массива и т.п.
Базовым типом типа массива может быть любой встроенный или определенный тип, в том числе и тип массива. В последнем случае говорят о многомерных массивах или матрицах. Для работы с многомерными массивами в языках используют сокращенную запись. Например, вместо определения type T = array [2..10] of array [2..5] of real можно написать type T = array [2..10],[2..5] of real, а если x - переменная такого типа T, то для выборки скалярного элемента вместо x[i][j] можно написать x[i,j].
В сильно типизированных языках для любого значения типа массива известно число элементов базового типа. Поэтому в принципе всегда возможен контроль значения индекса, хотя на практике такой контроль обычно отменяется при использовании программы в производственном режиме.
Для иллюстрации приемов
работы с массивами в слабо
типизированных языках используем язык
Си. В этом языке нет средств
определения типов массива, хотя
имеется возможность
Записи
Типы массивов позволяют работать с регулярными структурами данных, каждый элемент которых относится к одному и тому же базовому типу. Существует другая разновидность составных конструируемых типов данных, которые позволяют определять и использовать нерегулярные структуры данных, элементы которых могут относиться к разным встроенным или явно определенным типам данных. Собирательно типы этой разновидности называются типами записи или структурными типами.
К счастью, общее понятие типа записи практически одинаково в сильно и слабо типизированных языках (с некоторыми оговорками, которые мы отложим до раздела, посвященного указателям). Идея состоит в том, что в определении структурного типа перечисляются имена полей записи, и для каждого поля указывается его тип данных. После этого можно определять переменные вновь сконструированного типа и производить доступ к полям переменных. На языке Модула-2 определение структурного типа "комплексные числа" могло бы выглядеть следующим образом:
type complex = record re: real; im: real end
Вот аналог этого определения на языке Си:
struct complex { float re; float im;}
После этого можно объявить переменную x комплексного типа (var x: complex; или struct complex x;) и обращаться к действительной и мнимой частям x с помощью конструкции x.re (или x.im соответственно). Поскольку размер составного значения структурного типа точно специфицирован, допускается присваивание таких значений, а также функции, вырабатывающие структурные значения и т.п.
Замечание: мы все же вынуждены
отметить одну (не связанную с указателями)
особенность использования
struct { float re; float im;} x, y;
struct { float r; float i;} z;
После этих объявлений понятно, что переменные x и y имеют один и тот же тип и что, в частности, допустимо присваивание x = y. Но чтобы понять, что на самом деле таким же типом обладает и переменная z, приходится решать громоздкую задачу определения структурной эквивалентности типов, возникновения которой обычно стремятся избежать в сильно типизированных языках программирования.