Задача 3.3

1. Условие

Дана вещественная квадратная матрица порядка n . Удалить из неё i-ю строку и j-й столбец. Для поиска нужной строки и столбца, а также для сжатия матрицы использовать подпрограмму.

2. Решение

Задаем порядок матрицы n. Выделяем блок оперативной памяти под двумерный массив a размерностью n*n. Производим инициализацию массива. Вызываем функцию funk_1() для удаления указанной строки и столбца. В функции производится копирование исходной матрицы a в новый массив b, имеющий размерность (n-1)*(n-1). Элементы удаляемой строки и столбца в матрицу не копируются. На экран выводится массив b.

3. Алгоритм решения

4. Текст программы

1 :  #include <stdio.h>
2 :  #include <stdlib.h>
3 :  #include <conio.h>
4 :  void funk_1 (float *a, float *b, int n, int it, int jt)
5 :  {
6 :      int i, j, l=0;
7 :      for (i=0; i<n; i++)
8 :      for (j=0; j<n; j++)
9 :      {
10:	   if(it!=(i+1) && jt!=(j+1))
11:	   {    b[l]=a[i*n+j];
12:		l++;
13:	   }
14:      }
15:
16:   }
17:   void main()
18:   {
19:      int i, j, n, it, jt;
20:      float *a,*b;
21:      clrscr();
22:      printf("\n Введите натуральное число n ");
23:      scanf("%d",&n);
24:      a=(float*)malloc(n*n*sizeof(float));
25:      b=(float*)malloc((n-1 )*(n-1 )*sizeof(float));
26:      for(i=0; i<=(n-1); i++)
27:      for(j=0; j<=(n-1); j++)
28:      {
29:	   printf("\n Введите a[%d][%d] = ", i+1, j+1);
30:	   scanf("%f",&a[i*n+j]);
31:      }
32:      printf("\n Введите номер строки i,которую Вы хотите удалить");
33:      scanf("%d",&it);
34:      printf("\n Введите номер столбца j,который Вы хотите удалить");
35:      scanf("%d",&jt);
36:      printf ("\n Исходная матрица\n");
37:      for(i=0; i<n; i++)
38:      {
39:	   for(j=0; j<n; j++)
40:		  printf("%2.f ",a[i*n+j]);
41:	   printf("\n");
42:      }
43:      printf("\n %d-я строка,%d-й столбец удалены \n",it, jt);
44:      printf(" Новая матрица: \n");
45:      funk_1(a,b,n,it,jt);
46:      for(i=0; i<n-1; i++)
47:      {
48:	   for(j=0; j<n-1; j++)
49:		  printf("%2.f ",b[i*(n-1)+j]);
50:	   printf("\n");
51:      }
52:      free(a);
53:      free(b);
54:      printf("\n \n \n Для завершения программы введите любой символ.");
55:      getch();
56:   }  

5. Работа программы

Введите натуральное число n 3
Введите a[1][1] = 1
Введите a[1][2] = 2
Введите a[1][3] = 3
Введите a[2][1] = 4
Введите a[2][2] = 5
Введите a[2][3] = 6
Введите a[3][1] = 7
Введите a[3][2] = 8
Введите a[3][3] = 9
Введите номер строки i,которую Вы хотите удалить 2
Введите номер столбца j,который Вы хотите удалить 3
Исходная матрица
1 2 3
4 5 6
7 8 9
2-я строка 3-й столбец удалены
Новая матрица
1 2
7 8
Для завершения программы введите любой символ.

6. Проверка

Программа работает корректно.

Хостинг от uCoz