Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум ЭВМ ответы.doc
Скачиваний:
4
Добавлен:
07.05.2019
Размер:
309.25 Кб
Скачать

Умножение матрицы на вектор.

Для вычисления произведения С матрицы А размером n*m на вектор B размером m необходимо вычислить    , i=1,….,n.

Программа :

  1. # include

  2. # include

  3. # define n 3

  4. # define m 4

  5. int main ()

  6. {

  7. int a[n][m],b[m],c[n];

  8. clrscr ();

  9. printf ("\n Заполнение элементов матрицы A[%i][%i] .",n,m);

  10. for(int i=0;i

  11. {

  12. printf ("\n Ввод %i-й строки матрицы \n",i);

  13. for (int j=0;j

  14. {

  15. printf (" a[%i][%] = ",i,j);

  16. scanf ("%i",&a[i][j]);

  17. }

  18. }

  19. printf ("\n Заполнение элементов вектора B[%i] .",m);

  20. for(int i=0;i

  21. {

  22. printf (" b[%i] = ",i);

  23. scanf ("%i",&b[i]);

  24. }

  25. for (int i=0;i

  26. {

  27. int s=0;

  28. for (intj=0;j

  29. s+=a[i][j]*b[j];

  30. c[i]=s;

  31. }

  32. printf ("\n Получен вектор произведения С=А*B \n");

  33. for (inti=0;i

  34. printf ("%6i",с[i]);

  35. getch();

  36. }

Использование вспомогательной переменной s позволяет уменьшить время выполнения программы за счет исключения обращения в цикле по j к элементам массива C.

Умножение матрицы на матрицу.

 

Для умножения матрицы А размером n*k на матрицу B размером k*m необходимо вычислить , i=1,…,n; j=1,…,m. 

Программа :

  1. # include

  2. # include

  3. # define n 3

  4. # define m 4

  5. # define k 5

  6. int main ()

  7. {

  8. int a[n][k],b[k][m],c[n][m];

  9. clrscr ();

  10. printf ("\n Заполнение элементов матрицы A[%i][%i] .",n,k);

  11. for (int i=0;i

  12. {

  13. printf ("\n Ввод %i-й строки матрицы \n",i);

  14. for (int j=0;j

  15. {

  16. printf (" a[%i][%] = ",i,j);

  17. scanf ("%i",&a[i][j]);

  18. }

  19. }

  20. printf ("\n Заполнение элементов матрицы B[%i][%i] .",k,m);

  21. for(int i=0;i

  22. {

  23. printf ("\n Ввод %i-й строки матрицы \n",i);

  24. for (int j=0;j

  25. {

  26. printf (" a[%i][%] = ",i,j);

  27. scanf ("%i",&b[i][j]);

  28. }

  29. }

  30. for (int i=0;i

  31. for(int j=0;j

  32. {

  33. int s=0;

  34. for (int l=0;l

  35. s+=a[i][l]*b[l][j];

  36. c[i][j]=s;

  37. }

  38. printf ("\n Получена матрица произведения С=А*B \n");

  39. for (int i=0;i

  40. {

  41. for (int j=0;j

  42. printf ("%6i",c[i][j]);

  43. puts (" ");

  44. }

  45. getch();

  46. }

Удаление строк матриц.

Алгоритм удаления строки является сходным с алгоритмом удаление элементов одномерного массива, за тем исключением, что операция переноса элементов выполняется для каждого столбца при переборе строк. Рассмотрим программу удаления из матрицы А заданной с клавиатуры строки T.

Программа :

  1. # include

  2. # include

  3. # include

  4. # define n 10

  5. # define m 5

  6. int main ()

  7. {

  8. int a[n][m];

  9. clrscr ();

  10. randomize();

  11. printf ("\n Целочисленная матрица A[%i][%i] сформированные случайными числами \n диапазона от -150 до 150.\n",n,m);

  12. for(int i=0;i

  13. {

  14.   for (int j=0;i

  15. {

  16. a[i]=random(301)-150;

  17. printf ("%6i",a[i]);

  18. }

  19. puts(" ");

  20. }

  21. int t;

  22. printf ("\n Введите номер строки матрицы для ее удаления : ");

  23. scanf ("%i",&t);

  24. int k=n;

  25. for (int i=t;i<(n-1);i++)

  26. for(int j=0;j

  27. a[i][j]=a[i+1][j];

  28. k--;

  29. printf ("\n Получена матрица A[%i][%i]. \n",k,m);

  30. for(int i=0;i

  31. {

  32.   for (j=0;j

  33. printf ("%6i",a[i][j]);

  34. puts (" ");

  35. }

  36. getch();

  37. }