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

Belaya_metodichka_po_EVM

.pdf
Скачиваний:
74
Добавлен:
17.05.2015
Размер:
1.14 Mб
Скачать

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

1.В массив A N занесены натуральные числа. Найти сумму тех элементов, которые кратны данному K .

2.В целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов.

3.Дана последовательность целых чисел a1,a2 ,...,aN . Выяснить, ка-

кое число встречается раньше — положительное или отрицательное.

4.Дана последовательность действительных чисел a1,a2 ,...,aN . Вы-

яснить, будет ли она возрастающей.

5.Дана последовательность натуральных чиселa1,a2 ,...,aN . Создать массив из четных чисел этой последовательности. Если таких чисел нет, то вывести сообщение об этом факте.

6.Дана последовательность чисел a1,a2 ,...,aN . Указать наименьшую длину числовой оси, содержащую все эти числа.

7.Дана последовательность действительных чисел a1,a2 ,...,aN . Заме-

нить все ее члены, большие данного Z , этим числом. Подсчитать количество замен.

8.Последовательность действительных чисел оканчивается нулем. Найти количество членов этой последовательности.

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

10.Даны действительные числаa1,a2 ,...,aN . Поменять местами наи-

больший и наименьший элементы.

11.Даны целые числа a1,a2 ,...,aN . Вывести на печать только те числа,

для которых ai i .

12.Даны натуральные числа a1,a2 ,...,aN . Указать те из них, у которых остаток от деления на M равен L 0 L M 1 .

13.В заданном одномерном массиве поменять местами соседние элементы, стоящие на четных местах, с элементами, стоящими на нечетных местах.

14.При поступлении в вуз абитуриенты, получившие двойку на первом экзамене, ко второму не допускаются. В массиве A N записаны

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

21

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

16.В одномерном массиве размещены: в первых элементах — значения аргумента, в следующих — соответствующие им значения функции. Напечатать элементы этого массива в виде двух параллельных столбцов (аргумент и значения функции).

17.Пригодность детали оценивается по размеру B , который должен соответствовать интервалу A , A . Определить, имеются ли

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

18.У вас есть доллары. Вы хотите обменять их на рубли. Есть информация о стоимости купли-продажи в банках города. В городе N банков. Составьте программу, определяющую, какой банк выбрать, чтобы выгодно обменять доллары на рубли.

19.Дан целочисленный массив с количеством элементов N . Напеча-

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

1,2, 4,8,16,... .

20.Задана последовательность из N вещественных чисел. Опреде-

лить, сколько среди них чисел меньших K , равных K и больших

K .

21. Задана последовательность N вещественных чисел. Вычислить

Si

Xi M 2

, где M — среднее арифметическое данной по-

N 1

 

 

следовательности.

22.Задан массив (var a: array [1. .N] of ' 0 ' . . ' 9' ; ). Определить, вхо-

дит ли в него последовательность символов 123, если да, то сколько раз и с каких позиций N 3 .

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

24.Задана последовательность N вещественных чисел. Вычислить сумму чисел, порядковые номера которых являются простыми числами.

25.Задана последовательность N вещественных чисел. Вычислить сумму чисел, порядковые номера которых являются числами Фибоначчи.

22

26.Задана последовательность N вещественных чисел. Вычислить значение выражения Nx1 x2 ...xN .

27.Задана последовательность N целых чисел. Вычислить сумму элементов массива, порядковые номера которых совпадают со значением этого элемента.

28.Заполнить массив из N элементов с начальным значением заданным A 0 0 , по принципу A i A i div 2 A i 1 .

29.Определить количество элементов последовательности натуральных чисел, кратных числу M и заключенных в промежутке от L до N .

30.Определить, сколько процентов от всего количества элементов последовательности целых чисел составляют нечетные элементы.

23

24

Двумерные массивы

Задача. Получить квадратную матрицу n n :

1

2

 

0

0

 

2

1

 

0

0

 

 

 

 

 

 

 

 

 

0

0

 

2

1

 

 

 

Форма будет иметь следующий вид (рис. 6):

Рис.6

Фрагмент кода: {*************************************************************** **}

procedure Tfrm_Z6.bBtnOKClick(Sender: TObject); var i,j,n:byte;

begin sgrdResult.Visible:=True; n:=StrToInt(edtDim.Text); sgrdResult.ColCount:=n; sgrdResult.RowCount:=n; for i:=0 to n-1 do

for j:=0 to n-1 do sgrdResult.Cells[i,j]:='0';

for i:=0 to n-1 do sgrdResult.Cells[i,i]:='1';

for i:=0 to n-1 do begin

sgrdResult.Cells[i+1,i]:='2'; {над главной диагональю} sgrdResult.Cells[i,i+1]:='2'; {под главной диагональю } end;

end;

25

{***************************************************************

**}

Лабораторнаяработа№7 Преобразованиеипостроениемассивов

Задание. Сформировать квадратную матрицу (n n ) по заданному образцу в пунктах 1-16:

 

1

 

2

3

 

 

n

 

 

 

n 1

n 2

1

 

 

n

 

1.

1

 

2

3

 

 

n

 

 

n 1

n 2

1

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n 1

n 2

1

 

 

n

 

 

n

 

0

 

0

0

 

 

 

0

n 1

0

0

 

 

 

 

 

 

3.

 

 

 

 

 

 

 

 

 

 

 

0

 

0

2

0

 

 

 

 

 

 

 

 

0

 

0

0

1

 

 

 

 

 

 

 

1

1

 

1

1

 

 

 

 

 

1

0

 

0

 

 

 

 

 

 

 

1

 

 

 

5.

 

 

 

 

 

 

 

 

 

 

1

0

 

0

 

 

 

 

 

 

 

1

 

 

 

 

 

1

1

1

1

1

 

 

 

 

 

 

 

 

 

 

 

1

1

 

1

1

 

 

 

 

 

0

1

 

1

0

 

 

 

 

 

 

 

 

 

 

7.

 

 

 

 

 

 

 

 

 

 

0

1

 

1

0

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

1

1

 

 

 

 

 

 

 

 

 

 

 

0

 

0

 

0

1

 

 

 

 

 

 

0

2

0

 

 

 

0

 

 

 

2.

 

 

 

 

 

 

 

 

 

 

n 1

 

0

0

 

 

 

0

 

 

 

 

 

0

 

0

0

 

 

 

n

 

 

 

 

1 2

0

 

 

0

0

 

 

0

2 3

0

 

 

0

 

 

 

 

 

4.

 

 

 

 

 

 

 

 

0 0 n 1 n 0

 

 

0

0

 

 

 

 

 

0 n n 1

 

 

 

1

1

 

1

1

 

 

 

2

 

2

2

0

 

 

 

 

 

6.

 

 

 

 

 

 

 

 

 

 

 

 

n 1

0 0

 

 

n 1

 

 

 

 

n

0

 

0

0

 

 

 

 

 

 

1

0

0

0

0

1

 

 

1

1

0

0

1

0

 

 

 

 

8.

 

 

 

 

 

 

 

 

1

1

0

0

1

1

 

 

 

 

 

 

1

0

0

0

0

 

 

 

 

1

26

 

 

 

n

 

0

 

 

 

0

 

0

 

 

 

 

 

 

 

n

 

 

 

0

 

0

 

 

 

n 1

 

 

 

 

 

 

9.

 

 

 

 

 

 

 

 

 

 

2

 

3

 

 

 

n

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

2

n 1

n

 

 

 

 

 

 

 

 

 

1

0

 

 

 

0

 

 

n

 

 

 

 

 

 

0

2

 

n 1

0

 

 

 

 

 

 

 

 

 

 

 

11.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

2

 

n 1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

 

 

 

0

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11!

 

 

1 2!

 

 

 

 

1 n!

 

 

 

 

1! 2

1 2! 2

 

 

1 n! 2

 

13.

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1!

n

1

2!

n

 

 

 

n

 

 

 

 

 

 

1 n!

 

 

 

 

1

 

2

 

3

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15.

n 2

 

n 1

n

 

n

 

 

 

 

 

 

n

 

n

 

 

 

 

 

 

n 1

 

 

 

 

n

 

 

 

 

n

 

n

 

n

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

1

2

n 1

 

n

 

2

3

 

n

0

 

 

 

10.

 

 

 

 

 

 

n 1 n 0 0

 

 

n

0

 

0

 

0

 

 

 

 

 

 

