Лабораторная работа № 1 «Алгоритмы линейной и разветвляющей структуры» — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Лабораторная работа № 1 «Алгоритмы линейной и разветвляющей структуры»

2021-04-18 444
Лабораторная работа № 1 «Алгоритмы линейной и разветвляющей структуры» 0.00 из 5.00 0 оценок
Заказать работу

Содержание

 

Общие указания к выполнению лабораторных работ. 4

Лабораторная работа № 1 «Алгоритмы линейной и разветвляющей структуры» 6

Общие сведения. 6

Задания. 9

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

Лабораторная работа № 2 «Алгоритмы циклической структуры». 14

Общие сведения. 14

Задания. 19

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

Лабораторная работа № 3. «Массивы». 26

Общие сведения. 26

Задания. 38

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

Список рекомендуемой литературы.. 46

Приложение. 47


Общие указания к выполнению лабораторных работ

 

 

Основная цель, которая ставиться студенту при выполнении задания - практическое освоение всех этапов разработки надежной программы для решения задачи на ПЭВМ, начиная от анализа условия задачи и заканчивая сдачей отчета по написанной программе. Каждая лабораторная работа состоит из двух или трех задач и включает следующие виды работ:

1. Анализ условия задачи и выработка подхода к ее решению.

2. Пошаговая разработка алгоритма решения и его описание.

3. Обоснование алгоритма.

4. Составление блок-схемы алгоритма.

5. Выбор и обоснование представления для входных, выходных и промежуточных данных.

6. Кодирование алгоритма, т. е. его запись на языке Pascal.

7. Выбор набора тестов, на которых будет проверяться программа.

8. Отладка программы и демонстрация правильной ее работы на выбранном наборе тестов.

Для повышения эффективности составления алгоритма относительно больших программ применяется структурный подход к программированию. Это способствует уменьшению затрат на создание и дальнейшее использование программ при эксплуатации.

Структурный подход к программированию состоит из трех частей: нисходящая разработка, структурное программирование и сквозной контроль (тестирование).

При нисходящей разработке проектирование программирование ведутся по методу "сверху - вниз", который предусматривает сначала определение задачи в общих чертах, а затем задача разбивается на ряд более простых подзадач. Для каждой подзадачи составляется алгоритм ее решения.

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

1. Тема и цель работы.

2. Условия задания.

3. Этапы решения задачи.

· Математическая модель задачи;

· Блок схема алгоритма.

4. Текст программы и размещение исходных данных при вводе.

5. Результаты работы программы.

6. Выводы.

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

При защите отчета необходимо отвечать на контрольные вопросы и уметь пояснять работу программы.

 

Примечание: Все работы выполняются в консольном режиме в среде Borland Delphi 7.0 или Borland Pascal 7.0.


Лабораторная работа № 1 «Алгоритмы линейной и разветвляющей структуры»

 

 

Цель работы: выработать практические навыки работы с системой Borland Delphi, научиться создавать, вводить в компьютер, выполнять и исправлять простейшие программы на языке Object Pascal в режиме диалога, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, реализующих линейные алгоритмы; научиться правильно использовать условный оператор if; научиться составлять программы решения задач на разветвляющиеся алгоритмы

 

Общие сведения

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

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

Перед выполнением работы необходимо ознакомится с правилами записи логических выражений, операций сравнения, операторов IF, CASE, READ, READLN, WRITE, WRITELN.[1–7]

Пример 1.1: Определить расстояние на плоскости между двумя точками с заданными координатами M1(x1,y1) и M2(x2,y2)

 

Этапы решения задачи:

1. Математическая модель: расстояние на плоскости между двумя точками M1(x1,y1) и M2(x2,y2) вычисляется по формуле

 

2. Составим схему алгоритма (рис. 1)

 

3. Переводим блок-схему на язык Паскаль.

program example1;

var x1, x2, y1, y2: integer;

d:real;

Begin

writeln('Эта программа вычисляет расстояние между двумя точками на плоскости');

writeln('Введите координаты двух точек:');

write('x1= '); readln(x1);

write('y1= '); readln(y1);

write('x2= '); readln(x2);

write('y2 ='); readln(y2);

d:=sqrt(sqr(x2-x1)+sqr(y2-y1));

