Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка по информатике, часть 2

.pdf
Скачиваний:
24
Добавлен:
30.03.2015
Размер:
525.19 Кб
Скачать

Описание двумерного массива (матрицы):

TYPE

<имя>= ARRAY[диап1,диап2] OF <базовый_тип>;

где [диап] диапазон для одного индекса.

Пример. Вычислить суммы элементов в столбцах двумерного числового массива А размером [1..3,1..4].

Текст программы для СА (рис. 9):

Program lr7_1;

CONST a: array[1..3,1..4] of integer = ((1,2,3,4),(1,2,3,4),(1,2,3,4));

VAR

s: array[1..4] of integer; {массив сумм} i, j: integer;

BEGIN

for j:=1 to 4 do begin

s[j]:=0;

for i:=1 to 3 do s[j]:=s[j]+a[i,j];

write(' s[',j,']=',s[j])

end;

END.

Задание 1 (программа 7_1)

Начало

Задание А(3х4)

j=1, 4

sj =0

i=1,3

sj=sj +aim

Вывод sj

Конец

Рис.9

1.Даны матрицы A,B: array [1..4,1..4] of real. Вычислить матрицу С поэлементным сложением соответствующих элементов матриц А и В.

2.Дана матрица B: array [1..5,1..5] of real. Найти для нее транспонированную матрицу.

3.Даны матрица A: array [1..4,1..4] of real и константа К. Вычислить матрицу С=А*К.

4.Сформировать массив по правилу 1 0 0 ... 0

2 1 0 ... 0

3 2 1 ... 0

...

10 9 8 ... 1 .

5. Даны натуральное N и элементы квадратной вещественной матрицы А пятого порядка. Вычислить N-ю степень каждого элемента этой матрицы

ij1ij, аij2ijij, аij3= аij2ij и т.д., где i,j=1,2,...,5). 6. Сформировать массив по правилу 0 0 0 ...0

0 1 0 ...0

0 0 2 ...0

0 0 0 ...9 .

21

7. Сформировать массив последовательностью натуральных чисел:

1 2 ...

10

 

 

11

12

...

20

 

21

22

...

30

 

 

...

 

 

 

91

92

... 100

.

8.Сформировать двумерный массив:

12 3 4 5

5 1 2 3 4

4 5 1 2 3

3 4 5 1 2

2 3 4 5 1 .

9.Дана матрица A: array [1..N,1..N] of integer. Сформировать вектор В из максимальных элементов каждой строки.

10.Дана матрица A: array [1..6,1..6] of integer и переменная Х. Элементы нечетных строк матрицы А заменить на Х.

11.Дана матрица B: array [1..5,1..5]. Получить массив С удалением (либо обнулением) n-й строки и k-го столбца из матрицы В.

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

13.Определить, является ли заданная целая квадратная матрица шестого порядка симметричной (относительно главной диагонали).

14.Дана вещественная матрица A: array [1..7,1..4]. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент оказался в верхнем левом углу.

15.Дана вещественная матрица размером 4х8. Упорядочить ее строки по неубыванию сумм их элементов.

16.Для заданной целой матрицы размером 6х8 элементов напечатать индексы всех ее седловых точек. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце.

17.Дана матрица A: array [1..6,1..2] вещественных чисел. Рассматривая A [i,1]

иA [i,2] как координаты точек на плоскости, определить радиус наименьшего круга (с центром в начале координат), внутрь которого попадают все эти точки.

18.Дан массив F: array [1..N,1..M] of byte, определить количество «особых»

элементов в нем. Элемент считается «особым», если он больше суммы остальных элементов своего столбца.

19.Дана матрица D: array [1..5,1..6] of integer. Упорядочить элементы строк в нем по убыванию.

20.Дан массив М координат точек на плоскости. Найти наибольшее расстояние между этими точками.

Задание 2 (программа 7_2) Сформировать таблицу Пифагора.

22

Задание 3 (программа 7_3)

Модифицировать программу 6_3 таким образом, чтобы значения X, F1 и F2 были представлены двумерным массивом, состоящим из трех строк.

Лабораторная работа 8

Программирование с использованием функций

Цель работы: научиться разрабатывать и отлаживать программы с использованием подпрограмм (функций)

Стpуктуpа оформления функции в программе:

FUNCTION <имя>(формальные параметры):<тип>;

{разделы описаний} {описание вложенных процедур и функций}

BEGIN

{операторы функции}

<имя>:= <выражение> {обязательный оператор}

END;

Пример. Даны три массива A (5), B (5), C (5). Найти среднее арифметическое значение наименьших элементов массивов.

До написания программы разрабатывается СА главной программы (рис.10, а) и СА для подпрограммы нахождения наименьшего элемента в любом массиве

(рис.10, б).

Отлаженная программа решения задачи имеет следующий вид:

