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

Вывод результатов снабдить соответствующими комментариями.

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

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

В задании 2 в подпрограмме удобно находить решения квадратного уравнения, соответствующего данному биквадратному, а, b, с - коэффициенты уравнения.

Для нахождения НОК в задании 3 необходимо воспользоваться свойством: НОК(а,b,с)=НОК ((а,b),с), Т. е. для нахождения НОК трех чисел надо найти НОК первого и второго числа, а затем НОК полученного результата и третьего числа. Как известно НОК 2-х чисел вычисляется по правилу: [а,b]=а*b/(а,b), где (а,b) - наибольший общий делитель чисел а и b. Следовательно, в качестве вспомогательного алгоритма надо взять алгоритм нахождения НОД двух чисел (этот алгоритм описан на стр.30, [2]). В программе он используется дважды.

Число сочетаний из n элементов по k в задании 4 определяется по хорошо известной формуле. Поскольку в ней необходимо трижды находить значение факториала, то можно описать вспомогательный алгоритм - «факториал», который затем использовать в основной программе (n!(n-факториал)=1*2*3* .. *n).

НЕ нашли? Не то? Что вы ищете?

Задание 5 подобно первому. Необходимо использовать подпрограмму нахождения площади треугольника по формуле Герона.

В задании 6 при составлении программы удобно использовать функцию «степень» (а в степени b). Ее можно определить рекурсивно:

Тип используемой функции - вещественный (Real).

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

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

Для определения полной поверхности тетраэдра в задании 9 необходимо найти площадь каждой его грани, (т. е. площадь каждого треугольника) и сложить их. Для этого надо использовать вспомогательный алгоритм «Герон» (см. задание 1).

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

В задании 11 решение каждого квадратного уравнения можно осуществить в подпрограмме, результаты которой в дальнейшем использовать в основной программе. При решении удобно воспользоваться логической переменной, которая будет принимать значение «False», если уравнение не имеет действительных корней.

В задании 12 для нахождения НОД трех натуральных чисел необходимо воспользоваться свойством: НОД(а,b,с)=НОД ((а, b),с), Т. е. для вычисления НОД трех чисел необходимо сначала найти НОД первых двух, а затем найти НОД полученного результата и третьего числа.

Вспомогательным алгоритмом при решении данной задачи является алгоритм нахождения НОД 2-х чисел (см. стр. 30, [2]).

В задании 13 в подпрограмме удобно организовать вычисление медианы треугольника (можно воспользоваться решением задачи 3, лабораторная работа 1). К подпрограмме необходимо обращаться 3 раза.

Как известно любое комплексное число можно представить в виде (а,b) - где а,b действительные числа. Суммой двух комплексных чисел (а,b), (c, d) является число вида: (а+с, b+d).

В задании 14 после ввода трех комплексных чисел необходимо сначала найти сумму первого и второго числа, после чего к полученному результату прибавить третье число.

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

При выполнении задания 15 можно воспользоваться указанием к заданию 13.

ЛАБОРАТОРНАЯ РАБОТА N5.

Тема. Работа с массивами.

Цели работы:

1) Получение практических навыков в работе с массивами.

2) Знакомство с алгоритмами упорядочения.

Постановка задачи:

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

Содержание отчета:

1) Постановка задачи для конкретного варианта

2) Алгоритм решения.

3) Блок - схема.

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

5) Тесты. Результаты отладки на тестах.

6) Протокол работы программы.

Методические указания:

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

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

а) Каким образом можно описать массив в Паскаль-программе.

б) Какие из приведенных описаний одномерных массивов являются неправильными и почему?

1) Vаr а:Аrrау[1 .. 20] Of Real;

2) Туре mas=Array['a' .. 'd'];

Vаr a:mas;

3) Vаr а: Array[Integer] Of Char;

4) Vаr mm:Array[False.. True] Of Char;

5 ) Туре sitу=(Моsсоw, Sochi, Kiеу ,Adler);

Vаr а: Array[sity] Of Real;

в) Сколько элементов содержит правильно описанный массив в задании под буквой а.

г) Присвоить нулевые значения всем элементам массива a:Array['k' .. 'z'] Of Real;.

д) Какие из приведенных описаний двумерных массивов являются неправильными и почему:

1) Vаr а:Аrrау(1 .. 5,1 .. 7] Of Real;

2) Туре mаs=Arrау('а' .. 'd',-2 .. 3] Of Integer;

