0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 1
1

Заданы два вектора х = (x1, x2, x3, x4), y = (y1, y2, y3, y4). Определить угол a между векторами x и y по формуле

16.01.2019, 13:32. Показов 2370. Ответов 2
Метки си (Все метки)

Заданы два вектора х = (x1, x2, x3, x4), y = (y1, y2, y3, y4). Определить угол a между векторами x и y по формуле. Вычисление скалярного произведения оформить в виде процедуры.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h> 
#include <stdlib.h> 
#include < math.h > 
#define N 4 
 
double s(int *a, int *b) {
    int i, k;
    double sum;
    k = 0; sum = 0;
    for (i = 1; i <N;i++) {
        k = a[i] * b[i];
        sum = +k;
    }
    return sum;
 
}
 
 
int main() {
 
    int  i, x[N], y[N];
    double a, dx, dy, sumx, sumy, kx, ky; 
 
    //ввод
    printf("Vvedite koordinati vectora X");
    for (i = 0;i < N;i++)
        scanf_s("%d", &x[i]);
 
    printf("Vvedite koordinati vectora Y");
    for (i = 0;i < N;i++)
        scanf_s("%d", &y[i]);
 
    //вывод
    printf("Vector X:");
    for (i = 0;i < N;i++)
        printf("X[%d] = %d\n",i, x[i]);
    printf("Vector Y:");
    for (i = 0;i < N;i++) 
        printf("Y[%d] = %d\n",i, y[i]);
 
 
        kx = ky = sumx = sumy = dx = dy = a = 0;
        for (i = 1;i < N;i++) {
            kx = x[i] * x[i];
            ky = y[i] * y[i];
            sumx = +kx;
            sumy = +ky;
        }
        dx = sqrt(sumx);
        dy = sqrt(sumy);
        printf("sumx = %.2lf, sumy = %.2lf", sumx, sumy);
        printf("dx = %.2lf,dy = %.2lf", dx, dy);
        a = s(*x,*y) / (dx*dy);
 
        printf("Ugol megdu vectorami = %lf", acos(a));
 
        getch();
    }
Компилятор ошибок не выдает, но выполнение программы зависает на строке k = a[i] * b[i]; в процедуре. Подскажите, пожалуйста, что не так.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2019, 13:32
Ответы с готовыми решениями:

Заданы два вектора. Определить угол между векторами
№1 Вычисления в математических задачах Заданы два вектора с координатами (X1, Y1, Z1) и (X2, Y2,...

Заданы два вектора с координатами (Хи Yu Z,) и (Х2, Y2, Z^). Определить угол между векторами
Заданы два вектора с координатами (Х1 Y1 Z1) и (Х2, Y2, Z2). Определить угол между векторами....

Заданы два вектора с координатами (x1, y1, z1) и (x2, y2, z2). Определить угол между векторами
Смотрел примеры на паскале но нужно написать на Dev-C++ помогите плз!

Заданы 2 вектора с координатами. Определить угол между векторами
Заданы 2 вектора с координатами (X1,Y1,Z1) и (X2,Y2,Z2). Определить угол между векторами. ...

2
289 / 95 / 40
Регистрация: 04.10.2011
Сообщений: 329
16.01.2019, 14:18 2
C
1
2
3
...
a = s(*x,*y) / (dx*dy); // так вы пытаетесь передать значение 1-го элемента массива
...
- не верно. Правильно так:
C
1
2
3
...
a = s(x,y) / (dx*dy);
...
0
1841 / 1066 / 679
Регистрация: 25.04.2016
Сообщений: 3,003
17.01.2019, 21:44 3
Anya394, я не знаю по какой формуле вы находите угол между векторами, но меня насторожили некоторые моменты в вашем коде.

Первое: в функции double s(int *a, int *b) у вас цикл действительно начинается с 1? Такой же вопрос к циклу в main.
Второе, в той же функции sum = +k; действительно так и должно быть? Потому как, если вы хотели написать sum = sum + k; то это записывается немного иначе: sum += k; Аналогичная форма записи встречается еще пару раз по тексту.

Ну и на ошибку передачи указателей в функцию вам уже любезно указал moskitos80.

В общем, поправил вашу программу на свое усмотрение, но не уверен действительно ли она считает то, что нужно, поскольку не знаю вашей формулы:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 4
 
double s (int *a, int *b)
{
    int i, k = 0;
    double sum = 0.0f;
    for (i=0; i<N; i++)     // <- тут точно цикл c 1 ?
        sum += a[i] * b[i];
    return sum;
}
void print (int *a)
{
    int i;
    printf("{ ");
    for (i=0; i<N; i++)
        printf("%d ", a[i]);
    printf("}\n");
}
 
int main (void)
{
    int  i, x[N], y[N];
    double a, dx, dy, sumx, sumy;
 
    //ввод
    printf("Vvedite koordinati vectora X:\n");
    for (i=0; i<N; i++)
    {
        printf("\tx%d = ", i+1);
        scanf("%d", &x[i]);     // scanf_s("%d", &x[i]);
    }   printf("\n");
 
    printf("Vvedite koordinati vectora Y:\n");
    for (i=0; i<N; i++)
    {
        printf("\ty%d = ", i+1);
        scanf("%d", &y[i]);     // scanf_s("%d", &y[i]);
    }   printf("\n");
 
    //вывод
    printf("Vector X ");    print(x);
    printf("Vector Y ");    print(y);
    printf("\n");
 
    sumx = sumy = 0.0f;
    for (i=0; i<N; i++)     // <- тут точно цикл c 1 ?
    {
        sumx += x[i] * x[i];
        sumy += y[i] * y[i];
    }
    dx = sqrt(sumx);
    dy = sqrt(sumy);
    printf("sumx = %.2lf\tsumy = %.2lf\n", sumx, sumy);
    printf("dx = %.2lf\tdy = %.2lf\n", dx, dy);
    a = s(x,y) / (dx*dy);
 
    printf("Ugol megdu vectorami = %lf\n", acos(a));
 
    getchar();  // getch();
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2019, 21:44
Помогаю со студенческими работами здесь

Заданы 2 вектора. Определить угол между векторами x и y. Вычисление скалярного произведения оформить в виде процедуры
Нуждаюсь в помощи т.к. совсем не разбираюсь в Pascal Заданы 2 вектора. Определить угол между...

Определить угол a между векторами x и y по формуле
Заданы два вектора х = (x1, x2, x3, x4), y = (y1, y2, y3, y4). Определить угол a между векторами x...

Определить угол a между векторами x и y по формуле
Заданы два вектора х = (x1, x2, x3, x4), y = (y1, y2, y3, y4). Определить угол a между векторами x...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru