Операторы цикла с предусловием

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

1. Каков тип выражения в операторе цикла с предусловием?

2. Верно ли, что в теле цикла с предусловием должен находится один оператор?

3. Когда проверяется истинность выражения в цикле while?

4. Сколько раз выполняется оператор в теле цикла while, если с самого начала значение выражения равно false?

5. Можно ли любой цикл for записать при помощи цикла while?

 

Задачи:

1. Даны натуральные числа n, m. Найти наибольший общий делитель n и m.

2. Дано натуральное число n. Получить все простые делители этого числа.

3. Дано натуральное число n. Получить все натуральные числа, больше n и взаимно простые с ним.

4. Даны действительные числа x, . Вычислить с точностью сумму .

5. Даны действительные числа x, . Вычислить с точностью сумму .

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

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

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

9. Дано натуральное число n. Получить все натуральные трехзначные числа, сумма цифр которого равна n.

10. Вычислить .

11. Последовательность образована по следующему закону: . Получить , где k-наименьшее целое число, удовлетворяющее двум условиям: и .

12. Дано натуральное число n. Получить все меньшие n числа, если оно может быть представлено в виде , где m-простое число.

13. Найти все пары чисел, лежащих в диапазоне от 120 до 240, если каждое из них равно сумме всех делителей другого, кроме самого второго числа.

14. Дано натуральное число n. Среди чисел 1,…,n найти все такие, запись которых совпадает с последними цифрами записи их квадрата.

15. Дано целое число m>1. Получить наименьшее целое n, при котором .

16. Дано натуральное число n. Найти все такие тройки натуральных чисел a,b,c, что (пифагоровы тройки).

17. Дано натуральное число n ( ). Получить все пятерки натуральных чисел такие, что и .

18. Вычислить .

19. Даны действительные числа x, . Вычислить с точностью сумму .

20. Найти все значения , .

 

Литературы:

Основная литература:

1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988. - 320 с.

2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. - М.: Наука, 1987. - 112 с.

3. Вирт Н. Алгоритмы и структуры данных./Пер. с англ. М.: Мир, 1989. - 360 с.

4. Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982. - 382 с.

5. Дантеманн Дж., Мишел Дж., Тейлор Д. Программирование в среде Delphi: Пер. с англ. - Киев: НИПФ “ДиаСофтЛтд.”, 1995. - 608 с.

6. Епанешников, Фолкнер Д.Р. Delphi: Пер.с англ.- М.: БИНОМ, 1995. - 464 с.

7. Орлик С.В. Секреты Delphi на примерах: - М.: БИНОМ. - 316 с.

Дополнительная литература:

1. Перминов О.Н. Программирование на языке Паскаль. - М.: Радио и связь, 1988. - 224 с.

2. Пильшиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. - М.: Наука, 1989. - 160 с.

3. Прайс Д. Программирование на языке Паскаль: Практ. руководство. - М.: Мир, 1987. - 232 с.

4. Рубенкинг Н. Турбо Паскаль для Windows: В 2 т.; Пер. с англ. - М.: Мир, 1993. - 536 с.

5. Фаронов В.В. Турбо Паскаль. В 3-х книгах. Книга 1. Основы Турбо Паскаля. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1992. - 304 с.

6. Фаронов В.В. Паскаль и Windows. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1994. - 539 с.

 

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

Цикл с предусловием (While) записывается так:

while <условие> do <оператор>;

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

Рассмотрим тот же пример, выполненный с помощью while:

var i,sum: integer;

begin

sum:=0; i:=0;

while i<100 do begin

i:=i+1;

sum:=sum+i;

end;

writeln('Сумма равна=',sum);

readln;

end.

Решение одного варианта: Вычислить и вывести на печать значение функции (протабулировать функцию) на интервале с шагом 0,2.

A – начальное значения аргумента; B – конечное значения аргумента;

H – шаг изменения аргумента.

Блок-схема     Описание блок-схемы 1-блок – начало алгоритма 2-блок – ввод данных: а – начальное значения аргумента; b – конечное значения аргумента; h – шаг изменения аргумента 3-блок – если условие ложно, сразу же при первом обращении к циклу, то тело цикла не будет выполняться 4-блок – на х присваивается начальное значение аргумента, на а добавляется шаг изменения аргумента 5-блок – вычисляется значение функции по формуле 6-блок – печать полученного результата 7-блок – конец алгоритма

program PR2;

uses crt;

var a, b, h, x, y: real;

begin

clrscr;

writeln (‘введите a, b, h’);

read (a, b, h);

b:=b+h;

while (a<=b) do begin

x:=a;

a:=a+h;

y:=(x*x*x)-3*x+1;

writeln (‘x=’,x:3:1, ‘y=’,y:3:3);

end;

end.

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

Одномерные массивы

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

1. Дайте определение массива.

2. Какие типы недопустимы для компонентов массива? Почему?

3. В каком разделе программы надо написать описание данных?

4. Как определяется общее число элементов массива?

5. Что такое индекс? Какие типы данных используется в качестве индекса?

6. Какой массив называется одномерным?

7. Существует ли ограничения на размерность массива?

 

Задачи:

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

2. Найти среднее арифметическое элементов массива , предшествующих первому отрицательному элементу .

3. В массиве вычислить сумму отрицательных, произведение положительных и количество нулевых элементов.

4. Ввести массив . Подсчитать количество всех чисел, расположенных в промежутке [-1,1] и сумму всех остальных.

5. Дан массив . Создать новый массив элементы которого вычисляются следующим образом: .

6. Имеется функция, заданная таблицей на отрезке [ ]. Для произвольного аргумента , вычислить соответствующее значение , воспользовавшись формулой линейной интерполяции , где .

7. Дан массив . В элемент , содержащий наименьшее значение, записать среднее арифметическое значение элементов массива.

8. В массиве подсчитать количество нулевых элементов k и вычислить k!.

9. Дан массив . Все элементы, стоящие после , имеющего наибольшее значение, заменить нулями.

10. Дан массив . Вычислить сумму .

11. Дан массив . Найти произведение всех элементов, значения которых меньше 50, и сложить его с произведением элементов больших 100.

12. Даны два массива и . На место массива X записать массив Y, а на место массива Y – массив X.

13. Написать программу, которая проверяет, представляют ли элементы введенного с клавиатуры массива неубывающую последовательность.

14. Написать программу, которая определяет количество студентов в группе, чей рост превышает средний.

15. Даны целые числа . Если в данной последовательности ни одно четное число не расположено после нечетного, то получить все отрицательные члены последовательности, иначе – все положительные.

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

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

18. Даны вектора и . Получить вектор с, компонентами которого являются . Найти минимальный и максимальный элемент вектора c и их порядковые номера.

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

20. Даны целые числа . Найти три натуральных числа i, j, k, каждое из которых не превосходить десяти, такие что . Если таких чисел нет, то сообщить об этом.

 

Литературы:

Основная литература:

1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988. - 320 с.

2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. - М.: Наука, 1987. - 112 с.

3. Вирт Н. Алгоритмы и структуры данных./Пер. с англ. М.: Мир, 1989. - 360 с.

4. Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982. - 382 с.

5. Дантеманн Дж., Мишел Дж., Тейлор Д. Программирование в среде Delphi: Пер. с англ. - Киев: НИПФ “ДиаСофтЛтд.”, 1995. - 608 с.

6. Епанешников, Фолкнер Д.Р. Delphi: Пер.с англ.- М.: БИНОМ, 1995. - 464 с.

7. Орлик С.В. Секреты Delphi на примерах: - М.: БИНОМ. - 316 с.

Дополнительная литература:

1. Перминов О.Н. Программирование на языке Паскаль. - М.: Радио и связь, 1988. - 224 с.

2. Пильшиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. - М.: Наука, 1989. - 160 с.

3. Прайс Д. Программирование на языке Паскаль: Практ. руководство. - М.: Мир, 1987. - 232 с.

4. Рубенкинг Н. Турбо Паскаль для Windows: В 2 т.; Пер. с англ. - М.: Мир, 1993. - 536 с.

5. Фаронов В.В. Турбо Паскаль. В 3-х книгах. Книга 1. Основы Турбо Паскаля. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1992. - 304 с.

6. Фаронов В.В. Паскаль и Windows. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1994. - 539 с.

 

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

Массивы являются представителями структурированных типов данных, то есть таких, переменные которых составлены из более простых элементов согласно определённому порядку. Для массивов характерно то, что они являются совокупностью некоторого числа одинаковых элементов. В простейшем случае эти элементы могут быть занумерованы натуральными числами из некоторого диапазона. Рассмотрим пример такой переменной в Турбо Паскале:

var a: array [1..10] of real;

Переменная a состоит из десяти ячеек типа real, можно записывать и извлекать значения из них, пользуясь записью a[<номер ячейки>].

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

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

Описание одномерных массивов:

Type тип=array[1..n] of тип элементов;

Var имя массива:тип;

Нумеровать элементы массивов можно не только от единицы, но и от любого целого числа. Вообще для индексов массивов подходит любой порядковый тип, то есть такой, который в памяти машины представляется целым числом. Единственное ограничение состоит в том, что размер массива не должен превышать 64 Кб. Рассмотрим некоторые примеры объявления массивов:

Решение одного варианта:: В массиве X( ) (n=20) определить максимальный по значению элемент и напечатать значения этого элемента.

  program max; type mas=array[1..20]of integer; var A: mas; i: byte; max: integer; begin {блок заполнения} for i: =1 to 20 do readln (A[i]); {поиск максимального элемента} max:=A[1]; for I:=2 to 20 do if A[i]>max then max:=A[i]; write(‘макс.элемент=’,max); end.  

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

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

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

1. Какой массив называется двумерным?

2. Верно ли, что двумерный массив соответствует понятию прямоугольной таблицы (матрице)?

3. Верно ли, что двумерные массивы располагаются в памяти таким образом, что второй индекс изменяется быстрее, чем первый?

4. Как осуществляется доступ каждому элементу двумерного массива?

 

 

Задачи:

1. Вычислить вектор, равный произведению матрицы A(15,15) и вектора . Полученный вектор нормировать, т.е. каждый элемент разделить на .

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

3. В матрице С(9,5) найти среднее арифметическое всех элементов, удовлетворяющих условию .

4. В матрице А(7,9) определить max и min элементы и переставить их местами.

5. В матрице А(8,9) определить среднее арифметическое положительных и отрицательных элементов. Подсчитать количество нулевых элементов.

6. Вычислить , где - количество нулевых элементов в четных строках матрицы В(10,10).

7. В матрице А(6,6) все поддиагональные элементы заменить нулями.

8. В матрице D(10,15) найти сумму элементов каждой четной строки и произведение элементов каждой нечетной строки. Из полученных сумм и произведений образовать массив .

9. В матрице X(12,4) в каждой строке найти сумму элементов, лежащих в интервале . Образовать из этих сумм пятый столбец исходной матрицы.

10. Задана матрица X(7,11). Образовать матрицу Y(7,11) путем деления всех элементов исходной матрицы на ее элемент, наибольший по абсолютной величине.

11. В матрице А(10,10) найти сумму элементов, расположенных в строках с отрицательным элементом на главной диагонали.

12. Задана матрица X(6,6). Вычислить сумму элементов, расположенных на линиях, параллельных главной диагонали и находящихся выше нее.

13. В матрице X(8,8) найти среднее арифметическое элементов, расположенных под главной диагональю; на главной диагонали; над главной диагональю.

14. Задана матрица А(8,12). Построить вектор по следующему правилу: .

15. Даны матрицы А(7,7) и В(7,7). Построить матрицу С(7,7) по следующему правилу: .

16. Дана матрица А(5,10). Построить вектор , i-я компонента которого равна количеству положительных элементов i-строки матрицы А.

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

18. Целочисленная матрица А порядка содержит сведения о результатах сессии из 4 экзаменов для группы из 25 студентов. Найти количество и фамилии студентов, имеющих все оценки «5».

19. Целочисленная матрица А порядка содержит сведения о результатах сессии из 4 экзаменов для группы из 25 студентов. Найти количество и фамилии студентов, имеющих хотя бы одну оценку «удовлетворительно».

20. Целочисленная матрица А порядка содержит сведения о занятых местах n факультетов по m видам спорта в межвузовской спартакиаде студентов. Расставить факультеты в порядке занятых мест в общекомандном зачете.

 

Литературы:

Основная литература:

1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988. - 320 с.

2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. - М.: Наука, 1987. - 112 с.

3. Вирт Н. Алгоритмы и структуры данных./Пер. с англ. М.: Мир, 1989. - 360 с.

4. Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982. - 382 с.

5. Дантеманн Дж., Мишел Дж., Тейлор Д. Программирование в среде Delphi: Пер. с англ. - Киев: НИПФ “ДиаСофтЛтд.”, 1995. - 608 с.

6. Епанешников, Фолкнер Д.Р. Delphi: Пер.с англ.- М.: БИНОМ, 1995. - 464 с.

7. Орлик С.В. Секреты Delphi на примерах: - М.: БИНОМ. - 316 с.

Дополнительная литература:

1. Перминов О.Н. Программирование на языке Паскаль. - М.: Радио и связь, 1988. - 224 с.

2. Пильшиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. - М.: Наука, 1989. - 160 с.

3. Прайс Д. Программирование на языке Паскаль: Практ. руководство. - М.: Мир, 1987. - 232 с.

4. Рубенкинг Н. Турбо Паскаль для Windows: В 2 т.; Пер. с англ. - М.: Мир, 1993. - 536 с.

5. Фаронов В.В. Турбо Паскаль. В 3-х книгах. Книга 1. Основы Турбо Паскаля. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1992. - 304 с.

6. Фаронов В.В. Паскаль и Windows. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1994. - 539 с.

 

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

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

Примеры описаний многомерных массивов:

var Matrix: array[1..4,1..3] of real;

Cube3D: array[1..5,1..5,1..5] of integer;

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

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

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

Описание двумерных массивов:

Type тип=array[1..n,1..m] of тип элементов;

Var имя массива: тип;

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

Решение одного варианта: В массиве X[1..2,1..3] определить максимальный по значению элемент и напечатать значения этого элемента.

 

program max; type mas=array[1..2,1..3]of real; var A: mas; i,j: integer; max: real; begin {блок заполнения} for i:=1 to 2 do for j:=1 to 3 do readln (A[i,j]); {поиск максимального элемента} max:=A[i,j]; for i:=1 to 2 do for j:=1 to 3 do if A[i,j]>max then max:=A[i,j]; write(‘макс.элемент=’,max); end.  

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

Процедуры и функции

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

1. Дайте определение подпрограммы.

2. Существует ли подпрограммы без параметров?

3. Чем отличается описание процедуры от описания функции?

4. Какое количество значений возвращает функция?

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

6. Каким образом осуществляется обмен данными между основной программой и подпрограммой без параметров?

Задачи:

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

2. Написать функцию, которая вычисляет объем цилиндра. Параметрами функции должны быть радиус и высота цилиндра.

3. Написать процедуру, который вычисляет объем и площадь поверхности параллелепипеда.

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

5. Вычислить и запомнить количество отрицательных элементов каждого столбца для матриц А(10,10) и В(5,7).

6. Составить программу для нахождения среднего балла группы по результатам сессии. Оценки групп сведены в матрицы А(25,5). В(23,5), С(22,5), D(24,5). Определить лучшую группу.

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

8. Даны три строки различной длины. Напечатать ту из них, где больше гласных латинских букв.

9. Даны три слова переменной длины. Составить слово, содержащее символы-цифры, входящие в данные слова.

10. Даны две квадратные вещественные матрицы 5-го порядка. Напечатать квадрат той из них, в которой наименьший след (сумма диагональных элементов), считая, что такая матрица одна.

11. Даны квадратичные матрицы А и В порядка m. Получить матрицу АВ-ВА.

12. Даны окружность радиуса r с центром в точке О с координатами и две точки А и В с координатами и , соответственно. Выяснить, является ли отрезок АВ диаметром заданной окружности.

13. Даны матрицы А(3,4) и В(4,6). Поменять местами наименьшие элементы матриц А и В.

14. Вычислить математическое ожидание М и дисперсию D случайной величины по ее экспериментальным значениям , пользуясь формулами: , .

15. Выполнить с использованием функции , где x, y, z – положительные числа<1.

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

17. Выполнить с использованием функции , где x, y– положительные числа<1.

18. Подсчитать число точек, находящихся внутри круга радиусом r с центром в точке с координатами (1,1); координаты заданы массивами x(20), Y(20). Расстояние точки от центра круга определить в подпрограмме.

19. Написать функцию present, которая возвращает процент от числа, полученного в качестве аргумента.

20. Написать функцию вычисления факториала.

Литературы:

Основная литература:

1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988. - 320 с.

2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. - М.: Наука, 1987. - 112 с.

3. Вирт Н. Алгоритмы и структуры данных./Пер. с англ. М.: Мир, 1989. - 360 с.

4. Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982. - 382 с.

5. Дантеманн Дж., Мишел Дж., Тейлор Д. Программирование в среде Delphi: Пер. с англ. - Киев: НИПФ “ДиаСофтЛтд.”, 1995. - 608 с.

6. Епанешников, Фолкнер Д.Р. Delphi: Пер.с англ.- М.: БИНОМ, 1995. - 464 с.

7. Орлик С.В. Секреты Delphi на примерах: - М.: БИНОМ. - 316 с.

Дополнительная литература:

1. Перминов О.Н. Программирование на языке Паскаль. - М.: Радио и связь, 1988. - 224 с.

2. Пильшиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. - М.: Наука, 1989. - 160 с.

3. Прайс Д. Программирование на языке Паскаль: Практ. руководство. - М.: Мир, 1987. - 232 с.

4. Рубенкинг Н. Турбо Паскаль для Windows: В 2 т.; Пер. с англ. - М.: Мир, 1993. - 536 с.

5. Фаронов В.В. Турбо Паскаль. В 3-х книгах. Книга 1. Основы Турбо Паскаля. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1992. - 304 с.

6. Фаронов В.В. Паскаль и Windows. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1994. - 539 с.

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

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

Процедура – последовательность действий (записанных на Паскале), названная каким-либо именем. Для того чтобы выполнить эту последовательность, нужно в соответствующем месте программы указать её имя. Так, например, для очистки экрана при работе с графикой мы указываем ClearDevice;. Кроме того, что программа становится при использовании процедур короче и понятнее, процедуры можно вызывать из разных мест программы (в противном случае пришлось бы повторять в тексте программы одинаковые последовательности действий несколько раз).

Те действия, которые входят в процедуру, записываются до начала основной программы в следующем виде:

program ...

const ...

type ...

var ...

procedure MyProc(<служебная информация – параметры>);

begin

{действия}

end;

begin

{основная программа}

end.

 

Рассмотрим пример программы для поиска максимума среди чисел a+b, b+c и a+c:

program Max3;

var a,b,c,m: integer;

procedure FindMax(n1,n2,n3:integer;var max: integer);

begin

if n1>n2 then max:=n1 else max:=n2;

if n3>max then max:=n3;

end;

begin

write('Ââåäèòå a: '); readln(a);

write('Ââåäèòå b: '); readln(b);

write('Ââåäèòå c: '); readln(c);

FindMax(a+b,b+c,a+c,m);

writeln('Ìàêñèìóì èç ñóìì = ',m);

readln;

end.

В скобках после имени процедуры (в её описании) записаны так называемые параметры. Эта запись обозначает, что внутри процедуры можно использовать целые числа, обозначенные n1, n2 и n3, а также заносить значения в переменную типа integer, которая внутри процедуры называется max (а реально во время работы программы все действия производятся над переменной m). Параметры, в которых хранятся числа (n1,n2,n3) называются параметрами-значениями; а те, которые обозначают переменные – параметрами-переменными, перед ними в описании ставится слово var. Параметры, на которые имеются ссылки внутри процедуры (n1, n2, n3, max), называются формальными, а те, которые реально используются при вызове (a+b, b+c, a+c, m) — фактическими.

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

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

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

1. После имени функции и списка параметров (если есть) через двоеточие записывается тип значения функции (возможны не только числовые типы, но и логические, строковые, символьные);

2. Среди операторов в теле функции наиболее важными являются операторы присваивания значения функции (в нашем случае это строчка Max:=m;).

