Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОАиП_1 / ЛабПрактОАиПН111.doc
Скачиваний:
74
Добавлен:
25.02.2016
Размер:
1.38 Mб
Скачать

Interface

uses

crt;

type

matr =array[1..10,1..10] of real;

stroka =string[30];

{Ввод матрицы}

procedure vvodmatr(var a:matr;namefile:stroka;var m,n:integer;

flag1,flag2:boolean);

{Вывод матрицы}

procedure vivodmatr(namefile:stroka;a:matr;m,n:integer;zag:stroka;

flag:boolean);

{Нахождение произведения матрицы}

procedure multmatr(a,b:matr;var c:matr;m,n,l:integer);

Implementation

procedure vvodmatr(var a:matr;namefile:stroka;var m,n:integer;

flag1,flag2:boolean);

{Ввод матрицы}

var

i,j :integer;

fin:text;

begin

if namefile='con' then {Ввод с клавиатуры}

begin

Clrscr;

write(' Введите размерность матрицы ');

end

else {Ввод из файла}

if flag1 then {Открывать файл?}

begin

assign(fin,namefile);

reset(fin);

end;

readln(fin,m,n);

if namefile='con' then

writeln(' Введите матрицу построчно ');

for i:=1 to m do

for j:=1 to n do

read(fin,a[i,j]);

if (namefile<>'con') and flag2 then {Закрывать файл?}

close(fin);

end;

procedure vivodmatr(namefile:stroka;a:matr;m,n:integer;zag:stroka;

flag:boolean);

{Вывод матрицы}

var

i,j :integer;

fout :text;

begin

assign(fout,namefile);

if flag then

begin

if namefile ='con' then

clrscr;

rewrite(fout);

end

else

append(fout);

writeln(fout,zag);

for i:=1 to m do

begin

for j:=1 to n do

write(fout,a[i,j]:8:2);

writeln(fout);

end;

if namefile='con' then {если вывод на экран}

readkey

else

close(fout);

end;

procedure multmatr(a,b:matr;var c:matr;m,n,l:integer);

{Нахождение произведения матрицы}

var

i,j,k:integer;

s:real;

begin

for i:=1 to m do

for j:=1 to l do

begin

s:=0;

for k:=1 to n do

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

c[i,j]:=s;

end;

end;

end.

Задания

Разработать алгоритм и программу, реализующую этот алгоритм.

Исходные данные вводить из текстового файла. Результаты работы программы также поместить в текстовый файл.

Функции программы, оформленные в виде процедур и функций, поместить в отдельный модуль.

1. Даны два упорядоченных по возрастанию массива целых чисел: А, состоящего из n-элементов, и В, состоящего из m-элементов. Выполнить слияние этих двух массивов в один упорядоченный массив C.

2. Даны координаты xi и yi n-точек на плоскости. Подсчитать количество точек, лежащих в первой четверти.

3. Даны две последовательности чисел a1, a2,..., an и b1, b2,..., bn. Сформировать новые последовательности, элементы которых вычисляются по следующему правилу:

  1. ai=max(ai,bi), bi=min(ai,bi),

  2. i=1,2,...,n.

4. Даны две последовательности чисел a1, a2,..., an и b1, b2,..., bn. Сформировать новые последовательности, элементы которых вычисляются по следующему правилу:

  1. ai=ai+bi, bi=ai-bi, i=1,2,...n.

5. Дана последовательность чисел a1, a2,..., an. Проверить, верно ли, что каждый член этой последовательности больше его номера.

6. Дана последовательность чисел a1, a2,..., an. Проверить, является ли данная последовательность арифметической прогрессией.

7. Дан массив А, состоящий из n-натуральных чисел. Упорядочить элементы массива методом простого выбора.

8. Дан массив А, состоящий из n-натуральных чисел. Упорядочить элементы массива методом простых вставок.

9. Дан массив А, состоящий из n-натуральных чисел. Найти наибольший общий делитель элементов массива.

10. Дан массив А, состоящий из n-натуральных чисел. Найти наименьшее общее кратное элементов массива.

11. Дан массив А, состоящий из n-натуральных чисел. Определить количество элементов, являющихся простыми числами.

12. Дан массив А, состоящий из n-натуральных чисел. Выбрать элементы, встречающиеся более одного раза.

13. Дан массив А, состоящий из n-натуральных чисел. Определить максимальное число идущих подряд элементов, равных 1.

14. Дана последовательность n целых чисел a1, a2,..., an. Найти длину самой длинной возрастающей последовательности подряд идущих элементов.

15. Дана матрица A порядка n. Найти строку матрицы, в которой больше всего нулевых элементов.

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

17. Дана матрица A порядка n. Подсчитать количество столбцов матрицы, в которых имеются нулевые элементов.

18. Дана последовательность чисел a1, a2,..., an. Найти наибольшую сумму, образованную двумя, идущими подряд элементами.

19. Дана функция y=(2*x + 3)/(2*x^2 - 3*x + 4). Найти наибольшее значение данной функции на промежутке [a;b].

20. Дана последовательность чисел a1, a2,..., an. Каждый член этой последовательности кроме крайних заменить суммой соседних с ним членов.

21. Дана матрица A порядка n. Расставить элементы каждой строки в порядке возрастания.

22. Дана матрица A порядка n. Расставить строки матрицы в порядке возрастания количества нулевых элементов.

23. Дана матрица A порядка n. Удалить строки, содержащие нулевые элементы.

24. Дана матрица A порядка n. Поменять местами наибольший и наименьший элементы матрицы.

25. Дана матрица A порядка n. Расставить элементы строк с четными номерами матрицы в порядке убывания.

26.Дана матрица A порядка n. Найти два наибольших элемента матрицы с указанием номеров строк и столбцов, в которых они находятся.

27. Дана матрица A порядка n. Поменять местами строки: первую с последней, вторую с предпоследней и т.д.

28. Дана матрица A порядка n. Отсортировать строки матрицы в порядке возрастания наибольших элементов в каждой строке.

29. Дана квадратная матрица А порядка n. Найти седловую точку матрицы, т.е. элемент, который является наименьшим в своей строке и наибольшим в своем столбце.

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

Задачи второго уровня

1. Дан массив А, состоящий из n-натуральных чисел. Найти элемент массива, сумма цифр которого наибольшая.

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

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

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

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

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

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

8-11. Дана действительная квадратная матрица порядка 2n. Цифрами обозначены подматрицы порядка n

1

2

4

3

8. Получить новую матрицу

3

4

1

2

9. Получить новую матрицу

1

4

3

2

10. Получить новую матрицу

4

3

2

1

11

1

2

. Получить новую матрицу

3

4

12. Даны две последовательности a1, a2,..., an и b1, b2,..., bn целых чисел. Среди членов каждой последовательности нет повторяющихся чисел. Построить пересечение последовательностей (т.е. получить в каком-нибудь порядке все числа, принадлежащие обеим последовательностям одновременно).

13. Даны две последовательности a1, a2,..., an и b1, b2,..., bn целых чисел. Среди членов каждой последовательности нет повторяющихся чисел. Построить объединение данных последовательностей (равные члены разных последовательностей должны входить только один раз).

14. Даны две последовательности a1, a2,..., an и b1, b2,..., bn целых чисел. Среди членов каждой последовательности нет повторяющихся чисел. Получить все члены последовательности b1,b2,...bn, которые не входят в последовательность a1,a2,..., an.

15. Построить n строк треугольника Паскаля.

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

16. Построить матрицу порядка n, записав в нее числа от 1 до n2 согласно схеме

  1. 2 3 … n

2n 2n-1 2n-2 … n+1

2n+1 … 3n

n2

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

Множества, строки

Цель работы: Формирование умений и навыков в разработке сложных циклических алгоритмов обработки строк с использованием стандартных процедур и функций над строками. Знакомство с типом данных «множество» и операциями над данными этого типа

Что нужно знать для выполнения работы

1. Стандартные процедуры и функции над строками.

2. Операции над множествами.

3. Особенности использования строк в качестве параметров в процедурах и функциях.

