Из элементов матрицы и вектора по определенному правилу получить новый вектор - C (СИ)

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

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

Суть задания в том, что есть матрица и вектор, из которых по определенному правилу надо получить новый вектор. В моем коде программа вместо введенной матрицы выдает нечто невразумительное
#include<stdio.h>;
#include<string.h>;
#include<stdlib.h>;
float* WC(float *w1,float f,int n)\\умножение вектора на число
{
    int i=0;
    float *w;
    w=(float*)malloc(n*sizeof(float));
    for(i=0;i<n;i++)
        w[i]=0;
    for(i=0;i<n;i++)
        w[i]+=w1[i]*f;
    return w;
}
float WW(float *w1,float *w2,int n)\\скалярное произведение 2х векторов
{
    int i=0;
    float w=0;
    for(i=0;i<n;i++)
        w+=w1[i]*w2[i];
    return w;
}
float* MatrW(int n, float *a, float *w)\\произведение матрицы и вектора
{
    int i=0,j=0;
    float *w1;
    w1=(float*)malloc(n*sizeof(float));
    for (j=0;j<n;j++)
        w1[j]=0;
    for (j=0;j<n;j++)
        for(i=0;i<n;i++)
            w1[j]=w1[j]+a[j*n+i]*w[i];
    return w1;
}
float* form(int n,float *a,float *w1, float *w0=NULL)\\сама формула
{
    int i=0;
    float *w,*w2;
    float q,q1;
    w=(float*)malloc(n*sizeof(float));
    w2=(float*)malloc(n*sizeof(float));
    w2=MatrW(n,a,w1);
    q=(WW(w2,w2,n))/(WW(w1,w2,n));
    if(w0==NULL)
        for(i=0;i<n;i++)
            w[i]=w2[i]-WC(w1,q,n)[i];
    else
    {
        q1=(WW(w1,MatrW(n,a,w0),n))/(WW(w0,MatrW(n,a,w0),n));
        for(i=0;i<n;i++)
            w[i]=w2[i]-WC(w1,q,n)[i]-WC(w0,q1,n)[i];
    }
    return w;
}
void main()
{
    int n=0, v=0, i=0, j=0, g=0;
    float *a,*b, *c,*d;
    printf("vvedite razmer matr\n");
    scanf("%i",&n);
    v=n*n;
    a=(float*)malloc(v*sizeof(float));
    b=(float*)malloc(n*sizeof(float));
    c=(float*)malloc(n*sizeof(float));
    d=(float*)malloc(n*sizeof(float));
    for (i=0; i<n; i++)
        for (j=0; j<n; j++)
            {
                printf ("vvedite element %i,%i matr a\n",i,j);
                scanf ("%f", &g);                           
                a[i*n+j]=g;
            }       
    for(i=0;i<n;i++)
    {
        printf("vvedite b[%i]\n",i);
        scanf("%i",&v);
        b[i]=v;
    }   
    
    printf("vved matr:\n");
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
            printf("\t %f", &a[i*n+j]);\\вот тут и выдает неправильные значения
        printf ("\n");
    }
    c=form(n,a,b,NULL);
    for(i=0;i<n;i++)
        printf("%f\n",&c[i]);   
}

Решение задачи: «Из элементов матрицы и вектора по определенному правилу получить новый вектор»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#define N 2
#define M 4
 
int main()
{
    float array[M * N];
    size_t i = 1, j = 3;
    array[i * N + j] = 42;
    printf("%f\n", array[i * N + j]);
    exit(0);
}

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

В данном коде происходит следующее:

  1. Подключение необходимых библиотек
    • В начале кода подключаются две библиотеки: stdio.h и stdlib.h. Библиотека stdio.h содержит функции для ввода-вывода данных, а stdlib.h содержит функции для работы с типами данных и обработки ошибок.
  2. Определение размеров матрицы и вектора
    • С помощью макросов N и M определяются размеры матрицы и вектора соответственно. В данном случае, матрица имеет размерность 2x4, а вектор имеет размерность 2.
  3. Инициализация массива
    • Создается массив array типа float размером M * N.
  4. Инициализация индексов
    • Инициализируются индексы i и j для обращения к элементам массива. Значение i установлено на 1, а j на 3.
  5. Заполнение массива
    • В массив array записывается значение 42 по определенному правилу, используя индексы i и j. Индекс элемента массива вычисляется как произведение i на количество столбцов матрицы (N) плюс j.
  6. Вывод значения элемента массива
    • С помощью функции printf выводится значение элемента массива array[i * N + j].
  7. Завершение программы
    • Программа завершается с помощью функции exit(0).

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


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

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

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