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



 

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

 

Основные сведения.

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

Один из наиболее распространенных структурированных типов в языках программирования — массивы. Массив ("Array") можно определить как упорядоченную последовательность элементов одного типа. Массив определяется именем и характеризуется размерностью (числом индексов) и размером (количеством элементов). Размер массива в ТР7.0 ограничивается 64 килобайтами.

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

В ТР7.0 объявить массив можно двумя способами:

     Var <Имя_массива> : Array [нач_индекс .. кон_индекс] of <Тип_данных>;

     или

Type <Имя_типа> = Array [нач_индекс .. кон_индекс] of <Тип_данных>;

     Var <Имя_массива> : <Имя_типа>

Начальный и конечный индекс (нач_индекс, кон_индекс) массива должны быть простого порядкового типа (integer, byte, shortint, word, char). Тип_данных — тип элементов массива.

Например:

1) Var massiv : Array [1..5] of integer ;

или

Type MyMas = Array [1..5] of integer ;

Var massiv : MyMas ;

Объявлен одномерный массив (вектор) с именем massiv и размерностью в 5 элементов целого типа.

2) Var b : Array ['a'..'f'] of byte;

3) Var c : Array[4..16] of real;

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

 

 

2.Пример: Имеется одномерный массив, состоящий из 15 элементов. Элементы массива являются случайными числами из интервала [-10,10] Вычислить и вывести на экран среднее арифметическое положительных элементов массива. Предусмотреть также вывод на экран элементов массива в виде строки.

Текст программы:

 

Program sred_arifmet;

Uses crt;

Const n=5;

Var a:array[1..n] of integer;

i, к, sum:integer; sred:real;

begin 

Clrscr; {Очистка экрана}

Randomize; {Настройка генератора случайных чисел}

writeln(‘Mассив а’);

for i:=1 to n do

begin

а[i]:=Random(21)-10; {Заполнение массива случайными числами}

write(a[i])

end;

sum:=0; k:=0;

 for i:=1 to n do If a[i]>0 then

begin

      sum:=sum+a[i];

k:=k+1

end;

sred:=sum/k;

writeln;

writeln('Сумма элементов массива = ',sum);

writeln('Среднее арифметическое = ',sred:4:2);

end.

 

3. Задание. Написать программу обработки массива в соответствии с вариантом задания. Размер массива запрашивать в программе. Предусмотреть вывод на экран исходного и преобразованного массива

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

1) Найдите два минимальных элемента из заданного массива из 36 чисел.

2) Вычислите наибольший отрицательный элемент массива.

3) Определите минимальный из элементов массива, имеющих четные индексы.

4) Вычислите длину вектора А(n) по формуле

5) Запишите на место A(1) наибольший, а на место A(n) – наименьший элементы массива.

6) Подсчет количества положительных элементов массива.

7) Вычислите среднее арифметическое элементов массива, удовлетворяющих условию -5<Ai<5 .

8) Элементы массива A(n) удовлетворяют условию A(1)<A(2)<A(3)<…<A(n). Выберите элемент массива, ближайший к произвольному значению Х, где А(1)<Х<А(n).

9) Вычислите  и

10) Вычислите математическое ожидание и дисперсию для элементов массива по формулам М= S (А i *( i )); D = S Ai - M.

11) Вычислите наименьший положительный элемент массива.

12) Вычислите среднее геометрическое отрицательных элементов массива.

13) Вычислите скалярное произведение двух векторов A(n) и B(n) по формуле S = S AiBi

14) Вычислите разность векторов A(n) и B(n) по формуле: С i = Ai - Bi , где i=1…N.

15) Перепишите отрицательные элементы массива с четными индексами в массив Т, а с нечетными — в массив Р.

16) Вычислите сумму элементов массива, лежащих внутри интервала [1, 10].

17)  Найдите наименьшее значение Ai + Bi для массивов А(N) и B(N).

18) Суммирование всех отрицательных элементов массива.

19) Найдите отношение максимального из 5 заданных чисел к минимальному.

20) Найдите первое из 6 заданных чисел, которое меньше произведения двух предыдущих.

21) Упорядочить по убыванию массив, содержащий 20 целых чисел.

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

23) В массиве из 20 чисел выполнить обратное присваивание (первый элемент становится равным последнему, второй — предпоследнему и т. д.).

24) Записать в массив В элементы массива А, индексы которых кратны 4.

25) Над элементами массива из 10 чисел произвести кольцевой сдвиг элементов вправо на 2 позиции.

26) Упорядочить по возрастанию массив, содержащий 20 целых чисел.

27) Элементы массива вещественных чисел находятся в интервале от -2 до 2. Требуется каждый третий элемент возвести в пятую степень.

28) Над элементами массива из 10 чисел произвести кольцевой сдвиг элементов влево на 3 позиции.

29) Заменить в массиве все положительные числа единицами, а отрицательные —нулями.

30) Дан вектор из 20 целых трехзначных чисел. Вывести на экран индексы тех элементов массива, у которых сумма цифр больше 5.

 

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

6) Понятие массива-вектора.

7) Правила объявления одномерного массива.

8) Каковы ограничения памяти для массива и как эти ограничения могут повлиять на декларацию массива-вектора?

9) Укажите ошибки (если они есть) в декларации массива:

1. Var massiv : Array ['1'..'5'] of integer;

2. Var massiv : Array [1.5 .. 5.5] of real;

3. Var massiv : Array ['a'..'z'] of byte;

4. Var massiv : Array [7...1] of integer;

5. Var massiv : Array [-7..7] of integer;

6. Var massiv : Array [1..1] of integer;

10) Дан фрагмент программы:

var A,B:array[1..10]of real;

begin

A:=B;

Допустима ли такая операция в Паскале?

     6) Какими способами можно объявить вектор в Паскале?

 

Лабораторная работа № 5.

Обработка матриц

 

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

 

Краткие сведения из теории.

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

В ТР7.0 объявить матрицу можно двумя способами:

     Var <Имя_массива >: Array [n1..n2, m1..m2] of <Тип_данных>;

или

Type <Имя_типа> =Array[n1..n2,m1..m2] of <Тип_данных>;

Var Имя_массива : Имя_типа;      

Здесь n1, n2 – начальное и конечное значения индекса строки; m1, m2 – начальное и конечное значение индекса столбца.

Например:

1) Var massiv : Array [1..3, 1..4] of integer ;

или

Type MyMas = Array [1..3, 1..4] of integer ;

Var massiv : MyMas ;

Объявлен двумерный массив (матрица) с именем massiv и размером 3х4 (3 строки и 4 столбца), состящий из элементов целого типа.

Обработка матриц ведется, как правило, с использованием вложенных For-циклов.

2. Пример. Определить максимальный и минимальный элемент матрицы размера 3х4. Вывести эти элементы на дисплей с указанием их индексов (номера строки и столбца).

Текст программы.

Program 2DM;

Var a:array[1..3,1..4] of integer;

  i, j, min, max, i_max, j_max, i_min, j_min : integer;

begin

writeln('введите элементы матрицы построчно');

for i:=1 to 3 do

for j:=1 to 4 do read(a[i, j]);

min:=a[1,1];

max:=a[1,1];

for i:=1 to 3 do

for j:=1 to 4 do

 begin

     if a[i,j]<=min then

begin

min:=a[i, j];

 i_min:=i;

j_min:=j;

end;

     if a[i,j]>=max then

begin

max:=a[i, j];

i_max:=i;

j_max:=j;

end;

end;

writeln('Макс. элемент ',max,' расположен в ',i_max,' строке и ',j_max,' столбце');

writeln('Мин. элемент ',min,' расположен в ',i_min,' строке и ',j_min,' столбце');

end.

 

 

 

Задание.

Согласно варианту выполните обработку матрицы. Размер матрицы запрашивать в программе. Ввод и вывод матриц на экран оформить в общепринятом виде.

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

1) Вычислите среднее арифметическое элементов матрицы. Получите новую матрицу путем вычитания из каждого элемента среднего арифметического и выведите ее на экран.

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

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

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

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

6) Запишите на место отрицательных элементов матрицы нули и выведите ее на экран.

7) Запишите на место отрицательных элементов матрицы нули, а на место положительных — единицы. Выведите на экран нижнюю треугольную матрицу.

8) Найдите в каждой строке матрицы максимальный и минимальный элемент и поместите их на место первого и последнего элемента строки соответственно. Выведите матрицу на экран.

9) Транспонируйте матрицу и выведите ее на экран. Напечатайте элементы главной диагонали и диагонали, расположенной под главной в две строки.

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

11) Из положительных элементов матрицы А сформируйте матрицу В, записывая нули на место отсутствующих элементов. Напечатайте матрицу В.

12) Найдите в каждой строке наибольший элемент и поменяйте его местами с элементом главной диагонали. Выведите на экран полученную матрицу.

13) Выполните обратное присваивание с элементами каждого столбца матрицы. Выведите полученную матрицу на экран.

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

15) Замените элементы все четных строк и столбцов матрицы на нули и выведите матрицу на экран.

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

17) Проверьте, не является ли введенная вами матрица "магическим квадратом".

18) Найдите строку с наибольшей и наименьшей суммой элементов. Выведите на печать найденные строки и суммы их элементов.

19) Умножьте все элементы последней строки матрицы на минимальный элемент главной диагонали матрицы. Выведите на печать полученную матрицу.

20) Получите матрицу В из матрицы А путем перестановки столбцов первого с последним и выведите ее на экран.

21) В матрице переставьте строки с максимальным и минимальным элементами и выведите ее на экран.

22) Переставьте заданные с клавиатуры столбцы матрицы и выведите ее на экран.

23) Дан двумерный массив, содержащий 2 строки и 2 столбца. Упорядочить массив по убыванию элементов в столбце и вывести его на экран.

24) Дан двумерный массив, содержащий 2 строки и 2 столбца. Упорядочить массив по возростанию элементов в строке и вывести его на экран.

25) Исходную матрицу отсортировать по принципу таблицы умножения и вывести ее на экран.

26) Сформировать матрицу В из матрицы А путем вычеркивания элементов первой и последней строки и элементов первого и последнего столбца. Вывести на печать полученную матрицу В.