Примеры выполнения задания лабораторной работы

Пример 1

Составить программу, находящую в данной строке символов длину самой длинной цепочки идущих подряд символов a.

Варианты решения

Вариант 1

program lr9_1_1;

{Самая длинная цепочка а}

uses

crt;

var

st:string;

td,md,i:integer;

begin

clrscr;

write('Введите строку ');

readln(st);

i:=1;

md:=0;

while i<=length(st) do

begin

if st[i]='a' then

begin

td:=0;

while (i<=length(st)) and (st[i]='a') do

begin

inc(td);

inc(i);

end;

if td>md then

md:=td;

end

else

inc(i);

end;

writeln('md= ',md);

readkey;

end.

Вариант 2

program lr9_1_2;

{Самая длинная цепочка а}

uses

crt;

var

st:string;

td,md,i:integer;

begin

clrscr;

write('Введите строку ');

readln(st);

md:=0;

td:=0;

st:=st+' ';

for i:=1 to length(st) do

begin

if st[i]='a' then

inc(td)

else

begin

if td>md then

md:=td;

td:=0;

end;

end;

writeln('md= ',md);

readkey;

end.

Вариант 3

program lr9_1_3;

{Самая длинная цепочка а}

uses

crt;

var

st:string;

td,md,i,np:integer;

begin

clrscr;

write('Введите строку ');

readln(st);

i:=1;

md:=0;

td:=0;

delete(st,1,pos('a',st)-1);

while pos('a',st)<>0 do

if pos('a',st)=1 then

begin

delete(st,1,1);

inc(td);

end

else

begin

if td>md then

md:=td;

td:=0;

delete(st,1,pos('a',st)-1);

end;

if td>md then

md:=td;

writeln('md= ',md);

readkey;

end.

Вариант 4

program lr9_1_4;

{Самая длинная цепочка а}

uses

crt;

var

st:string;

md,i:integer;

mn:set of byte;

begin

clrscr;

write('Введите строку ');

readln(st);

mn:=[];

md:=0;

for i:=1 to length(st) do

begin

if st[i]='a' then

begin

inc(md);

mn:=mn+[md];

end

else

md:=0;

end;

{Вывод результата}

if mn<>[] then

begin

for i:=255 downto 1 do

if i in mn then

begin

writeln('md= ',i);

break; {Выход из цикла}

end;

end

else

writeln('md= ',0);

readkey;

end.

Вариант 5

program lr9_1_5;

{Самая длинная цепочка а}

uses

crt;

var

st,ts:string;

md:integer;

begin

clrscr;

write('Введите строку ');

readln(st);

md:=0;

ts:='a';

while pos(ts,st)<>0 do

ts:=ts+'a';

md:=length(ts)-1;

writeln('md= ',md);

readkey;

end.

Разберите приведенные варианты, выполните программы по шагам (клавиша F8), следя за изменением значений переменных (Ctrl/F7).

Пример 2

Найти все простые числа, не превосходящие данного натурального числа P. Для решения задачи воспользоваться известным алгоритмом «решето Эратосфена».

Суть данного алгоритма в следующем: берем первое простое число «2» и вычеркиваем из множества чисел 2..Р все числа, кратные двум. Затем находим следующее простое число – это «3» и вычеркиваем все кратные трем и т.д., пока исходное множество 2..Р не станет пустым.

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

Program lr9_2_1;

{Решето Эратосфена}

uses

crt;

const

n=20;

Var

mn1,mn2:set of 2..n ;

x,y:integer;

Begin

mn1:=[2..n];

mn2:=[];

x:=2;

repeat

while not ( x in mn1) do

x:=succ(x); {нахождение следующего за x (можно inc(x))}

mn2:=mn2+[x]; {в множестве mn2 результат}

y:=x;

while y<=n do

begin

mn1:=mn1-[y]; {вычеркивание элементов}

y:=y+x;

end

until mn1=[];

for x:=1 to n do {вывод результата}

if x in mn2 then

write(x:5);

readkey;

end.

Соседние файлы в папке ОАиП_1