- •1.Записи(тип Record).Поля записи.
- •2.Доступ к полям записи. Оператор With.
- •3.Уникальность имён полей записи.Примеры.
- •4.Запись как единый объект операций.
- •5.Вариантные записи.
- •6.Множества в тп. Описание Типа. Задание значений множественных переменных.
- •7.Операции с множеством
- •13. Указатели
- •14. Не типизированные указатели.
- •15. Операции над указателями
- •20. Сортировка массива
- •21. Поиски
- •22. Понятие языков с сильной типизацией
- •23. Препроцессор языка Си
- •24. Директивы препроцессора
- •25 Базовые типы данных (арифметические). Модификаторы
- •28 Структура программы Си
- •27 Декларация и инициализация переменных
- •29.Арифметические операции, операции отношения.
- •30.Поразрядные операции
- •31.Операция “?:”
- •32.Операция «запятая»(последовательного вычисления)
21. Поиски
1) Линейный поиск
Если нет никакой дополнительной информации о разыскиваемых данных, то необходим просмотр всей структуры. Такой поиск называется линейным. Условия его окончания: элемент найден или весь массив просмотрен, но совпадений нет.
Алгоритм: a:[0..N-1]
i:=0;
while (i<N) and (a[i]<>x) do i:=i+1;
Возможно улучшение алгоритма установкой барьера.
a:[0..N] a[N]:=x;
i:=0;
while a[i]<>x do i:=i+1;
2) Двоичный поиск (поиск деления пополам)
Если нет дополнительных сведений о данных, то линейный поиск – единственный вариант. Если данные упорядочить, то поиск можно сделать более эффективным. Поэтому операциям поиска часто предшествует сортировке.
Пусть массив упорядочен по возрастанию, выберем некоторый элемент amи сравним с x. Если am=x, то поиск заканчивается, если am<x, то все элементы с индексами больше mможно исключить, если am>x, то все элементы с индексами меньше mможно исключить.
Алгоритм:
L,R
Found: boolean;
L:=0;
R:=N-1; found:=false;
While (L<=R) and not(found) do
Begin
m:=любое значение между Lи R (желательно средний элемент)
if a[m]:=x then found:=true else
if a[m]<x then L:=m+1 else
R:=m-1;
end;
Для ускорения алгоритма можно отказаться от проверки на совпадение
L,R
L:=0;
R:=N; While L<R do
Begin
m:= (L+R) div 2;
if a[m]<x then L:=m+1 else
R:=m;
end;
В данном случае условие окончания – L>=R. При L=Rцикл заканчивается, но это не свидетельствует о совпадении. При R=Nсовпадений нет. В других случаях a[R] не участвует в проверке, следовательно, необходимо дополнительно проверить a[R]=x.
22. Понятие языков с сильной типизацией
Тип объекта – форма представления его значения в памяти и определяемой этой формой способ доступа к объекту и его части. Типизация позволяет делать программу более понятной и менее подверженной ошибкам и легче проверяемой.
Язык программирования называют языком с сильной типизацией, если:
- каждый объект принадлежит одному из существующих типов;
- преобразования типа производится с помощью преобразования значения из одного типа в другой, а не с помощью механизма трактовки представления значения, как данные различных типов;
Си – безтиповый язык. В Си допускается преобразования базовых типов.
Наличие ограничений в паскале дает большую надежность, в тоже время, как си – более гибкий, без ограничений язык.
23. Препроцессор языка Си
Препроцессор языка Си – это текстовый процессор, просматривающий программу до компиляции. Он преобразует программу последовательность символов исходной программы в последовательность лексем.
Лексема – фрагмент исходного текста, имеющий самостоятельный смысл для компилятора и не содержащие других лексем.
Лексемы:
- служебные слова
- константы
- идентификаторы
- знаки операции
- строки (набор символов в кавычках)
- разделители (; , . , (), [], {}…)
Пробельные символы не относятся к лексемам.
A+2*k – 5 лексем
“nom+2” – 3 лексемы.
24. Директивы препроцессора
Можно облегчить модификацию исходных программ и сделать ее более независимой.
Директивы начинаются со знака # и позволяют:
- заменить идентификаторы программы некоторыми значениями
- ставить в исходный файл содержимое другого исходного файла
- запретить компиляцию некоторой части исходного файла
1) включение файла
#include<имя файла> или “имя файла” В первом случае(<>) – файл должен находить в специальной папке, а во втором(“”) – в любой папке.
2) макро-определения
#define<идентификатор><строка-замещения>
Пример: #define Pi 3,141592
#define NAME “Borland C”
Макрос может иметь аргумент. При каждой замене препроцессора аргументы заменяются на те, которые встречаются в программе. Если в строке замещения макроса аргументы заключены в круглые скобки, то вместо них могут подставлятьсявыражения.
Директивы препроцессора могут быть где угодно а программе.
Директивы записываются в отдельных строках, после них «;»не ставится.
Между# и defineможет ставиться пробел.
Принято описывать макро-определения БОЛЬШИМИ БУКВАМИ.
3) отмена макро-определения
#undef<идентификатор>