Основные теоретические сведения

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

- массив — это структура данных, представляющая собой совокупность элементов одного типа;

- массив должен быть объявлен в разделе объявления переменных;

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

- сделав объявление x : array[1..5] of integer: мы получим 5 переменных с именами x[1], x[2], x[3], x[4], x[5] типа integer.

Примеры решения задач

Задача 1. Найти сумму элементов массива x[5].

Решение задачи:

Решение 1: перебор всех элементов в ручную. Program Summa; var x:array[1..5] of real; s :real; begin Writeln(' Введите элементы массива x '); Read(x[1], x[2], x[3], x[4], x[5]); { в память машины} S:= x[1]+ x[2]+ x[3]+ x[4]+ x[5]; write('S= ' , s); Readln; end.   Решение 2: использование циклов. Целесообразно в случае массива большой размерности. Program Summa; var x:array[1..5] of real; s :real; i: integer; begin Writeln(' Введите элементы массива x '); for i:=1 to 5 do Read(x[i]); S:=0; for i:=1 to 6 do S:= S+ x[i]; write('S= ' , s); Readln; end.  

 

Задача 2. Умножить элементы с четными индексами на число Z.

Система тестов:

Значение массива x Значение z Результаты
1,2,3,4,5,6 1,4,3,8,5,12
-1,-2,-3,1,3,2 -1,0,-3,1,3,0

Решение задачи:

Program Chet_Index;

Const n=6;

var

x : array[1..n] of real;

i : integer;

z : real;

begin

Writeln(' Введите элементы массива x ');

for i:=1 to n do {Цикл для ввода элементов массива}

Read(x[i]); { в память машины}

Writeln(' Введите число z ');

Readln(z)

for i:=1 to n do

begin

if i mod 2=0 then

x[i]:= x[i]*z;

end;

for i:=1 to n do {Цикл для вывода элементов массива}

write(x[i], ' ' ); {на экран монитора}

Readln;

end.

Замечание: выделенные фрагменты кода присутствуют во всех программах, использующих одномерные массивы.

 

Задача 3. В массиве поменять местами наибольший и наименьший элементы массива.

Система тестов:

Значение массива x Результаты
1,2,3,4,5,6 6,2,3,4,5,1
-1,-2,-3,1,3,2 -1,-2,3,1,-3,2

Решение задачи:

Program change_max_min;

Const n=6;

var

x:array[1..N] of real;

i:integer;

max, min, Index_min, Index_max :real;

{ максимальное значение и минимальное и их номера}

begin

Writeln(' Введите элементы массива x ');

for i:=1 to n do

Read(x[i]);

max:=x[1];

min:=x[1];

Index_max:=1;

Index_min:=1;

for i:=2 to n do

begin

if x[i]> max then

begin

max:=x[i]; {запомнить элемент}

Index_max:=i; {и его номер}

end;

if x[i]< min then

begin

min:=x[i];

Index_min:=i;

end;

end;

x[Index_min]:=max;

x[Index_max]:=min;

for i:=1 to n do

write(x[i], ' ' );

Readln;

end.

Задача 4.Определить, выполняется ли для всех элементов заданного массива m[k] условие m[n+1]=m[n]+1, где n=1,2,…k.

Система тестов:

Значение массива x Результаты
1,2,3,4,5,6 Массив удовлетворяет условию.
3,4,5,5,6,7 Массив не удовлетворяет условию.

Решение задачи:

Program Zadacha_N3;

var

x:array[1..6] of real;

i:integer;

Otvet boolean;

begin

Writeln(' Введите элементы массива x ');

for i:=1 to 6 do

Read(x[i]);

Otvet:=true;

i:=1;

repeat

if x[i+1]<>x[i]+1 then

Otvet:=false;

i:=i+1;

until (i=5) or (Otvet=false);

if otvet then

write('Массив удовлетворяет условию. ')

else

write('Массив не удовлетворяет условию. ')

Readln;

end.

 

Задания для самостоятельного выполнения

1. Подсчитать число и сумму положительных и число и произведение отрицательных элементов массива.

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

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

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

5. Найти номер первого четного элемента массива из целых чисел.

