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

лабораторные на Pasca (Кудрявцев)l

.pdf
Скачиваний:
32
Добавлен:
18.03.2015
Размер:
1.63 Mб
Скачать

Массивы

93

 

 

for j:=1 to m do begin

write('введите ', j, '–и столбец'); for i := 1 to n do

begin

write('b[', i, ', ', j, ']= '); readln(b[i, j]);

end;

end;

{вывод одномерного массива}

writeln('вывод массива'); for i := 1 to n do

write('a[', i:2, ']=', a[i]:4);

{вывод двумерного массива}

for i := 1 to n do begin

for j:=1 to m do

write('b['. i, ', ', 3, ']=', b[i, j]); writeln;

end;

{суммирование элементов одномерного массива}

s := 0;

for i := 1 to n do s := s + a[i];

{суммирование элементов двумерного массива}

s := 0;

for i := 1 to n do

94

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

 

 

for j := 1 to m s:=s+b[i,j];

{суммирование диагональных элементов двумерного массива}

s := 0;

for i := 1 to n do s:= s + b[i, i];

{суммирование двух массивов}

for i := 1 to n do

c[i] := a[i] + b[i];

{суммирование двумерных массивов}

for i := 1 to n do

for j := 1 to m do

c[i, j] := a[i, j] + b[i,j];

{суммирование элементов i–ой строки матрицы}

s := 0;

for j := 1 to m do s := s + b[i, j];

{суммирование матрицы по строкам}

for i := 1 to n do begin

s := 0;

for j := 1 to m do s := s + b[i, j]; d[i] := s;

end;

Массивы

95

 

 

{транспонирование матрицы} {заменить строки столбцами, а столбцы строками}

for i := 1 to n do

for j := 1 to m do b[i, j] := a[j, i];

{транспонирование квадратной матрицы}

for i := 1 to n–1 do

for j := i + 1 to n do begin

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

end;

{умножение матрицы на вектор}

for i := 1 to n do begin

s := 0;

for j := 1 to m do

s := s + a[i, j] b[j]; c[i] := s;

end;

{умножение матрицы на матрицу}

for i:=1 to n do for j:=1 to m do

begin s:= 0;

for l:=1 to k do

96

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

 

 

s:= s + a[i,l]*b[l,j]; c[i,j]:= s;

end;

{удаление элемента из массива}

n := n–1 ;

for i := k to n do a[i] := a[i+1];

{включение элемента в заданную позицию массива}

for i := n downto k do a[i + 1] := a[i]; a[k] := b;

n := n+1 ;

{включение элемента в массив, упорядоченный} {по возрастанию с сохранением упорядоченности}

i := 1;

m1: if i > n then begin a[i+1] := b; goto m2 end; if b > a[i] then begin i := i+1; goto m1 end; for j := n downto i do

a[j+1] := a[j]; a[i] := b;

m2: n := n+1 ;

{удаление строки с заданным номером из матрицы}

n := n – 1 ;

for i := k to n do

for j := 1 to m do

b[i, j] := b[i+1, j];

Массивы

97

 

 

{включение строки в матрицу}

for i := n downto k do for j := 1 to m do b[i+1, j] := b[i, j]; for j := 1 to m do

a[k,j] := c[j]; n := n+1 ;

{перестановка строк матрицы}

for k := 1 to m do c[k] := a[i,k];

for k := 1 to m do a[i,k] := a[j,k]; for k := 1 to m do

a[j,k] := c[k];

{перестановка строк матрицы}

for k := 1 to m do begin

p := a[i,k]; a[i,k] := a[j,k]; a[j,k] := p;

end;

{умножение строки матрицы на число b}

for j := 1 to n do a[i, j] := a[i, j] b;

{поиск минимального (максимального) элемента в массиве}

max := а[1]; index := 1; for i := 2 to n do

98

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

 

 

if a[i] > max then begin

max := a[ i ]; index := i;

end;

{поиск минимального (максимального) элемента в матрице}

max := а[1, 1]; indexi := 1; indexj := 1; for i := 2 to n do

for j := 1 to m do

if a[i, j] > max then begin

max := a[i, j]; indexi := i; indexj := j;

end;