writeln('d= ',d);

writeln('нажмите Enter для завершения работы программы');

readln;

end.

 

Рис. 1 – Блок-схема к задаче примера 1.1

 

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

 

Этапы решения задачи:

1. Любое трехзначное число N можно представить в виде суммы: , где a – число сотен, b – число десятков и c – число единиц. Для вычисления значений a, b, c воспользуемся следующими формулами:

Затем сравниваются все пары чисел a, b, c и в случае, если есть совпадения, на экран выдается сообщение «ДА», иначе «НЕТ»

 

2. Составим схему алгоритма (рис.2)

 

3. Программа

program example2;

var a, b, c, N: integer;

Begin

writeln('Эта программа определяет, есть ли в трехзначном числе одинаковые цифры');

writeln('Введите число N:'); readln(N);

a:= N div 100;

b:= (N - a*100) div 10;

c:= N – a*100 – b*10;

if (a=b) or (b=c) or (a=c) then writeln(‘ДА’)

                     else writeln(‘НЕТ’);

writeln('нажмите Enter для завершения работы программы');

readln;

end.

 

Рис. 2 – Блок-схема к задаче примера 1.2

Задания

Вариант 1

1. Вычислить:

2. Вычислите длину окружности, площадь круга и объём шара одного и того же заданного радиуса.

Вариант 2

1. Вычислить:

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

Вариант 3

1. Вычислить:

2. По координатам трёх вершин некоторого треугольника найдите его площадь и периметр.

Вариант 4

1. Вычислить:

2. Вычислите дробную часть среднего геометрического трёх заданных вещественных чисел.

Вариант 5

1. Вычислить:

2. Определите, является ли заданное целое число А нечётным двузначным числом.

Вариант 6

1. Вычислить:

2. Определите, имеется ли среди заданных целых чисел A, B, C хотя бы одно чётное.

Вариант 7

1. Вычислить:

2. Даны три числа. Выберите те из них, которые принадлежат заданному отрезку [ e, f ].

Вариант 8

1. Вычислить:

2. Определите число, полученное выписыванием в обратном порядке цифр заданного целого трёхзначного числа.

Вариант 9

1. Вычислить:

2. Для заданных вещественных чисел a, b и c определите, имеет ли уравнение ax4 + bx2 + c = 0. хотя бы одно вещественное решение.

Вариант 10

1. Вычислить:

2. Вычислите площадь кольца, ширина которого равна Н, а отношение радиуса большей окружности к радиусу меньшей окружности равно D.

Вариант 11

1. Вычислить:

2. Определите, есть ли среди цифр заданного целого трёхзначного числа одинаковые.

Вариант 12

1. Вычислить:

2. Заданы площади круга и квадрата. Определите, поместится ли квадрат в круге.

Вариант 13

1. Вычислить:

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

Вариант 14

1. Вычислить:

2. Заданы координаты двух точек. Определите, лежат ли они на одной окружности с центром в начале координат.

Вариант 15

1. Вычислить:

2. Определите, лежит ли заданная точка на одной из сторон треугольника, заданного координатами своих вершин.

Вариант 16

1. Вычислить:

2. Значения заданных переменных a, b и c перераспределите таким образом, что a, b, c станут, соответственно, наименьшим, средним и наибольшим значениями. 

Вариант 17

1. Вычислить:

2. Идет k -ая секунда суток. Определите, сколько полных часов и полных минут прошло к этому моменту от начала суток.

Вариант 18

1. Вычислить:

2. Даны координаты (как целые от 1 до 8) двух полей шахматной доски. Определите, может ли конь за один ход перейти с одного из этих полей на другое.

Вариант 19

1. Вычислить:

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

Вариант 20

1. Вычислить:

2. Определите номер квадранта, в котором находится точка с заданными координатами (x, y).

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

 

 

1. Каковы назначение и возможности системы Borland Delphi?

2. Как запустить программу на трансляцию и выполнение?

3. Как записываются операторы начала и конца программы?

4. Из каких разделов состоит программа на языке Pascal?

5. В какой последовательности должны быть записаны разделы программы на языке Pascal?

6. Как записываются операторы ввода-вывода на экран в Pascal?

7. Какие команды текстового редактора вы знаете?

