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

Учебное пособие_Алгоритмизация

.pdf
Скачиваний:
43
Добавлен:
23.02.2015
Размер:
1.26 Mб
Скачать

Начало

Ввод xn, xk,dx

x = xn

Нет

Да

 

x > 0

 

 

 

y = x2+5x

 

y = ln(x)

 

 

 

Вывод x, y

x = x + dx

x > xk

Конец

Рис. 28. Блок-схема к примеру 15

50

Задания для самостоятельной работы

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

 

3

,

t 0,

(b t)

 

y ln(t 3),

t 0,

 

 

 

t 0.

2 сos t,

 

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

1

x

,

 

x

0,

 

 

2

, 0

x 2,

y (x 2)

 

ln x3 ,

 

x 2.

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

3

x, x

5,

sin

 

y 10,

 

 

x 5,

 

3

2,

x 5.

x

 

4. Разработать алгоритм программы, которая переводит температуру,

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

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

x,

x 0,

y(x 2)2 , 0 x 5,

ln x3 1, x 5.

6.Задан параллелограмм со сторонами a и b и углом α между ними.

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

7. Написать программу, которая выводит таблицу значений функции y = x2 - 8x - 1 в диапазоне от -3 до 3 с шагом 1.

8. Написать программу, которая выводит таблицу значений функции t = |a - 3|, где а изменяется от -5 до 5 с шагом 0,5.

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

2 + 4 + 6 + 8 + …

10. Написать программу, которая вычисляет сумму первых n целых положительных чисел.

51

11. Разработать алгоритм, который вычисляет

значение

y, которое

 

 

 

 

 

 

 

 

y

x

соответствует каждому значению x (x = 1, dx = 0,5),

по формуле

 

.

x 2 1

Считать y до тех пор, пока подкоренное выражение больше или равно 0,05.

Определить k – количество вычисленных y.

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

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

Элементы одномерного массива задаются именем массива и порядковым номером, например: Х[1]. Для описания массива служат служебные слова array

и of. В программе Турбо Паскаль описать массив можно двумя способами.

Первый способ предусматривает описание переменной в разделе var, например: var

y: array[1..20] of real;

Второй способ связан с вводом нового типа данных и последующим описанием переменных этого типа, например:

type massiv = array[1..15] of word; var a, b: massiv.

Ввод-вывод элементов массива, а также его обработка осуществляются в цикле. Для этого удобнее использовать цикл for …do.

Для того чтобы заполнить массив произвольными числами, используется функция Random (датчик случайных чисел). Диапазон случайных чисел в данном случае включает числа от 0,0 до 1,0. Чтобы изменить диапазон,

необходимо воспользоваться формулой a + (b – a)* Random, где а – левая граница значений, а b – правая. Чтобы получить неповторяющиеся элементы массива используют процедуру Randomize.

Randomize; for i:=1 to n do

a[i]:=-5+10* Random;

52

Рекомендации по решению задач на тему «Массивы» представлены в

табл. 9.

 

 

 

 

 

 

 

 

 

 

Таблица 9

 

 

 

Обработка одномерных массивов

 

 

 

 

 

 

 

 

 

 

 

 

 

Формулировка задания

 

Рекомендации к

 

Фрагмент программы

п/п

 

выполнению задания

 

 

 

 

 

 

 

1

Найти сумму

элементов

1.

Присвоить

начальное

s:=0;

 

 

 

массива А

 

 

 

 

 

 

 

значение сумме S:=0

 

for i:=1 to n do

 

 

 

 

 

 

 

 

 

 

 

2. В теле цикла выполнить

s:=s+a[i];

 

 

 

 

 

 

команду S:= S + a[i]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

Найти

произведение

1.

Присвоить

начальное

p:=1;

 

 

 

элементов массива А

 

 

 

значение произведения P:=1

for i:=1 to n do

 

 

 

 

 

 

 

 

 

 

2. В теле цикла выполнить

p:=p*a[i];

 

 

 

 

 

 

команду P:=P*a[i]

 

 

 

 

 

3

Найти

максимальный

1. Первый элемент массива и

max:=a[1];

 

 

 

элемент в массиве А и его

 

 

 

его номер

запишем

как

kmax:=1;

 

 

 

номер

 

 

 

 

 

 

 

максимальный

 

 

for i:=2 to n do

 

 

 

 

 

 

 

 

 

 

 

 

2.