1

 

2

 

3

n 1

 

n

 

 

2 1

 

 

 

 

 

 

 

 

 

 

2 n 2 n 1

12.

3 2

 

1 n 3 n 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n 1 n 2 n 3 1

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n 2

2 1

 

 

n n 1

 

 

1

 

0

 

0

n

 

 

 

0

 

2

n 1 0

 

 

14.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

0

 

0

n

 

 

 

 

 

 

 

 

 

 

1

0

 

0

1

 

 

 

 

 

0

1

 

1

0

 

 

 

 

 

 

 

 

 

 

16.

 

 

 

 

 

 

 

 

 

 

 

 

0

1

 

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

 

0

0

1

 

 

 

 

 

 

 

 

 

 

17.Построить квадратную матрицу порядка 2n

1 1 1

2 2 2

 

 

1 1 1

2 2

 

 

 

2

 

 

 

 

n

 

 

 

 

 

 

2 2

 

 

1 1 1

2

 

 

3

3 3

4 4 4

 

 

 

3

3 3

4 4

 

 

4

 

 

 

 

 

n

 

 

 

 

3

3

3

4 4

 

 

 

4

 

 

 

 

 

 

n

n

 

 

27

Задание. Дана действительная квадратная матрица порядка n (заполнить случайным образом из диапазона 25;25 ). Найти наибольшее из значе-

ний элементов, расположенных в заштрихованной части матрицы в пунк-

тах 18-27:

 

 

 

 

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28. Составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3, , n2 , записывая их в нее по спирали. Например, для n = 3 получаем:

1

2

3

 

8

9

4

 

 

 

 

7

6

5

 

 

 

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

30.Магическим квадратом порядка п называется квадратная матрица

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

6

1

8

 

7

5

3

 

 

 

 

2

9

4

 

 

 

Лабораторнаяработа№8 Операциисэлементамимассивов

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

28

2.Дана матрица А размером n m. Определить k — количество особых элементов массива А, считая его элемент особым, если он больше суммы остальных элементов его столбца.

3.Задана квадратная матрица. Поменять местами строку с максимальным элементом на главной диагонали со строкой с заданным номером т.

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

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

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

7.Дана матрица размером n m. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался в верхнем левом углу.

8.Определить, является ли заданная целая квадратная матрица n-го порядка симметричной (относительно главной диагонали).

9.Дана целочисленная квадратная матрица порядка n. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.

10.Задана матрица размером n m. Найти максимальный по модулю элемент матрицы. Переставить строки и столбцы матрицы таким образом, чтобы максимальный по модулю элемент был расположен на пересечении k строки и k -го столбца.

11.Дана квадратная матрица A порядка n. Записать на место отрицательных элементов матрицы нули, а на место положительных — единицы.

12.Дана действительная матрица размером n m, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением.

13.Дана действительная квадратная матрица порядка N (N — нечетное), все элементы которой различны. Найти наибольший элемент

среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении этих диагоналей.

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

15.Задана квадратная матрица. Получить транспонированную матрицу.

16.Заданы матрица порядка п и число k. Разделить элементы k-й строки на диагональный элемент, расположенный в этой строке.

17.Для целочисленной квадратной матрицы найти число элементов, кратных k, и наибольший из них.

18.Найти наибольший и наименьший элементы прямоугольной матрицы и поменять их местами.

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

20.В данной действительной квадратной матрице порядка п найти сумму элементов строки, в которой расположен элемент с наименьшим значением. Предполагается, что такой элемент единственен.

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

22.Дана действительная квадратная матрица порядка п. Преобразовать матрицу по следующему правилу: строку с номером п сделать столбцом с номером п, а столбец с номером п - строкой с номером п.

23.Пусть дана действительная матрица размером n m. Требуется преобразовать матрицу следующим образом: поэлементно вычесть последнюю строку из всех строк, кроме последней.

24.Определить номера тех строк целочисленной матрицы A[N, K], которые совпадают с массивом D[K]. Если таких строк нет, выдать соответствующее сообщение.

25.Определить наименьший элемент каждой четной строки матрицы

А[М, N].

29

30

26.Определить номера строк матрицы R[M, N], хотя бы один элемент которых равен C, и элементы этих строк умножить на d.

27.Матрица A[N, M] (М кратно 4) разделена по вертикали на две половины. Определить сумму элементов каждого столбца левой половины и сумму элементов каждого четного столбца правой половины матрицы А.

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

29.Определить среднее арифметическое элементов, лежащих на пересечении строк, номера которых кратны R, и столбцов, номера которых кратны S.

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

Строки символов

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

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

*X*X...*X*

где X - слово, * - "разделитель".

Можно предложить следующий алгоритм распаковки:

1)удалим завершающие пробелы, после чего текст примет регуляр-

ный вид *X*X...*X;

2)удалим лидирующие пробелы; текст примет вид X*X...*X;

3)выделим первое слово и удалим его из текста.

После выполнения пунктов 2 и 3 мы получили одно слово и текст стал короче на одно слово, сохранив при этом свою структуру. Очевидно, что пункты 2 и 3 следует выполнять до тех пор, пока текст не пуст.

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

Форма будет иметь следующий вид (рис. 7):

31

Рис.7

Фрагмент кода: {*************************************************************** **}

procedure Tfrm_Z8.BBtn_OKClick(Sender: TObject);

const Letters : set of Char = ['a'..'z','A'..'Z','А'..'Я','а'..'я']; var s : string;

i : Byte;

begin

s:= edtInput.Text; if s=''

then begin

ShowMessage('текст не введен'); Exit;

end;

while not(s[Length(s)] in Letters) do

Delete(s,Length(s),1); { удалим завершающие пробелы }

memResult.Lines.Add('Слова текста :');

while s<>'' do {цикл выделения отдельных слов} begin

while not(s[1] in Letters) do

Delete(s,1,1); { удалим лидирующие пробелы } { найдем границу первого слова }

i:=1;

while (s[i] in Letters) and (i<=Length(s)) do

32

inc(i); { i - номер первого разделителя }

Dec(i);

 

{ выведем слово }

memResult.Lines.Add(Copy(s,1,i));

Delete(s,1,i);

{ удалим слово из текста }

end;

end;

{***************************************************************

**}

Напомним несколько стандартных функций и процедур, которые могут пригодиться при работе со строками символов:

function Length(S: String): Integer; - возвращает длину строки. function Pos(Substr: String; S: String): Byte; - возвращает номер

первого слева символа строки S, начиная с которого строка Substr входит в S, если Substr не входит в S, то значение функции равно 0.

function Copy(S: String; Index: Integer; Count: Integer): String; -

воз-вращает подстроку строки S, которая начинается с символа с номером

Index и имеет длину Count.

procedure Delete(VAR S: String; Index: Integer; Count:Integer); -

удаляет из строки S подстроку, начинающуюся с символа с номером Index и имеющую длину Count.

procedure Insert(Substr: String; VAR S: String; Index: Integer); -

вставляет в строку S подстроку Substr начиная с символа с номером Index. procedure Val(S: STRING;VAR V; VAR Code: Integer); - преобра-

зует строку S в число V (если это возможно); V - любая переменная арифметического типа, переменная Code возвращает 0, если преобразование прошло успешно, или номер первого неправильного символа строки.

Лабораторнаяработа№9 Обработкапоследовательностейсимволов

1.Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слова.

2.Дана строка символов, среди которых есть двоеточие (:). Определить, сколько символов ему предшествует.

3.Дана строка. Преобразовать ее, удалив каждый символ * и повторив каждый символ, отличный от *.

4.Дана строка. Подсчитать количество букв к в последнем ее слове.

5.Дана строка. Подсчитать, сколько различных символов встречается в ней. Вывести их на экран.

6.Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а.

33

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

8.Имеется строка, содержащая буквы латинского алфавита и цифры. Вывести на экран длину наибольшей последовательности цифр, идущих подряд.

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

10.Дана строка. Найти в ней те слова, которые начинаются и оканчиваются одной и той же буквой.

11.Дана строка. Преобразовать ее, заменив точками все двоеточия (:), встречающиеся среди первых n/2 символов, и заменив точками все восклицательные знаки, встречающиеся среди символов, стоящих после n/2 символов.

12.Строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (т.е. является ли оно палиндромом).

13.В записке слова зашифрованы — каждое из них записано наоборот. Расшифровать сообщение.

