- •14.1Тип запись в Turbo Pascal
- •14.2 Тип указатель
- •14.4Файлы
- •14.4.1 Типизированные файлы
- •14.4.2Файлы последовательного доступа
- •14.4.3 Файлы произвольного доступа.
- •14.4.4 Нетипизированные файлы.
- •15. 1. Структура программы и простые типы данных
- •15.2. Основные операции
- •15.3. Математические функции
- •15.3.7. Функции ввода и вывода
- •17.1.Переключатель.
- •18.1 Циклы в си
14.4.4 Нетипизированные файлы.
Нетипизированными или без типовыми файлами, называются файлы, задающиеся следующим образом.
Var
NEWFILE:file;
…
Для нетипизированнтых файлов используются те же процедуры и функции, что и для типизированных, кроме Read, Write. Вместо них используются соответствующие им по смыслу:
Blokread(F,Buf,N[,Result])
Blokrwrite(F,Buf,N[,Result])
Где F имеет то же значение что и выше, Buf- имя буферной переменной, которая будет участвовать в обмене данными с дисками (ее размер 128*N); N – количество записей по 128 байт каждая, Result – необязательный параметр, содержащий при выходе из процедуры количество фактических обработанных записей.
15. 1. Структура программы и простые типы данных
Язык С и его последующие реализации C++ и C# занимают особое место среди языков программирования. Наряду со средствами языков высокого уровня, реализующими концепцию нисходящего структурного проектирования, язык содержит средства для программирования на низком, системном уровне (адрес значения, значение по указанному адресу, побитовые операции, операции сдвига). Благодаря гибкости и компактности своих конструкций С завоевал наибольшую популярность в среде профессиональных программистов и широко используется при разработке системных и прикладных программ.
Средства языков семейства С, декларируемые как преимущества, при некорректном использовании становятся недостатками. Гибкость языка достигается в основном за счет снижения контроля над правильностью использования данных различных типов и предоставления программисту возможности непосредственного изменения содержимого ячеек памяти. Отказ от проверки соответствия типов данных предоставляет программисту наибольшую свободу. Однако, ответственность за корректность программ при этом полностью ложится на программиста. Средства непосредственной работы с содержимым ячеек памяти позволяют эффективно использовать возможности конкретного компьютера. Однако, такие мощные средства требуют от программиста осторожности, аккуратности и хорошего знания языка и особенностей распределения памяти конкретного компьютера.
Любая программа на языке С состоит из одной и более функций, одна из которых должна иметь имя main, и именно ей передается управление из операционной системы. Функция - это коллективное имя для некоторой группы описаний и операторов, заключенных в фигурные скобки { } и являющихся телом функции.
Программа на языке С может иметь следующую структуру:
программа С <раздел препроцессора>
<раздел функций>
<раздел препроцессора> #<опция препроцессора
{#<опция препроцессора>}
В системах программирования семейства С используется двухпроходный транслятор типа компилятор. На первом проходе обрабатываются директивы препроцессора, на втором формируется вариант программы в машинных кодах.
Так, например, в результате обработки директивы #include <<имя файла>> (внешние угловые скобки – символы языка С) в текст программы вместо этой директивы будет помещен файл описания стандартных функций системы (файл библиотеки). Файлы библиотеки языка С им囑ют расширение h (например, stdio.h – файл описания функций ввода/вывода).
Директива #define <идентификатор> <конструкция С> задает так называемое макроопределение. В результате обработки этой директивы каждое вхождение <идентификатор> в текст программы после макроопределения заменяется на <конструкция С>. Например, #define n 100 – макроопределение целочисленной константы n.
Внимание: в языке С строчные и прописные буквы во всех конструкциях различаются. Так N и n – различные идентификаторы.
<раздел функций> <описание функции>
{<описание функции>}
<описание функции> [<идентификатор типа>] <идентификатор>([< формальные параметры>])
<составной оператор>
Здесь <идентификатор типа> – тип возвращаемого значения (тип значения <идентификатор>).
<формальные параметры>
<идентификатор типа> <идентификатор>{, <идентификатор типа> <идентификатор>}
Идентификатор типа |
Размер, бит |
Диапазон |
unsigned char |
8 |
0÷255 |
Char |
8 |
-128÷127 |
Enum |
16 |
-32768÷32767 |
unsigned short |
16 |
0÷65535 |
Short |
16 |
-32768÷32767 |
unsigned int |
16 |
0÷65535 |
Int |
16 |
-32768÷32767 |
unsigned long |
32 |
0÷4294967295 |
Long |
32 |
-2147483648÷2147483647 |
Float |
32 |
3.4∙10-38÷3.4 10+38 |
Double |
64 |
1.7∙10-308÷1.7 10+308 |
long double |
80 |
1.7 10-4932÷1.7 10+4932 |
<составной оператор> {
<оператор>|<выражение>;
{<оператор>|<выражение>;}
}
Здесь первая открывающаяся { и последняя закрывающаяся } являются символами алфавита языка С. | – метасимвол. Значение функции определяется значением <выражения> необязательного оператора return <выражение>, вложенного в <составной оператор>. Если значение функции не определяется (оператор return <выражение> отсутствует), то рекомендуем в качестве типа значения использовать void (отсутствие типа).
В <составном операторе> могут содержаться операторы резервирования памяти, с помощью которых описываются локальные переменные.
<резервирование памяти> <идентификатор типа> <идентификатор>{, <идентификатор>}
Например, оператор int i, j; описывает переменные i и j как целые, а оператор float t; определяет переменную t как действительную одинарной точности.