- Код: Выделить всё
- 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.