14.Проверить, одинаковое ли число открывающихся и закрывающихся скобок в данной строке.

15.Строка, содержащая произвольный русский текст, состоит не более чем из 200 символов. Написать, какие буквы и сколько раз встречаются в этом тексте. Ответ должен приводиться в грамматически правильной форме, например а — 25 раз, к — 3 раза и т.д.

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

Например, А= ИНТЕГРАЛ; В= АГЕНТ — составить можно; В= ГРАФ — составить нельзя.

17.Двумерный массив пхт содержит некоторые буквы русского алфавита, расположенные в произвольном порядке. Написать программу, проверяющую, можно ли из этих букв составить данное слово S. Каждая буква массива используется не более одного раза.

18.Результаты вступительных экзаменов представлены в виде списка из N строк, в каждой строке которого записаны фамилия студента и отметки по каждому из М экзаменов через пробел. Определить количество абитуриентов, сдавших вступительные экзамены только на «отлично».

34

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

20.Из заданной символьной строки выбрать те символы, которые встречаются в ней только один раз, в том порядке, в котором они встречаются в тексте.

21.В символьном массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список класса с указанием для каждого ученика количества его однофамильцев.

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

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

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

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

26.Шифрация. Один из методов шифрации называется наложением гаммы. Делается это следующим образом: берется некоторое случайное число в диапазоне от 127 до 255 — гамма, и код каждого символа строки заменяется кодом, получающимся в результате операции: новый код=старый код XOR гамма.

Написать программу, реализующую: а) данный метод шифрации;

б) дешифрацию строки при заданной гамме. Входные данные: шифруемая строка. Выходные данные:

гамма;

зашифрованная строка.

27.Тэг курсива. Дан текст, в котором встречаются структуры <i> и </i>. Заменить каждое вхождение <i> на <курсив>, а каждое вхождение </i> на <конец курсива>. Замечание. В программе следует учесть, что буква i может быть как строчной, так и прописной.

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

29.Частота появления букв в словах. Дан текст, содержащий слова,

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

35

дают чаще: первые, последние или средние. Позиция средней буквы в слове определяется по формуле:

поз_средн_буквы=длина_слова div 2+1

30.Лишние пробелы. Дана строка, состоящая из слов, разделенных пробелами. Напишите программу, удаляющую лишние пробелы. Пробел считается лишним, если он:

стоит в начале строки;

стоит в конце строки;

следует за пробелом.

Подпрограммы

Занимаясь разработкой учебных проектов в среде программипрвания Delphi, мы привыкли к автоматическому созданию средой подпрограммобработчиков событий. Например, создание процедуры-обработчика по нажатию на кнопку (Button), расположенную на форме – самая распространенная ситуация для студенческих проектов. Теперь вернемся к разработке так называемых пользовательских подпрограмм.

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

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

{***************************************************************

**}

procedure Tfrm_Z8.BBtn_OKClick(Sender: TObject);

const Letters : set of Char = ['a'..'z','A'..'Z','А'..'Я','а'..'я']; var s : string;

i : Byte;

{процедура удаления завершающих пробелов} procedure del_tail(var s:string);

begin

36

while not(s[length(s)] in letters)and(s<>'') do delete(s,length(s),1);

end; {del_tail}

{процедура удаления лидирующих пробелов} procedure del_head(var s:string);

begin

while not(s[1] in letters) do delete(s,1,1);

end; {del_head}

{функция выделения отдельного слова} function makeword(s:string; var bound:byte):string; begin bound:=1;

while (s[bound] in letters)and(bound<=length(s)) do inc(bound);

dec(bound);

makeword:=copy(s,1,i); end; {makeword}

procedure Tfrm_Z8.BBtn_OKClick(Sender: TObject);

const Letters : set of Char = ['a'..'z','A'..'Z','А'..'Я','а'..'я']; var s : string;

i : Byte;

begin

s:= edtInput.Text; if s=''

then begin

ShowMessage('текст не введен'); Exit;

end;

del_tail(s);

while s<>'' do { организуем цикл по словам } begin

del_head(s);

37

memResult.Lines.Add (makeword(s,i)); delete(s,1,i);{ удаление слова из текста }

end;

Лабораторнаяработа№10 Использованиеподпрограмм

1.Даны действительные числа s , t . Получить