Vаr arr: mas;

3) Vаr w:Array(5,7] Of Integer;

4) Туре maska=(volk, lisa, rnedved);

a:Array[rnaska] Of Аrrау(1 .. 5] Of Char;

5) Vаr mass: Array[1 .. 5],[1 .. 7] Of Real;

е) Сколько компонентов содержит каждый из описанных ниже массивов?

1) Vаr mbrrау['а' .. 'с',2 .. 5] Of Real;

2) Vаr mc:Array(false .. true] Of Аrrау(1 .. 5] Of Char;

3) Туре ww=(m1,m2,m3,m4);

Vаr zar:Array[ww] Of Array[ww] Of Boolean;

ж) Написать фрагмент программы, осуществляющей ввод данных в массив а, если есть описания:

Туре fig=( гоmb, treygol,kvadrat, trapezia);

Vаr a:Array(1 . .l0] Of Array(fig] Of Real;

i: Integer; j: fig;

з) Что будет результатом работы следующей программы:

Prograrn what;

Uses Crt;

Vаr а,b: Аrrау[1 .. 5] Of Integer;

s, k;Integer;

Begin ClrScr;

Fоr k=1То 5 Do

a[k]:=k;

Fоr k=l То 5 Do

Writeln(sqr(a[k]))

End.

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

Ввод одномерного массива с клавиатуры целесообразно выполнять в цикле. Для массива А(n):

Fоr i:=l То n Do

Read(a[i]);

Ввод двумерного массива удобнее осуществлять по строкам:

ввод матрицы n*n:

Fоr i:=l То n Do

Begin

Writеln('введите элементы',i:2,'строки матрицы А');

Fоr j:=l То n Do

Read(a(i, j));

End;

Вывод:

Fоr i:=l То n Do

Begin

For j:=l То n Dо Write(a[i, j):4); Writeln

End;

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

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

ЧАСТЬ 1

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

b1=a1

b2=a1+a2=b1+a2

b3=а1+а2+а3=b2+а3

b4=а1+а2+а3+а=b3+a4

…………………………

bn=a1+a2+a3+…an=bn-1+an

Для нахождения этих элементов нужно использовать цикл.

В задании 2 необходимо использовать правило для вычисления производной:

xn)'=аnx(n-1)

Таким образом, если задан многочлен a0xn+a1xn-1+a2xn-2+…+an-1x+an, то искомый результат можно записать в следующем виде: (a0*n, а1*n-1,а2*n-2 ..... an-1,0)

В третьем задании для решения применяется известная формула расстояния между точками в n-мерном арифметическом пространстве:

где ai - координаты точки А, bi – координаты точки В. для записи координат в программе используются два массива А[n], В[n].

Задание 4 напоминает второе. После ввода многочлена (массива коэффициентов) и аргумента х необходимо сначала найти значение выражения a0*х+а1, полученный результат снова умножить на х и прибавить a2 т. д.

Например:

у=4х5-3x4 +2x2 +х-1

a0=4

a1=-З

a2=0

а3=2

a4=1

a5=-1

Многочлен можно записать в виде ((((4*х-3)*х+0)*х+2) *х+1)*х-1 при х=2

S1=4*х-3=5

S2=S1 *х+0=10

S3=S2*х+2=22

S4=S3*х+1 =45

S5=S4*x-1=89

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

В задании 5 требуется найти числа:

b1=а1*а2

b2=а2*а3

b3=а3*a4

………….

bnn-1*an

Для их хранения в программе можно использовать имеющийся массив либо завести новый.

В шестом задании после ввода массива достаточно в цикле сравнивать два соседних элемента с нулем. Если они разного знака, то целочисленную переменную (например, x:Integer) увеличивать на 1.

В задании 7 после ввода массива нужно в цикле проверять каждый элемент и добавлять к соответствующей сумме S1 или S2.

Задание 8 похоже на пятое. В заданном массиве а1,а2, ... an необходимо найти числа:

b1=а1*а2*а3

b2=а2*а3*a4

b3=а3*a4*a5

……………

bnn-2*an-1*an

При выполнении задания 9 удобно использовать следующий алгоритм: сначала взять первый элемент а1 массива и про верить есть ли среди чисел а2 а3 ... an число, ему равное по абсолютной величине. Если да, то напечатать их индексы. В противном случае, взять элемент а2 и выполнить аналогичный поиск равного ему среди чисел а3,a4, … ,an.

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

