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

6. Метод

Вывод имени, числа и значений элементов массива согласно выходной форме (по схеме образцов 2, 3).

7. Описание процедурысделаем сразу на Паскале.

8. Кодирование на паскале

Определение глобальных типовсделано в задачеA0.1. Других типов в данной задаче не требуется.

 Параметр – массив опишем как параметр – переменную с целью экономии памяти.

Описание процедуры

Вариант 1.Файловая переменная открытого файла передается как глобальная

procedure output(n:byte; var mas:massiv; name_mas:char);

var

i:byte;

begin

writeln(res,' Массив ',name_mas,' из ',n:3,' элементов:'); {обр2,4,6}

for i:=1 to n do

write(res,mas[i]:3:1,' '); {обр3,5,7}

writeln(res);

end;

Вариант 2. Файловая переменная открытого файла передается как параметр

procedure output(n:byte; var mas:massiv; name_mas:char; var res1:text);

var

i:byte;

begin

writeln(res1,' Массив ',name_mas,' из ',n:3,' элементов:'); {обр2,4,6}

for i:=1 to n do

write(res1,mas[i]:3:1,' '); {обр3,5,7}

writeln(res1);

end;

•• Вызовы

Подзадача

n

mas

Вариант 1

Вариант 3

A0.3.1

na

a

output(na,a,’a’);

output(na,a, ’a’, res);

A0.3.2

nb

b

output(nb,b,’b’);

output(nb,b, ’b’, res);

A0.3.3

nc

c

output(nc,c,’c’);

output(nc,c, ’c’, res);

Задача A0.3

1. Задача A0.3. Подсчитать сумму элементов одномерного массиваmasизnэлементов.

2. Входные данные

цел n– число элементов массива; во внутреннем представлении;

вещ mas[n] – исходный массив; во внутреннем представлении.

3. Выходные данные

вещ s– сумма элементов массива; во внутреннем представлении.

Оформление заголовка и вызова процедуры

Вид– общего вида (можно было бы оформить и функцию)

Имяsumma

Заголовок– процsumma(n,mas,s);

Вызов – осуществляется трижды, для каждого из массивов.

Соответствие формальных и фактических параметров и вызовы:

Подзадача

n

mas

s

Вызов

A0.3.1

na

a

sa

summa(10,a,sa);

A0.3.2

nb

b

sb

summa(20,b,sb);

A0.3.3

nc

c

sc

summa(15,c,sc);

Вызов запишем в головной модуль вместо соответствующих подзадач.

4. Аномалиине рассматриваем

5. Функциональные тестыте же, что для задачи в целом

6. Метод

Суммирование элементов одномерного массива.

7. Описание процедуры

Описание ввиду его тривиальности сделаем сразу на Паскале.

8. Кодирование на Паскале

Определение глобальных типовсделано в задачеA0.1. Других типов в данной задаче не требуется.

 Параметр – массив опишем как параметр – переменную с целью экономии памяти.

Описание процедуры

procedure summa(n:byte;mas:massiv;var s:real);

var

i:byte;

begin

< операторы подсчета s >

end;

Программа в целом

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

Вариант 1

program mas3(dat,res);

{описание глобальных типов и констант}

const

nmax=20;

type

massiv=array[1..nmax] of real;

{описания переменных головного модуля}

var

na,nb,nc:byte;

a,b,c:massiv; {все массивы одного типа!}

sa,sb,sc:real;

name:char;

dat,res:text; {файловые переменные для входного и выходного файлов}

{описание процедур ввода и вывода одномерного массива}

procedureinput(varn:byte;varmas:massiv);

var

i:byte;

begin

readln(dat,n);

for i:=1 to n do

readln(dat,mas[i]);

end;

procedure output(n:byte; var mas:massiv; name_mas:char);

var

i:byte;

begin

writeln(res,' Массив ',name_mas,' из ',n:3,' элементов:'); {обр2,4,6}

for i:=1 to n do

write(res,mas[i]:3:1,' '); {обр3,5,7}

writeln(res);

end;

{описание процедуры суммирования элементов массива}

proceduresumma(n:byte;mas:massiv;vars:real)

var i:byte;

begin

< операторы подсчета s >

end;

begin

assign (dat, paramstr(1)); reset(dat);

assign (res,paramstr(2)); rewrite(res);

writeln (res, ' <Заголовок по обр1>');

{ввод и вывод массивов}

input (na, a); {ввод массива a}

output(na,a,'a'); { вывод массиваaпо обр 2, 3}

input (nb, b); { ввод массива b}

output (nb, b,'b'); { вывод массива b по обр 4, 5}

input (nc, c); { ввод массива c}

output (nc, c,'c'); {вывод массива c по обр 6, 7}

{подсчет сумм элементов }

summa(10,a,sa); {обработка.10 элементов массива a из 20 элементов}

summa(20,b,sb); {обработка.20 элементов массива b из 20 элементов}

summa(15,c,sc); {обработка.15 элементов массива c из 20 элементов}

< вывод sa,sb,sc по обр 8>

< сравнение sa,sb,sc и формирование name >

< вывод name по обр 9>

close(dat); close(res);

end.

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

program mas3(.....);

{описание глобальных типов и констант}

……………..

var

{описания переменных головного модуля}

…………….

dat,res:text; {файловые переменные для входного и выходного файлов} {описание процедур ввода и вывода одномерного массива}

procedure input(var n:byte; var mas:massiv; var dat1:text);

…….

begin

…….

end;

procedure output(n:byte; var mas:massiv; name_mas:char; var res1:text);

…….

begin

…….

end;

{описание процедуры суммирования элементов массива}

procedure summa(n:byte;mas:massiv;var s:real)

…….

begin

…….

end;

begin

……….

{ввод и вывод массивов}

input(na,a,dat); {ввод массива a}

output (na, a,'a', res); { вывод массива a по обр 2, 3}

input(nb,b,dat); { ввод массива b}

output (nb, b,'b', res); { вывод массива b по обр 4, 5}

input(nc,c,dat); { ввод массива c}

output (nc, c,'c',res); {вывод массива c по обр 6, 7}

{подсчет сумм элементов }

……..

< вывод sa,sb,sc по обр 8>

< сравнение sa,sb,sc и формирование name >

< вывод name по обр 9>

close(dat); close(res);

end.

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

•• Необходимо соблюдать соответствие типов формальных и фактических параметров. Согласно правилам Паскаля, они должны быть одного типа (буквально!). Поэтому для параметров нестандартных типов следует описывать типы (в разделе type) с тем, чтобы в заголовке процедуры указатьимятипа.

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

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

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