{упорядочить массив по возрастанию (убыванию)}

for j := 1 to n–1 do for i := 1 to n–j do

if a[i] > a[i+1 ] then begin

s := a[i];

a[i] := a[i+1]; a[i+1] := s;

end;

{преобразование матрицы в одномерный массив}

for i := 1 to n do

for j := 1 to m do b[(i–1) m+j] := a[i, j];

Массивы

99

 

 

{определение числа элементов массива, удовлетворяющихзаданному условию}

k := 0;

for i := 1 to n do

if а[j] >= t then k := k+1;

{суммирование элементов массива, удовлетворяющихзаданному условию}

s:= 0;

for i := 1 to n do

if a[i] >= t then s := s + a[i];

{объединение двух массивов одинакового размера}

for i := 1 to n do begin

с[2 i – 1] := a[i]; c[2 i] := b[i];

end;

{инвертирование массива}

m := n div 2;

for i := 1 to m do begin

p := a[i];

a[i] := a[n–i+1]; a[n–i+1 ] := p;

end;

{поиск в массиве заданного элемента и его номера}

l := 100;

st := 'элемента, равного L, нет'; k := 0;

100

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

 

 

for i := 1 to n do

if a[i] = l then k := i; if k = 0 then writeln(st)

else writeln('номер элемента i = ', k);

{циклический сдвиг элементов массива}

{исходные данные: n – размер массива, а – массив размером n, m – число позиций сдвига, р – массив размером не менее m }

for i := 1 to m do

p[i] := a[n – m + 1];

for i := n – m downto 1 do a[i + m] := a[i];

for i := 1 to n do a[i] := p[i];

{циклический сдвиг элементов массива}

{исходные данные: n – размер массива, а – массив размером n, m –число позиций сдвига, р – переменная, j – управляющая переменная внутреннего цикла}

for i := 1 to n – 1 do begin

р := a[i];

for j := i + 1 to n do if a[j] <> р then

begin

p := a[i]; k := j;

end;

a[k] := a[i]; a[i] := p;

end;

101

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

СТРОКОВЫЙ ТИП ДАННЫХ

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

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

Type

<имя типа> = string[i]; { i – переменная типа byte, i <= 255}

Var

<идентификатор, ...>: <имя типа>;

Переменную типа string можно задать и без описания типа:

Var

<идентификатор, ...>: string[i];

Строковые выражения это выражения, в которых присутствуют строковые данные. Над строковыми данными допустимы операции сцепления и операции отношения.

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

255.

Пример: выражение – 'А' + 'Б' + 'В', результат– 'АБВ'.

Операции отношения (=, <>, >, <, >=, <=) проводят сравнение двух строк и имеют приоритет ниже операции сцепления, строки срав- ниваются слева направо до первого несовпадающего символа, ре- зультатоперации отношения True или False.

Примеры: выражение – 'Принтер' = 'Принтер', результат–True; выражение – 'ХХХХХ' < 'ХХХХ', результат– False.

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания (:=).

102

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

 

 

Пример: Str1 := 'Группастудентов'; Str2 := Str1 + ' второго курса';

Допускается смешение в одном выражении операндов строкового и литерного типа. К отдельным символам строки можно обратиться по номеру (индексу данного символа в строке). Индекс целочис- ленная величина, записывается в квадратных скобках. Например, выражение Str2[8] обеспечит доступ к восьмому символу 'у' пере- менной Str2.

Для обработки строковых данных используются следующие стан- дартные процедуры и функции:

Процедуры:

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

Пример: St := 'река Обь'; Delete(St, 1, 5) оставит 'Обь'.

Insert (Str1, Str2, Poz) вставка строки Str1 в строку Str2, начиная с позиции Poz.

Пример: Str1 := 'ГП'; Str2 := 'БУ'; выражение Insert (Str1, Str2, 2) даст результат'БГПУ'.

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

Примеры: IBR := 1500, Str(IBR:6, S) даст результат ' 1500'; IBR := 4.8Е + 3, Str(IBR:10, St) даст в переменной St выражение ' 4800'.

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

Функции:

Copy (St, Poz, N) выделяет из St подстроку длиной N символов, начиная с позиции Poz. Если Poz больше длины St, то результатом