Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Глава 3. Процедуры и функции



Функции

Подпрограмма-функция обрабатывает данные, переданные ей из главной программы, и затем возвращает полученный результат (в отличие от процедуры). Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово Function, имя, список формальных параметров (заключенный в скобки) и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре сходный с программой. Общий вид описания функции:

Function < имя> (< параметры> ): < тип результата>;

Const …; ù

… ý блок описания

Var ….; û

begin

< операторы>

end;

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

Пример 1. Найти значение следующего выражения: F(t) – F(c), где F(x)=Ö x +2x2 +3x

Program m;

Uses crt;

Var t, c, r: real;

Function F(x: real): real;

Begin

F: = sqrt(x)+ 2*sqr(x) + 3*x;

End;

Begin

Clrscr;

Write(‘Введите числа’);

Readln (t, c);

r: = F(t) – F(c);

write(‘результат =’, r: 8: 3); {8 символов на все число, 3 – на дробную часть, см п.1.4.2}

end.

Пример 2. Найти наибольшее из четырех чисел, используя подпрограмму нахождения наибольшего из двух чисел.

Program max;

Uses crt;

Var a, b, c, d, m, p, q: real;

Function Bid(x, y: real): real;

Begin

If x> y then bid: =x

else bid: =y;

End;

Begin

Clrscr;

Write(‘Введите числа’);

Readln (a, b, c, d);

p: =bid(a, b);

q: = bid(c, d);

m: =bid(p, q);

write(‘наибольший элемент’, m: 8: 3);

end.

Глава 4. Массивы

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

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

С понятием «массив» приходится встречаться при решении научно-технических, экономических задач обработки большого количества однотипных значений.

Таким образом, массив – это упорядоченная последовательность данных, состоящая из фиксированного числа элементов, имеющих один и тот же тип, и обозначаемая одним именем.

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

Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое. Элементы, образующие массив, упорядочены так, что каждому элементу соответствует совокупность номеров (индексов), определяющих его место в общей последовательности. Индексы представляют собой выражения простого типа. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индекса нужного элемента: < имя массива> [< индекс> ].

Описание массива определяет его имя, размер массива и тип данных. Общий вид описания массива:

Type < имя нового типа данных> =array[< тип индекса> ] of < тип компонентов>;

Далее, в перечне переменных указывается имя массива, и через двоеточие указывается имя нового типа данных. Массив может быть описан и без представления типа в разделе описания типов данных:

Var < имя массива>: array [< тип индекса> ] of < тип компонентов>;

Чаще всего в качестве типа индекса используется интервальный целый тип.

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

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

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

Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, им можно присваивать любые значения, соответствующие их типу и т.д.

Алгоритм решения задач с использованием массивов:

· Описание массива

· Заполнение массива

· Вывод (распечатка) массива

· Выполнение условий задачи

· Вывод результата

Пример 1. Задан одномерный массив В(10), заполненный произвольным образом. Подсчитать количество элементов массива, больших заданного числа k.

Program massiv;

Uses crt;

Var b: array [1..10] of integer;

I, k, s: integer;

Begin

Clrscr; S: =0;

For i: =1 to 10 do

Begin

Write(‘Введите’, i, ‘-й элемент массива ’);

Readln (B[i]);

Write(b[i], ‘ ‘);

End;

Write(‘Введите число k’);

Readln(k);

For i: =1 to 10 do

If b[i]> k then s: =s+1;

Write(‘Количество элементов’, s);

End.

Пример 2. Определить самую высокую температуру и самый теплый день в мае.

Program massiv;

Uses crt;

Var t: array [1..31] of integer;

I, max, n: integer;

Begin

Clrscr;

For i: =1 to 31 do

Begin

t[i]: =random(20);

Write(b[i], ‘ ‘);

End;

Max: =t[1]; n: =1;

For i: =2 to 31 do

Begin

If t[i] > max then max: =t[i]; n: =i;

End;

Write(‘максимальная температура’, max, ‘в’, n, ‘день’);

End.

Глава 4. Массивы

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

Двумерный массив – структура данных, хранящая прямоугольную матрицу. В матрице каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен. В Паскале двумерный массив представляется массивом, элементами которого являются одномерные массивы. Два следующих описания двумерных массивов тождественны:

Var a: array [1..10] of array [1.. 20] of real;

Var a: array [1..10, 1..20] of real;

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

Например, For i: = 1 to 10 do

For j: = 1 to 20 do

A[i, j]: = 0;

 

При организации вложенных (сложных) циклов необходимо учитывать:

· Все правила, присущие простому циклу, должны соблюдаться

· Имена параметров для циклов, вложенных один в другой, должны быть различными

· Внутренний цикл должен полностью входить в тело внешнего цикла. Пересечение циклов недопустимо

 

Пример 1. Сформировать таблицу Пифагора (таблица умножения) и вывести ее на экран.

Program Pifagor;

Uses crt;

Var p: array[1..9, 1..9] of integer; i, j: integer;

Begin

Clrscr;

for i: =1 to 9 do

for j: = 1 to 9 do

p[i, j]: = i*j;

for i: =1 to 9 do

begin

for j: =1 to 9 do

write(p[i, j], ‘ ‘);

writeln

end;

end.

Пример 2. Задан двумерный массив В(10, 10), заполненный случайными числами из

[-10, 10]. Найти и вывести на экран те элементы массива, которые больше заданного числа k.

Program massiv;

Uses crt;

Var b: array[1..10, 1..10] of integer; i, j, k: integer;

Begin

Clrscr;

for i: =1 to 10 do

begin

for j: = 1 to 10 do

begin

b [i, j]: = random(20)-10;

write(b[i, j], ‘ ‘);

end;

writeln;

end;

write(‘Введите число k’);

readln (k);

For i: =1 to 10 do

For j: =1 to 10 do

If b[i, j] > k then write (b[i, j]);

End.

Глава 5. Строковые величины

Символьные величины

Литерный (символьный) тип char определяется множеством значений кодовой таблицы ПК. Каждому символу задается целое число от 0 до 255. В программе значения переменных и констант типа char должны быть заключены в апострофы.

Пример.

Program lit;

Var c, symbol: char;

Begin

C: = ‘A’;

Symbol: =’д’;

Writeln(c);

Write(symbol);

End.

Результат выполнения программы:

А

д

 

Над данными символьного типа определены операции отношения: =, < >, >, <, < =, > =, вырабатывающие результат логического типа, и следующие стандартные функции:

Chr(x) – преобразует выражение х в символ и возвращает значение символа

Ord(ch) – преобразует символ ch в его код и возвращает значение кода

Pred(ch) – возвращает предыдущий символ

Succ(ch) – возвращает следующий символ

Пример.

Ord(‘: ’) =58

Ord(‘A’)=65

Chr(128)=Б

Pred(‘Б’)=А

Succ(‘Г’)=Д

Глава 5. Строковые величины

Строковые величины

Строка (строковый тип данных) – это последовательность символовкодовой таблицы ПК. Количество символов в строке (длина строки) может лежать в диапазоне от 0 до 255. Для определения данных строкового типа используется идентификатор string, за которым следует значение максимальной длины строки данного типа (заключается в квадратные скобки).

Строковые данные могут использоваться в качестве констант. Строковая константа – последовательность символов, заключенная в апострофы. Например, ‘237’, ‘это строковая константа’.

Переменную строкового типа можно определить в разделе описания переменных:

Var < имя>: string[< максимальная длина строки> ].

Например, var Name: string[20]. В описании строки можно не указывать длину, в этом случае она равна максимальной величине – 255. Элементы строки определяются именем строки с индексом, заключенным в квадратные скобки. Например, N[5]. Первый символ строки имеет номер 1 и т.д. Можно сказать, что строка представляет собой одномерный массив, элементами которого являются символы. Тип string и тип char совместимы, они могут употребляться в одних и тех же выражениях.

Выражения, в которых операндами служат строковые данные, называются строковыми. Они могут состоять из строковых констант, переменных, знаков операций. Над этими данными допустимы операция сцепления (конкатенация) и операции отношения.

Операция сцепления (+) применяется для соединения нескольких строк в одну строку. Сцеплять можно и константы, и переменные. Длина результирующей строки не должна превышать 255 символов.

Операции отношения (=, < >, >, <, < =, > =) проводят сравнение двух строк и имеют приоритет более низкий, чем операция конкатенации. Сравнение строк производится слева направо до первого несовпадающего символа. Строка считается больше, если в ней первый несовпадающий символ имеет больший номер в таблице кодов.

Например, ‘MS-DOS’< ’MS-Dos’.

Если строки имеют различную длину, но в общей части символы совпадают, то более короткая строка меньше.

Например, ‘Компьютер’< ’Компьютер ’.

Строки равны, если они полностью совпадают.

Например, ‘Маска’ = ’Маска’.

Для обработки строковых данных можно использовать специальные процедуры и функции.

Процедура Delete(St, poz, n) – удаление n символов строки St, начиная с позиции Poz.

Пример

Значение St Выражение Результат
‘абвгде’ Delete(St, 4, 2); ‘абве’
‘река Волга’ Delete(St, 1, 5); ‘Волга’

Процедура Insert (S1, S2, Poz) – вставка строки S1 в строку S2, начиная с позиции Poz.

Пример

Значение S1 Значение S2 Оператор Результат
‘ ЕС ’ ‘ЭВМ1841’ Insert (S1, S2, 4); ‘ЭВМ ЕС 1841’
‘ N’ ‘ Рис. 2’ Insert (S1, S2, 6); ‘ Рис. N2’

Процедура Str(N, St) – преобразование числового значения N в строковый и помещение результата в строку St.

Пример

Значение N Выражение Результат
Str (N: 6, St); ‘ 1500’

Процедура Val(St, N, Code) – преобразует значение St в величину целочисленного или вещественного типа и помещает результат в N. Code – целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Code равно 0, если же обнаружена ошибка, то Code будет содержать номер позиции первого ошибочного символа, а значение N не определено.

Пример

Значение St Выражение Результат
‘1500’ Val(St, N, Code); Code=0
’14.2A+02 Val(St, N, Code); Code=5

Функция Copy(S, Poz, N) – выделяет из строки S подстроку длиной N символов, начиная с позиции Poz.

Пример

Значение S Выражение Результат
‘Мама мыла раму’ Copy(S, 6, 4); ‘мыла’

Функция Concat(S1, S2, …, Sn) – выполняет сцепление строк S1, S2, …, Sn в одну строку.

Пример

Выражение Результат
Concat(‘Мама ’, ’мыла ’, ’раму’) ‘Мама мыла раму’

Функция Length(S) – определяет текущую длину строки S.

Пример

Значение S Выражение Результат
‘1500 символов’ Length(S)

Функция Pos(S1, S2) – определяет первое появление в строке S2 подстроки S1.

Пример

Значение S2 Выражение Результат
‘abcdef’ Pos(‘cd’, S2)
‘abcdef’ Pos(‘k’, S2)

Функция UpCase (ch) – преобразует строчную букву в прописную.Обрабатывает буквы только латинского алфавита.

Пример

Значение Ch Выражение Результат
‘d’ UpCase (ch) ‘D’

 

Пример. Из данной символьной строки выбрать все цифры и сформировать другую строку из этих цифр, сохранив их последовательность.

Program Stroki;

Var S1, S2: string;

Begin

Write(‘Введите строку’);

Readln(S1);

S2: = ‘ ‘;

For i: =1 to length(S1) do

If (S1[i]> =’0’) and (S1[i]< =’9’)

Then S2: =S2+S1[i];

Writeln(‘Результат’, S2)

End.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-13; Просмотров: 628; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.05 с.)
Главная | Случайная страница | Обратная связь