Решение задач обработки одномерных массивов — КиберПедия 

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Решение задач обработки одномерных массивов

2017-11-17 474
Решение задач обработки одномерных массивов 0.00 из 5.00 0 оценок
Заказать работу

Пример 1. Ввести одномерный массив M из пятнадцати элементов и число v. Для каждого элемента массива вычислить

. (1)

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

Решение.

Program mass1;

Var

M, MN: array [1..15] of real;

{описание одномерных массивов, каждый из 15 вещественных чисел}

v, max, prom, S, Average: real;

i, k, n: integer;

Begin

writeln('Введите 15 элементов массива');

for i:=1 to 15 do {цикл для ввода 15 элементов M }

Begin

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

readln(M[i]); {ввод элемента с текущим индексом i }

end;

writeln('Введите значение переменной v');

readln(v); {ввод значения переменной v }

for i:=1 to 15 do

{цикл для создания и вывода 15 элементов MN }

Begin

MN[i]:=sqrt(abs(sin(M[i])/cos(M[i])))-

(sqr(v)-ln(i)/ln(2))/(2+2*sin(M[i]));

writeln('MN[',i,']=',MN[i]:5:2);

end;

{поиск максимального элемента массива MN:}

max:=MN[1]; k:=1;

for i:=2 to 15 do

if MN[i]>max then

begin max:=MN[i]; k:=i end;

writeln('max=',max:5:2);

{меняем местами второй и минимальный элементы массива MN:}

prom:=MN[2]; {промежуточной величине присваивается

значение второго элемента массива MN }

MN[2]:=MN[k];

{второму элементу массива MN присваивается значение максимального

элемента, номер k которого найден выше}

MN[k]:=prom; {элементу под номером k присваивается значение

второго элемента, хранящегося в переменной prom }

k:=0; S:=0; {начальное значение счетчика и суммы}

for i:=1 to 15 do

if (i mod 3)=2 then

begin k:=k+1; {значение счетчика увеличивается на единицу,

если остаток от деления номера i на 3 равен 2}

S:=S+MN[i]

{суммирование элементов, соответствующих условию}

end;

Average:=S/k; {расчет среднего арифметического}

writeln('Average=',Average:5:2);

{вывод среднего арифметического}

k:=0; {начальное значение счетчика}

for i:=1 to 15 do

if MN[i]<0 then

Begin

k:=k+1;

MN[i]:=Average;

end;

if k>0 then

for i:=1 to 15 do writeln('MN[',i,']=',MN[i]:5:2)

else writeln('Отрицательных элементов нет');

End.

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

Таблица 1 − Задачи по обработке одномерных массивов

Вариант Задача
  Ввести одномерный массив D из семи элементов и число b. Для каждого элемента массива вычислить . Вывести полученный массив. Найти сумму элементов массива Z с нечетными индексами. Подсчитать количество отрицательных элементов Z
  Ввести одномерный массив B из восьми элементов и число x. Для каждого элемента массива вычислить . Вывести полученный массив. Найти сумму элементов массива G с четными индексами. Подсчитать количество положительных элементов G
  Ввести одномерный массив C из десяти положительных элементов и число a. Для каждого элемента массива вычислить . Вывести полученный массив. Найти максимальный элемент Y. Подсчитать количество элементов Y, больших числа 5
  Ввести одномерный массив M из девяти элементов и число w. Для каждого элемента массива вычислить . Вывести полученный массив. Найти минимальный элемент X. Подсчитать количество элементов X, значение которых больше двух
  Ввести одномерный массив D из шести элементов и число t. Для каждого элемента массива вычислить . Вывести полученный массив и найти среднее арифметическое его положительных элементов

Окончание таблицы 1

Вариант Задача
  Ввести одномерный массив D из пятнадцати элементов и число b. Для каждого элемента массива вычислить . Вывести полученный массив. Заменить значение первого элемента массива V значением минимального элемента этого массива
  Ввести одномерный массив F из одиннадцати элементов и число m. Для каждого элемента массива вычислить . Вывести полученный массив. Найти среднее арифметическое элементов массива G, больших числа четыре. Определить количество таких элементов
  Ввести одномерный массив F из десяти элементов и число k. Для каждого элемента массива вычислить . Вывести полученный массив. Найти сумму отрицательных элементов массива G. Заменить модулем полученного значения элементы с четными индексами
  Ввести одномерный массив H из тринадцати элементов и число a. Для каждого элемента массива вычислить . Вывести полученный массив. Найти максимальный отрицательный элемент массива K и заменить второй элемент массива K найденным значением
  Ввести одномерный массив D из десяти элементов и число b. Для каждого элемента массива вычислить . Вывести полученный массив. Поменять местами минимальный и максимальный элементы R
  Ввести одномерный массив U из десяти элементов и число n. Для каждого элемента массива вычислить . Вывести полученный массив. Определить произведение отрицательных элементов массива D. Поменять местами значения последнего и минимального элементов D
  Ввести одномерный массив G из четырнадцати элементов и число h. Для каждого элемента массива вычислить . Вывести полученный массив. Найти среднее арифметическое элементов Y, значения которых по модулю не превосходят числа 2. Определить среди них минимальный элемент
   

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

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

Процедура описывается между разделом описаний и разделом операторов основной программы.

Формат описания:

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

< раздел описаний процедуры >

Begin

< раздел операторов процедуры >

end;

В списке формальных параметров перечисляются переменные и указываются их типы.

Различают параметры-аргументы (входные данные для процедуры) и параметры-результаты (для возвращения в основную программу результатов работы процедуры), причем перед списком переменных-результатов каждого типа указывается слово Var.

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

Procedure prim(x:real; var f:real);

Begin

f:=sqrt(abs(х))-sin(x);

writeln('f(',x:4:2,')=',f:7:4);

end;

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

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

Формат оператора вызова процедуры

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

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

Например, вызов описанной выше процедуры prim в основной программе осуществляется посредством кода:

prim(7; y); {вычисление значения функции f при x = 7 – результат

присваивается переменной y }

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

Формальные и фактические параметры в соответствующих списках могут отсутствовать вообще. В языке Pascal предусмотрена возможность получать и возвращать значения через глобальные (указанные в разделе описаний основной программы) переменные.

Пример 2. Задать массив, состоящий из десяти вещественных элементов, и вывести их на экран. Определить синус каждого элемента массива и отобразить результаты на экране. Каждый отрицательный элемент полученного массива заменить единицей и вывести модифицированный массив.

Решение.

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

Program mas2;

Var

M: array [1..10] of real; {описание одномерного массива}

i, n: integer;

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

Begin

{цикл для вывода 10 элементов массива}

for i:=1 to 10 do writeln('M[',i,']=',M[i]:5:2);

end;

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

writeln('Введите 10 элементов массива');

for i:=1 to 10 do {цикл для ввода 10 элементов M }

Begin

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

readln(M[i]); {ввод элемента с текущим индексом i }

end;

Print; {вызов процедуры вывода}

for i:=1 to 10 do M[i]:=sin(M[i]);

Print; {вызов процедуры вывода}

for i:=1 to 10 do

if M[i]<0 then M[i]:=1;

Print; {вызов процедуры вывода}

End.

Задание 2. Составить программу решения варианта задачи из таблицы 1 с использованием процедур пользователя (для ввода, вывода элементов массивов, выполнения базовых операций суммирования, вычисления произведений, нахождения минимального элемента и т. д.).

 

Другая разновидность подпрограмм − функция пользователя − возвращает в точку вызова только один параметр-результат простого стандартного типа. В общем виде функцию описывают перед разделом операторов, после описания процедур пользователя (если таковые имеются):

Function < имя функции >

(< список формальных параметров-аргументов >):

< тип функции (результата)>;

< раздел описаний функции >

Begin

< раздел операторов функции, содержащий оператор присваивания >

end;

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

< имя функции >:=< выражение >

Вызов функции из основной программы возможен только из выражения (например, в операторе присваивания или операторе вызова процедуры) путем указания имени функции и фактических параметров-аргументов, заключенных в круглые скобки:

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

При этом вычисленное значение функции возвращается в точку вызова функции в программе так же, как возвращается значение любой стандартной (встроенной) функции, например, sin(x).

Пример 3. Вычислить значение выражения

. (2)

Решение.

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

Program r1;

Var x, r: real;

{описание функции с формальным параметром z }

Function tg(z:real):real;

Begin

tg:=sin(z)/cos(z);

end;

Begin

writeln('Введите значение x');

read(x);

{при вызове функции тангенс используются фактические параметры,

т. е. z заменяется на x }

r:=(tg(x/2)+sqr(1/tg(x)))/(1+2*tg(3*sqr(x)));

writeln('x=',x:4:1,' r=',r:5:2);

End.

Пример 4. Вычислить сумму ряда

(3)

при положительных значениях переменной x.

Решение.

Вычисление факториала − неоднократно повторяющаяся операция при решении данной задачи. Целесообразно описать и использовать в основной программе функцию пользователя для вычисления факториала.

Program sum1;

Var x, un, S: real;

i, n: integer;

{описание функции с формальным параметром m }

Function fact(m: integer):real;

Var j:integer;

Begin

fact:=1;

for j:=1 to n do fact:=fact*j;

end;

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

writeln('Введите число x > 0');

read(x);

writeln('Введите число слагаемых ряда');

read(n);

un:=x/2; S:=un;

{начальные значения степенного выражения и суммы ряда}

for i:=1 to m-1 do

Begin

un:=un*sqr(x/2);

S:=S+un*fact(2*i)/(sqr(fact(i))*(2*i+1))

{вычисление текущих значений степенного выражения и суммы ряда}

end;

writeln('S=',S:6:4);

End.

Задание 3. Составить программу для вычисления суммы или произведения ряда при произвольных значениях переменной x (таблица 2).

Таблица 2 − Суммы и произведения

Вариант Ряд Вариант Ряд
   
   
   
   
   
   

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

1 Перечислите структурированные типы данных языка Pascal.

2 Сформулируйте определение массива в языке Pascal.

3 Какие массивы используются на Pascal?

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

5 Описание одно-, двумерного массивов. Тип элементов массивов.

6 Организация ввода и вывода элементов массива.

7 Суммирование и вычисление произведений элементов массива.

8 Поиск минимального и максимального элементов массива.

9 Подсчет количества элементов массива, удовлетворяющих заданным условиям.

10 Как поменять местами значения двух элементов массива?

11 Понятие процедуры и функции пользователя.

12 Как описать процедуру или функцию пользователя?

13 Как осуществляется в программном коде вызов подпрограммы?

14 Назначение формальных и фактических параметров.


Лабораторная работа 3

Mathcad. Базовые операции.
Ранжированные переменные. Функции. Графики

Цель работы: получить первичные навыки работы в системе Mathcad. Изучить основные понятия и базовые операции, способы задания и использования ранжированной переменной, способы создания и форматирования графиков в системе Mathcad.

Сведения из теории

1.1 Основы работы в системе Mathcad

Запустить систему математических, научных и инженерных расчетов Mathcad можно из главного меню: Start / All Programs / Mathsoft Apps / Mathcad (Пуск / Все программы / Mathsoft Apps / Mathcad). Интерфейс Mathcad внешне напоминает интерфейс большинства приложений Windows.

При запуске системы, как правило, автоматически создается новый документ Mathcad с именем Untitled1 (Безымянный), который желательно сразу сохранить, выполнив команду File / Save as (Файл / Сохранить как). В открывшемся окне необходимо выбрать папку и задать имя файла. По умолчанию файлы Mathcad получают расширение.mcd.

 
Рисунок 1 – Панель инструментов Math

Для ввода математических символов, греческих букв, шаблонов матриц и графиков служат панели математических операторов и шаблонов. Они собраны на единой панели математических инструментов Math (Математическая), показанной на рисунке 1. Чтобы отобразить данную панель, необходимо выполнить команду View / Toolbars / Math (Вид / Панели инструментов / Математическая).

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

· формульные;

· текстовые;

· графические.

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

Для копирования и перемещения областей используются команды меню Edit (Правка) или стандартные комбинации клавиш операционных систем семейства Windows. Кроме того, удалить выделенную область можно, нажав комбинацию клавиш Ctrl D.

Выровнять несколько областей по горизонтали можно командой Format / Align Regions / Across /(Формат / Выравнивание областей / Горизонтально). Вариант Down (Вертикально) предназначен для выравнивания областей по вертикали. Отделение областей друг от друга при их наложении производится командой Format / Separate Regions (Формат / Отделить области).


Поделиться с друзьями:

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

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.081 с.