8. Что такое блок текста и как его выделить?

9. Какие операторы используются для программирования разветвлений?

10. Как выполняются операторы перехода?

11. Какую из функций: Sin(x), Abs(x), Trunc(x) можно заменить условным оператором if x<0 then x:= -x?


Общие сведения.

Алгоритм называется циклическим, если он содержит многократное выполнение одних и тех же операторов при различных значениях промежуточных данных. Число повторений этих операторов может быть задано в явной (цикл с известным заранее числом повторений) или неявной (цикл с неизвестным заранее числом повторений) форме.

Перед выполнением работы необходимо изучить различные схемы организации циклов и операторы FOR, WHILE, REPEAT. [1–7]

Пример 2.1. Определить, является ли заданное число простым.

 

Этапы решения задачи:

1. Любое число N – простое, если у него нет делителей кроме 1 и самого этого числа. Для решения задачи необходимо проверить есть ли все возможные делители числа N из диапазона [2, N \2]. Если делители есть – число составное, иначе простое.

 

2. Составим схему алгоритма (рис. 3)

 

3. Программа

program example1;

var N, F, i: integer;

Begin

 writeln('Программа определяет, является ли число простым');

 writeln('Введите число N:'); readln(N);

 F:= 0;

  For i:= 2 to N div 2 do

If N mod i = 0 then F:= 1;

  if F = 0 then writeln(‘Простое’)

     else writeln(‘Составное’);

 writeln('нажмите Enter для завершения работы программы');

 readln;

end.

 

Рис. 3 – Блок-схема к задаче примера 2.1

 

Пример 2. Дана последовательность целых чисел, за которой следует ноль. Определить сколько раз в ней меняется знак.

 

Этапы решения задачи

1. Необходимо организовать ввод чисел последовательности, до тех пор, пока не будет введен 0. При этом требуется запоминать два последних введенных числа. Критерий изменения знака – произведение этих чисел. Если произведение положительно – знак сохранился, иначе – знак поменялся на противоположный.

 

2. Составим блок-схему задачи (рис.4)

 

3. Программа

Program exapmle2;

var x,y,k:integer;

Begin

 writeln('Эта программа определяет, сколько раз меняется знак в заданной последовательности чисел');

write('Введите число:'); read(x);

y:=x;

k:=0;

while y<>0 do

Begin

if x*y<0 then inc(k);

y:=x;

read(y);

end;

writeln(' Знак поменялся ',k,'раз');

writeln('нажмите Enter для завершения работы программы');

readln;

end.

 

Рис. 4 – Блок-схема к задаче примера 2.2

 

Пример 2.3. Вычислить с точностью eps <= | x | выражение    при | x | < 1. Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

 

Этапы решения задачи

1. Требуется задать начальное значение суммы ряда, а затем многократно вычислять очередной член ряда и добавлять его к ранее найденной сумме. Вычисления заканчиваются, когда абсолютная величина очередного члена ряда станет меньше заданной точности.

2. Блок-схема (рис 5).

 

Рис. 5 – Блок-схема к задаче примера 2.3

 

 

3. Программа.

program example3;

var i: integer;

x,s,z,eps: real;

Begin

writeln('Эта программа определяет сумму ряда');

repeat  

write('Введите переменную ряда x, |x|<1:'); readln(x);

write('Введите точность вычисления eps:'); readln(eps);

until (abs(x)<1) and (eps<1) and (eps<=x);

s:= 1; z:= 1; i:= 2;

Repeat

z:= z*x;

s:= s + z/i;

inc(i);

until abs(z/(i-1))<eps;

writeln(‘Искомая сумма ряда S = ’, S);

writeln('нажмите Enter для завершения работы программы');

readln;

end.

 

Задания

Вариант 1

1. Определить количество простых чисел на заданном отрезке [ a, b ].

2. Дана последовательность целых чисел, за которой следует ноль. Определить, является ил она возрастающей.

3. Вычислить P = 1 . 2 + 2 . 3 . 4 + 3 . 4 . 5 . 6 +...+ N . (N+1) .... . 2N.  

Вариант 2

1. Определить все простые двузначные числа.

2.  Дана последовательность целых чисел, за которой следует ноль. Определить, число соседств чисел с одинаковыми знаками.

