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

10. Процедуры и функции Часть I

  1. Определите значение переменной y после выполнения следующей программы:

program massiv;

function test(a, b: integer): integer;

var z: integerl

begin

if a>b then z:=a else z:=b;

test:=2*z+1;

end;

var y, k1, k2: integer;

begin

k1:=test(3, 7);

k2:=test(5, 2);

y:=k1+k2;

end.

  1. Найдите ошибки в описании процедур и функций:

    a. function g(k:integer):0..maxint;

    var i,s:0..maxint;

    begin

    s:=0; for i:=1 to k do s:=s+sqr(i)

    end;

    b. function h(x:integer):integer;

    begin

    h(x):=(sqr(x)+x)/2

    end;

    c. function m(x:integer):integer;

    var i: integer;

    begin

    m:=0;

    for i:=1 to 10 do m:=m+x*x;

    end;

    d. procedure zero(a:array[1..10]

    of integer);

    var i: integer;

    begin

    for i:=1 to n do a[i]:=0;

    end;

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

const

n=5; {размерность векторов}

type

vector=array[1..n] of integer;

{Реализация процедур:

ReadVector(var a:vector) -ввод вектора.

WriteVector(a:vector) -вывод вектора.

Sum(a,b:vector; var s:vector) -поэлементное суммиров. векторов,

s[i]:=a[i]+b[i]}

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

var

a,b, {исходные вектора}

s: vector; {сумма векторов a и b}

begin

ReadVector(a);

ReadVector(b);

Sum(a, b, s);

WriteVector(a);

WriteVector(b);

WriteVector(s);

end.

  1. Напишите функцию для нахождения:

    1. максимального элемента вектора;

    1. суммы элементов вектора.

Часть II

  1. Написать процедуру или функцию:

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

    2. Написать функцию less для сравнения векторов, такую что less(a,b)=true <=> a<b <=> a[i]<b[i] для любого i

    3. Написать функцию для нахождения расстояния |a[i]-a[j]| между двумя наиболее близких по значению элементами вектора

    4. Написать функцию для нахождения расстояния |a[i]-a[j]| между двумя наиболее удаленными по значению элементами вектора

    5. Наити количество элементов группы, содержащей наибольшее число одинаковых элементов вектора

Например: 1 2 1 2 3 9 8 2 результат: 3

1 2 3 результат: 1

    1. Дан массив целых чисел x[1]..x[m+n], рассматриваемый как соединение двух его отрезков: начала x[1]..x[m] длины m и конца x[m+1]..x[m+n] длины n. Написать процедуру, которая не используя дополнительных массивов, переставляет начало в конец

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

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

    4. Написать процедуру для сортировки массива x по невозрастанию методом пузырька

Даны два массива целых чисел упорядоченные по невозрастанию:

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

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

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

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

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