Форум программистов, компьютерный форум CyberForum.ru

Скалярное произведение. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
noob123
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 33
20.12.2009, 12:28     Скалярное произведение. #1
Добрый лень, нужна помощь в реализации программы, вычисляющая скалярное произведение 2-х векторов используя рекурсию на языке Си. Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.12.2009, 14:08     Скалярное произведение. #2
a(a1, a2, a3, a4) b(b1, b2, b3, b4)

a*b = |a1*b1 + a2*b2 + a3*b3 + a4*b4|
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
20.12.2009, 14:29     Скалярное произведение. #3
вот так пойдет
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
#include <iostream>
#include <conio.h>
using namespace std;
 
int scalar(int V1[],int V2[],int n)
{
    int i=V1[n]*V2[n];
    if(!n)return i;
    return i + scalar(V1,V2,n-1);
}
void read(int V[],int n)
{
     for (int i=0;i<n;i++)
     {
         cout << i << "-";
         cin >> V[i];
     }
}
void write(int V[],int n)
{
     for (int i=0;i<n;i++)
     {
         cout << "["<< i <<"]="<< V[i] << " ";
     }
     cout << endl;
}
 
int main()
{
    const int n=5;
    int V1[n],V2[n];
    read(V1,n);
    read(V2,n);
    write(V1,n);
    write(V2,n);
    int s=scalar(V1,V2,n-1);
    cout << s;
    getch();
    return 0;
}
noob123
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 33
20.12.2009, 15:34  [ТС]     Скалярное произведение. #4
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
#include <stdio.h>
#include <conio.h>
 
#define SIZE 10
 
void enter_vector (int vector[], int por);
int scalar (int vector1[], int vector2[], int por);
 
int main()
{
    int x[SIZE], y[SIZE], n, res;
 
    printf ("\nInput n -> ");
    scanf_s ("%d",&n);
 
    if (n > 0 && n <= SIZE)
    {
        enter_vector(x, n);
        enter_vector(y, n);
        res = scalar (x, y, n - 1);
 
        printf ("\nres = %d",res);
    }
    else
        printf ("\nError. Input other n.");
 
    _getch();
    return 0;
}
 
void enter_vector (int vector[], int por)
{
    int i;
 
    printf ("\nInput vector -> ");
    
    for (i = 0; i < por; i++)
        scanf_s ("%d",&vector[i]);
}
 
int scalar (int vector1[], int vector2[], int por)
{
    int sum = vector1[por] * vector1[por];
    if (!por) return sum;
    return sum + scalar(vector1,vector2,por-1);
}
Вот что получилось. Некорректно в некоторых случаях вычисляет, где я ошибся?
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
20.12.2009, 17:36     Скалярное произведение. #5
я понял о чем ты, при n=3 и [1,2,3]x[2,2,2]=14, а должно быть 12. сейчас посмотрим

ошибка в 43 строчке:
C
1
int sum = vector1[por] * vector1[por];
должно быть:
C
1
int sum = vector1[por] * vector2[por];
noob123
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 33
20.12.2009, 17:47  [ТС]     Скалярное произведение. #6
Aye Aye, Огромное спасибо за помощь!)
Yandex
Объявления
20.12.2009, 17:47     Скалярное произведение.
Ответ Создать тему
Опции темы

Текущее время: 23:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru