АЛМАТИНСКИЙ ИНСТИТУТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра инженерной кибернетики

 

 

 

 

 

                                                                                  УТВЕРЖДАЮ

                                                                                  Проректор по учебно-методической работе

                                                                                  ____________________Э.А. Сериков

                                                                                  «___»__________2005 г.

 

 

 

 

 

 

 

 

ИНФОРМАТИКА. Язык Turbo Pascal

Часть 4

Методические указания к выполнению лабораторных работ

(для студентов всех специальностей)

 

 

 

 

 

СОГЛАСОВАНО                                                                Рассмотрено и одобрено на

Начальник УМО                                                                  заседание кафедры  ИК

____________О.З.Рутгайзер                                                          Протокол № 4 от  «29»декабря 2004 г.

«___»______2005 г.                                                             Зав. кафедрой __________Б.Д.Хисаров

 

 

 

 

Редактор                                                                               Составители:

________________                                                              ____________Г.А.Мастекбаева

«___»______2005 г.                                                             ____________Н.В.Сябина

 

 

 

 

 

 

 

 

 

 

 

 

 

Алматы 2005


      СОСТАВИТЕЛИ: Г.А.Мастекбаева, Н.В.Сябина. Информатика. Язык Turbo

     Pascal. Часть 4. Методические указания к выполнению лабораторных работ

     (для студентов всех специальностей). - Алматы: АИЭС, 2005.- 32 с.

 

        

 

Методические указания по дисциплине «Информатика» состоят из 4 частей: части 1 и 2 содержат методические указания по работе с операционной системой Windows, офисными программами MS Word, MS Excel, MS Access, графическим редактором CorelDraw и Интернетом. Части 3 и 4 посвящены основам программирования на языке Turbo Pascal.

Методические указания (часть 4) являются логическим продолжением части 3 и предназначены для применения полученных навыков программирования к решению задач с использованием уже известных алгоритмических структур. Методические указания содержат три лабораторных работы: «Обработка массивов», «Обработка символьной информации» и «Использование подпрограмм и модулей».

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

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

         Ил. 7, табл. 3, библиогр. – 5 назв.

 

 

 

 

 

 

 

         Рецензент: канд. техн. наук, доц. Л.К.Ибраева.

 

 

 

         Печатается по плану издания Алматинского института энергетики

и связи на 2004 г.

 

 

 

 

 

©       Алматинский институт энергетики и связи, 2005 г.


1 Лабораторная работа № 4. Обработка массивов

 

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

 

1.1 Массивы и их обработка с помощью циклов

Массив – это структурированный тип данных, состоящий из фиксированного числа элементов одного типа.

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

Одномерный массив иначе называется вектором. Элемент одномерного массива имеет один индекс, указывающий на его порядковый номер.

Двумерный массив иначе называется матрицей. Элемент двумерного массива имеет два индекса: первый индекс соответствует номеру строки, второй – номеру столбца, в которых находится элемент.

В таблице 1.1 приводятся характеристики вектора Х(4) и матрицы А(3,3).

Таблица 1.1 - Примеры одномерного и двумерного массивов

Имя

Размерность

Номера элементов

Значения элементов

Х

4 (в массиве 4 элемента)

1, х2, х 3, х 4)

(-3.8, 7.6, 2, 4.3),

т.е. х1 = -3.8, х4 = 4.3

А

А(3,3)

(в массиве 9 элементов: 3 строки, 3 столбца)

 т.е. а23 = 0; а32 = 4.2

Как и любой другой объект программы, массив должен быть объявлен. Существует два способа описания массива:

- явный - в разделе Type описания типов данных (между Const и Var) задается размерность массива и тип его элементов, затем в разделе Var сформированному типу массива присваивается имя. Например,

Type T = array [1..4] of real;

Var A: T;

{Объявлен массив А, состоящий из}

{четырех вещественных элементов}

 

Type Z = array[1..3,1..4] of real;

Var В:Z;

{Объявлен вещественный массив B,}

{состоящий из трех строк и четырех столбцов}

- неявный - минуя раздел Type. Например,

Var A: array [1..4] of real;

{Объявлен массив A(4)}

 

Var B: array [1..3, 1..4] of real;

{Объявлен массив B(3,4)}

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

For i:=1 to 10 do

Read (a[i]);

{ввод вектора А(10) в строку,}

{значения вводятся через пробел}

For i:=1 to 10 do

Readln (a[i]);

{ввод вектора А(10) в столбец, ввод каждого}

{элемента подтверждается клавишей Enter}

For i:=1 to 10 do

Write (a[i]);

{вывод вектора А(10) в одну строку}

 

For i:=1 to 10 do

Writeln (a[i]);

{вывод вектора А(10) в один столбец}

Работая с матрицей, также надо организовать перебор всех ее элементов, причем необходимо открыть два цикла для изменения номера строки (i) и номера столбца (j), т.е. в одном цикле организовать другой.  Таким образом, ввод и вывод двумерных массивов возможен только поэлементно с помощью организации вложенного цикла:

{поэлементный ввод массива А(5,5)}

{поэлементный вывод массива А(5,5)}

For i:=1 to 5 do

For j:=1 to 5 do

Read (a[i,j]);

For i:=1 to 5 do

For j:=1 to 5 do

Write (a[i,j]);

При таком способе организации вывода двумерный массив будет выведен на экране в одну строку. Если же в цикле использовать оператор Writeln (а[i,j]), то массив будет выведен в один столбец.

Для того чтобы получить на экране матрицу в ее общепринятом виде, используется следующая организация вывода двумерного массива:

For i:=1 to 4 do

       Begin         

For j:=1 to 5 do

Write (а[i,j]);

                          Writeln

           End;

Пустой оператор Writeln в данном случае используется для перевода курсора на следующую строку.

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

Как правило, характерные приемы программирования применяют к определенным элементам массивов, а именно:

- к элементам между заданными номерами строк и столбцов;

- при выполнении действий с элементами строк и столбцов;

- к элементам главной диагонали или параллельных ей;

- элементам побочной диагонали; элементам, расположенным выше и ниже главной диагонали.

Для того чтобы алгоритм был составлен правильно, необходимо хорошо представлять взаимосвязь индексов элементов матрицы (таблица 1.2).

Таблица 1.2 - Взаимосвязь индексов элементов матрицы

Расположение элементов в массиве

Взаимосвязь индексов

строк (i) и столбцов (j)

Примеры организации циклов

для перебора элементов

главная

диагональ

i = j

S:=0;

For i:=1 to n do   S:=S+a[i i];

побочная диагональ

(n - порядок матрицы)

i + j = n + 1

P:=1;

For i:=1 to n do   P:=P*a[i, n+1-i];

выше

главной диагонали

i < j

k:=0;

For i:=1 to n do

For j:=1 to n do

If  i<j {или i>j} then  k:=k+1;

ниже

главной диагонали

i > j

Если обработка массива идет построчно, то внешний цикл организуют по i, а внутренний по j, и, наоборот, при переборе элементов матрицы по столбцам внешний цикл организуют по j, а внутренний по i. Кроме того, если работа производится с элементами строк или столбцов, то между операторами открытия вложенных циклов или операторами их закрытия обычно стоит какой-либо оператор, осуществляющий действие со строкой или столбцом.

 

1.2 Примеры алгоритмов и программ обработки массивов

1.2.1 Найти наибольшее значение вектора Х(5) и его порядковый номер.

На рисунке 1.1 представлены блок-схема алгоритма, программа и контрольная развертка. Алгоритм нахождения наибольшего элемента в векторе, рассматриваемый в этом примере, состоит в следующем:

- задание некоторой промежуточной переменной значения равного значению одного из элементов массива;

- организация цикла, в котором должен присутствовать условный оператор, сравнивающий значение очередного элемента массива и введенной переменной;

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

- последнее значение переменной при выходе из цикла и будет наибольшим элементом массива.

 

 

program primer4_1;

type T = array [1..5] of real;

var X:T; max:real;

i, n: integer;

begin

  for i :=1 to 5 do

  begin

write (введи x (’, i:2,’)’);

        readln (x[i])

  end;

  max := x[1];  n := 1;

  for i :=2 to 5 do

         if x[i]>max then

            begin

                      max := x[i]; n := i

            end;

  writeln(’Наибольший элемент-’, max);

  writeln (’его номер-’, n)

end.

Контрольная развертка

Пусть введен массив Х(3, 7, -4, 8, 2). Согласно алгоритму max:=3; n:=1.

    i=2     x(2) > max             7 > 3                  да           max = x(2) = 7; n = i = 2

    i=3     x(3) > max            -4 > 7                  нет         max = x(2) = 7;  n = i = 2

    i=4     x(4) > max             8 > 7                  да           max = x(4) = 8; n = i = 4

    i=5     x(5) > max             2 > 8                  нет         max = x(4) = 8;  n = i = 4

По окончании цикла вывод полученных значений max = 8 и n = 4.

Рисунок 1.1 - Нахождение наибольшего элемента в одномерном массиве

 

1.2.2 Найти среднее арифметическое элементов вектора А(10). Блок-схема и программа решения задачи представлены на рисунке 1.2.

 

 

 

 
 


Program primer4_2;

type T = array [1..5] of real;

var A:T; S, SA:real;

i, K: integer;

begin

for i := 1 to 10 do      

read (a[i]);

S:=0; K:=0;

for i := 1 to 10 do

if  a[i] > 0  then

         begin

           S:=S + a[i]; K:=K+1

     end;

SA=S/K;

writeln (’SA=’, SA:10:2)

end.

Рисунок 1.2 – Пример обработки одномерного массива

 

1.2.3       Найти количество положительных элементов матрицы А(4,5) среди элементов, расположенных выше главной диагонали.

Блок-схема и программа решения задачи представлены на рисунке 1.3.

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

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

program primer4_3;

type T = array [1..4,1..5]of real;

var A:T;  i, j, K: integer;

begin

         for i:=1 to 4 do

         for j:=1 to 5 do    

read (a[i,j]);

K:=0;

for i:=1 to 4 do

for j:=1 to 5 do

         if (a[i,j]>0) and (i < j)

                             then K:=K+1;

writeln (’K=’, K)

end.

 

Рисунок 1.3 – Пример обработки двумерного массива

 

1.2.4        Найти количество положительных элементов каждой строки матрицы А(4,5).

Блок-схема и программа решения задачи представлены на рисунке 1.4. В рассматриваемом примере обработка массива идет построчно, поэтому внешний цикл организуют по строкам (по индексу i), а внутренний по столбцам (по индексу j). Кроме того, между операторами открытия вложенных циклов стоит оператор, с помощью которого обнуляется начальное количество положительных элементов в каждой строке матрицы. Так как открытый по строке цикл (по параметру i) содержит внутри себя несколько операторов, то для выделения их в единую последовательность требуется применить операторные скобки Begin-End.

program primer4_4;

type T = array [1..4,1..5]of real;

var A:T;  i, j, K: integer;

begin

         for i:=1 to 4 do

         for j:=1 to 5 do    

read (a[i,j]);

for i:=1 to 4 do

      begin

             K:=0;

             for j:=1 to 5 do

                            if a[i,j] > 0 then

                                    K:=K+1;

             writeln (’в’,i,’строке K=’,K)

     end

end.

 

Рисунок 1.4 - Пример обработки двумерного массива

 

1.3 Варианты заданий

1.3.1 Характерные приемы программирования обработки одномерных массивов

1.      Дано вещественное число А и массив Х(10). Определить номер элемента, равного А. Если такого члена нет, то ответом должен быть 0.

2.       Вывести на печать первый отрицательный элемент массива Х(10)  и его порядковый номер.

3.       Переписать положительные элементы массива Y(10) подряд в массив Z.

4.       Разделить последовательность А(10) на два массива, записать в один из них элементы с четными номерами, а в другой - с нечетными.

5.       Вычислить сумму положительных элементов массива Z(10).

6.       Для целочисленного массива Х(9) найти произведение его элементов с четными индексами и выяснить, является ли оно нечетным числом.

7.       Вычислить среднее арифметическое положительных элементов массива Y(10), имеющих нечетные индексы. Если таких элементов нет, то вывести на печать признак “0”.

8.       Найти количество положительных чисел вещественного вектора Y(10).

9.       Вычислить Z(j)=A(j)+B(j), где

А(j)=j, если j- нечетные и      А(j)=j/2, если j- четные;

В(j)=j², если j- нечетные        и       В(j)=j³, если j - четные.

10.  Для целочисленного массива Х(10) найти сумму его элементов и выяснить, является ли результат четным числом.

11.  Записать “1” вместо положительных элементов массива Х(12) и “0” -  вместо отрицательных.

12.  Дан массив Х(10). Все числа меньше 2 заменить “0” и вывести на печать их количество и порядковые номера.

13.  Дан целочисленный массив А(10). Получить последовательность В(10), которая отличается от исходной тем, что все нечетные элементы удвоены.

14.  Найти произведение положительных элементов вектора А(15).

15.  Вывести на экран отрицательные элементы массива Х(10).

16.  Даны массивы А(10) и В(10). Получить вектор Z(10), где Z(j)=A(j)-B(j).

17.  Вычислить произведение отрицательных элементов массива Z(10).

18.  Записать в массив А(15) первые 5 элементов “0”, затем 5 элементов “2” и последние 5 - “3”.

19.  Переписать массив А(10) в массив В(10) так, чтобы последний элемент стал первым, предпоследний - вторым и т.д.

20.  Удвоить все элементы целочисленного вектора А(10), являющиеся четными числами, и утроить все оставшиеся.

21.  В массиве А(15) определить количество элементов, равных 5.

22.  Найти количество нулевых элементов в массиве В(12).

23.  Даны два вектора А(10) и В(10). Вычислить суммы и разности соответствующих элементов массивов. Результаты поместить в два вектора X(10) и Y(10).

24.  В массиве C(13) определить количество элементов, равных 13.

25.  В массиве X(11) определить количество элементов, меньших 5.

26.  Вычислить сумму отрицательных элементов массива Z(10).

27.  Вычислить произведение отрицательных элементов массива А(10).

28.  Вычислить среднее арифметическое отрицательных элементов массива Y(10).

29.  Найти количество неотрицательных элементов вектора В(12).

30.  Даны два вектора А(10) и В(10). Вычислить произведение соответствующих элементов массивов. Результат поместить в вектор X(10).

 

1.3.2 Нахождение наибольшего (наименьшего) элемента в векторе

1. Найти наибольший отрицательный элемент среди элементов массива А(10), имеющих четные номера.

2.          Найти наибольшее значение функции Z=Ax²+Bx+C в интервале изменения аргумента Х от 1 до 7 с шагом  0,5. Значения функции записать в массив Н.

3.         Даны два массива Х(10) и Y(10). Найти среднее арифметическое i-ых элементов (i = 1,10) и записать их в массив Z.  Среди элементов массива Z найти  наибольший.

4.          Найти наименьшее значение функции Y=sin2+5x)´cos(3x2-x) в интервале изменения аргумента x от 0 до 8 с шагом 0.4.  Значение функции записать в массив А.

5.          Найти наименьший положительный элемент среди элементов массива Х(10), имеющих нечетные номера.

6.          Найти наибольшее значение Х(I)+Y(I) для массивов Х, Y.

7.          Среди элементов массива А(10) найти наибольший.

8.          Найти наименьший из положительных элементов массива А(10).

9.          Найти наименьший положительный элемент среди элементов с четными  номерами в массиве А(10).

10.    Даны массивы A(5) и B(6). Найти суммы элементов в каждом массиве и запомнить их  в массиве Z. Среди сумм определить  наибольшую.

11.    Даны массивы А(4) и С(6). Найти суммы положительных элементов каждого массива, запомнить их в массиве Х и найти среди них наименьшую.

12.    Дан массив Х(20) и число А. Среди элементов массива Х, расположенных до элемента А, найти наибольший, а после него - наименьший. Если элемента А в массиве нет, выдать об этом сообщение.

13.    Даны два одномерных массива А(10) и В(10). Получить массив С(10), элемент которого равен произведению соответствующих элементов массивов А и В. Среди элементов массива С найти наименьший.

14.    В векторе Х(10) заменить нулем все отрицательные элементы, предшествующие его наибольшему элементу.

15.    Среди четных номеров элементов массива В(10) найти наибольший. Элементы с нечетным номером обнулить.

16.    В одномерном массиве С(20) просуммировать  первый элемент с последним, второй с предпоследним и т.д. Результат записать в массив В(10) и в нем найти наибольший элемент.

17.    Все элементы массива А(10), являющиеся четным числом, удвоить, а нечетным - возвести в квадрат. В полученном массиве найти наименьший элемент.

18.    Из массива А(10) четные положительные числа записать в массив Х подряд. В новом массиве найти наименьший элемент.

19.    Даны два одномерных массива. Найти суммы их элементов с четными номерами и среди сумм определить наибольшую.

20.    Найти наименьший элемент среди тех элементов массива В(30), которые имеют номера кратные 3.

21.    Среди элементов массива В(10) найти наименьший.

22.    В массиве С(12) все элементы, стоящие до наибольшего, обнулить.

23.    В массиве С(9) все элементы, стоящие после наименьшего, обнулить.

24.    Найти наибольший среди элементов массива А(10), остальные обнулить.

25.    Среди элементов массива В(10) найти наименьший положительный.

26.    Наибольший элемент массива Х(12) удвоить, остальным элементам присвоить значение 1.

27.    Поменять местами наибольший и наименьший элементы вектора А(10).

28.    Все элементы массива А(10), являющиеся положительным числом, удвоить, а отрицательным - возвести в квадрат. В полученном массиве найти наименьший элемент.

29.    Поменять местами наибольший отрицательный и наименьший положительный элементы вектора А(10).

30.    Дан вектор Х(10). Найти количество элементов, стоящих после максимального по значению элемента.

 

1.3.3 Программирование алгоритмов работы с частями матрицы

1. Дана матрица А(5,5). Все элементы ниже главной диагонали обнулить, выше - заменить на“3”, а элементы главной диагонали заменить на “7”.

2.         Найти произведение элементов главной диагонали  матрицы Х(5,5).

3.         Найти количество положительных элементов, расположенных ниже главной диагонали матрицы Y(5,5).

4.          Переписать элементы главной диагонали матрицы В(5,5) в вектор X(5).

5.          Вычислить произведение отрицательных элементов матрицы А(5,5), расположенных ниже главной диагонали.

6.          Найти количество нулевых элементов матрицы В(4,4), расположенных выше главной диагонали.

7.          Дана действительная квадратная матрица D(4,4). Заменить нулями все ее элементы, расположенные на главной диагонали и выше  нее.

8.          Вычислить среднее арифметическое элементов матрицы А(5,5), расположенных выше главной диагонали.

9.          Вычислить среднее арифметическое элементов матрицы А(5,5), расположенных ниже главной диагонали.

10.    Найти сумму элементов главной диагонали  матрицы Х(5,5).

11.    Найти произведение положительных элементов главной диагонали  матрицы Х(5,5).

12.    Найти произведение элементов побочной диагонали  матрицы Х(6,6).

13.    Найти сумму элементов побочной диагонали  матрицы Х(5,5).

14.    Переписать элементы побочной диагонали матрицы В(5,5) в вектор X(5).

15.    Дана матрица А(5,5). Сформировать вектор из элементов, расположенных выше главной диагонали.

16.    Дана матрица А(5,5). Сформировать вектор из элементов, расположенных ниже главной диагонали.

17.    Дана матрица А(5,5). Найти максимальный по значению элемент среди элементов главной диагонали.

18.    Вычислить сумму отрицательных элементов матрицы А(5,5), расположенных ниже главной диагонали.

19.    Вычислить произведение положительных элементов матрицы Х(6,6), расположенных ниже главной диагонали.

20.    Дана матрица В(5,5). Найти количество элементов, больших 5, среди элементов главной диагонали.

21.    Дана матрица С(6,6). Найти количество элементов, меньших 5, среди элементов побочной диагонали.

22.    Вычислить сумму положительных элементов матрицы Х(6,6), расположенных ниже главной диагонали.

23.    Вычислить сумму положительных элементов матрицы А(5,5), расположенных выше главной диагонали.

24.    Матрица А(5,5) делится на две части главной диагональю. Найти среднее геометрическое сумм элементов каждой части.

25.    Матрица А(5,5) делится на две части побочной диагональю. Найти среднее арифметическое сумм элементов каждой части.

26.    Вычислить сумму отрицательных элементов матрицы Х(6,6), расположенных выше главной диагонали.

27.    Вычислить сумму отрицательных элементов матрицы А(5,5), расположенных выше главной диагонали.

28.    Найти количество неотрицательных  элементов главной диагонали  матрицы Х(5,5).

29.    Найти количество неотрицательных  элементов побочной диагонали  матрицы А(6,6).

30.    Найти количество нулевых элементов матрицы В(4,4), расположенных ниже главной диагонали.

 

1.3.4 Программирование алгоритмов работы со строками и столбцами матрицы

1.         Найти сумму элементов каждой строки матрицы А(5,5). Результат записать в вектор S(5).

2.         Найти сумму элементов каждого столбца матрицы А(5,5). Результат записать в вектор S(5).

3.         Найти количество отрицательных элементов каждого столбца матрицы Х(5,6). Результат записать в вектор К(6).

4.         Найти количество положительных элементов каждого столбца матрицы В(5,6). Результат записать в вектор К(6).

5.         Найти количество отрицательных элементов каждой строки матрицы Х(6,5). Результат записать в вектор К(6).

6.         Дана матрица А(5,6). Найти сумму положительных элементов каждого четного столбца и произведение отрицательных элементов каждого нечетного столбца.

7.         Найти среднее арифметическое элементов каждого столбца матрицы Х(3,4). Результат записать в вектор SA(4).

8.         Найти среднее арифметическое элементов каждой строки матрицы Х(4,4). Результат записать в вектор SA(4).

9.         Найти произведение элементов каждой строки матрицы А(5,5). Результат записать в вектор Р(5).

10.    Найти произведение элементов каждого столбца матрицы А(5,5). Результат записать в вектор Р(5).

11.    Дана матрица А(5,5). Найти такое К (1 £ К £ 5), чтобы элементы К-ой строки совпадали с элементами К-ого столбца.

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

13.    Дана матрица С(7,7). В строках с отрицательным элементом на главной диагонали найти сумму всех элементов. Если на главной диагонали отрицательных элементов нет, то выдать об этом сообщение.

14.    Найти произведение положительных элементов каждой строки матрицы А(6,5). Результат записать в вектор Р(6).

15.    Найти произведение положительных элементов каждого столбца матрицы А(5,5). Результат записать в вектор Р(5).

16.    Дана матрица С(6,6). В строках с положительным элементом на побочной диагонали найти сумму всех элементов. Если на побочной диагонали положительных элементов нет, то выдать об этом сообщение.

17.    Дана матрица А(5,5). В столбцах с отрицательным элементом на главной диагонали найти сумму всех элементов. Если на главной диагонали отрицательных элементов нет, то выдать об этом сообщение.

18.    Дана целочисленная матрица М(5,4). Найти номера строк, все элементы которых равны. Если таких строк нет, то выдать об этом сообщение.

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

20.    Найти среднее арифметическое положительных элементов каждого столбца матрицы Х(3,5). Результат записать в вектор SA(5).

21.    Найти среднее арифметическое положительных элементов каждой строки матрицы Х(4,5). Результат записать в вектор SA(4).

22.    Найти среднее арифметическое отрицательных элементов каждого столбца матрицы Х(3,4). Результат записать в вектор SA(4).

23.    Найти среднее арифметическое отрицательных элементов каждой строки матрицы Х(4,4). Результат записать в вектор SA(4).

24.    Найти количество неотрицательных элементов каждой строки матрицы Х(6,5). Результат записать в вектор К(6).

25.    Найти среднее арифметическое неотрицательных элементов каждой строки матрицы А(5,5). Результат записать в вектор SA(5).

26.    Дана матрица В(5,4). Упорядочить элементы каждой строки матрицы по возрастанию.

27.    Дана целочисленная матрица М(5,4). Найти номера столбцов, все элементы которых равны. Если таких столбцов нет, то выдать об этом сообщение.

28.    Дана матрица В(5,5). Упорядочить элементы каждого столбца матрицы по возрастанию.

29.    Найти количество нулевых элементов каждой строки матрицы Х(6,5). Результат записать в вектор К(6).

30.    Найти количество нулевых элементов каждого столбца матрицы Х(5,6). Результат записать в вектор К(6).

 

1.4 Контрольные вопросы

1.4.1 Что такое «массив»?

1.4.2 Чем характеризуются элементы массива?

1.4.3 Чем отличаются явный и неявный способы объявления массивов?

1.4.4 Какие способы ввода массивов существуют в Паскале?

1.4.5 Чем отличается вывод элементов массива в строку и в столбец?

1.4.6 Какие действия необходимо выполнить для подсчета суммы элементов одномерного массива?

1.4.7 Что изменится в алгоритме при подсчете количества отрицательных элементов в массиве?

1.4.8 Как выполнить поиск наибольшего (наименьшего) элемента в массиве?

1.4.9 Каковы особенности работы с квадратной матрицей?

1.4.10 Как организовать обработку матрицы по столбцам (по строкам)?

 

 

2 Лабораторная работа №5. Обработка символьной информации

 

Цель работы – приобретение навыков программирования задач с использованием символьной информации и применения встроенных процедур и функций для обработки строк.

2.1 Строки и особенности их обработки

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

Строка-константа служит для использования в программе некоторой, заранее известной последовательности литер. Формат объявления строки-константы имеет вид:

Const  имя константы = 'последовательность символов';

Например,  Const  name = 'Эльза'; probel = ' ';

Если значение строки заранее не известно, а определяется в процессе выполнения программы (например, строка символов вводится), тогда используется строковая переменная. Для объявления переменных строкового типа используется стандартный идентификатор String, за которым следует заключенное в квадратные скобки значение длины строки. Если это значение не указывается, то по умолчанию длина строки равна 255 байт. Формат объявления строки-переменной имеет вид:

Var имя переменной: string [длина строки];

Например,  Var slovo:string[10]; stroka:string;

Таким образом, строковый тип задается регулярным типом (как в случае с массивами), поэтому все свойства массивов переносятся и на строки (длина строки задается статически; доступ к отдельному символу строки осуществляется по его индексу).

К особенностям строк следует отнести следующие:

-   строковые константы могут быть присвоены в качестве значений строковым переменным в том случае, если их длины равны;

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

-   ввод значений строковых переменных производится с помощью стандарт­ной процедуры Read (Readln);

-   для задания значения строке символов в программе используется оператор присваивания, например sl := 'Информатика';

В Паскале для выполнения наиболее часто применяемых действий со стро­ками предназначен набор встроенных функций и процедур (таблица A1).

 

1.2 Пример алгоритма и программы обработки символьной информации

Составить программу, проверяющую, является ли введенный текст палиндромом (палиндром – текст, который читается слева направо и справа налево одинаково). При составлении программы следует обратить внимание на то, что коды прописных букв русского алфавита в таблице ASCII следующие  - Ord(A)=128,…,Ord(Я)=159, а строчные русские буквы расположены в таблице кодов не подряд - Ord(а)=160,…, Ord(п)=175, Ord(р) = 224,…, Ord(я)=239.

На рисунке 2.1 представлена блок-схема алгоритма решения задачи, ниже приведена соответствующая ей программа.

Рисунок 2.1 – Пример обработки символьной информации

 

program p_5;

var st, a, b: string; i, n, k: integer;

begin

       writeln ('Ведите текст на русском языке'); readln (st);

       a:=''; b:='';  n:=length(st);

                       for i:=1 to n do

       if st[i]<>' ' then

              begin        {Замена ПРОПИСНОЙ русской буквы на строчную}

              if (st[i]>='А') and (st[i]<='П')

                        then st[i]:= chr(ord(st[i])+32)

                        else

                                if (st[i]>='Р')and(st[i]<='Я')

                                then st[i]:=chr(ord(st[i])+80);

               a:=a+st[i];

               b:=st[i]+b

               end;

         write (st,' - ');

         if a=b then writeln ('палиндром') else  writeln ('не палиндром')

end.

2.3 Варианты заданий

1. Дана строка символов, состоящая из нескольких предложений. Найти самое длинное предложение.

2. Дана строка символов, состоящая из нескольких предложений. Определить количество предложений.

3.         Дана строка символов. Посчитать количество пробелов в строке и заменить их на запятые.

4.         Дана строка символов. Определить количество слов в строке.

5.         Дана последовательность слов. Вывести на экран дисплея только слова, содержащие не более пяти символов.

6.         Дана строка символов. Определить количество букв "О" в строке.

7.         Дана строка символов. Заменить в этой строке все буквы "А" на "Я".

8.         Дана строка символов. Определить количество слов, состоящих из четырех букв.

9.         Дана строка символов. Заменить пробелы на знак "+".

10.    Дана строка символов. Определить, какой из знаков препинания (тире, запятая, точка, двоеточие) встречается в строке чаще.

11.    Дана строка символов. Сколько раз в ней встречается слог "МИ".

12.    Определить самое длинное слово в строке.

13.    Дана строка символов. Вывести на экран слова, которые заканчиваются на букву "А".

14.    Дана строка символов. Определить количество слов, начинающихся на букву "С".

15.    Дана строка символов. Заменить все запятые на знаки "-".

16.    Определить количество запятых в строке.

17.    Определить количество букв "Л" в строке.

18.    Определить количество слов, заканчивающихся на букву "Ь".

19.    Определить количество слов, содержащих не менее двух букв "А".

20.    Дана строка символов. Заменить все буквы "И" на знак "+".

21.    Определить количество цифр в строке символов.

22.    Дана строка символов. Определить количество слов, у которых первый и последний символ совпадают между собой.

23.    Дана строка символов. Найти самое длинное слово, начинающееся на букву "а", и вывести его в обратном порядке.

24.    Поменять первое слово в строке с последним словом.

25.     Дана строка символов. Определить, сколько раз в ней встречается слог "ЛЯ".

26.    В заданном тексте осуществить замену одного слова на другое.

27.    Напишите программу обращения  слов в строке ("кот" - "ток").

28.    Дана строка символов. Замените все буквы "р" на сочетание "ку".

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

30.    Дана строка символов, состоящая из нескольких предложений. Найти самое короткое предложение.

2.4 Контрольные вопросы

25.4.1 Для какой цели используется строковый тип данных?

2.4.2 Что называется строкой символов? Какова максимальная длина строки?

2.4.3 Чем отличаются строковые константы и строковые переменные?

2.4.4 Как объявляются строковые переменные?

2.4.5 Назовите основные особенности строк.

2.4.6 Какие основные встроенные процедуры и функции предусмотрены для работы со строками?

 

 

3 Лабораторная работа №6. Использование подпрограмм и модулей

 

Цель работы – приобретение навыков программирования при решении задач с использованием подпрограмм и модулей.

3.1 Подпрограмма-функция и подпрограмма-процедура

При программировании часто возникает необходимость повторять одну и ту же последовательность операторов в различных частях программы при разных параметрах, многократно переписывая их. Для реализации таких действий и сокращения объема программы удобно использовать подпрограммы: процедуры и функции. При решении задач с использованием подпрограмм необходимо сначала определить, что будет вычисляться многократно и сколько при одном вычислении будет результатов. Затем выбрать тип используемой подпрограммы в зависимости от количества предполагаемых результатов, т.к. в подпрограмме-функции результат может быть только один, а подпрограмме-процедуре несколько.

Любая подпрограмма содержит:

-        заголовок;

-        описательную часть;

-        исполнительную часть.

Заголовок подпрограмм оформляется по следующим правилам:

- в подпрограмме-функции

{Pascal}

Function имя (список формальных параметров):тип функции;

{пример}

Function Beta ( x, y: integer; a, b: real) : real;

- в подпрограмме-процедуре

{Pascal}

Procedure имя (список формальных параметров);

{пример}

Procedure Alfa (N:integer; A,B:real; var max:real; var k:integer);

 Параметры, которые используются в описании процедуры, называются формальными (глобальными) параметрами. Формальные параметры процедуры делятся на параметры-значения и параметры-переменные. Под параметрами-значениями понимаются параметры, значения которых не меняются в ходе выполнения подпрограммы (входные). Параметры-переменные - выходные величины подпрограммы, значения которых передаются в головную программу. В списке формальных параметров перед перечислением параметров-переменных  необходимо поставить слово Var. В рассмотренном примере вещественная величина max и целая i являются параметрами переменными. Параметры-значения в примере представлены целой величиной N и вещественными A и B. Если в подпрограмме будет использоваться параметр нестандартного типа, например массив, то этот тип должен быть описан явным способом в головной программе.

Формальные параметры подпрограммы-функции могут быть только параметрами-значениями, т.е. входными данными, а выходным параметром является имя подпрограммы, поэтому в заголовке необходимо указать ее тип.

Таким образом, результат процедуры передается через параметры-переменные, а результат подпрограммы-функции через ее имя. В связи с этим имя функции используется в качестве переменной в исполнительной части подпрограммы, которой присваивается результат, а для процедуры это категорически запрещается.

В описательной части подпрограммы следует описать локальные переменные (т.е. те, что используются только внутри подпрограммы), формальные параметры в этой части подпрограммы уже не описываются. Исполнительная часть подпрограммы реализует алгоритм, вынесенный в нее. Для подпрограммы-функции в этой части должен присутствовать оператор присваивания, в левой части которого стоит имя функции.

В отличие от программы подпрограмма заканчивается точкой с запятой.

Обращение к подпрограмме осуществляется из головной программы по следующим правилам:

- к подпрограмме-функции

{Pascal}

Имя переменной := Имя подпрограммы (список фактических параметров);

{пример} 

Z := Beta (5,6, S, D);

- к подпрограмме-процедуре

{Pascal}

Имя подпрограммы (список фактических параметров);

{пример}

Alfa (10, X, Xmax, ix);

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

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

 

3.2 Использование модулей

Кроме процедур и функций, в Паскале используются модули. Библиотечный модуль – это самостоятельно компилируемый файл Turbo Pascal, который может содержать описания констант, переменных, типов, процедур и функций. После того, как модуль создан и откомпилирован, его ресурсы можно использовать в любой программе на Turbo Pascal, просто указав имя этого модуля. Подпрограмму включают в состав модуля в том случае, когда она реализует действие, которое приходится выполнять достаточно часто. Такую подпрограмму можно написать и отладить один раз, а использовать многократно. Файл, содержащий модуль, обязан иметь имя, совпадающее с именем модуля. Доступ из программы к функциям модуля обеспечивает оператор использования Uses, который размещается сразу после заголовка программы и в котором указывается имя модуля (или нескольких модулей).

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

Каждый модуль имеет секции, озаглавленные зарезервированными словами.

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

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

Модуль следует обязательно оттранслировать, при этом появится файл, имя которого совпадает с именем исходного файла, а расширение имеет вид .tpu. Выполнить оттранслированный модуль нельзя.

В состав Turbo Pascal 7.0 входит набор из восьми стандартных модулей (System, Dos, Crt, Printer, Graph, Overlay, Turbo3 (Graph3) и Strings), содержащих множество предопределенных типов, констант, переменных, процедур и функций, которые без ограничений можно использовать в пользовательских программах. Полное описание библиотечных модулей можно найти в файле помощи Help интегрированной инструментальной оболочки Turbo Pascal 7.0.

Модуль System – это основное хранилище Turbo Pascal, в котором содержатся подпрограммы поддержки всех встроенных возможностей языка программирования, таких, как файловый ввод-вывод, обработка строк, целочисленная арифметика, арифметика с плавающей точкой и динамическое распределение памяти. В отличие от других модулей этот модуль не требуется указывать в разделе Uses программы.

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

Подпрограммы модуля Crt позволяют управлять текстовыми режимами экрана, его цветами и окнами, яркостью свечения символов, а также расширенными кодами клавиатуры и звуком.

В модуле Printer объявляется только файловая переменная Lst, имеющая тип Text, которая ассоциируется с системным устройством LPT и позволяет выводить данные на печать.

Модуль Graph содержит множество подпрограмм, предназначенных для управления графическим режимом экрана. Однако для запуска программы, использующей этот модуль, необходимо иметь графический драйвер (файл с расширением .bgi) и в дополнение к нему файлы шрифтов (с расширением .chr).

При разработке крупных программ, когда возникает необходимость разбиения программы на отдельные сегменты (оверлеи), используют специальные средства, которые содержатся в модуле Overlay.

 Модули Turbo3 и Graph3 предназначены для поддержания совместимости с Turbo Pascal 3.0, которая в настоящее время практически не используется.

Модуль Strings содержит функции и процедуры для написания программ, совместимых с Windows-приложениями.

 

3.3 Примеры использования подпрограмм и модулей

3.3.1 Вычислить , где А(n) и В(m)- одномерные массивы.

На рисунке 3.1 представлена блок-схема алгоритма решения задачи с использованием двух подпрограмм-процедур. В приведенной ниже программе решения данной задачи использованы две процедуры - VV и SUM. Первая служит для ввода значений исходных матриц и вызывается в основной программе после ввода значений размерностей массивов A и Bn и m. Входными данными процедуры VV являются величина k, определяющая размерность вводимой матрицы. Выходные параметры, передаваемые в программу, - элементы массива Х. При первом вызове процедуры VV формальные параметры k, Х соответственно заменяется фактическими параметрами n, A. Подобная замена формальных параметров фактическими осуществляется и при втором вызове подпрограммы.

 

 

 

Рисунок 3.1 – Пример использования подпрограммы-процедуры

program primer6_1;

type t = array [1..20] of real;

var A, B:t; n, m: integer; SA, SB, Z:real;

              procedure VV (k: integer;  var x: t);

              var i: integer;

              begin

                     for i:=1 to k do

                     read (x[i])

              end;

                        procedure SUM (k: integer; x: t; var s: real);

                        var i:integer;

                        begin

                               s:=0;

                              for i:=1 to k do

                               s:=s+x[i]

                        end;

begin

       write (‘Введите размеры массивов А и В,n,m’); readln (n,m);

                           VV (n, A); VV (m,B); SUM (n,A,SA); SUM (m,B,SB);

       Z := SA*SB; writeln (’Z=’,z)

end.

 

 

На рисунке 3.2 представлена блок-схема алгоритма решения этой же задачи другим способом – с использованием подпрограммы-функции.

 

Рисунок 3.2  - Пример использования подпрограммы-функции

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

Вызов подпрограммы SUM осуществляется в головной программе после ввода элементов исходных массивов. Входные параметры – массив Х и его размер k, выходной параметр - сумма элементов массива S. Следует отметить, что используемый в процедурах параметр i является локальным, то есть сохраняющим свои значения только внутри процедуры. После выполнения подпрограммы значения локальных параметров забываются. Поскольку процедура SUM имеет только один выходной параметр, то вместо нее можно использовать подпрограмму-функцию.

 

program primer6_2;

type t = array [1..20] of real;

var A, B: t; n, m: integer; SA, SB, Z: real;

         procedure VV (k: integer;  var x: t);

         var i: integer;

         begin

            for i:=1 to k do  read (x[i])

         end;

                   function SUM (k: integer; x: t): real;

                   var i:integer; s:real;

                   begin

                          s:=0; for i:=1 to k do  s:=s+x[i];

                          SUM:=s

                   end;

begin

write (’введите размеры массивов А и В, n, m’); readln (n, m);

         VV(n, A); VV(m, B);SA:=SUM(n, A);SB:=SUM(m, B);

         Z:=SA*SB; writeln (’Z=’,z)

end.

 

 

3.3.2 Создать модуль, содержащий описания гиперболических функций Sinh(x), Cosh(x) и Tanh(x), используя известные математические соотношения

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

{$N+}                                                                 {директива компилятору}

Unit hyp_fun;                                                       {заголовок модуля}

Interface                                                               {интерфейсная секция}

     Function sinh (x: extended): extended;

     Function cosh (x: extended): extended;

     Function tanh (x: extended): extended;

Implementation                                                     {секция реализации}

var t: extended;

         Function sinh (x: extended): extended;

         Begin

                t := exp(x); sinh := 0.5*(t – 1.0/ t);

         End;

                   Function cosh (x: extended): extended;

                             Begin

                         t := exp(x); cosh := 0.5*(t + 1.0/ t);

                            End;

                             Function tanh (x: extended): extended;

                                      Begin

                                   t := exp(x); tanh := (t - 1.0) / (t + 1.0);

                                      End;

End.                                                                     {конец модуля}

 

{$N+}

Program Test_hyperbolic_fun;                              {программа проверки}

Uses hyp_fun;

Begin

       Writeln (‘sinh (0.5) =’, sinh (0.5));

       Writeln (‘cosh (-0.5) =’, cosh (-0.5));

       Writeln (‘tanh (1.5) =’, tanh (1.5));

       Write (‘Нажмите <Enter>:’);

       Readln;

End.

 

3.4 Варианты заданий

3.4.1 Использование подпрограммы-функции

1. Вычислить значение функции , где А(12) и В(10) - заданные одномерные массивы.

2.         Даны массивы С(10), D(15) и вещественное число Х. Вычислить значение функции Z=AX2+B, где , .

3.         Вычислить среднее арифметическое элементов каждого из массивов Х(10), У(15), Z(20).

4.         Определить порядковые номера минимальных элементов массивов Z(10) и X(15).

5.         Вычислить суммы элементов, расположенных на главных диагоналях каждой из матриц А(5,5) и В(7,7).

6.         Найти сумму положительных элементов в каждом из массивов Y(3,6) и Х(5,4).

7.         Вычислить среднее арифметическое элементов, расположенных на главной диагонали, для каждой из матриц А(4,4) и С(5,5).

8.         Вычислить значение функции , где Xmax и Ymax - максимальные элементы массивов Х(10) и Y(15).

9.         Найти количество элементов больших 7 в матрицах А(3,5) и В(4,4).

10.    Вычислить среднее арифметическое элементов, расположенных выше главной диагонали, для матриц А(5,5) и В(7,7).

11.    Вычислить значение функции, где А(10) и В(12) - заданные одномерные массивы.

12.    Вычислить значение функции Y=ax2+bx+c, где х - заданное число, , , , T(15) и Q(15) - заданные массивы.

13.    Найти сумму наименьших элементов матриц C(9) и  D(10).

14.    Определить среднее геометрическое минимальных элементов массивов Х(10) и Y(15).

15.    Найти произведение наименьших элементов матриц А(10) и В(12).

16.    Вычислить произведение элементов, расположенных на главных диагоналях, для  каждой из матриц А(5,5) и В(7,7).

17.    Определить количество элементов, попадающих в интервал [-2, 6], для каждого из массивов А(10) и В(15).

18.    Вычислить среднее арифметическое элементов, расположенных ниже главной диагонали, для каждой из матриц А(4,4) и С(5,5).

19.    Найти количество элементов меньших 10 в матрицах А(3,5) и В(4,4).

20.    Даны число х и одномерные массивы С(10) и D(15).

      Вычислить , где , .

21.    Определить количество нулевых элементов в каждом из массивов А(10) и В(13).

22.    Найти произведение отрицательных элементов в каждом из массивов Y(3,6)  и Х(5,4).

23.    Вычислить количество единиц в матрицах А(5,5) и В(7,7).

24.    Определить порядковые номера максимальных элементов массивов Z(10) и X(15).

25.    Найти сумму наибольших элементов матриц C(9) и  D(10).

26.    Найти среднее арифметическое максимальных элементов, выбранных их двух векторов А(10) и В(12).

27.    Даны целые числа n и m. Вычислить . В подпрограмме вычисляется

28.    Даны одномерные массивы С(12) и D(15). Вычислить .

29.    Вычислить значение функции , где Xmin  и Ymin - минимальные элементы массивов Х(10) и Y(12).

30.    Найти произведение  наименьших элементов матриц А(10) и  D(15).

 

3.4.2 Использование подпрограммы-процедуры

1. Определить наименьшие элементы матриц А(5,4), В(5,3), а также  номера строк и столбцов, в которых они находятся.

2. Найти максимальные элементы и их порядковые номера в массивах Х(10) и У(15).

3.         Найти количество положительных, отрицательных и нулевых элементов для двух массивов А(3,5) и В(4,4).

4.         Определить количество элементов в массивах А(12) и В(9), попадающих в интервал [-3, 5]. Элементы, попадающие в заданный интервал, запомнить в массивы А1 и В1 подряд.

5.         Вычислить значение функции , где x1, x2 – корни квадратного уравнения ax2+2x-5=0; y1, y2 – корни квадратного уравнения 7y2+ay-3=0.

6.         Определить среднее арифметическое массивов А(10) и В(15) и количество элементов, меньших этого среднего.

7.         Вычислить значение ,  где , ,

Amax и Bmax – максимальные элементы массивов А(15) и B(13).

8.         Заданы три матрицы А(3,3), В(4,4), С(3,3). Найти минимальное из трех чисел Х, У, Z, которые являются следом матриц соответственно А, В, С. След матрицы - сумма элементов главной диагонали.

9.         Даны матрицы А(3,3), С(7,7). Составить программу подсчета количества нулевых и отрицательных элементов матриц.

10.    Найти количество элементов, значения которых попадают  в интервал (1,5), и их сумму для массивов А(15), В(18).

11.    Найти количество элементов, кратных 3, и сумму остальных элементов для целочисленных матриц А(3,3), В(3,4).

12.    Найти произведение положительных и сумму отрицательных элементов для матриц В(3,5) и С(3,4).

13.    Вычислить значение функции , где x1, x2 – корни квадратного уравнения ax2+bx+c=0; y1, y2 – корни квадратного уравнения dy2+ey+f=0.

14.    Найти сумму положительных и количество отрицательных элементов для матриц В(5,3) и С(4,3).

15.    Найти количество элементов, больших 5, меньших 5 и равных 5, для двух массивов А(3,5) и В(4,4).

16.    Даны два массива D(5,5) и F(4,6), в каждом из них найти количество элементов со значениями в интервале (-5,5) и перемножить эти элементы.

17.    Вычислить значение функции ,  где , , Amax и Bmax – максимальные элементы массивов А(15) и B(13).

18.    Составить подпрограмму записи элементов прямоугольной матрицы в одномерный массив в порядке следования строк. Сделать это для матриц А(7,2) и В(5,3).

19.    Найти сумму отрицательных и количество положительных элементов для матриц В(5,3) и С(4,3).

20.    Найти количество элементов, кратных 5, и произведение остальных элементов для целочисленных матриц А(3,5), В(2,6).

21.    Вычислить значение функции ,  где , , Amin  и Bmin – минимальные элементы массивов А(12) и B(14).

22.    Найти количество элементов, больших 1, меньших 1 и равных 1, для двух массивов С(3,5) и D(4,4).

23.    Определить среднее арифметическое массивов А(4,4) и В(3,5) и количество элементов, больших этого среднего.

24.    Найти сумму положительных и количество нулевых элементов для матриц X(5,5) и Y(4,6).

25.    Вычислить значение функции , где , , Amin  и Bmin – минимальные элементы массивов А(15) и B(13)

26.    Вычислить значение , где Xmin и Ymin – минимальные элементы массивов X(10) и Y(13).

27.    Определить наибольшие элементы матриц А(5,5), В(6,6), а также  номера строк и столбцов, в которых они находятся.

28.    Найти математическое ожидание и дисперсию случайных величин, записанных в массивах Х(10) и Y(15). Вычисление производить в процедуре по формулам:

,  .

29.    Вычислить значение ,

где Amin  и Bmin – минимальные элементы массивов А(15) и B(13); Amax и Bmax – максимальные элементы массивов А(15) и B(13).

30.    Даны две квадратные вещественные матрицы порядка n. Определить в которой из них сумма максимальных элементов строк меньше.

 

3.5 Контрольные вопросы

3.5.1 Что такое подпрограмма? Для каких целей используются подпрограммы?

3.5.2 Чем отличаются подпрограмма-функция от подпрограммы-процедуры?

3.5.3 По каким правилам оформляются заголовки подпрограмм?

3.5.4 Как осуществляется вызов подпрограмм?

3.5.5 Каким образом объявляются в подпрограммах нестандартные типы данных, например, массивы?

3.5.6 В чем разница между фактическими (локальными) и формальными (глобальными) параметрами?

3.5.7 Что такое модуль?

3.5.8 Каким образом осуществляется обращение к модулю?

3.5.9 Опишите структуру модуля.

3.5.10 Перечислите стандартные модули и их назначение.



Приложение А

Некоторые встроенные стандартные процедуры и функции для обработки символьной информации

 

Таблица А1

Формат записи

Категория

Выполняемые функции

Copy(st,poz,n):string;

функция

выделяет из строки st подстроку дли­ной  n символов, начиная с позиции роz, где poz, n - целочисленные выражения

Concate(stl,st2,...,stN:string):string;

функция

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

Length(st:string):integer;

функция

вычисляет  длину строки st в символах

Pos(stl,st2:string):byte;

функция

обнаруживает первое появление в строке st2 подстроки stl. Результат имеет целочисленный тип и равен номеру той позиции строки st2, где находится первый символ подстроки stl. Если в строке st2 подстрока stl не найдена, то результат функции равен 0

Delete(st,poz,n);

процедура

удаляет n символов в строке st, начиная с позиции, определяемой значением параметра poz. Если значение poz больше 255, возникает программное прерывание

Insert(stl,st2,poz);

процедура

вставляет строку stl в строку st2, нaчинaя с позиции poz

Str(ir,st);

процедура

преобразовывает числовое значение ir в его строковое выражение  st

Val(st,ir,cod);

процедура

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

Upcase(ch:char):char;

функция

преобразует строчную латинскую букву в прописную

Ord(ch:char):longint;

функция

возвращает код символа ch

 


Библиография

 

1. Симонович С.В. Информатика. Базовый курс.- СПб.: Питер, 2000.

2.  ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов и программ. Обозначения условные, графические. – М.: Издательство стандартов,1990.

3.  С.Немнюгин, Л.Перколаб. Изучаем Turbo Pascal. – СПб.: Питер, 2001.  О.А.Меженный.Turbo Pascal: учитесь программировать.- М.:Издательский дом «Вильямс», 2001.

4. О.А.Меженный.Turbo Pascal: учитесь программировать.- М.:Издательский дом «Вильямс», 2001.

5. Ю.Аляев, О.Козлов. Алгоритмизация и языки программирования Pascal, C++, Visual Basic: Учебно-справочное пособие. – М.: Финансы и статистика, 2004.

 

 

 

 

Содержание

 

1 Лабораторная работа №4. Обработка массивов......................................... 3

2 Лабораторная работа №5. Обработка символьной информации .............. 15

3 Лабораторная работа №6. Использование подпрограмм и модулей......... 19

Приложение А................................................................................................ 31

Библиография................................................................................................. 32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сводный план 2004 г., поз. 23 

 

 

Гаухар Аскербаевна Мастекбаева

Наталья Валерьевна Сябина

 

 

 

 

 

 

 

 

 

 

 

ИНФОРМАТИКА. ЯЗЫК TURBO PASCAL

Методические указания к выполнению лабораторных работ

Часть 4

(для студентов всех специальностей)

 

 

 

 

 

 

 

Редактор 

 

 

 

 

 

 

Подписано в печать __. __. __.                                            Формат 60х84  1/ 16

Тираж  50 экз.                                                             Бумага типографская №1

Объем 2,0 уч.-изд. л.                                                   Заказ _____. Цена    тг.

 

 

 

 

Копировально-множительное бюро

 Алматинского института энергетики и связи

480013 Алматы, Байтурсынова, 126