Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Условие задачи записано в двух абзацах:
- в первом абзаце приводится описание подпрограммы Р, которую надо разработать;
- во втором абзаце приводится задание, для выполнения которого надо использовать разработанную подпрограмму.
Первый абзац
В описании подпрограммы Р фигурирует некоторая функция f, о которой известно следующее: а)она зависит от одного аргумента, в)тип этого аргумента, с) тип самой функции. Имя функции f должно быть среди формальных параметров подпрограммы Р. Подпрограмма Р не должна содержать операторов ввода и вывода. В ней должны производиться те и только те действия и над теми объектами, которые указаны в описании подпрограммы (т.е. в первом абзаце). В процедуре Р должен обрабатываться только одномерный массив (или два одномерных массива). Не "перетягивайте" в подпрограмму Р матрицу и действия, которые не описаны в первом абзаце.
Второй абзац
Надо внимательно прочитать второй абзац и определить какие функции будут использоваться в качестве фактических при обращении к подпрограмме Р. Это могут быть функции, реализующие sin(z), cos(z), ln(z), exp(z), abs(z), int(z), sqrt(z), x3, x2 и т.д. Обратите внимание, что описания этих функций должны быть расположены вне других подпрограмм.
Проанализируйте содержание абзаца. Если там сказано, что надо обработать каждую строку матрицы, то надо будет переписывать в одномерный рабочий массив текущую строку матрицы и передавать ее в подпрограмму Р в качестве фактического параметра . Аналогично, если надо обрабатывать каждый столбец матрицы или всю матрицу целиком, их надо будет переписывать в одномерный рабочий массив. Ввод исходных данных и вывод результатов надо делать непосредственно в main.
Внимание. 1)проверку правильности ввода исходных данных производить не надо.
2)Переписывать условие задачи не надо.
П Р И М Е Р Э К З А М Е Н А Ц И О Н Н О Й З А Д А Ч И
Разработать подпрограмму Р для вычисления суммы и количества тех элементов массива x,
для которых f( x[i] ) > c, где f - некоторая функция, c - заданная величина, x - массив вещественных чисел.
Используя подпрограмму P, для каждой строки матрицы а c 5 строками и 7 столбцами найти и вывести
сумму тех ее элементов, значения синусов которых больше 0.3, а если таких элементов в строке нет
вывести сообщение нет .
То же самое сделать для элементов, значения косинусов которых больше 0.2.
1)Таблицы данных
Таблица данных для void P( float x[], int n, float c, float f(float z), float &s, int &kol )
Вид данного |
Обозна-чение |
Смысл |
Тип |
Лримечание |
Параметры, передаваемые в подпрограмму |
X |
Заданный одномерный массив вещественных чисел |
float |
|
n |
Кол-во элементов массива Х |
int |
||
C |
Заданная величина |
float |
||
F |
Вещественная функция одного вещественного аргумента |
void |
||
Результаты |
S |
Сумма элементов массива x, для которых f( x[k] ) > c |
float |
|
kol |
Кол-во элементов массива x, для которых f( x[k] ) > c |
int |
||
Промежуточные данные |
k |
Номер текущего эл-та массива х |
int |
PS.
Таблица данных для void main()
Вид данного |
Обозна-чение |
Смысл |
Тип |
Примечание |
Исходные данные (ИД) |
a |
Матрица вещественных чисел |
float |
|
Результирующие Данные (РД) |
sum1 |
Сумма элементов текущей строки, синус которых больше 0.3 |
float |
|
sum2 |
Сумма элементов текущей строки, косинус которых больше 0.2 |
float |
||
Промежуточ-ные данные |
Rab |
Рабочий массив для хранения текущей строки |
float |
|
Kol1 |
Кол-во элементов текущей строки, синус которых больше 0.3 |
Int |
||
Kol2 |
Кол-во элементов текущей строки, косинус которых больше 0.2 |
Int |
||
i |
Номер текущей строки матрицы а |
Int |
||
j |
Номер текущего столбца матрицы а |
int |
Некоторые замечания
- в условии задачи явно не указано, что необходимо найти количество элементов строки, для которых синус больше, чем 0.3 или количество элементов, для которых косинус больше, чем 0.2. Но это приходится делать, чтобы определить есть ли такие элементы в строке.
4)Алгоритмы
Для функции P |
для функции main : |
Начало s:=0 kol:=0 для k от 0 до (n-1) шаг 1 цикл если ( f(x[k]) < c ) то s:= s+ x[k] kol:= kol +1 конец если конец цикла конец |
Начало ввод c ввод массива (ai,j, i:=1,…,5, j:=1,…,7) для i от 1 до 5 шаг 1 цикл перепись i-ой строки в массив rab вычисление sum1, kol1 { p(rab, 7, 0.3, f1, sum1, kol1) } если ( kol1 > 0 ) то вывод sum1 иначе вывод нет конец_если вычисление sum2, kol2 { p(rab, 7, 0.2, f2, sum2, kol2) } если ( kol2 > 0 ) то вывод sum2 иначе вывод нет конец_если конец_цикла конец |
Для функции f1= sin(z) |
|
Для функции f2=cos(z) |
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
float f1(float z)
{ return sin(z);}
float f2(float z)
{ return cos(z);}
void p( float x[ ], int n, float c, float f(float z), float &s, int &kol )
{
float s; int k;
s=0; kol=0;
for(k=0; k<n; k++)
if ( f(x[k])>c)
{ s=s+x[k];
kol++;
}
}
void main()
{
float a[5][7], rab[7];
float sum1, sum2;
int i, j, kol1, kol2;
cout<<”введите массив а”;
for (i=0; i<5; i++)
for (j=0; j<7; i++)
cin>> a[i][j];
for (i=0; i<5; i++)
{
for (j=0; j<7; j++) rab[j]=a[i][j];
cout<<”\nsum1=”;
p( rab, 7, 0.3, f1, sum1, kol1 )
if(kol1>0)
cout>>sum1;
else
cout>>”нет”;
cout<<”\nsum2=”;
p( rab, 7, 0.2, f2, sum2, kol2 )
if(kol2>0)
cout>>”\nsum2=”>>sum2;
else
cout>>”нет”;
getch();
}