- Код: Выделить всё
type
p = ^element;
element = record
r: integer; {row}
c: integer; {coloumn}
number: integer;
next: p;
end;
k = set of byte;
var
u, s, d: p;
rows, columns, count, i, j, temp: integer;
degree: real;
choice: integer;
m: array [1..1000] of integer;
name: string;
f: text;
numbers: k;
flag: integer;
begin
{Блок ввода данных}
writeln('Input 1 to create matrix of ones');
writeln('Input 2 to create matrix with random numbers');
writeln('Input 3 to create identity matrix');
readln(choice);
if (ioresult <> 0) or ((choice <> 1) and (choice <> 2) and (choice <> 3)) then
begin
writeln('Uncorrect input');
readln();
readln();
exit;
end;
if choice = 3 then
begin
writeln('Input the number of rows of the matrix:');
readln(rows);
if ioresult <> 0 then
begin
writeln('Uncorrect input');
readln();
readln();
exit;
end;
end
else
begin
writeln('Input the number of rows of the matrix:');
readln(rows);
if ioresult <> 0 then
begin
writeln('Uncorrect input');
readln();
readln();
exit;
end;
writeln('Input the number of columns of the matrix:');
readln(columns);
if ioresult <> 0 then
begin
writeln('Uncorrect input');
readln();
readln();
exit;
end;
writeln('Input the degree of sparsity:');
readln(degree);
if (ioresult <> 0) or (degree > 1) or (degree <= 0) then
begin
writeln('Uncorrect input');
readln();
readln();
exit;
end;
end;
writeln('Specify the name of file to record matrix:');
readln(name);
- Код: Выделить всё
Assign(f, name);
Rewrite(f);
writeln('Do you want matrix to be written in tabular form? (yes - 1/no - 0)');
readln(flag);
if (ioresult <> 0) or ((flag <> 1) and (flag <> 0)) then
begin
writeln('Uncorrect input');
readln();
readln();
exit;
end;
count := round(degree * columns);
{Блок варианта 1}
if choice = 1 then
begin
for i := 1 to columns do
m[i] := 0;
new(s);
new(d);
s := d;
u := d;
randomize;
for i := 1 to rows do begin
numbers := [];
for j := 1 to count do begin
temp := random(columns) + 1;
while temp in numbers do
temp := random(columns) + 1;
d^.c := temp;
d^.r := i;
d^.number := 1;
numbers := numbers + [temp];
new(d^.next);
d := d^.next;
end;
end;
write(f, 'matrix');
writeln(f);
for i := 1 to rows * count do
begin
writeln(f, s^.r, ' ', s^.c, ' ', s^.number);
s := s^.next;
end;
writeln(f);
if flag = 1 then
for i := 1 to rows do
begin
for j := 1 to columns do m[j] := 0;
repeat
m[u^.c] := u^.number;
u := u^.next;
until (u^.r <> i) or (u = nil);
for j := 1 to columns do write(f, m[j]:5);
writeln(f);
end;
close(f);
end
{Блок варианта 2}
else if choice = 2 then
begin
for i := 1 to columns do
m[i] := 0;
new(s);
new(d);
s := d;
u := d;
randomize;
for i := 1 to rows do begin
numbers := [];
for j := 1 to count do begin
temp := random(columns) + 1;
while temp in numbers do
temp := random(columns) + 1;
d^.c := temp;
d^.r := i;
d^.number := random(1000) + 1;
numbers := numbers + [temp];
new(d^.next);
d := d^.next;
end;
end;
write(f, 'matrix');
writeln(f);
for i := 1 to rows * count do
begin
writeln(f, s^.r, ' ', s^.c, ' ', s^.number);
s := s^.next;
end;
writeln(f);
if flag = 1 then
for i := 1 to rows do
begin
for j := 1 to columns do m[j] := 0;
repeat
m[u^.c] := u^.number;
u := u^.next;
until (u^.r <> i) or (u = nil);
for j := 1 to columns do write(f, m[j]:5);
writeln(f);
end;
close(f);
end
{Блок варианта 3}
else if choice = 3 then
begin
for i := 1 to rows do m[i] := 0;
new(s);
new(d);
s := d;
u := d;
for i := 1 to rows do
begin
d^.c := i;
d^.r := i;
d^.number := 1;
new(d^.next);
d := d^.next;
end;
write(f, 'matrix');
writeln(f);
for i := 1 to rows do
begin
writeln(f, s^.r, ' ', s^.c, ' ', s^.number);
s := s^.next;
end;
writeln(f);
if flag = 1 then
for i := 1 to rows do
begin
for j := 1 to rows do m[j] := 0;
repeat
m[u^.c] := u^.number;
u := u^.next;
until (u^.r <> i) or (u = nil);
for j := 1 to rows do write(f, m[j]:5);
writeln(f);
end;
close(f);
end;
end.