Мобильные персональные компьютеры: виды, варианты исполнения, их сравнение
Автор работы: Пользователь скрыл имя, 27 Февраля 2013 в 13:59, контрольная работа
Описание работы
Ноутбук (англ. notebook – блокнот, блокнотный ПК) – портативный персональный компьютер, в корпусе которого объединены типичные компоненты ПК, включая дисплей, клавиатуру и устройство указания (обычно сенсорная панель, или тачпад), а также аккумуляторные батареи. Ноутбуки отличаются небольшими размерами и весом, время автономной работы ноутбуков изменяется в пределах от 1 до 15 часов.
Содержание работы
1. Настольные ПК: комплектующие, варианты конструктивного исполнения, их сравнение.
2. Типы данных языков программирования, структуры данных.
Практическая часть
Список литературы
Файлы: 1 файл
контрольная по информатике.docx
— 120.75 Кб (Скачать файл)
Файловый тип. Хранит только однотипные значения, доступ к которым осуществляется только последовательно (файл с произвольным доступом, включённый в некоторые системы программирования, фактически является неявным массивом).
Класс.
- Другие типы данных. Если описанные выше типы данных представляли какие-либо объекты реального мира, то рассматриваемые здесь типы данных представляют объекты компьютерного мира, то есть являются исключительно компьютерными те
рминами.
Указатель. Хранит адрес в памяти компьютера, указывающий на какую-либо
информацию, как правило — указатель на перемен
Контроль типов и системы типизации
Процесс проверки и накладывания ограничений типов — контроля типов, может выполняться во время компилирования (статическая проверка) или во время выполнения (динамическая проверка).
Статическая
типизация — контроль типов осуществляется
при компиляции.
Динамическая
типизация — контроль типов осуществляется
во время выполнения.
Контроль типов также может
быть строгим и слабым.
Строгая типизация — совместимость типов автоматически контролируется транслятором:
- Номинативная типизация (англ. nominative type system) — совместимость должна быть явно указана (наследована) при определении типа.
- Структурная типизация (англ. structural type system) — совместимость определяется структурой самого типа (типами элементов, из которых построен составной тип).
Слабая типизация — совместимость типов никак транслятором не контролируется. В языках со слабой типизацией обычно используется подход под названием «утиная типизация» — когда совместимость определяется и реализуется общим интерфейсом доступа к данным типа.
Типы и структуры данных
Типы и структуры данных представляют
собой фундамент, на котором строится
вся современная технология программирования.
Программирования в широком смысле, включая
не только непосредственно написание
и отладку программ, но и проектирование
программных систем разной сложности;
проектирование, реализацию и использование
баз данных и информационных систем и
т.д. Сегодня только большие любители обходятся
без использования безтиповых языков
программирования (например, языков ассемблера)
или неструктурированных и/или нетипизированных
хранилищ данных во внешней памяти. В этой
части книги, не прибегая к излишним формализмам
и теоретическим изыскам, мы приводим
систематическое обсуждение основных
типов и структур данных, применяемых
в современных языках программирования,
а также соответствующих концепций, используемых
в распространенных реляционных и перспективных
объектно-реляционных системах.
Понятие типа данных
Существует много подходов к определению
понятия типа данных от полностью
математических, основанных на аппаратах
абстрактной алгебры или
Основным принципом типизации,
принятым в языках программирования
и базах данных является то, что
любая константа, переменная, выражение
и функция относится к
Следующим исключительно важным свойством типа данных является инкапсуляция внутреннего представления его значений. К значению типа данных (значения констант, переменных, выражений и функций) можно обращаться только с помощью операций, предопределенных в описании этого типа. Эти операции могут быть явными (например, арифметические операции "+", "-", "?" и "/" для числовых типов) или неявными (например, операция преобразования значения целого типа к значению плавающего типа; заметим, что в некоторых языках, в частности, в Си и Си++, допускаются и явные преобразования типов).
Наличие типовых описаний констант, переменных и функций и предписанные правила определения типов выражений вместе с поддержкой свойства инкапсуляции типов дают возможность компиляторам языков программирования и языков баз данных производить существенный контроль допустимости языковых конструкций на этапе компиляции, что позволяет сократить число проверок на стадии выполнения программ и облегчить их отладку.
Один из характерных примеров преимущества использования типизированных языков программирования представляет история операционной системы UNIX. Как известно, система первоначально была написана на языке ассемблера PDP-7. При переходе к использованию PDP-11 ОС UNIX была переписана на языке более высокого уровня B, который являлся прямым наследником безтипового языка программирования BCPL. В очень скором времени по мере роста размеров системы ее разработчикам стало понятно, что бесчисленные проверки времени выполнения очень усложняют отладку и замедляют работу системы. Это явилось исходным толчком к внедрению в язык B системы типов и созданию типизированного языка Си, опора на который обеспечила более чем 25-летнюю плодотворную жизнь системы.
Можно приводить различные
классификации типов данных, например,
простые и составные типы, предопределенные
и определяемые типы и т.д. Существенно
то, что несмотря на многолетнее использование
типов данных в отечественном программировании,
так и не сложилась устойчивая и общепринятая
русскоязычная терминология. Поэтому
в этой книге будем использовать некоторый
набор терминов, выбранных из соображений
максимальной распространенности и интуитивной
ясности.
Выделим следующие категории типов:
- Встроенные типы данных, т.е. типы, предопределенные в языке программирования или языке баз данных. Обычно в языке фиксируются внешнее представление значений этих типов (вид литеральных констант) и набор операций с описанием их семантики. Внутреннее представление и реализация операций выбираются в конкретных компиляторах и подсистемах поддержки выполнения программ.
- Под термином "уточняемый тип данных" мы понимаем возможность определения типа на основе встроенного типа данных, значения которого упорядочены. В частности, к категории уточняемых типов относится тип поддиапазона целых чисел в языках линии Паскаль.
- Категорию перечисляемых типов данных составляют явно определяемые целые типы с конечным числом именованных значений. Это очень простой и легко реализуемый механизм, часто являющийся очень полезным.
Замечание: использование уточняемых и перечисляемых типов порождает потребность в динамической проверке корректности значений - выхода значения за пределы явно (в случае уточняемых типов) или неявно (в случае перечисляемых типов) диапазона. - Конструируемые типы (иногда их называют составными) обладают той особенностью, что в языке предопределены средства спецификации таких типов и некоторый набор операций, дающих возможность доступа к компонентам составных значений. Мы обсудим наиболее распространенные разновидности конструируемых типов: типы массивов, записей и множеств, а также различия в понимании этих типов в разных языках. Замечание: будучи согласны с переводчиком книги Никласа Вирта Д.Б.Подшиваловым в том, что русские термины "тип массива", "тип записи", "тип множества" и т.д. не совсем соответствуют английским оригиналам "array type", "record type", "set type" и т.д. мы все же не будем использовать рекомендуемые им термины "записной тип", "массивный тип" и "множественный тип", поскольку (a) они тоже не вполне соответствуют оригинальным терминам и (b) ужасно выглядят и произносятся.
- Указательные типы дают возможность работы с типизированными множествами абстрактных адресов переменных, содержащих значения некоторого типа. В сильно типизированных языках (Паскаль, Модула, Ада и т.д.) работа с указателями сильно ограничена. В частности, невозможно получить значение указателя явно определенной переменной и/или применять к известным значениям указателей адресную арифметику. В языках с более слабой типизацией (например, Си/Си++) допускаются практически неограниченные манипуляции указателями.
- Вообще говоря, упоминавшиеся выше уточняемые, перечисляемые и конструируемые типы данных являются типами, определяемыми пользователями. Но эти определения не могут включать спецификацию операций над значениями типов. Допустимые операции либо предопределены, либо наследуются от некоторого определенного ранее или встроенного типа. Под термином "определяемый пользователем тип данных" (ранее был больше распространен термин "абстрактный тип данных", однако мы не будем здесь его использовать, поскольку, на наш взгляд, он не точно отражает смысл понятия) мы будем понимать возможность полного определения нового типа, включая явную или неявную спецификацию множества значений, спецификацию внутреннего представления значений типа и спецификацию набора операций над значениями определяемого типа.
Наконец, под термином "полнотиповая
система" мы понимаем систему типов,
в которых типы, определяемые пользователем,
равноправны с предопределенными типами,
т.е. можно, например, определить тип массива
с элементами любого определенного типа,
можно использовать определяемый пользователем
тип на основе любого определенного типа
и т.д.
Встроенные типы данных
Обычно в состав встроенных типов
данных включаются такие типы, операции
над значениями которых напрямую или,
по крайней мере, достаточно эффективно
поддерживаются командами компьютеров.
В современных компьютерах к таким "машинным"
типам относятся целые числа разного размера
(от одного до восьми байт), булевские значения
(поддерживаемые обычно за счет наличия
признаков условной передачи управления)
и числа с плавающей точкой одинарной
и двойной точности (обычно четыре и восемь
байт соответственно). В более ранних компьютерах
часто поддерживалась десятичная арифметика
с фиксированной точкой (например, в мейнфреймах
компании IBM и супер-миникомпьютерах компании
Digital), но в настоящее время прямая аппаратная
поддержка такой арифметики отсутствует
практически во всех распространенных
процессорах.
В соответствии с этим, в
традиционный набор встроенных типов
обычно входят следующие (мы будем говорить
про размеры внутреннего
Тип CHARACTER (или CHAR) в разных языках - это
- либо набор печатных символов из алфавита, зафиксированного в описании языка (для большинства языков англоязычного происхождения этот алфавит соответствует кодовому набору ASCII);
- либо произвольная комбинация нулей и единиц, размещаемых в одном байте.
В первой интерпретации (свойственной
языкам линии Паскаль) для значений
типа CHAR определены только операции сравнения
в соответствии с принятым алфавитом.
Например, при использовании ASCII выполняются
соотношения 0 < 1 < ...< 9 < A < B < ...<
Z < a < b < ...< z; известно, что если значение
переменной x удовлетворяет условию 0 <=
x <= 9, то это значение - цифра; если A <=
x <= Z, то значение x - прописная буква;
если a <= x <= z, то значение x - строчная
буква и т.д. При использовании этой интерпретации
арифметические операции над символьными
значениями не допускаются.
Во второй интерпретации (свойственной языкам линии Си) литеральными константами типа CHAR по-прежнему могут быть печатные символы из принятого в языке алфавита, но возможно использование и числовых констант, задающих желаемое содержимое байта. В этом случае, как правило, над значениями типа CHAR возможно выполнение не только операций сравнения, но и операций целочисленной арифметики.
Наконец, в некоторых языках явно различают тип CHAR как чисто символьный тип и тип сверхмалых целых (TINY INTEGER) как тип целых чисел со значениями, умещающимися в один байт.
В современных компьютерах, как правило, поддерживается целочисленная байтовая арифметика, обеспечивающая как первую, так и вторую интерпретацию типа CHAR.
Тип BOOLEAN в тех языках, где он явно поддерживается, содержит два значения - TRUE (истина) и FALSE (ложь). Несмотря на то, что для хранения значений этого типа теоретически достаточно одного бита, обычно в реализациях переменные этого типа занимают один байт памяти. Для всех типов данных, для которых определены операции сравнения, определены также и правила, по которым эти операции сравнения вырабатывают булевские значения. Над булевскими значениями возможны операции конъюнкции (& или AND), дизъюнкции (| или OR) и отрицания (~ или NOT), определяемые следующими таблицами истинности:
TRUE AND TRUE = TRUE
TRUE AND FALSE = FALSE
FALSE AND TRUE = FALSE
FALSE AND FALSE = FALSE
TRUE OR TRUE = TRUE
TRUE OR FALSE = TRUE
FALSE OR TRUE = TRUE
FALSE OR FALSE = FALSE
NOT FALSE = TRUE
NOT TRUE = FALSE
При работе с булевскими значениями
в языках баз данных некоторую
проблему вызывает то, что по причине
возможности хранения в базе данных
неопределенных значений операции сравнения
могут вырабатывать не два, а три
логических значения: TRUE, FALSE и UNKNOWN. Поэтому
в языке SQL-92, например, используется
не двухзначная, а трехзначная логика,
в результате чего логические операции
при их обработке в серверах баз
данных определяются расширенными таблицами
(мы приводим их с учетом коммутативности
двуместных операций):
TRUE AND TRUE = TRUE
TRUE AND FALSE = FALSE
TRUE AND UNKNOWN = UNKNOWN
FALSE AND UNKNOWN = FALSE
TRUE OR TRUE = TRUE
TRUE OR FALSE = TRUE
TRUE OR UNKNOWN = TRUE
FALSE OR UNKNOWN = UNKNOWN
NOT FALSE = TRUE
NOT TRUE = FALSE
NOT UNKNOWN = UNKNOWN
Помимо общего возрастания сложности
и недостаточной
В языках линии Си прямая поддержка булевского типа данных отсутствует, но имеется логическая интерпретация значений целых типов. Значением операции сравнения может быть "0" (FALSE) или "1" (TRUE). Значение целого типа "0" интерпретируется как FALSE, а значения, отличные от нуля, - как TRUE. В остальном все работает как в случае наличия явной поддержки булевского типа.