Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Примеры программирования задач с использованием подпрограмм




При программировании задач возможны несколько вариантов. Выбор правильного (более эффективного и надежного) варианта зависит от опыта программиста

Задача 1

Даны два вектора: = {хi}; i = и ={yi};i = . Вычислить значение: D = , где ; ;

тх, ту - максимальные компоненты векторов и соответственно;

sx, sy - средние значения компонент векторов и соответственно.

Решение:

#include "stdafx.h"

#include <math.h>

float Mod_Otkl (float *a, int n) /* функция для нахождения максимального компонента и среднего значения в любом массиве */

{

float ma, sa, Da;

int i;

ma =-10000;

sa=0;

for (i =0;i<n;i++)

{

if (a[i]>ma) ma= a[i];

sa += a[i];

}

sa = sa/n;

Da= fabs(ma - sa);

return Da;

}

void main()

{ float X[10],Y[10];

int i;

float Dx, Dy, D;

printf("Bведитe массив X:\n");

for (i =0;i<8;i++)

scanf("%f",&X[i]);

printf("Bведитe массив Y:\n");

for (i =0;i<10;i++)

scanf("%f",&Y[i]);

Dx = Mod_Otkl(X, 8); //вызов функции Mod_Otkl для массива X

Dy = Mod_Otkl(Y,10); //вызов функции Mod_Otkl для массива Y

D = Dx/Dy;

printf("D=%f\n",D);

}

 

Задача 2

Даны две матрицы: А = {a i j }5x6 и В = {b i j }4x7.

Вычислить разность: С = КА - KB, где КА и KB - количество положительных элементов в матрицах А и В соответственно.

#include "stdafx.h"

int CP(float D[7][7], int m, int n) /* функция для подсчета количества положительных элементов в матрице */

{ int i, j, KD;

KD=0;

for (i=0;i<m;i++)

for (j=0;j<n;j++)

if (D[i][j]>0) KD ++;

return KD;

}

int main()

{

float A[7][7], B[7][7];

int i,j, C;

printf("Введите матрицу А\n");

for (i=0;i<5;i++)

for (j=0;j<6;j++)

scanf("%f",&A[i][j]);

printf("Введите матрицу B\n");

for (i=0;i<4;i++)

for (j=0;j<7;j++)

scanf("%f",&B[i][j]);

 

C= CP(A, 5,6) - CP(B, 4, 7);

printf("C=%d\n", C);

return 0;

}

 

Задача 3

На плоскости декартовыми координатами заданы 10 точек:

{x1,y1},{x2,y2},...,{х1010}.

Вывести полярные координаты точки, имеющей наибольший полярный радиус. Вычисление полярных координат одной точки оформить подпрограммой. Расчетные формулы для вычисления полярных координат следующие:

, где а и b - координаты точки.

Решение:

#include "stdafx.h"

#include<math.h>

void PK(float a, float b, float *ro, float *fi) /* функция для расчета полярных координат точки */

{

*ro = sqrt(a*a + b*b);

*fi = atan(b/a);

}

int main()

{

float X[10], Y[10], R[10], F[10];

int i, n;

float max;

printf("Введите абсциссы 10 точек\n");

for (i=0;i<10;i++) scanf("%f",&X[i]);

printf(" Введите ординаты 10 точек\n");

for (i=0;i<10;i++) scanf("%f",&Y[i]);

max = 0;

for (i=0;i<10;i++)

{

PK(X[i],Y[i],&R[i],&F[i]);

if (R[i]>max) // поиск максимального радиуса

{

max =R[i];

n=i;

}

}

printf("romax=%f fimax=%f\n", R[n],F[n]);

return 0;

}

 

Задача 4

Для заданных квадратных матриц: A = {a i j}3x3 и В = {bi j}4х4 вычислить симметричные матрицы по правилу:

Решение:

#include "stdafx.h"

void SM(float Y[4][4], int n, float X[4][4])

{

int i,j;

for (i=0;i<n;i++)

for (j=i;j<n;j++)

{

X[i][j]=(Y[i][j] + Y[j][i])/2;

X[j][i] =X[i][j];

}

}

void main()

{

float A[4][4], B[4][4], C[4][4], D[4][4];

int i, j;

printf("Введите матрицу А\n");

for (i=0;i<3;i++)

for (j=0;j<3;j++) scanf("%f",&A[i][j]);

printf("Введите матрицу B\n");

for (i=0;i<4;i++)

for (j=0;j<4;j++) scanf("%f",&B[i][j]);

SM(A, 3,C);

SM(B, 4, D);

printf("Симметричная матрица С\n");

for (i=0;i<3;i++)

{for (j=0;j<3;j++) printf("%8.2f",C[i][j]);

printf("\n");

}

printf("Симметричная матрица D\n");

for (i=0;i<4;i++)

{for (j=0;j<4;j++) printf("%8.2f",D[i][j]);

printf("\n");

}

}




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


Дата добавления: 2014-12-26; Просмотров: 387; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.