Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-7,13-15,20-32.docx
Скачиваний:
5
Добавлен:
26.09.2019
Размер:
48.11 Кб
Скачать

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<идентификатор>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]