Вычислить скалярное произведение S - C (СИ)
Формулировка задачи:
Вычислить скалярное произведение S
s=(A(p+r+q),p)
Решение задачи: «Вычислить скалярное произведение S»
textual
Листинг программы
//Вычислить скалярное произведение s=(A(p+r+q),p)
#include <stdio.h>
#include <stdlib.h>
//structure VECTOR, elements: -------------------------------------------------
//------------------name - one-character name
//------------------x,y,z - coordinates
struct VECTOR
{ char name;
double x,y,z;
};
//set vector with the given name ----------------------------------------------
void setVector(char name, VECTOR *v)
{ v->name = name;
printf("\nVector %c:\n", name);
printf("\tx = ");
scanf("%lf", &v->x);
printf("\ty = ");
scanf("%lf", &v->y);
printf("\tz = ");
scanf("%lf", &v->z);
}
//copy vector -----------------------------------------------------------------
void copyVector(char destName, VECTOR *dest, VECTOR *source)
{ dest->name = destName;
dest->x = source->x;
dest->y = source->y;
dest->z = source->z;
}
//add vector b to a -------------------------------------------------------------
void add (VECTOR *a, VECTOR *b)
{ a->x = a->x + b->x;
a->y = a->y + b->y;
a->z = a->z + b->z;
}
//product number*vector ---------------------------------------------------------
void numProduct(VECTOR *a, double num)
{ a->x = num *a->x;
a->y = num *a->y;
a->y = num *a->y;
}
//dot product vector*vector ---------------------------------------------
double dotProduct (VECTOR *a, VECTOR *b)
{ return a->x * b->x + a->y * b->y + a->z * b->z;
}
//------------------------------------------------------------------------------
int main()
{ VECTOR p,q,r,sum;
double A;
setVector('p', &p);
setVector('q', &q);
setVector('r', &r);
printf("A = ");
scanf("%lf", &A);
copyVector('sum', &sum, &p); //sum = p
add(&sum,&q); //sum = p+q
add(&sum,&r); //sum = p+q+r
numProduct(&sum,A); //sum = (p+q+r)*A
printf("Dot Product S = (A(p+r+q),p) = %lf", dotProduct(&sum,&p));
flushall();
getchar();
return 0;
}
Объяснение кода листинга программы
- Включение необходимых библиотек
- Объявление структуры VECTOR для хранения координат вектора
- Функция setVector для ввода значений координат вектора
- Функция copyVector для копирования вектора
- Функция add для сложения двух векторов
- Функция numProduct для умножения вектора на число
- Функция dotProduct для вычисления скалярного произведения векторов
- Создание четырех векторов p,q,r,sum
- Ввод значения переменной A с помощью функции scanf
- Копирование значений вектора p в вектор sum
- Добавление значений вектора q к вектору sum
- Добавление значений вектора r к вектору sum
- Умножение вектора sum на значение A с помощью функции numProduct
- Вычисление скалярного произведения S = (A(p+r+q),p) с помощью функции dotProduct
- Вывод значения S на экран
- Очистка буфера с помощью функции flushall
- Ждем нажатия любой клавиши с помощью функции getchar
- Возврат 0 из функции main, что означает успешное выполнение программы
- Значения переменных p,q,r,sum не выводятся на экран, так как они используются только для вычислений
- Значение переменной A вводится с клавиатуры, поэтому оно не выводится на экран