Program lr8;

 

type mass = array[1..5] of integer;

 

const a: mass=(5,2,7,1,8);

 

b: mass=(3,4,5,6,6);

 

c: mass=(3,8,5,2,6);

 

var

 

n: integer;

 

sr: real;

 

FUNCTION minim(d:mass):integer;

{заголовок функции}

var

 

i, min: integer;

 

begin {начало блока операторов функции}

min:=d[1];

for i:=2 to 5 do

if d[i]<min then

 

min:=d[i];

writeln('минимальный элемент равен ',min);

minim:=min

{имени функции присваивается значение}

 

23

end;

{конец блока функции}

 

 

 

 

BEGIN

 

 

 

 

 

 

 

 

 

 

 

sr: = (minim(a) + minim(b) + minim(c))/3;

{блок основной программы}

 

writeln('sr = ',sr:5:2);

 

{три обращения к функции}

END.

 

 

 

 

 

 

 

 

 

 

 

 

Начало

 

minim (d)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание

 

i=2,5

 

 

Вывод

 

 

массивов

 

 

 

 

 

 

 

 

min

 

 

A,B,C

Нет

di <min

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sr=(minim(A)+

 

 

 

 

 

minim=min

 

 

minim(B)+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

+minim(C))/3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конец n/n

 

 

 

 

 

 

 

 

min=di

 

 

 

 

Вывод

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sr

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конец

б)

а) Рис.10

Задание 1 (программа 8_1)

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

Для отладки программ использовать средства среды Турбо Паскаля (прил. 2): пошаговое исполнение программы (трассировку) с контролем значений переменных в окне отладчика Watch.

Задание 2 (программа 8_2)

1. По заданным вещественным массивам A [1..6], B [1..6] и C [1..6] вычислить

Υ =

(max B)/max A + (max C)/max(B+C) при min A < max B,

max(B+C) + max C

в противном случае.

 

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

3. Определить координаты центра тяжести трех материальных точек с массами m1,m2,m3 и координатами (x1,y1), (x2,y2), (x3,y3) по формулам

xc = (m1x1+m2x2+m3x3)/(m1+m2+m3), yc = (m1y1+m2y2+m3y3)/(m1+m2+m3).

24

Вычисление координаты оформить функцией с параметрами.

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

 

 

 

 

 

 

 

 

 

массивах

A,

B,

C сторонам: ma=0.5 2b 2 + 2c 2 a 2 , mb= 0.5

2a 2 + 2c 2 b 2

,

 

 

 

 

 

mc=0.5 2a 2

+ 2b2

c 2

. Вычисление медианы оформить функцией.

5.Даны три одномерных массива вещественных чисел A [1..6], B [1..8] и С[1..7]. Найти общую сумму положительных элементов в массивах. Нахождение суммы элементов в массиве оформить функцией.

6.Даны два двумерных массива целых чисел с размерами (4х5) элементов. Подсчитать количество отрицательных элементов в каждом из них.

7.Даны два одномерных массива целых чисел A [1..8] и B[1..8]. Найти сумму их максимальных элементов. Для нахождения максимального элемента в массиве использовать функцию.

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

9.Даны три одномерных массива вещественных чисел A[1..6], B[1..8] и С[1..7]. Найти среднее геометрическое значение положительных элементов для каждого.

10.Даны две матрицы целых чисел M[1..3,0..1], К[1..3,0..2]. Найти среднее арифметическое значение для каждой из них.

11.Даны три одномерных массива целых чисел A[1..6], B[1..8] и С[1..7]. Подсчитать количество неотрицательных элементов в каждом.

12.Даны две матрицы целых чисел S[1..3,0..2], К[1..3,0..2], в каждой из которых имеется по два одинаковых числа. Распечатать их значения.

13.Даны два одномерных массива целых чисел A[1..6] и B[1..8]. Вычислить

значение Z=(min A[i] + min B[j]) / min (A[i]+B[j]).

i

j

i, j

14. По заданным целым массивам X[0..7] и Y[8..15] вычислить

7

7

 

xi2

при

xi yi+8>0,

Z = i =0

i=0

 

 

 

15

 

 

yi2

в противном случае.

i=8

15.Дана матрица целых чисел D[1..6,1..5]. Найти наименьшую из сумм

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

16.Дана матрица целых чисел E [1..3,1..5]. Используя функцию, найти среднее геометрическое значение для каждого столбца матрицы.

17.Дана матрица целых чисел F [1..4,1..5]. Найти наименьшие значения элементов в каждой из строк матрицы с помощью функции.

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

19. Сформировать двумерный массив

 

1 2 3

4

5

 

 

 

 

 

1

4

9

16

25

 

 

 

1

8 27 64 125

 

 

 

 

 

...

 

.

 

25

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