Все элементы, начиная со

if a[i]>max then

 

 

 

 

 

второго,

 

сравниваем

с

begin

 

 

 

 

 

 

максимальным

 

 

max:=a[i];

 

 

 

 

 

 

3.

Если

текущий

элемент

kmax:=i;

 

 

 

 

 

 

массива

оказывается больше

end;

 

 

 

 

 

 

максимального,

 

ему

 

 

 

 

 

 

 

присваивается

значение

 

 

 

 

 

 

 

«максимальный»

 

 

 

 

 

4

Расположить

 

элементы

1. Сравним

первый элемент

for j:=1

to

n-1 do

 

массива

в

порядке

 

массива со вторым: если

for i:=1 to n-j do

 

 

возрастания их значений

 

 

первый

окажется

больше

if y[i] > y[i+1] then {Если

 

 

 

 

 

 

 

 

второго, то поменяем их

элемент

 

больше

 

 

 

 

местами

 

 

 

 

следующего,

то

поменять

 

 

 

 

2.

Повторить эти

действия

их

 

местами}

 

 

 

 

для 2-го и

3-го элементов,

begin

 

 

 

 

 

 

3-го и 4-го и т.д.

 

 

b:=y[i];

{Сохранить

 

 

 

 

3. Для

преобразования

n

значение

 

текущего

 

 

 

 

элементов,

необходимо

элемента}

 

 

 

 

 

 

обработать массив n-1 раз,

y[i]:=y[i+1] {Заменить

 

 

 

 

каждый

 

раз

уменьшая

текущий

 

элемент

 

 

 

 

диапазон просмотра на один

следующим}

 

 

 

 

 

 

элемент

 

 

 

 

y[i+1]:=b;

{Заменить

 

 

 

 

 

 

 

 

 

 

следующий

 

элемент

 

 

 

 

 

 

 

 

 

 

текущим}

 

 

 

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

writeln(„Упорядоченный

 

 

 

 

 

 

 

 

 

 

массив‟);

 

 

 

 

 

 

 

 

 

 

 

 

for i:=1 to n do

 

 

 

 

 

 

 

 

 

 

 

write(y[i],‟ „);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

53

 

 

 

 

 

Окончание табл. 9

 

 

 

 

 

 

1

 

2

 

3

4

5

Удаление

элемента

из

Записать элемент (m+1) на

begin

 

массива (из массива А,

место элемента m, (m+2) – на

write ('vvedite n');

 

состоящего из n элементов

место (m+1) и т.д.

readln (n);

 

удалить m-й по номеру

 

writeln('vvedite m');

 

элемент)

 

 

 

readln(m);

 

 

 

 

 

for i:=1 to n do

 

 

 

 

 

begin

 

 

 

 

 

write ('a[',i,']=');

 

 

 

 

 

readln (a[i])

 

 

 

 

 

end;

 

 

 

 

 

for i:=m to n-1 do

 

 

 

 

 

a[i]:=a[i+1];

 

 

 

 

 

for i:=1 to n-1 do

 

 

 

 

 

writeln(a[i],' ');

 

 

 

 

 

readln

 

 

 

 

 

end.

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

Двумерный массив в Паскале описывается аналогично одномерному: var <имя массива>:array[m1..m2, m3..m4] of <тип элементов массива>;

или

type <имя типа>=array[m1..m2, m3..m4] of <тип элементов массива>; var <имя массива>:<имя типа>;

m1, m2, m3, m4 – границы индексов элементов массива.

Ввод двумерных массивов осуществляется поэлементно по строкам: for i:=1 to n do

for j:=1 to m do read(a[i,j] );

Вывод элементов двумерного массива осуществляется по следующей схеме:

writeln (' Матрица А'); for i:=1 to n do

begin

writeln;

for j:=1 to m do

54

write( a[i,j]:6:2, ' ');{Печатается строка}

end;

При решении задач следует помнить следующие свойства матриц:

элемент лежит на главной диагонали, если номер строки элемента совпадает с номером столбца i = j;

элемент лежит ниже главной диагонали, если i > j;

элемент находится выше главной диагонали, если i < j;

элемент лежит на побочной диагонали, если выполняется равенство i + j – 1 = n.

ПРИМЕР 16. Напишите программу, которая вычисляет сумму двумерного массива по столбцам.

Листинг программы: program summa;

var a:array[1..100,1..100] of integer; s:array[1..100] of integer; i,j,n,m: integer;

