Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование на паскале2.doc
Скачиваний:
145
Добавлен:
31.03.2015
Размер:
935.94 Кб
Скачать

1.4.5. Примеры разработки программ

Пример 1. Программа решения квадратного уравнения

ax2 + bx + c=0

Исходные данные:a,b,c- коэффициенты уравнения, вещественные переменные.

Выходные данные:х1, х2 - значения двух корней уравнения, если дискриминант неотрицателен, и значения вещественной и мнимой частей комплексно-сопряженных корней, если дискриминант отрицателен; это также вещественные переменные.

Промежуточные данные:d- дискриминант уравнения, вещественная переменная.

Блок-схема алгоритма представлена на рис.7. Алгоритм должен разделяться на две ветви в зависимости от знака дискриминанта, поэтому он использует базовую структуру ветвление. Ввод исходных данных,вычисление и анализ dсоединены последовательно (используется базовая структура следование).

По этой блок-схеме написана программа:

Program kv_ur;

Var a,b,c,x1,x2,d:real;

Begin

Writeln('введите коэффициенты уравнения');

Readln(a,b,c);

d:=sqr(b)-4*a*c;

if d>=0 then

begin

x1:=(-b-sqrt(d))/2/a;

x2:=(-b+sqrt(d))/2/a;

writeln('действ. корни уравнения х1=',x1, 'x2=',x2)

end

else

begin

x1:=-b/2/a;

x2:=sqrt(-d)/2/a;

writeln(‘уравнение имеет комплексно-сопряженные корни’);

writeln('мнимая часть компл. корней х2=',x2);

writeln('действит. часть компл. корней х1=',x1)

end;

Readln;{для задержки экрана с результатами}

End.

Пример 2.Составить программу решения следующей задачи.

На начало первого из рассматриваемых месяцев вклад клиента в банке был равенaруб. В течение каждого следующего месяца со счета снимаетсяb руб.; в конце каждого месяца на остаток вклада начисляетсяр%. Вывести величину вклада на начало 1, 2,...n месяца.

Исходные данные:a,b,p- вещественные переменные,n- целая переменная.

Выходные данные: i - номер месяца, v - величина вклада на начало месяца.

Блок-схема алгоритма приведена на рис. 8.

Program primer2;

Var a,b,p,v:real; n,i:integer;

Begin

Writeln('Введите a,b,p,n');

Readln(a,b,p,n);

If a<b then

writeln('a,b недопустимы')

else

begin

v:=a;

i:=1;

while (i<=n) and (v>=b) do

begin

writeln(i:7, v);

v:=v-b;

v:=v*(1+p/100);

i:=i+1

end

end;

Readln;

End.

Обратите внимание, что при v<nbвозможна ситуация, когда цикл выполнится меньше, чемnраз.

1.5. Массивы

1.5.1. Понятие массива. Основные правила работы с массивами в Паскале

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

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

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

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

Количество индексов у элементов массива называется размерностью массива. Массив размерности 1 называется также одномерным, размерности 2 - двумерным, и т. д. Двумерные массивы также называются матрицами.

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

В Паскале начальное значение каждого индекса может быть любым целым значением, как положительным, так отрицательным или нулевым. В примерах этого пособия поддерживается естественная нумерация элементов, начиная с единицы. Так, одномерный массив аиз двадцати элементов имеет элементыа[1], a[2],...,a[20]. Элементы двумерного массива (матрицы)bс размерами 3 и 5 можно представить в виде таблицы из 3 строк и 5 столбцов. Принято считать, что первый индекс является номером строки, а второй - номером столбца таблицы:

b[1][1] b[1][2] ... b[1][5]

b[2][1] b[2][2] ... b[2][5]

b[3][1] b[3][2] ... b[3][5]

При описании массивов необходимо указать начальное и конечное значение всех его индексов. Описание M-массива имеет вид:

имя: array[нач_знач1..кон_знач1] ...[ нач_значM..кон_значM]ofтип;

В квадратных скобках указывается нач_значiикон_значi– начальное и конечное значениеi-го индекса, обязательноконстанты, иначе компилятор не сможет выделить память под массив. После ключевого словаofуказывается тип элементов массива.

Например,

Vara:array[1..20]ofinteger; {одномерный массив – вектор - из 20 элементов целого типа}

b:array[1..3,1..5]ofreal;{двумерный массив – матрица - из 3 строк и 5 столбцов – вещественного типа}

c:array[1..N]ofinteger; { одномерный массив изNэлементов целого типа, описание допустимо только в том случае, еслиN- константа, определенная в разделе констант}

a1:array[0..19]ofreal;{одномерный массив из 20 элементов}

a2:array[-9..10]ofreal; { одномерный массив из 20 элементов }

Если некоторый тип-массив используется в программе несколько раз, то имеет смысл этот тип обозначить некоторым именем. Например,

AR1=ARRAY [1..10,1..10] OF REAL

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

Для описания переменных Х, У этого типа в разделе переменных может присутствовать инструкция :

Х: AR1; У: AR1; {эквивалентно Х, У: AR1; }

Двумерные массивы располагаются в памяти по строкам,многомерные - так, что чаще меняются правые индексы.

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