27) Разложить исходную матрицу на две: верхнюю треугольную и нижнюю треугольную. Отсутствующие элементы заменить нулями. Вывести обе матрицы на экран.

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

29) Каждый нечетный элемент матрицы заменить на сумму элементов главной диагонали. Вывести матрицу на экран.

30) Переставьте заданные с клавиатуры столбцы и строки матрицы и выведите ее на экран.

 

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

11) Определение двумерного массива.

12) Правила декларации двумерного массива.

13) Можно ли создать массив с большим числом индексов?

14) Какие существуют ограничения при декларации массивов в Паскале?

15) Как осуществляется доступ к элементам массива?

16) Какими способами можно объявить матрицу в Паскале?

17) Укажите ошибки (если они есть) в декларации массива:

7. Var massiv : Array ['1'..'5',1..5] of integer;

8. Var massiv : Array [1.5 .. 5.5] of real;

9. Var massiv : Array ['a'..'z','a'..'z'] of byte;

10. Var massiv : Array [7...1,1…9] of integer;

11. Var massiv : Array [-7..7;-1..-10] of char;

Var massiv : Array
Лабораторная работа № 6.

Обработка текстовых данных

 

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

 

Основные сведения

Символьный тип. Любой текст состоит из символов и строк. На языке Паскаль отдельные символы имеют тип Char. Символьный тип char на PascalABC.NET может хранится в виде Unicode-символа или в кодировке Windows (CP1251). (Windows-1251 — набор символов и кодировка, являющаяся стандартной 8-битной кодировкой для русских версий Microsoft Windows до 10-й версии. В современных приложениях отдается предпочтение Юникоду (UTF-8). На 7 июля 2016 лишь на 1.8% всех веб-страниц используется Windows-1251.)

Для преобразования между символами и их кодами в кодировке Windows (CP1251) используются стандартные функции Chr и Ord:

Chr(n) - функция, возвращающая символ с кодом n в кодировке Windows;

Ord(с) - функция, возвращающая значение типа byte, представляющее собой код символа c в кодировке Windows.

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

ChrUnicode(w) - возвращает символ с кодом w в кодировке Unicode;

OrdUnicode(с) - возвращает значение типа word, представляющее собой код символа c в кодировке Unicode.

Кроме того, выражение #число возвращает Unicode-символ с кодом число (число должно находиться в диапазоне от 0 до 65535).

Аналогичную роль играют явные преобразования типов:

char(w) возвращает символ с кодом w в кодировке Unicode;

word(с) возвращает код символа c в кодировке Unicode.

Строковый тип: Строки имеют тип string, состоят из набора последовательно расположенных символов char и используются для представления текста.

Строки PascalABC.Net могут иметь произвольную длину. К символам в строке можно обращаться, используя индекс: s[i] обозначает i-тый символ в строке, нумерация начинается с единицы. Если индекс i выходит за пределы длины строки, то генерируется исключение.

Операции над символами и строками. Над строками определены операции сравнения: < > <= >= = <>. Сравнение строк на неравенство осуществляется лексикографически: s1 < s2 если для первого несовпадающего символа с номером i s1[i]<s2[i] или все символы строк совпадают, но s1 короче s2.

Кроме этого, к строкам и символам применима операция конкатенации (слияния) +, ее результат имеет строковый тип.

Например:

var s: string := 'Петя';
     s := s+'Маша'; // s = 'ПетяМаша'.

К строкам также применима расширенная операция присваивания +=, например, предыдущий оператор можно записать так:

s +='Маша' ; // s = 'ПетяМаша'.

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

s := 'Ширина: '+15; // s = 'Ширина: 15'
s := 20.5+''; // s = '20.5'
s += 1; // s = '20.51'

Над строками и целыми определена операция *: s*n и n*s означает строку, образованную из строки s, повторенной n раз:

s := '*'*10; // s = '**********'
s := 5*'ab' // s = 'ababababab'
s := 'd'; s *= 3; // s = 'ddd'

Строки реализуются типом System.String платформы .NET и представляют собой ссылочный тип. Таким образом, все операции над строками унаследованы от типа System.String. Однако, в отличие от .NET - строк, строки в PascalABC.NET изменяемы. Например, можно изменить s[i] (в .NET нельзя). Более того, строки string в PascalABC.NET ведут себя как размерные: после

var s2 := 'Hello';
var s1 := s2;
s1[2] := 'a';

строка s2 не изменится. Аналогично при передаче строки по значению в подпрограмму создается копия строки, т.е. обеспечивается поведение, характерное для Delphi Object Pascal, а не для .NET.

Однако, строке можно присвоить nil, что необходимо для работы с NET-кодом.

Кроме того, в PascalABC.NET реализованы размерные строки. Для их описания используется тип string[n], где n - константа целого типа, указывающая длину строки. Размерные строки, в отличие от обычных, можно использовать как компоненты типизированных файлов. Для совместимости с Delphi Object Pascal в стандартном модуле описан тип shortstring=string[255].


Дата добавления: 2018-11-24; просмотров: 581; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!