6. Элементы массива X(n) переписать в массив Y(n) в обратном порядке.

7. Осуществить циклический сдвиг компонентов массива на одну позицию влево.

8. Дан массив из девяти чисел. Вывести его на экран в виде матрицы размером 3 X 3.

9. В заданном массиве определить число соседств:

а) двух положительных чисел;

б) двух чисел разного знака;

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

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

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

12. Подсчитать количество элементов массива после последнего положительного элемента.

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

14. Проверить соблюдается ли для данного массива правило A[i]=A[i-1]+A[i-2]] где i=2,3,..n.

15. Сформировать массив по правилу:

A[i]=A[1]+A[2]+...+A[k] где k < i.


Лабораторная работа № 7. Многомерные массивы

Цель работы:Приобретение навыков обработки двумерных массивов.

 

 

Задачи:

¾ понять, что такое двумерный массив и как он задается;

¾ определить, в каких случаях целесообразно использовать одномерные массивы;

¾ научиться составлять алгоритмы и программы, использующие сложные циклы.

 

Порядок выполнения работы:

1. Перед выполнением работы, обязательно, прочитать конспект лекций по теме «Двумерные массивы».

2. Получить дополнительные теоретические знания из источников: [4: Тема 7.4 – 7.6], [7: Занятие 17, 18].

3. Реализовать на ЭВМ разобранные примеры.

4. Самостоятельно выполнить предложенные задачи.

 

Внимание: переходить к выполнению пунктов 3 и 4 только после тщательной проработки пунктов 1 и 2.

 

 

Примеры решения задач

Задача 1. Вычислить суммы элементов строк заданной матрицы x[n,m].

Система тестов:

Значение массива m Результаты
1 2 3 2 3 4 2 2 2  
3 0 -3 -2 -3 -4 0 0 0   -9

Решение задачи:

Program Summa_Columns_of_matrix;

Const

n=3; m=3;

var

x:array[1..n,1..m] of integer;

i, j, s : integer;

begin

Writeln('Введите элементы массива x[3X3] ');

for i:=1 to 3 do

for j:=1 to 3 do

read(x[i,j]);

s:=x[1,1]+ x[1,2]+ x[1,3]; writeln(S); s:=x[2,1]+ x[2,2]+ x[2,3]; writeln(S); s:=x[3,1]+ x[3,2]+ x[3,3]; writeln(S); readln; end.   S:=0; for j:=1 to m do s:=s+x[1,j]; writeln(S); S:=0; for j:=1 to m do s:=s+x[2,j]; writeln(S); S:=0; for j:=1 to m do s:=s+x[3,j]; writeln(S); readln; end.  

for i:=1 to n do

begin

s:=0;

for j:=1 to m do

s:=s+x[i,j];

writeln(S);

end;

readln;

end.

 

1-й выделенный фрагмент кода – объявление двумерного массива xиз n строк и mстолбцов.

2-й фрагмент – два вложенных цикла для заполнения матрицы числами, введенными с клавиатуры.

 

Задача 2. Возвести в квадрат элементы на диагоналях матрицы x[n,n].

Система тестов:

Значение массива x[n,n]. Результаты
2 2 2 2 2 2 2 2 2   4 2 4 2 4 2 4 2 4  

Решение задачи:

Program Kvadrat_Diagonals;

const

n=3;

var

x:array[1..n,1..n] of integer;

i, j, centr : integer;

begin

Writeln(' Введите элементы массива x[3X3] ');

for i:=1 to n do

for j:=1 to n do

read(m[i,j]);

centr:=n div 2 + n mod 2; {номер центрального элемента}

x[1,1];=x[1,1]* x[1,1]; x[2,2];=x[2,2]* x[2,2]; x[3,3];=x[3,3]* x[3,3]; x[1,3];=x[1,3]* x[1,3]; x[3,1];=x[3,1]* x[3,1];   for i:=1 to n do x[i,i] :=x[i,i] * x[i,i];   for i:=1 to n do begin if i<> centr then m[i, n+1-i] := sqr (m[i,n+1-i]); end;  

for i:=1 to n do

begin

m[i,i] := sqr( m[i,i]);

if i<> centr then

m[I, n+1-i] :=sqr(m[i,n+1-i]);

end;

 

for i:=1 to n do {Распечатка матрицы на экран}

begin

for j:=1 to n do

Write(m[i,j]:3);

writeln;

end;

readln;

readln;

end.

Задача 3. Поменять местами наибольший и наименьший элементы матрицы.

Система тестов:

Значение массива Результаты
1 2 3 7 3 4 2 2 0   1 2 3 0 3 4 2 2 7  
3 0 -3 -2 -3 -4 0 0 0   -4 0 -3 -2 -3 3 0 0 0  

Решение задачи:

Program change_max_min;

Const

n=3; m=3;

var

x:array[1..n,1..m] of integer;

i, j, t, i_max, j_max, i_min, j_min : integer;

begin

Writeln(' Введите элементы массива m ');

for i:=1 to n do

for j:=1 to m do

read(x[i,j]);

i_max:=1;

j_max:=1;

i_min:=1;

j_min:=1;

for i:=1 to 3 do {Цикл поиска номеров максимального и}

for j:=1 to 3 do (минимального элементов массива}

begin

if m[i,j] > m[i_max,j_max] then

begin

i_max:=i;

j_max:=j;

end;

if m[i,j] < m[i_min,j_min] then

begin

i_min:=i;

j_min:=j;

end;

end;

t:=m[i_max,j_max]; {Обмен значениями max и min}

m[i_max,j_max]:=m[i_min,j_min];

m[i_min,j_min]:=t;

 

for i:=1 to 3 do {Вывод массива на экран}

begin

for j:=1 to 3 do

Write(m[i,j]:3);

writeln;

end;

readln;

end.

Задания для самостоятельного выполнения

1. Вычислить суммы элементов столбцов заданной матрицы A(n,m).

2. В каждой строке матрицы определить является ли сумма ее отрицательных элементов четным или нечетным числом.

3. Найти наибольший элемент матрицы и номер строки и столбца на пересечении которых он находится.

4. Подсчитать сколько раз встречается в заданной матрице максимальное по величине число.

5. В заданной матрице поменять местами строки с номерами A и Q.

6. Умножить столбец с минимальным элементом на число Z.

7. Сдвинуть циклически элементы в строках матрицы на одну позицию влево.

8. В матрице вычислить две суммы элементов, стоящих над главной диагональю и под ней.

9. Поменять местами элементы на главных диагоналях матрицы.

10. Найти количество элементов матрицы, больших среднего арифметического всех ее элементов.

11. В данной матрице найти минимальный элемент в диагоналях.

12. По трем заданным матрицам A[n,m] , B[n,m] , C[n,m] построить матрицу X того же размера, каждый элемент которой вычисляется по формуле x[i,j]=max(a[i,j],b[i,j],c[i,j].

13. В матрице поменять местами строку и столбец с номером N.

14. Вычислить матрицу С[i,j], являющуюся суммой матриц a[i,j] и b[i,j].

15. Упорядочить элементы к-й строки по возрастанию.

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

17. Найти максимальную из столбцевых сумм.

18. Найти максимальную из строковых сумм.

19. Разделить все элементы столбца, в котором находится минимальный элемент матрицы на максимальный элемент матрицы.


Лабораторная работа № 8. Обработка символьных строк

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

 

Задачи:

¾ познакомиться с типом данных String;

¾ изучить способы задания строкового типа и обращения к элементам строки;

¾ изучить основные операции над строками и функции работы с ними.

 

Порядок выполнения работы:

1. Перед выполнением работы, обязательно, прочитать конспект лекций по теме «Строковый тип данных».

2. Ознакомиться с представленными в лабораторной работе теоретическими сведениями.

3. Получить дополнительные теоретические знания из источников: [7: Занятие 14], [10: Глава 4.3].

4. Реализовать на ЭВМ разобранные примеры.

5. Самостоятельно выполнить предложенные задачи.

 

Внимание: переходить к выполнению пунктов 4 и 5 только после тщательной проработки пунктов 1 – 3.