В записанной выше функции используется так называемая локальная переменная m, то есть переменная, которая «видна» только нашей функции, а другие процедуры и функции, а также главная программа её «не видят». Кроме локальных переменных в Турбо-Паскале можно определять локальные константы и типы.

Описание:

function имя (список формальных параметров)

{раздел описания локальных переменных}

begin

{тело функции}

end;

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

Решение одного варианта:

Написать функцию вычисления площади треугольника через длины сторон. Здесь будет использована формула Герона: , где p – полупериметр треугольника, a, b, c – длины сторон.

function Square(a,b,c: real): real;

var p: real;

begin

p:=(a+b+c)/2;

Square:=sqrt(p*(p-a)*(p-b)*(p-c));

end;

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

Строки

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

1. Является ли тип string структурированным типом данных?

2. Какое возможное максимальное количество символов может содержать строка?

3. Как при описании строкового типа указывается длина строки?

4. Если длина строки не указана при объявления переменных, то чему она равна по умолчанию?

5. Как происходить сравнение строк?

6. Перечислите основные процедуры и функции для обработки строк.

 

Задачи:

1. Строка содержит только цифры. Удалить все впереди стоящие нули.

2. Написать программу, которая запрашивает имя пользователя и здоровается с ним.

3. Написать программу, которая выводит на экран первую часть таблицы кодировки символов (символы имеющие коды от 0 до 127). Таблица должна состоять из восьми колонок и шестнадцати строк. В первой колонке должны быть символы, имеющие код от 0 до 15, во второй – от 16 до 31 и т.д.

4. Написать программу, которая проверяет, является ли введенная с клавиатуры строка целым числом.

5. Даны два различных слова, в каждом из которых от 1 до 8 строчных латинских букв и за каждым из которых – пробел. Напечатать эти слова в алфавитном порядке.

6. В заданном тексте удалить часть текста, заключенную в скобки.

7. Напечатать самое длинное слово из заданного текста.

8. Найти сколько раз в тексте встречается заданное слово.

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

10. В заданном тексте заменить символ пробел на символ запятая.

11. Написать программу, которая находить на какую букву начинается больше всего слов в тексте.

12. Дан текст. Если первый символ в тексте не является малой латинской буквой, то оставить без изменения. Если же это малая латинская буква, то заменить символом «*».

13. В заданном тексте везде заменить слово А1 на слово А2.

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

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

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

17. Разбить исходной текст на строки длиной не более 15 символов. Перенос на новую строку осуществлять на месте пробела (слова не переносить).

18. Назовем сложностью предложения сумму слов и знаков препинания. Определить сложность заданного предложения. Знаками препинания считать символы, не являющиеся буквами и пробелами.

19. Задан текст длиной не более 255 символов. Определить сколько раз в тексте встречаются запятая и точка.

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

 

Литературы:

Основная литература:

1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988. - 320 с.

2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. - М.: Наука, 1987. - 112 с.

3. Вирт Н. Алгоритмы и структуры данных./Пер. с англ. М.: Мир, 1989. - 360 с.

4. Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982. - 382 с.

5. Дантеманн Дж., Мишел Дж., Тейлор Д. Программирование в среде Delphi: Пер. с англ. - Киев: НИПФ “ДиаСофтЛтд.”, 1995. - 608 с.

6. Епанешников, Фолкнер Д.Р. Delphi: Пер.с англ.- М.: БИНОМ, 1995. - 464 с.

7. Орлик С.В. Секреты Delphi на примерах: - М.: БИНОМ. - 316 с.

Дополнительная литература:

1. Перминов О.Н. Программирование на языке Паскаль. - М.: Радио и связь, 1988. - 224 с.

2. Пильшиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. - М.: Наука, 1989. - 160 с.

3. Прайс Д. Программирование на языке Паскаль: Практ. руководство. - М.: Мир, 1987. - 232 с.

4. Рубенкинг Н. Турбо Паскаль для Windows: В 2 т.; Пер. с англ. - М.: Мир, 1993. - 536 с.

5. Фаронов В.В. Турбо Паскаль. В 3-х книгах. Книга 1. Основы Турбо Паскаля. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1992. - 304 с.