Задание 10 похоже на третье. Для вычисления скалярного произведения используется известная формула:

В задании 11 после ввода массива достаточно найти максимальный элемент массива, перебирая поочередно каждый его элемент и минимальный (аналогично). Затем найти их разность.

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

При выполнении задания 13 сначала нужно найти максимальный элемент (см. задание 11), а затем выяснить, сколько раз он встречается в таблице.

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

В задании 15 рассматривается новый метод сортировки вставками. При решении задачи сначала удобно проверить упорядоченность первого и второго элементов массива, если они не упорядочены, то поменять их местами. Затем каждый раз нужно брать очередной элемент массива ai и в цикле делать проверку: если этот элемент меньше предыдущего ai-1, то необходимо переставить их, затем сравнить с ai-2 и т. д. Таким образом, если k элементов массива были упорядочены, то после нахождения места для ai упорядоченными окажутся к+1 элементов.

ЧАСТЬ 2

При выполнении первого задания достаточно в цикле организовать просмотр элементов каждой строки матрицы. Если все элементы очередной строки больше нуля, целочисленную переменную (k: Integer) увеличить на 1.

В задании 2 поиск максимального элемента можно осуществить перебирая все элементы массива (по строкам или по столбцам), и сравнивая каждый раз со значениями переменной max (максимальный элемент). Если очередной элемент массива больше значения переменной max, то в max записать этот элемент. Вначале в max можно поместить первый элемент массива a11.

Осуществляя поиск необходимо также фиксировать индексы максимального элемента (i, j). Это и будут номера строки и столбца.

В задании 3 требуется решить систему вида:

Очевидно, что решение системы нужно осуществлять «снизу вверх» (сначала найти Хn, затем используя это значение найти Xn-l и т. д.). Имеем:

В общем виде выражение в скобках можно записать так: , где j=i+1

Таким образом решения треугольной системы следует находить в цикле (например Fоr i:=n Downto 1 Do) по формуле:

В задании 4 после нахождения максимального элемента матрицы, можно сформировать новый массив, элементами которого будут числа bij=aij/max (mах -максимальный элемент, i=l... m, j=l... n). Хотя новый массив можно и не использовать. Обратите внимание, что элементами искомого массива являются действительные числа.

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

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

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

B 6-ом задании после ввода матрицы и вектора необходимо в цикле определять нечетную строку и заменять все ее элементы элементами вектора (одномерного массива). Цикл закончится, когда все строки будут заменены. Очевидно, что первая строка матрицы нечетная (i=1). Для выделения последующих нечетных строк можно использовать оператор i:=i+2. Хотя вполне допустимо применение операторов div и mod Паскаля.

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

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

В задании 9, очевидно сумма элементов по одной из диагоналей равна:

, i=j, (или просто)

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

Для решения задания 10 можно воспользоваться примером на стр. 38, [2].

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

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

При выполнении задания 12 можно воспользоваться указаниями к задаче 6.

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

Перед выполнением задания 14 целесообразно рассмотреть пример, на котором проследить закономерность изменения индексов соответствующих элементов. Например:

Данная матрица будет симметрична, если будут равны следующие элементы:

а21=а12

а3l=аl3 и а32=а23

a41=a14, a42=a24 и a43=а34

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

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

Если хотя бы одно из этих значений не совпадает со значением суммы диагонали, то напечатать сообщение «это не магический квадрат». В противном случае матрица является магическим квадратом.

ЛАБОРАТОРНАЯ РАБОТА N6.

Тема. Работа со строками в Паскале.

Цели работы:

1) Получение навыков в работе с символьной информацией.

2) Знакомство с задачами обработки текстов.

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

Содержание отчета:

1) Постановка задачи для конкретного варианта.

2) Алгоритм решения.

3) Блок-схема.

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

5) Результаты выполнения программы.

Методические указания:

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

а) Каким образом можно описать строковый тип в Паскаль программе?

б) Найти ошибки в программе:

в) Найти результат выполнения следующих процедур:

1) Сору('обозрение',4,6)

2) Сору('обозрение', 1 ,4)

3) Сору('обозрение',4,4)

4) А:='точные науки';

Length(A)

5) Сору('барабан',5,2)

6) Сору('барабан',l,2)

7) А:='лягушки зеленые'

В: ='деревья'

Delete(A,1,7);

Insert(B, A, 1);

Write(A)

