Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по СиАОД.doc
Скачиваний:
54
Добавлен:
27.10.2018
Размер:
759.3 Кб
Скачать

Указатели и курсоры

Для облегчения доступа к совокупностям ячеек в языках программирования используются указатели и курсоры. Указатель – это ячейка, чье значение указывает на другую ячейку (содержит адрес другой ячейки).

В Си указатель на ячейку заданного типа определяется следующим образом:

<тип ячейки> *<имя переменн>;

Пример. Два поля в записи являются указателями на другие записи.

struct child{

char name[25]; /* Имя */

int brothers; /* Кол-во братьев */

int sisters ; /* Кол-во сестер */

struct child *mother; /* Мать */

struct child *father; /* Отец */

};

Курсор – это ячейка с целочисленным значением, используемая для указания на элемент массива. Курсоры используются в языках, которые не имеют явного типа указателя (например, Фортран, Алгол).

Схематически структуры данных изображаются следующим образом:

Одномерный массив:

12.1

16.7

54.56

43.45

546.1

1

2

3

4

5

Двумерный массив:

2

6

0

4

6

9

5

0

2

4

5

8

3

2

7

8

3

6

1

4

6

1

1

0

0

6

7

4

2

Запись:

Василий

1

1

0х000F2123

0х000F3126

Марина

0

0

……….

……….

Дмитрий

2

0

………..

………..

Стрелками изображаются указатели.

Время выполнения программ

В процессе решения прикладных задач выбор подходящего алгоритма вызывает определенные трудности. В самом деле, на чем основывать свой выбор, если алгоритм должен удовлетворять следующим противоречащим друг другу требованиям. С одной стороны

  1. Быть простым для понимания, перевода в программный код и отладки.

  2. Эффективно использовать компьютерные ресурсы и выполняться по возможности быстро.

Если написанная программа должна выполняться только несколько раз, то первое требование наиболее важно. Стоимость рабочего времени программиста обычно значительно превышает стоимость машинного времени выполнения программы, поэтому стоимость программы оптимизируется по стоимости написания (а не выполнения) программы. Если мы имеем дело с задачей, решение которой требует значительных вычислительных затрат, то стоимость выполнения программы может превысить стоимость написания программы, особенно если программа должна выполняться многократно. Поэтому, с финансовой точки зрения, более предпочтительным может стать сложный комплексный алгоритм (в надежде, что результирующая программа будет выполняться существенно быстрее, чем более простая программа). Но и в этой ситуации разумнее сначала реализовать простой алгоритм, чтобы определить, как должна себя вести более сложная программа. При построении сложной программной системы желательно реализовать ее простой прототип, на котором можно провести необходимые измерения и смоделировать ее поведение в целом, прежде чем приступать к разработке окончательного варианта. Т.О. программисты должны быть осведомлены не только о методах построения быстрых программ, но и знать когда их следует применять (желательно с минимальными программистскими усилиями).