6. Фаронов В.В. Паскаль и Windows. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1994. - 539 с.

 

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

Для хранения строк (то есть последовательностей из символов) в Турбо-Паскале имеется тип string. Значениями строковых переменных могут быть последовательности различной длины (от нуля и более, длине 0 соответствует пустая строка). Объявить строковую переменную можно двумя способами:

1. var s: string; (максимальная длина строки — 255 символов),

2. var s: string[n]; (максимальная длина — n символов, n — константа или конкретное число).

Для того чтобы положить значение в строковую переменную используются те же приёмы, что и при работе с символами.

Приведём простейший пример со строками: программа спрашивает имя у пользователя, а затем приветствует его:

program Hello;

var s: string;

begin

write('Как Вас зовут: ');

readln(s);

write('Привет, ',s,'!');

readln;

end.

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

Для того чтобы в программе получить доступ к n-му символу строки используется запись s[n]. Если поменять значение s[0] то это отразится на длине строки.

Сравнение строк. Строки сравниваются последовательно, по символам. Сравниваются первые символы строк, если они равны — то вторые, и т. д. Если на каком-то этапе появилось различие в символах, то меньшей будет та строка, в которой меньший символ. Если строки не различались, а затем одна из них закончилась, то она и считается меньшей. Примеры: 'ананас'<'кокос', 'свинья'>'свинина', ''<'A', 'hell'<'hello'.

Склеивание (конкатенация) строк. К строкам можно применять операцию «+», при этом результатом будет строка, состоящая из последовательно записанных «слагаемых». Пример: после действия s:= 'abc'+'def'+'ghi'; переменная s будет содержать ‘abcdefghi’.

Процедуры и функции для работы со строками.

Наиболее часто употребляется функция:

length(s: string): integer;

После двоеточия записан тип значения, возвращаемого функцией, в нашем случае — целое число. Эта функция возвращает длину строки s.

Другие процедуры и функции приведены в таблице:

 

 

Процедура или функция Назначение Пример
функция Copy(s:string; start: integer;len: integer): string Возвращает вырезку из строковой переменной s, начиная с символа с номером start, длина которой len s:=’Бестолковый’; s1:=Copy(s,4,4); {в s1 станет ‘толк’}
функция Pos(s1:string;s:string):byte Ищет подстроку s1 в строке s. Если находит, то возвращает номер символа, с которого начинается первое вхождение s1 в s; если s1 не входит в s, то функция возвращает 0 n:=pos(‘министр’, ‘администратор’); {=3} n:=pos(‘abc’, ‘stuvwxyz’);{=0}
процедура Insert(s1:string; s:string; start: integer) Вставляет строку s1 в строковую переменную s начиная с символа с номером start. S:=‘кот’; insert(‘мпо’,s,3); {в s станет ‘компот’}
процедура Delete(s:string;start: integer; len:integer) Удаляет из строковой переменной s фрагмент, начинающийся с символа с номером start и длиной len s:= ‘треугольник’; delete(s,4,7); {в s останется ‘трек’}

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

Program pr1;

var ST: string [80]; {строка}

begin

writeln (‘удаление начальных пробелов строки’);

write (‘введите строку’);

readln (ST);

while(pos (‘ ‘, ST)=1) and (length (ST)>0) do

delete (ST, 1, 1);

write(‘строка без начальных пробелов:’, ST);

readln;

end.

слово CONSTRUCTOR. В момент обращения к конструктору в специальное поле объекта заносится адрес нужной ТВМ, в результате чего все виртуальные методы (в том числе и унаследованные от родителей!) получают доступ к нужным полям.

Конструктор может не обращаться к виртуальному методу и даже вообще быть пустым, т.е. не иметь никаких исполняемых операторов (как в нашем примере), тем не менее, объект будет инициализирован правильно. Дело в том, что заголовок CONSTRUCTOR предписывает компилятору создать специальный набор машинных инструкций, который инициализирует ТВМ и исполняется в момент обращения к конструктору до выполнения его (конструктора) содержательной части. В объекте может быть сколько угодно конструкторов, но ни один из них не может быть виртуальным.