г) Какие из приведенных ниже описаний являются неправильными описаниями перемен­ных строкового типа и почему:

1) Vаr a=String[100];

2) Const с: Stгing[20]='информатика';

3) Vаr a:String[320];

4)Туре slovo=String[20];

Vаr b:slovo;

а:Аrrау Of slovo;

5) Const W: String[30];

д) Что будет изображено в результате работы следующей программы:

Program what; Uses Crt;

Vаr a, b:String[20];

k:lnteger;

Begin ClrScr;

а: ='головоломка';b ;=";

For k:=1 То Length(a) Do

If a[k]<>'0' Then b:=b+a[k] EIse b:=b+'а';

Writeln(b)

End.

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

В первом задании замена «sin» на «cos» и «sqrt» на «abs» достигается последовательным применением стандартных процедур Delete и Insert. Удобно организовать цикл и проверять, если в строке находится подстрока «sin», то она удаляется, а на ее место записывается «cos», если встречается подстрока «sqrt», то производятся аналогичные действия. Цикл заканчивается, когда в строке не останется ни «sin» ни «sqrt» (см. пример 2, стр. 44-45, [2]).

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

а) "12 апреля 1961 года"- n=4, т. к. максимальная последовательность цифр:1961.

б) "" - n=9, т. к. весь текст представляет собой последовательность цифр и эта последовательность единственная.

в) "Новые информационные технологии" - n=0, т. к. в тексте нет цифр.

При составлении программы надо описать констант-строку цифр 0…9, и после ввода предложения просматривать каждый его символ, начиная с 1, находить длину первой последовательности цифр. Результат необходимо заполнить в промежуточной переменной (p:Integer). Продолжая просмотр может встретиться еще одна последовательность цифр. Необходимо также найти ее длину и сравнить с длиной первой цифровой последовательности(т. е. р). Если длина второй последовательности больше длины первой, то р присвоить длину второй последовательности иначе значение р не изменять. Продвигаясь по тексту возможно обнаружится еще одна цифровая последовательность. Нужно снова найти ее длину и сравнить со значением, находящимся в промежуточной переменой и т. д.

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

В третьем задании после ввода предложения удобно выделить первое слово в отдельную строку (например: реrvое: String[25]), удалить его из введенного предложения, а затем в цикле выделять каждое слово из оставшегося предложения и проверять, есть ли в нем буквы, которых нет в первом слове.

После проверки (если нужно, то напечатать слово), удалить его. Цикл закончится, когда все слова будут проверены. Поскольку все слова в предложении разделены пробелами, то для выделения слова достаточно находить позицию «пробел» в строке. Однако функция Pos вычисляет номер позиции, с которой указанная подстрока первый раз входит в строку поэтому для нахождения второго слова в предложении, первое слово вместе с пробелом надо удалить. После удаления второе слово станет первым уже в оставшейся части предложения. Аналогично его можно выделить из предложения и т. д.

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

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

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

Для проверки наличия символа в предложении целесообразно использовать переменные логического типа.

В шестом задании после ввода текста и слова удобно организовать цикл, в котором поочередно выделять каждое слово из текста (см. вариант 3) в отдельную подстроку (например: ocherednoe:String[5]) и сравнивать ее с введенным словом. В случае, когда ocherednoe слово совпадает с введенным, переменную счетчик увеличивать на 1 (вначале эта переменная равна нулю). Цикл закончится, когда все слова будут просмотрены.

Задание 7 во многом схоже с шестым. После ввода текста и трех ключевых слов из предложения необходимо выделять поочередно каждое слово и сравнивать его с ключевыми. Если какое-то слово текста совпадает с одним из ключевых слов, то достаточно вывести сообщение об этом. Для проверки удобно использовать логическую переменную.

В задании 8 имеются ввиду такие слова, например: коллектив, класс, dreem, mmm и т. д. После ввода предложения, удобно поочередно в цикле, выделять каждое слово предложения (см. задание 3) и сравнивать соседние буквы в нем. Если при просмотре очередного слова встретится хотя бы одна пара совпадающих букв, это слово надо удалить.

Задание 9 предполагает работу с двумя предложениями, слова в которых разделены пробелами. Решение похоже на решение задачи б. После ввода двух предложений из первого можно выделить первое слово (см. задание 3) и просматривая поочередно все слова второго предложения, сравнивать их с выделенным словом. Если во втором предложении найдется слово, равное выделенному, то его надо напечатать. Точно так же можно поступить с остальными словами первого предложения.

