Найти скалярное произведение векторов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Даны вещественные векторы x,y,z. Вычислить величину (а,а)-(b,c), где а обозначает тот из этих векторов, в котором самый большой минимальный элемент(считать, то такой вектор единственный ), b и c обозначают два других вектора , а (p,q) - скалярное произведение p и q.
#include <stdio.h>
 
void scan (float s[100],int n)
{
printf("Введите эл-ты массива %f\n",s[100]);
    for(int i=0;i<n; i++)
                scanf("%d", &s[i]);
 
};
 
void min (float s[100],int min,int n)
{
    
    int min=s[0];
    for(int i=1; i<n; i++)
                if(s[i]<min)
                min=s[i];
};

void main()
{
        int i,t=0,r=0,p=0,n,*a,*b,*c;
    float minx=0,miny=0,minz=0;
    float x[100], y[100],z[100];

        printf("Введите кол-во эл-в массива ");
        scanf("%d",&n);
    
    scan(x[100],n);
    scan(y[100],n);
    scan(z[100],n);
 
    min(x[100],minx,n);
    min(y[100],miny,n);
    min(z[100],minz,n);
 
    if(minx>miny)
        { if (minx>minz) a=x[100],b=y[100],c=z[100];
            else a=z[100],b=x[100],c=y[100];
        };
    else a=y[100],b=x[100],c=z[100];
        
    for (i=0;i<n;i++)t=t+a[i]*a[i];
    for (i=0;i<n;i++) r=r+b[i]*c[i];
    p=t-r;
 
    printf("Выражение (a,a)-(b,c) будет равно %d",p);
       
}
выдает ошибку при первой ссылке на подпрограмму scan

Решение задачи: «Найти скалярное произведение векторов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h> 
 
void scan (float *s,int n,char e[])
{
printf("vvedite elementi massiva %s\n",e);
        for(int i=0;i<n; i++)
                scanf("%f", &s[i]);
 
};
 
float mini (float *s,float min,int n)
{
        
         min=s[0];
        for(int i=1; i<n; i++)
                if(s[i]<min)
                min=s[i];
return min;
};
 
 
 
 
 
void main()
{               char v[]={'x','\0'},h[]={'y','\0'},g[]={'z','\0'};
        int i,n;
                float minx=0,miny=0,minz=0,t=0,r=0,p=0;
                float *a,*b,*c;
                float x[100], y[100],z[100];
   
 
 
    printf("Vvedite kol-vo elementov  ");
    scanf("%d",&n);
        
        scan(x,n,v);
        scan(y,n,h);
        scan(z,n,g);
 
        minx=mini(x,minx,n);
        miny=mini(y,miny,n);
        minz=mini(z,minz,n);
 
        if(minx>miny)
                { if (minx>minz) 
                        {
                                for (i=0;i<n;i++) t=t+x[i]*x[i];
                                for (i=0;i<n;i++) r=r+y[i]*z[i];
                        }
                        else 
                        {
                                for (i=0;i<n;i++) t=t+z[i]*z[i];
                                for (i=0;i<n;i++) r=r+y[i]*x[i];
                        }
                }
        else 
        {
                for (i=0;i<n;i++) t=t+y[i]*y[i];
                for (i=0;i<n;i++) r=r+x[i]*z[i];
        };
        
        
        p=t-r;
        printf(" (a,a)-(b,c) = %f",p);
 
_getch();
        
}

Объяснение кода листинга программы

В этом коде реализован алгоритм вычисления скалярного произведения трех векторов. Вот список действий, которые выполняются в коде:

  1. Ввод количества элементов векторов.
  2. Ввод элементов векторов x, y и z.
  3. Нахождение минимального элемента в каждом из векторов.
  4. Сравнение минимальных элементов.
  5. Вычисление скалярного произведения.
  6. Вывод результата. Вот более подробное описание каждого шага:
  7. Функция scanf() используется для ввода количества элементов векторов. Переменная n инициализируется этим значением.
  8. Функция scan() используется для ввода элементов векторов x, y и z. Эта функция считывает элементы, пока не встретит ноль (что указывает на конец вектора).
  9. Функция mini() используется для нахождения минимального элемента в каждом из векторов. Это делается путем итерации по каждому элементу вектора и сравнения его с текущим минимальным значением. Если текущий элемент меньше, он становится новым минимальным значением.
  10. После нахождения минимальных значений, происходит сравнение этих значений. Если минимальное значение вектора x больше, чем минимальные значения векторов y и z, выполняется следующий блок кода. В противном случае выполняется другой блок кода.
  11. Внутри каждого блока кода происходит вычисление скалярного произведения. Это делается путем итерации по каждому элементу вектора и умножения его на соответствующий элемент другого вектора.
  12. Наконец, результат скалярного произведения сохраняется в переменной p и выводится на экран с помощью функции printf(). Обратите внимание, что в этом коде используются статические переменные, что может вызвать проблемы при работе с большими объемами данных. Также, код не обрабатывает ситуацию, когда векторы имеют разную длину.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы