1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
| #include "iostream"
#include "conio.h"
#include <Windows.h>
using namespace std;
struct mas
{
int A;
int LJ;
int KK;
mas *next;
};
int create(mas*, int*, int, int);
void print(mas*, int*, int, int);
int main()
{
int m,n,num,*LI,k;
mas *X;
cout<<"Enter number of rows and columns: ";
cin>>m>>n;
X=new mas;
LI=new int[m+1];
cout<<endl<<"~~~~~~~~~~~~~~~~~~~"<<endl<<endl;
num=create(X,LI,m,n);
cout<<"\nYour matrix:\n";
print(X,LI,m,n);
system ("pause");
return 0;
}
int create(mas *X, int *LI, int m, int n)//функция создания матрицы
{
int i,j,num,k,f;
mas *z=X,*p,*q, *lol;
num=0;
z->A=0;
lol=z;
p=z;
q=z;
cout<<"Enter your matrix:\n";
for (i=0;i<m;i++)
{
f=0;
for (j=0;j<n;j++)
{
cin>>k;
if (k!=0)
{
if (f==0)
{
LI[i]=num;
f=1;
}
if(!z->A) //если вводится самый первый элемент
{
z->A=k;
z->LJ=j;
z->next=0;
z->KK = i;
num++;
}
else
{
z->next=new mas;
z=z->next;
z->A=k;
z->LJ=j;
z->next=0;
z->KK=i;
num++;
}
}
}
}
cout<<"\n";
while (p!=0)
{
cout<<p->A<<" "; //вывод ненулевых элементов
p=p->next;
}
cout<<"\n j = \n";
while (q!=0)
{
cout<<q->LJ<<" "; //вывод индекса j каждого ненулевого элемента
q=q->next;
}
cout<<"\n i = \n"; // vivod I pozicija
while (lol!=0)
{cout<<lol->KK<<" ";
lol=lol->next;}
cout<<"\n";
LI[m]=num;
//for (i=0;i<=m;i++)
//cout<<LI[i]<<" "; //вывод LI(местоположения 1 ненул. эл—та в каждой строке)
return num;
}
void print(mas *X,int *LI, int m, int n) //функция вывода матрицы
{
mas *p;
p=X;
int i,j,k,f;
for (i=0; i<m; i++)
{
f=LI[i+1]-LI[i]; // число ненулевых элементов в строке
k=0;
for (j=0; j<n; j++)
if ((p->LJ==j)&&(k<f))
{
cout<<p->A<<" ";
if(p->next) p=p->next;
k++;
}
else cout<<"0 ";
cout<<"\n";
}
} |