3. Вычислить:  (n раз)

Вариант 3

1. Найти все делители заданного числа N.

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

3. Вычислить:

Вариант 4

1. Найти все двузначные числа, сумма делителей которых четное число.

2. Дана последовательность целых чисел, за которой следует ноль. Определить, является ил она возрастающей.

3. Вычислить

Вариант 5

1. Найти все совершенные числа из диапазона [ a, b ]. Если таких чисел нет, выдать соответствующее сообщение.

2. Дана последовательность из 20 целых чисел. Определить со скольких простых чисел она начинается.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 6

1. Найти количество трехзначных чисел, сумма простых делителей которых кратна 5

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

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 7

1. Дано натуральное число N. Разложить его на простые множители

2. Дана последовательность целых чисел, 0 – конец последовательности. Найти два наименьших числа.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 8

1. Определить наибольший общий делитель двух заданных чисел M и N.

2. Дана последовательность целых чисел, 0 – конец последовательности. Определить есть ли в ней три подряд идущих отрицательных числа.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 9

1. Дано натуральное число N. Определить является ли оно автоморфным. Автоморфное число равно последним разрядам квадрата этого числа (52 = 2 5, 62 = 3 6, 252= 6 25)

2. Дана последовательность целых чисел, 0 – конец последовательности. Определить, сколько раз в последовательности меняется знак.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 10

1. Даны натуральные числа M и N. Определить их наименьшее общее кратное.

2. Дана последовательность целых чисел, 0 – конец последовательности. Определить сумму трех наибольших чисел.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 11

1. Вычислить сумму квадратов делителей заданного двузначного числа.

2. Дана последовательность целых чисел, 0 – конец последовательности. Определить среднее геометрическое простых элементов последовательности.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 12

1. Найти произведение всех простых делителей заданного числа.

2. Дана последовательность из N целых чисел. Определить количество чисел в наиболее длинной подпоследовательности из подряд идущих нулей.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 13

1. Определить количество трехзначных чисел, сумма цифр которых простое число.

2. Дана последовательность целых чисел, 0 – конец последовательности. Определить, сколько чисел больше своих соседей, т.е. предыдущего и последующего.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 14

1. Числом Армстронга называется целое n -значное число, сумма n -х степеней цифр которого равна самому этому числу. Например, числом Армстронга является число 407, так как 407 = 43 + 03 + 73. Найдите все числа Армстронга для заданного n <= 10.

2. Дана последовательность из не менее двух чисел, за которой следует ноль. Вычислить сумму тех из них, порядковые номера которых – простые числа.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 15

1. Задано целое A>1. Найдите наименьшее целое неотрицательное k, при котором 5 k > A.

2. Дана последовательность целых чисел, за которой следует ноль. Определить чередуются ли в ней четные и нечетные числа.

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 16

1. Дано натуральное N. Выясните, сколько цифр оно содержит.

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

3. Не используя стандартные функции (за исключением abs), вычислить с точностью : . . Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps.

Вариант 17

1. Даны два натуральных числа M и N – числитель и знаменатель дроби M / N. Требуется сократить дробь, насколько это возможно.

2. Дана последовательность положительных целых чисел, за которой следует отрицательное число. Определить, сколько раз в ней встречаются два подряд идущих простых числа.

3. Вычислить:

Вариант 18

1. Пифагоровыми называются тройки натуральных чисел a, b, с, удовлетворяющие условию: a2 + b2 = c2. Например, пифагоровой является тройка чисел 6, 8, 10. Найдите все тройки пифагоровых чисел, не превышающих 25.

2. Дана последовательность целых чисел, за которой следует ноль. Определить количество положительных четных чисел в конце последовательности.

3. Вычислить:

Вариант 19

1.  Вывести все трехзначные числа, в десятичной записи которых нет одинаковых чисел.

2. Дана последовательность целых чисел, за которой следует ноль. Определить среднее арифметическое простых элементов последовательности.

3. Вычислить:

Вариант 20

1. Найти все целые корни уравнения , где a, b, c и d – заданные целые числа, причем  и . (Замечание: целыми корнями могут быть только положительные и отрицательные делители коэффициента d).

2. Дана последовательность целых чисел. Определить есть ли в ней совершенные числа (Совершенными называются числа, равные сумме своих делителей, без самого числа. Например, совершенным является число 28 = 1 + 2 + 4 + 7 + 14; 6 = 1+2+3).

3. Вычислить: где

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

 

 

1. Как записывается и как работает оператор FOR?

2. Для организации каких циклов применим оператор FOR?

3. В чем отличие оператора WHILE от оператора REPEAT?

4. Как программируются циклические алгоритмы с явно заданным числом повторений цикла?

5. Как программируются циклические алгоритмы с заранее неизвестным числом повторений цикла?

6. Напишите оператор цикла, который не выполняется ни разу.

7. Напишите оператор цикла, который выполняется неограниченное число раз.

8. Замените оператор "Repeat A Until B" равносильным фрагментом программы с оператором While.


Общие сведения.

Массив - это структурированный тип данных, который используется для описания упорядоченной совокупности фиксированного числа элементов одного типа, имеющих общее имя. Для обозначения элементов массива используются имя переменной-массива и индекс.

Перед выполнением работы необходимо изучить правила описания и использования переменных типа массив, типизированных констант типа массив [1–7].

 

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

Этапы решения задачи

1. Определить, позиции первого элемента, кратного 10 и предпоследнего четного. После просмотреть все элементы, расположенные между ними. Так как порядок расположения элементов заранее неизвестен, то каждый из этих элементов может встретиться как раньше, так и позже другого. Поэтому требуется определять левую и правую границу просмотра массива.

 

2. Составим блок-схему задачи (рис.6)

 

3. Программа

Program example1;

var a: array [1..20] of integer;

i,k,d,L,R, n, p1,p2:byte;

Begin

writeln('Программа определяет количество элементов > 0 между первым кратным 10 и предпоследним четным');

write('Введите n, n<=20: ');read(n);

//Инициализация массива

// и определение позиции первого кратного 10

d:=0;

for i:=1 to n do begin

a[i]:=random(30)-10;

write(a[i]:4);

if a[i] mod 10 =0 then begin

     inc(d);

     if d=1 then p1:=i; end;

end;

// определение позиции предпоследнего четного

d:=0;

for i:=n downto 1 do

if not odd(a[i]) then begin

     inc(d);

     if d=2 then p2:=i; end;

//определение левой и правой границы просмотра

if p1<p2 then begin L:= p1; R:= p2; end

       else begin L:= p2; R:= p1; end;

//определение количества положительных элементов

k:=0;

for i:=L+1 to R-1 do if a[i]>0 then inc(k);

writeln;

writeln('Кол-во полож. эл. = ', k);

writeln('Нажмите ENTER для продолжения ');

readln;

end.

 

Рис. 6 – Блок-схема к задаче примера 3.1

 

 

Пример 3.2. Отсортировать заданный массив по возрастанию методом выбора.

Этапы решения задачи.

1. Алгоритм состоит в том, что выбирается наименьший элемент массива и меняется местами с первым, затем рассматриваются элементы, начиная со второго, и наименьший из них меняется местами со вторым, и так далее n-1 раз (при последнем проходе цикла при необходимости меняются местами предпоследний и последний элементы массива).

2. Составим блок-схему задачи

 

Рис. 7 – Блок-схема задачи примера 3.2

 

 

3. Программа

 

program example2;

var a: array [1..20] of integer;

i,j,t,imin,n:integer;

Begin

writeln('Программа сортирует массив по возрастанию методом выбора');

write('Введите n, n<=20: ');read(n);

//Инициализация массива

for i:=1 to n do

Begin

a[i]:=random(30)-10;

write(a[i]:4);

end;

 //Cортировка

for i:=1 to n-1 do

Begin

imin:= i;

for j:=i+1 to n do

  if a[j]<a[imin] then imin:=j;

t:= a[i];

a[i]:=a[imin];

a[imin]:=t;

end;

//Вывод отсортированного массива

writeln;

for i:=1 to n do write(a[i]:4);

writeln;

writeln('Нажмите ENTER для продолжения ');

readln;

end.

 

Пример 3.3. В целочисленной матрице найти номера строк, в которых все элементы больше 10.

Решение задач на матрицы несколько отличается от одномерных массивов, так как матрица есть массив из массивов.

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

 