f (t, 2s,1.17) f (2.2,t,s t),

где

f (a,b,c,) 2a b sinc . 5 | c|

2.Даны действительные числа s , t . Получить

g(1.2,s) g(t,s) g(2s 1,st) ,

где

g(a,b)

a2 b2

a2 2ab 3b2 4

3.Даны действительные числа a , b , c. Получить

max(a,a b) max(a,b c) . 1 max(a bc,1,15)

4.Даны действительные числа a , b . Получить

u max(a,b),

v min(ab,a b),

min(u v2 ,3.14).

5.Даны действительные числа s , t . Получить

h(s,t) max(h2(s t,st),h4 (s t,s t)) h(1,1) ,

где

 

h(a,b)

a

 

b

 

(a b)3 .

 

 

 

 

 

 

 

1 b2

1 a2

 

 

6.

Даны действительные числа a0 ,...,a6 .

Получить для

значения

 

p(x 1) p(x), где

 

 

 

 

 

 

p(y) a y6

a y5

... a .

 

 

6

5

 

0

 

7.

Даны действительные числа

s ,

t , a0 ,...,a12 .

Получить

 

p(1) p(t) p2 (s t) p3(1), где

 

 

 

 

 

p(y) a12x12 a11x11 ... a0 .

8.Даны действительные числа x1 , y1 , x2 , y2 , …, x10 , y10 . Найти пе-

риметр десятиугольника, вершины которого соответственно коор-

38

динаты (x1, y1) , (x2 , y2 ) , …, (x10 , y10). Определить процедуру вычисления расстояния между двумя точками, заданными своими координатами.

9.Дано натуральное число n , действительные числа x1 , y1 , x2 , y2 , …, xn , yn . Найти площадь n -угольника, вершины которого при некотором последовательном обходе имеют координаты (x1, y1) , (x2 , y2 ) , …, (xn , yn ). Определить процедуру вычисления площади треугольника по координатам его вершин.

10.Дано четное число n 2; проверить для этого числа гипотезу Гольдбаха. Эта гипотеза (по сегодняшний день не опровергнута и полностью не доказана) заключается в том, что каждое четное n , большее двух, представляется в виде суммы двух простых чисел. Определить процедуру, позволяющую распознавать простые числа.

11.Дано натуральное число n . Выяснить, имеются ли среди чисел n ,

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

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

13.Даны натуральные числа n , m; найти НОД(n,m). Используя про-

грамму, включающую рекурсивную процедуру вычисления НОД ,

основанную на соотношении НОД(n,m) НОД(m,r) , где r – ос-

таток от деления n на m. Чем эта программа хуже нерекурсивной программы вычисления НОД(n,m)?

14.Даны натуральные числа a , c, m. Получить f (m), где

n,

если 0 n 9,

 

f (n)

 

 

 

в противном случае.

g(n) f (n 1 g(n)) n,

Использовать программу, включающую рекурсивную процедуру

вычисления f (n).

 

 

 

 

15. Даны неотрицательные целые числа n ,

m; вычислить A(n,m) , где

 

m 1,

если n 0,

 

 

 

 

если n 0, m 0,

A(n,m) A(n 1,1)

 

 

A(n,m 1))

если n 0, m 0

 

A(n 1,

 

 

39

 

 

Это функция Аккермана. Использовать программу, включающую рекурсивную процедуру.

16.Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей другого, за исключением его самого (таковы, например, числа 220 и 284). Напечатать все пары “дружественных” чисел, не превосходящих заданного натурального числа.

17.Даны координаты вершин двух треугольников. Определить, какой из них имеет большую площадь.

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

19.

Три

прямые на плоскости заданы

уравнениями

ak x bk y ck

 

(k 1,2,3). Если эти прямые попарно пересекаются и образуют

 

треугольник, найти его площадь.

 

 

 

20.

Даны коэффициенты многочленов P(x) и Q(x) 15-й степени и да-

 

но

вещественное

число

a .

Вычислить

величину

P(a Q(a)P(a 1)).

Текстовые файлы

Текстовые файлы являются последовательными файлами (доступ к их элементам может быть получен лишь последовательно от начала до конца файла).

Для работы с текстовым файлом в программе следует описать файловую переменную типа textfile:

var f : textfile;

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

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]