20. Даны две матрицы целых чисел V [1..2,1..3], W [1..3,1..2]. Найти суммы элементов строк и столбцов в этих матрицах.

Лабораторная работа 9

Программирование с использованием процедур

Цель работы: научиться разрабатывать и отлаживать программы с использованием процедур

Структура оформления процедуры:

PROCEDURE <имя>(формальные параметры);

{раздел описаний процедуры} {описания вложенных процедур и функций}

BEGIN

{операторы подпрограммы}

END;

Пример. Ввести три массива A[1..3], B[1..4], C[1..5] процедурой "ввод". Вычислить средние арифметические значения в каждом из них.

Для решения задачи pазpаботана СА (pис.11), состоящая из основной программы (а) и двух процедур: одной для ввода элементов массива (б), другой для определения среднего арифметического значения в массиве (в), а также следующая пpогpамма для реализации алгоритма:

Program lr9;

type mass = array[1..5] of integer; var ka, kb, kc:byte;

a, b, c: mass;

PROCEDURE VVOD(Var d:mass; Var k:byte); {заголовок процедуры ввода}

Var

 

 

i: integer;

 

Begin

 

{тело процедуры}

writeln('введите число элементов');

 

read(k);

 

writeln('введите массив из ', k,'элементов');

FOR i:=1 to k do read(d[i]);

 

end;

{конец процедуры VVOD}

 

FUNCTION SR(k:byte;f:mass):real;

{заголовок функции}

var

i: byte;

 

 

S: integer;

 

begin

 

 

S:=0;

for i:=1 to k do

S:=S+f [i];

SR:=S/k

26

End;

{конец функции}

Начало

VVOD (А,ka)

 

VVOD (d, k)

Вывод

 

SR(ka,A)

Ввод

 

 

k

 

VVOD

 

 

 

 

 

 

(b, kb)

 

 

i=1,k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод

 

 

Ввод

 

SR(kb,b)

 

 

di

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VVOD

 

 

 

 

 

 

(C,kc)

 

 

Конец п\п

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод

 

 

 

 

 

 

SR(kc,c)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конец

а)

б)

Рис.11

SR (k, f)

S=0

i=1,k

s = s + fi

SR=S/k

Конец п\п

в)

BEGIN

{основная программа}

VVOD(a,ka); {обращение к процедур возвращающей в основную

программу массив А и его размер}

 

writeln(‘srA=’,SR(ka,a):5:2);

{обращение к функции SR}

VVOD()b,kb;

 

Writeln(‘srB=’,SR(kb,b):5:2);

VVOD(c,kc);

Writeln(‘srC=’,SR(kc,c):5:2);

END.

Задание 1 (программа 9_1)

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

27

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

Задание 2 (программа 9_2)

1.Даны массивы A [1..6], B [1,,6], C [1..6]. Получить *B, B*С, *C.Вычисление произведения массивов оформить процедурой.

2.Даны массивы A [1..5], B [1..6]. Получить новые массивы путем сдвига

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

3.Даны два одномерных массива А [1..6] и C [1..6]. Получить A2, С2, А*С. Перемножение массивов выполнить в подпрограмме.

4.Даны две матрицы целых чисел S [1..3,0..2], K [1..3,0..2], в которых имеется по два одинаковых числа. Найти и распечатать их значение и индексы.

5.Вычислить значение функции Z = x1+ex2, где x1, x2 корни уравнения

Aix2+Bix+Ci = 0, i = 1,2,..,N. Коэффициенты уравнения заданы в массивах A [1..N], B [1..n], C [1..N]. Для вычисления корней использовать процедуру.

6.Составить процедуру для переменных двух квадратных матриц, с помощью которой вычислить вторую, третью и четвертую степени матрицы M [1..5,1..5].

7.Даны массивы A [1..6], B [1..6], C [1..6]. Преобразовать их, каждому элементу массива, присваивая значение, соседнего с ним справа. Последнему элементу присвоить значение первого.

8.По заданным вещественным массивам A[1..6], B[1..6] и С[1..6] вычислить

(minAi)/maxAi+(maxCi)/min(Ci)+max(B+C)I/min(B+C)i.

9.Даны массивы A [1..6], B[1..8]. Выбрать из них положительные элементы и записать соответственно в массивы A [1..k] и B [1..k], где k<6, n<8; из отрицательных элементов сформировать массивы A2 [1..6-k],B2 [1..8-n].

10.Даны массивы A [1..6], B [1..6], C [1..6]. Переставить элементы в них таким образом, чтобы слева подряд были записаны отрицательные, а справа положительные.

11.Даны две целые квадратные матрицы четного порядка. Элементы массивов

счетными номерами строки и столбца заменить нулем (стереть). Напечатать полученные массивы.

