Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2013, 02:07   #1
Olga2002
 
Регистрация: 08.09.2013
Сообщений: 3
По умолчанию Программирование векторных и матричных операций

Помогите пожалуйста дописать код программы на языке СИ!
1. Разработать процедуры или функции, реализующие следующие операции:
a) произведение вектора и скаляра;
b) сумма двух векторов;
c) скалярное произведение векторов;
d) модуль вектора
e) транспонирование матрицы;
f) произведение матрицы и скаляра;
g) произведение матрицы и вектора;
h) сумма двух матриц;
i) произведение двух матриц;

2. Разработать программу, которая позволяет вводить значения заданных векторов и матриц, и выполнить тестирование этих процедур и функций.
Вот код по a) и b)
Код:
#include <stdio.h>
 
// Произведение вектора на скаляр
 
void multSV(double s, double *v, int n)
{
    int i;
    for (i=0; i<n; i++) *(v+i)=s*(*(v+i));
}
 
// Скалярное произведение двух векторов
 
double scalVV(double *v, double *w, int n)
{
    double s=0;
    int i;
    for (i=0; i<n; i++) s+=(*(v+i))*(*(w+i));
    return s;
}
 
int main(int argc, char* argv[])
{
    double V1[]={1,2,3};
    double V2[]={11,22,33};
    int i;
 
    printf("%f\n",scalVV(V1,V2,3));
 
    multSV(10.0,V1,3);
 
    for (i=0; i<3; i++) printf("v[%d]=%f ",i,V1[i]);
    printf("\n");
 
    return 0;
}

Последний раз редактировалось Stilet; 08.09.2013 в 10:46.
Olga2002 вне форума Ответить с цитированием
Старый 08.09.2013, 17:06   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Код:
#include <stdio.h>
#include <math.h>
#include <malloc.h>

// Произведение вектора на скаляр
 
void multSV(double s, double *v, int n)
{
    int i;
    for (i=0; i<n; i++) *(v+i)=s*(*(v+i));
}
 
// Скалярное произведение двух векторов
 
double scalVV(double *v, double *w, int n)
{
    double s=0;
    int i;
    for (i=0; i<n; i++) s+=(*(v+i))*(*(w+i));
    return s;
}

// Модуль вектора

double modVV(double* v, int n)
{
double s=0;
int i;
for (i=0; i<n; i++) s+=(*(v+i))*(*(v+i));
s = sqrt(s);
return s;
}
 
// транспонирование матрицы

double** t(double** m3, int n, int m)
{
    double** m1;
    int i,j;
m1 = (double**) malloc (m*sizeof(double*));
for (i=0;i<m;i++) m1[i] = (double*) malloc (n*sizeof(double));
for (i=0;i<m;i++) for(j=0;j<n;j++) m1[i][j] = m3[j][i];
return m1;
}

// произведение матрицы и скаляра
double** p(double** m3, int n, int m, double s)
{
    int i,j;
for (i=0;i<n;i++) for(j=0;j<m;j++) m3[i][j] = m3[i][j] * s;
return m3;
}

// произведение матрицы и вектора
double** p2(double** m3, int n, int m, double* v)
{
    int i,j;
for (i=0;i<n;i++) for(j=0;j<m;j++) m3[i][j] = m3[i][j] * v[j];
return m3;
}

// сумма двух матриц
double** sum(double** m3, double** m4,  int n, int m)
{
    double** m1;
    int i,j;
m1 = (double**) malloc (n*sizeof(double*));
for (i=0;i<n;i++) m1[i] = (double*) malloc (m*sizeof(double));
for (i=0;i<n;i++) for(j=0;j<m;j++) m1[i][j] = m3[i][j] + m4[i][j];
return m1;
}

int main(int argc, char* argv[])
{
    double V1[]={1,2,3};
    double V2[]={11,22,33};
    double** m1;
    double** m2;
    double V3[]={2,2,2,2};
    double** m3;
    double** m4;
    int i,j;
 
    printf("%f\n",scalVV(V1,V2,3));
 
    printf("%f\n",modVV(V1,3));

    multSV(10.0,V1,3);
 
    for (i=0; i<3; i++) printf("v[%d]=%f ",i,V1[i]);
    printf("\n");

m1 = (double**) malloc (3*sizeof(double*));
for (i=0;i<3;i++) m1[i] = (double*) malloc (4*sizeof(double));
for (i=0;i<3;i++) for(j=0;j<4;j++) m1[i][j] = (double)(i + j);
for (i=0;i<3;i++) { for(j=0;j<4;j++) printf("%f ", m1[i][j]); printf("\n"); }
m2 = t(m1, 3, 4); for (i=0;i<4;i++) { for(j=0;j<3;j++) printf("%f ", m2[i][j]); printf("\n");}
m1 = p(m1, 3,4, 2.0); for (i=0;i<3;i++) { for(j=0;j<4;j++) printf("%f ", m1[i][j]); printf("\n"); }
m1 = p2(m1, 3,4, V3); for (i=0;i<3;i++) { for(j=0;j<4;j++) printf("%f ", m1[i][j]); printf("\n"); }
m3 = sum(m1, m1, 3,4); for (i=0;i<3;i++) { for(j=0;j<4;j++) printf("%f ", m3[i][j]); printf("\n");}


for (i=0;i<3;i++) { free(m1[i]);free(m3[i]); }
for (i=0;i<4;i++) free(m2[i]);
free(m1); free(m2); free(m3);

    return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 11.09.2013, 03:31   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Умножение матриц

Код:
#include <stdio.h>
#include <malloc.h>


void mult(double** a, double** b, int a1, int a2, int b1, int b2)
{
double **t; 
int i1, i2, i6, i, j;
double i5;

// нужно проверить существует ли произведение
// нужно вычислить размерности произведения
// произведение существует если число столбцов первой матрицы совпадает с числом строк 

второй матрицы
// размерность произведения 1 число столбцов второй матрицы
// размерность произведения 2 число строк первой матрицы

if (a2 != b1)
return;

t = (double**) malloc (b2 * sizeof(double*));

for(i = 0; i < b2; i++)
t[i] = (double *) malloc(a1*sizeof(double));

for (i1 = 0; i1 < a1; i1++) // фиксируем строку матрицы a
{
 for (i6 = 0; i6 < b2; i6++) // фиксируем столбец матрицы b
 {
  i5 = 0.0;
  for (i2 = 0; i2 < a2; i2++)
  {
     i5 += a[i1][i2] * b[i2][i6];
  } 
  t[i1][i6] = i5;
 }
}


for(i=0;i<b2;i++)
{
 for(j=0;j<a1;j++)
  printf("%f ", t[i][j]);
 printf("\n");
}

for(i = 0; i < b2; i++)
free (t[i]);

free(t);

}


int main()
{
double** a;
double** b;

int i, j;

a = (double**) malloc (3 * sizeof(double*));
b = (double**) malloc (3 * sizeof(double*));

for(i=0;i<3;i++)
{
a[i] = (double * )malloc(3*sizeof(double));
b[i] = (double * )malloc(3*sizeof(double));
}

for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
a[i][j] = i+j;
b[i][j] = i+j;
}

mult(a, b, 3, 3, 3, 3);

free(a); free(b);

return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование матричных операций djaaaam Помощь студентам 0 13.05.2013 21:37
Программирование матричных операций take. Паскаль, Turbo Pascal, PascalABC.NET 8 20.10.2012 22:59
ПРОГРАММИРОВАНИЕ МАТРИЧНЫХ ОПЕРАЦИЙ lords Паскаль, Turbo Pascal, PascalABC.NET 2 23.03.2011 19:35
ПРОГРАММИРОВАНИЕ МАТРИЧНЫХ ОПЕРАЦИЙ Obrey Помощь студентам 5 17.12.2010 15:05
программирование матричных операций! darinochka Microsoft Office Excel 4 11.10.2010 12:25