Этапы решения задачи

1. Для каждой строки определить переменную-признак того, все ли элементы строки превышают значение 10. Далее в строке осуществляется поиск элементов, не удовлетворяющих условию задачи (т.е. меньших 10). Если найдено хотя бы одно такое число, то переменная-признак меняет свое значение (например, с 0 на 1). Затем для каждой строки проверяется значение указанной переменной, и если оно не изменилось, то в строке – все элементы > 10.

 

2. Составим блок-схему задачи (рис 8)

3. Программа

 

Program example3;

var a: array [1..20,1..20] of integer;

i,j,n,m,Flag, T: byte;

Begin

writeln('Программа находит номера строк, в которых все элементы > 10');

write('Введите N, N<=20 '); Read(n);

write('Введите M, M<=20 '); Read(m);

randomize;

//Инициализация массива

for i:=1 to n do

for j:=1 to m do   begin

   a[i,j]:=random(40)-20;

   if j=m then writeln(a[i,j]:4) else write(a[i,j]:4);

end;

writeln;

//поиск строк, в к-х все элементы > 10

T:=0; //признак того, есть ли такие строки в матрице

for i:=1 to n do

Begin

Flag:= 0;//признак того, что в строке все элементы >10

for j:=1 to m do

   if a[i,j]<=10 then begin Flag:= 1;break; end;

if Flag=0 then begin write(i:3);T:=1; end;

end;

if T = 0 then write('Таких строк нет');

writeln;

writeln('Для продолжения нажмите ENTER');

readln;

end.

 

Рис. 8 – Блок-схема к задаче примера 3.3

 

 

Пример 3.4. Дана целочисленная матрица порядка N. Отсортировать строки матрицы по возрастанию количества элементов больших элементов главной диагонали.

 

Этапы решения задачи

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

 

2. Составим блок-схему задачи (рис 9)

 

 

Рис. 9 – Блок-схема к задаче примера 3.4

 

 

3. Программа

Program Example4;

var a: array [1..20,1..20] of integer;

b: array [1..20] of integer;

i,j,n, imin: byte;

temp:integer;

 

Begin

writeln('Программа сортирует строки матрицы по возраст кол-ва эл > эл главной диагонали');

write('Введите N, N<=20 '); Read(n);

randomize;

//Инициализация массива

for i:=1 to n do

for j:=1 to n do

   a[i,j]:=random(40)-20;

writeln;

 

//поиск количества элементов больших элементов глав диагонали

for i:=1 to n do

Begin

b[i]:=0;

for j:=1 to n do

Begin

  if a[i,j]>a[i,i] then inc(b[i]);

  if j=n then writeln(a[i,j]:4,b[i]:8) else write(a[i,j]:4);

end;

end;

//============сортировка строк======================

for i:=1 to n-1 do

Begin

imin:= i;

for j:=i+1 to n do

   if b[j]< b[imin] then imin:=j;

temp:= b[i];

b[i]:=b[imin];

b[imin]:=temp;

for j:=1 to n do

   begin

     temp:=a[i,j];

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

     a[imin,j]:=temp;

   end;

end;

writeln('Распечатка отсортированного массива ');

for i:=1 to n do

for j:=1 to n do

if j=n then writeln(a[i,j]:4, b[i]:8) else write(a[i,j]:4);

writeln;

writeln('Для продолжения нажмите ENTER');

readln;

end.

 

 

Пример 3.5.  Дана целочисленная прямоугольная матрица. Удалить те строки матрицы, в которых минимальное количество четных элементов.

 

Этапы решения задачи.

1. Решение задачи состоит в следующем: требуется найти количество четных элементов в каждой строке и определить наименьшее из них. Затем все строки, в которых количество четных минимально последовательно передвигать в конец матрицы (например, 1-ую такую строку последовательно передвинуть на последнюю, 2-ю – на предпоследнюю, и т.д.). При этом уменьшать и общее количество строк. При удалении строки, необходимо просматривать всю матрицу заново, начиная с первой строки. Замечание: следует отметить, что физически строки не удаляются, но в результирующей матрице они не должны отображаться.

 

2. Составим блок-схему задачи (рис 10)

 

3. Программа

Program


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

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.506 с.