12.Даны одномерные массивы A[1..6], B[1..8], C[1..10]. Записать их в виде матриц AA [1..3,1..2], BB [1..2,2..4], CC [1..5,1..2].

13.Даны две целые квадратные матрицы шестого порядка. Распечатать элементы главных диагоналей каждой из них и определить симметричность каждой матрицы относительно главной диагонали.

14.По заданным 10 элементам вещественных массивам A, B и С вычислить

(max(b ))/max(a ) + (max(c ))/min(b+ c)

при minA minB

z =

i

i

i

i

i

i

max(b+ c)i + min(ci ) при minAi minBi

 

 

15. Даны две матрицы целых чисел V (–1..2,0..3) W [1..3,0..2]. Сформировать из них одномерные массивы VV и WW, записывая элементы построчно.

28

16.Дана матрица чисел H [1..5,1..6]. Переставить столбцы матрицы таким образом, чтобы элементы первой строки матрицы были расположены в порядке возрастания их модулей. Перестановку двух столбцов матрицы реализовать процедурой.

17.Дана матрица чисел G [1..4,1..6]. Переставить элементы в матрице так, чтобы элементы каждого столбца матрицы были расположены в порядке возрастания их модулей. Перестановку элементов в столбце реализовать процедурой.

18.Даны массивы A [1..6], B [1..6], C [1..6]. Упорядочить элементы в них в порядке убывания их модулей.

19.Даны две матрицы целых чисел V [1..2,1..3], W [1..3,1..2]. Найти общие суммы элементов строк и столбцов, результаты сформировать в виде двух массивов.

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

Лабораторная работа 10

Обработка символьных и строковых данных

Символьный тип (Char) это тип данных, используемый для описания отдельных символов (знаков, букв, кодов). Он позволяет обрабатывать любые символы ПК.

Для кодировки символов используется восьмибитовый код. Символы с кодами от 0 до 31 относятся к служебным.

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

Функция: тип

Назначение

ORD(c: char): Byte

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

CHR(b:byte) : Char

Выдаёт по коду аргумента символ

UPCASE(c:char):Char

Переводит латинские строчные буквы в прописные

Pred(c:char):Char

Выдаёт предшествующий С символ

Succ(c:char):Char

Выдаёт следующий за С символ

Строковый тип (String) используется для обработки текстовой информации. Строка-константа это произвольная последовательность символов, заключённая в апострофы. Отдельный символ совместим по типу с элементом типа CHAR.

Строки можно присваивать, сцеплять и сравнивать. Функции (процедуры) для работы со строками

1. LENGTH(S:string):byte выдаёт текущую длину строки S;

вместо неё можно пользоваться функцией (Ord s[0]).

2. CONCAT(S1,S2,…,Sn:string):string осуществляет сцепление строк;

29

вместо неё можно пользоваться операцией “+”.

 

 

 

 

3. COPY(S:string; index, len:integer):string

выдаёт

подстроку

длиной len,

начиная с символа с номером index.

 

 

 

 

4. DELETE(var S:string; index, len:integer)

удаляет

из строки

S

подстроку

длиной len, начиная с символа с номером index.

 

 

 

 

5. INSERT(subs:string; var S:string; index:integer)

вставляет

в

строку S

подстроку subs, начиная с позиции index.

 

 

 

 

6.POS (subs, S:string):byte отыскивает вхождение подстроки subs, в строке S и выдаёт номер позиции первого символа subs в S или 0, если в S нет подстроки subs.

7.STR(X[:w[:n]], var S:string) преобразует числовое значение X в строковое S

всоответствии с заданным форматом.

8.VAL(S:string, var X, var errcod) преобразует числовую строку S в числовую

переменную X, формируя errcod код ошибки.

9. FILLCHAR(Var X; k:word; value) процедура заполнения k последовательных байт переменниой X значением value (выражением любого порядкового типа).

Пример: Ввести строку st1.Сформировать строку st2 перестановкой символов исходной строки в обратном порядке и заменой всех строчных латинских букв прописными.

Program lr_10;

 

Var

 

i, j: byte;

 

st1, st2: string;

{эквивалентно string[255]}

Begin

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

readln (st1);

writeln(‘исходная строка:’,st1);

j:= LENGTH(st1); {максимальный индекс элемента в строке} for i:=1 to ord (st1[0]) do

begin

 

st2[i]:=UPCASE(st1[j]);

 

j:=j–1

 

end;

st2[0]=st1[0];

write(‘искомая строка: ’ st2 );

writeln

{перевод строки}

END.

Задание 1 (программа 10_1)

1.Дана строка из 20 символов. Вывести из нее на печать только строчные буквы латинского алфавита.

2.Вывести на печать все строчные, а затем все прописные буквы русского и латинского алфавитов.

3.В заданной строке подсчитать частоту появления букв «a», «b».

30