begin

writeln ('Введите число строк и столбцов'); readln (n, m);

writeln ('Введите массив'); for i:=1 to n do

for j:=1 to m do read(a[i,j]);

writeln ('Введенный массив'); for i:=1 to n do

begin

for j:=1 to m do

write(a[i,j]:4);

writeln;

end;

for j:=1 to m do

{Для каждого столбца}

55

for i:=1 to n do s[j]:=s[j]+a[i,j]; {Суммируем элементы одного

столбца}

writeln('___________________');

for i:=1 to m do write(s[i]:4);

writeln;

readln;

end.

Задания для самостоятельной работы

1.Дан массив из N чисел. Определить количество чисел, превышающих число 7. Найти произведение этих чисел.

2.Дан массив вещественных чисел. Найти минимальный элемент массива

иего номер.

3.Дан массив из N чисел. Заменить все его отрицательные элементы 0.

Сформировать новый массив.

4.Дан массив из N чисел. Определить, сколько раз число 2 встречается в массиве. Сформировать новый массив, в котором все 2 заменить на 1.

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

6.Найти минимальный элемент в двумерном массиве и вывести всю строку, в которой он находится.

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

A(NxN).

8.Определите, сколько раз число 0.5 встречается выше главной диагонали матрицы.

9.Дана матрица. Заменить 0 элементы на ее главной и побочной диагоналях.

10.Каждый столбец матрицы A(NxN) упорядочить по убыванию.

56

Строки

Строка – это набор символов, заключенных в апострофы, количество которых не превосходит 255.

Описание строк осуществляется следующим образом: var <имя строки> : string [длина строки];

<имя строки> : string;

или

type <имя типа данных> = string [длина строки]; var <имя строки> : <имя типа данных>;

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

Обращение к элементам строк осуществляется следующим образом: st[5];

Строки можно склеивать и сравнивать между собой. Например: st1:=‟Добрый ‟;

st2:=‟ день‟; st:= st1 + st2;

В переменной st хранится строка символов „Добрый день‟.

Сравнение строк происходит слева на право, до первого несовпадения символов. Чем больше код символа в таблице кодов, тем длиннее считается строка („маша‟ > ‟мама‟).

Процедуры и функции, применяемые к строкам

Функция length (st) находит длину строки st.

Функция copy (st, pos, k) копирует подстроку длиной k, начиная с позиции pos строки st.

Процедура delete (st, pos, n) удаляет из строки st n символов, начиная с позиции pos.

Процедура str (x[:f] [:n],st) преобразует числовое значение x в строку st

(возможно задание формата, где f – количество позиций в числе, n – количество позиций после точки).

57

Процедура val (st, x, err) преобразует строковое значение st в числовую переменную x , err возвращает номер позиции, где произошла ошибка при преобразовании, или 0, если ошибки не было.

Подпрограммы в Турбо Паскале

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

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

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

Обычно в виде ПП оформляют логически завершенные части алгоритма,

имеющие смысловую ценность. Текст ПП записывается только один раз в разделе «Блок описаний» и ему присваивается некоторое имя. В основной программе выполняется только вызов этого участка по его имени.

В Паскале существует два вида подпрограмм: процедуры и функции.

Преимущества использования ПП:

позволяют сократить объем программы;

улучшить структуру программы;

существенно уменьшить вероятность ошибок;

облегчает процесс отладки всей программы целиком;

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

Главное отличие процедур от функций заключается в том, что результатом последних является одно значение.

Процедуры

Процедура – это особым образом оформленный фрагмент программы,

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

Описание процедуры в общем виде выглядит следующим образом:

58

procedure < имя> (<список формальных параметров>); var

{объявление внутренних переменных процедуры}; begin

{операторы процедуры};

end;

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

<имя процедуры> (<список фактических параметров>).

Пример процедуры:

Procedure Line (n: integer; c: char);

Var i: integer;

begin

for i:=1 to n do write(c); writeln;

end;

Для вызова процедуры в основной программе используется ее имя:

Line(20, ‘*’);

Line(15, ‘–’);

Line(20, ‘+’);

ПРИМЕР 17. Используя процедуру Line, постройте таблицу

логарифмов чисел от 1 до 10.

program log;

uses crt;

procedure Line(n: integer; c: char);

var i: integer;

begin

for i:=1 to n do write(c);

writeln;

end;

59