Десятое задание в чем-то схоже с заданием 12. После ввода предложения удобно организовать цикл, в котором по очереди выделять слова (см. задание 3), удалять нечетные (каждому слову можно сопоставить номер и воспользоваться функцией mod), а каждое четное слово выделять в отдельную под строку (например chetnoe:String(25]), и «перевернув» напечатать его. Для того, чтобы «перевернуть» слово, т. е. записать его справа на лево, можно организовать цикл от 1 до length(chetnoe) div 2 , и введя дополнительную символьную переменную, поменять местами сначала первую и последнюю буквы слова, затем вторую и предпоследнюю и т. д. Например: слово chetnoe:

String(25]= 'строка';

s:Char;

Length( chetnoe) div 2 = 3

шаг 1 s:=chetnoe[l];

chetnoe[ 1 ]:=chetnoe[6];

chetnoe[6]:=s;

результат "атрокс"

шаг 2 s:=chetnoe[2];

chetnoe[2]: =chetnoe[ 5];

chetnoe[5]:=s;

результат "акротс"

шаг 3 s:=chetnoe[3];

chetnoe[3]; chetnoe[ 4];

chetnoe[ 4]: =s;

результат "акортс"

Цикл закончится, когда будут обработаны все слова предложения.

Решение задания 11 очевидно. Более сложный вариант данной задачи получается, если рассматривать текст состоящий из более, чем 256 символов (массив строк).

В задании 12 после ввода предложения нужно в цикле организовать поиск слов по­сле выделения очередного слова (см. задание 3) необходимо проверить его на симметричность. Данная задача похожа на задачу 10, но если там надо переставлять буквы, то здесь достаточно только сравнивать 1-ю и последнюю, 2-ю и предпоследнюю и т. д. Если в ходе сравнения оказалось, что слово симметрично, то его надо напечатать. Цикл заканчивается, когда все слова проверены.

Для задания 13 примерами сбалансированного относительно скобок текста могут быть следующие:

а) (abc)*(coI)+(lt);

б) ((a+b)+c)/(d-e);

в) (((a-b)*d)-e);

г) вариант (13);

д) ( )( ... );

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

В задании 14, после ввода предложения необходимо выделять поочередно каждое слово предложения (см. задание 3) и сравнивать соседние буквы в нем, т. е. первую и вторую, вторую и третью и т. д.; если при таком сравнении букв одна из них гласная, а другая согласная или наоборот, сравнивать следующую пару и так до конца слова. Если в слове гласные чередуются с согласными, то его надо напечатать. При составлении программы целесообразно использовать констант строки гласных и согласных букв, а так же логические переменные при сравнении букв.

При выполнении задания 15 необходимо хорошо понимать, что значит слово лексикографически предшествует другим словам предложения. Так, элемент (al, a2,...,ai,...), будет меньше элемента (b1,b2,...,bi,...), (лексикографически пред-шествует ему), если а1=b1, а2=b2, ..., ai-1=bi-1, но ai меньше bi. В данном случае элементами являются слова. Для решения сначала необходимо взять первое и второе слово, и сравнить их соответствующие буквы. Выбрав нужное, сравнить его с третьим словом предложения и т. д. Например: «Задачи аналитической геометрии алгебры анализа»

1 шаг «задачи»>«аналитической» т. к. «з»>«а»

2 шаг «аналитической»<'геометрии» т. к. «г»> «а»

3 шаг «аналитической»>'алгебры» т. к. «а»=«а»,«н»>«л»

4 шаг «алгебры»< «анализа» т. к. «а»=«а»,«н»>«л»

Результат: «алгебры» в данном предложении лексикографически предшествует всем словам.

ЛАБОРАТОРНАЯ РАБОТА N7.

Тема. Множества Паскале.

Цели работы:

1) Получение навыков в задании переменных множественного типа и выполнении простейших операций над ними.

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

3) Получение навыков в организации ввода/вывода значений множественного типа.

4) Получение практических навыков в выполнении операций над множествами.

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

Содержание отчета:

1) Постановка задачи для конкретного варианта.

2) Алгоритм решения.

3) Блок-схема.

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

5) Протокол работы программы.

Методические указания:

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

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

б) Какие операции определены над переменными множественного типа и каков их приоритет?

в) Будут ли равны множества:

['а' .. 'd'] и ['а', 'b','c','d'];

[summer,winter] и [winter,summer]

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4