Экономика және басқару институтының



бет14/21
Дата28.01.2018
өлшемі1,51 Mb.
#35109
1   ...   10   11   12   13   14   15   16   17   ...   21

Дәріс мазмұны




Функциялар. Басқа программалау тілдерімен салыстырғанда Си тілінде процедура, подпрограмма және функцияға бөлу жоқ, мұнда программа тек функциямен құрылады. Функция – нақты бір есепті шешуге арналған операторлар мен хабарландырулар жиынтығы. Әр функцияны хабарлау үшін, анықтау және шақыру үшін қолданылатын оның аты болу керек. Си тіліндегі кез келген программада main (басты функция) атты функция болуы керек, тек осы функциядан кез-келген программа басталады. Функцияны шақыру кезінде оған аргументтер (формальді параметрлер) көмегімен функцияны орындау кезінде қолданылатын кейбір мәндер берілуі мүмкін. Функция ең болмағанда бір мәнді қайтаруы мүмкін. Бұл қайтарылған мән программаның орындалу барысында функцияның шақылу нүктесіне қойылатын функцияның орындалу нәтижесі. Аргументсіз және ешқандай мәнді қайтармайтын функцияларды қолдануға болады. Мұндай функциялардың әрекеті кейбір айнымалылардың мәнін өзгертуде, кей текстерді баспаға шығаруда, т.б.-ны құрайды. Си тілінде функцияны қолданумен үш түрлі мағына - функцияны анықтау (функциямен орындалатын әрекеттердің сипаттамасы), функцияны хабарлау және функцияны шақыру байланысты. Функцияны анықтау қайтарылатын мәннің типін, функцияның атын, формальді параметрлердің типі мен санын, сонымен бірге функция денесі деп аталатын айнымалы мен операторды хабарлауды және функцияның анықтайтын әрекетін береді.


Мысалы:

int rus (unsigned char r)

{ if (r>='А' && c<=' ') return 1; else return 0; }

Берілген мысалда unsigned char типті және r атты бір параметрі бар rus атты функция анықталған. Егер функция параметрі орыс алфавитінің әріпі болса, функция 1-ге тең бүтін санды қайтарады немесе керісінше. Қолданылатын функциялардың анықтамасы main функциясының анықтамасынан кейін, оның алдында немесе басқа файлда орын алуы мүмкін. Компилятор тексеруді жүргізу үшін берілетін фактілі параметрлер типін формальді параметрге сәйкестендіре отырып, функцияны шақырғанша функция хабарландырылуын (прототип) сыйғызу керек. Функция хабарландырылуы функция анықтамасының түріндей болады, тек айырмашылығы функция денесі болмайды және формальді параметрлердің аты түсіп қалады. Соңғы мысалда анықталған функция үшін прототип түрі мынадай болуы мүмкін:

int rus (unsigned char r); немесе rus (unsigned char);

Си тілінің программаларында библиотекалық функциялар, яғни өңделген және библиотекаға жазылған функциялар кеңінен қолданылады. Библиотекалық функциялардың прототипі жүйелі программалау құрамына енетін библиотекалармен бірге қойылатын арнайы тақырыптық файлдарда жатады және #include директивасы арқылы программаға қосылады. Егер функция хабарландырылуы берілмесе, функцияның алғашқы жіберуінің анализі негізінде ол функцияны шақыру немесе анықтау болса да, функция прототипі құрылады. Бірақ мұндай прототип келесі анықтамамен немесе функция шақырылуымен келісе бермейді. Әрқашан функция прототипі бері мақұлданады. Бұл компиляторға не функцияны дұрыс қолданбау кезінде диагностикалық хабарларды беруге не программа орындалу барысында орнатылған аргументтердің сәйкес келмеуін реттеуге мүмкіндік береді. Функция параметрлерінің хабарландыру оны анықтау кезінде функция атынан соң жақшада параметр аттары, ал жақшадан соң параметр типтерін хабарландыру жазылатын "ескі стилде" орындалуы мүмкін. Мысалы, алдыңғы мысалдан rus функциясы келесі жолмен анықталуы мүмкін:

int rus (r)

unsigned char r;

{ ... /* функция денесі */ ... }

СИ тілінің синтаксисіне сәйкес функция анықтамасы келесі формада болады:



[жады-класының-спецификаторы] [тип-спецификаторы] функция-аты

([формальді-параметрлер-тізімі])

{ функция-денесі }

Дәріс 28

Тақырыбы:. Келтіру , салыстыру операциялары

Мақсаты: Келтіру , салыстыру операциялары, оларды қолдану

Дәріс мазмұны
Ссылочные (указательные) типы не относятся ни к скалярным, ни к составным типам, так как, с одной стороны, являются атомарными (неделимыми), с другой стороны - определяются через другие типы.

Переменные ссылочного типа являются указателями на значения некоторого определенного типа. При описании указателей используется символ "^". В общем виде:

type

<имя ссылочного типа> = ^<базовый тип>;

Т.е. указатели содержат адреса расположения в памяти конкретных значений базового типа.

Например:

type


Pointer = ^char;

Это описание определяет тип Pointer, множество значений которого – указатели на данные символьного типа. В качестве базового можно также использовать тип, который еще не описан.

Кроме этого, в языке Pascal есть понятие "пустого указателя", который никуда не указывает и обозначается служебным словом nil. Это значение можно присваивать любому типу.

Чтобы присвоить переменной ссылочного типа некоторое значение, используют операцию "взятие указателя", которая обозначается символом "@". Эта операция допустима для любых переменных. Например:


type

Pointer = ^integer;

var

mas := array[1..10] of integer;



p := pointer;

begin


read(mas[1]);

p := @mas[1]

end.
Теперь доступ к переменной mas[1] может быть осуществлен двумя способами: по идентификатору (прямой доступ, непосредственно mas[1]) и через указатель (косвенный доступ, p^ - эта запись означает "переменная, на которую ссылается p"). Поэтому следующие две записи эквивалентны:

mas[1] := mas[1] + 2; и p^ := p^ + 2;

Конструкция "p^" называется разыменованием.

С помощью динамических переменных можно создавать такие структуры, как линейные списки (например, односвязные; разновидности таких списков – стеки и очереди).

Графически односвязный список можно представить следующим образом:



Здесь pуказатель на список, указывает на конкретный элемент списка (в данном случае  на первый).

Описание такой структуры:

type

pointer = ^data;



data = record

info : string;

next : pointer

end;


var

p : pointer;

Заметьте, что в данном случае для описания типа pointer используется тип data, который еще не определен и описывается ниже. Это единственное допускаемое в языке Паскаль исключение, когда при описании типа используется тип описанный ниже.

Перемещать указатель по списку можно с помощью операции

1Дәріс 29

Тақырыбы: Бір өлшемді және екі өлшемді масситер

Мақсаты: Бір өлшемді және екі өлшемді масситер мен оларды қолдану арқылы



Достарыңызбен бөлісу:
1   ...   10   11   12   13   14   15   16   17   ...   21




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет