Сообщение занимает 8 страниц по 30 строк, в каждой строке записано по 70 символов. Информационный объем всего сообщения равен 21000 байт. Каков информационный вес одного символа? Сколько символов в алфавите языка, на котором записано это сообщение?
Const PTR = 10; type razbivka = array[0..PTR] of byte; var n, i, z, k: byte; x: razbivka; procedure p(var x: razbivka; var z: byte); var i, j, s: byte; begin i := z - 1; s := x[z]; while (i > 1) and ( x[i - 1] <= x[i] ) do begin s := s + x[i]; dec(i); end; inc( x[i] ); z := i + s - 1; for j := i + 1 to z do x[j] := 1; end; begin write('Введите число: '); readln(n); write(n,' = '); z := n; for i := 1 to z do x[i] := 1; for i := 1 to n do begin if i > 1 then write(' + '); write( x[i], '' ); end; writeln; repeat p( x, z ); inc(k); write( n,' = ' ); for i := 1 to z do begin if i > 1 then write(' + '); write( x[i], '' ); end; writeln; until z = 1; end.
p.s: нашел в интернете для вас вариант с рекурсией. Сами можете убедиться, что с ней только хуже (по быстродействию уж точно)
const m = 100; var a: array[1..m] of integer; k, n: integer; procedure p(j,n: integer); var i: integer; begin if ( n = 0 ) and ( k > 1 ) then begin for i := 1 to k do write( a[i] : 4 ); writeln; end else for i := j to n do begin Inc(k); a[k] := i; p( j, n - i ); Dec(k); end; end; begin write('Введите число: '); readln(n); k := 0; p(1,n); end.
значения PTR и m можно поставить и больше, но тогда я не ручаюсь)
var i,n,m,sum,pr,k,j:longint;
begin
sum:=0; pr:=1;
write('m: '); readln(m);
write('n: '); readln(n);
i:=2;
repeat
if m mod i = 0 then
begin
sum:=sum+i;
m:=m div i;
i:=2;
end
else inc(i);
until m=1;
writeln('Sum_M:', sum);
for i:=2 to n div 2 do
if n mod i = 0 then
begin
k:=2;
for j:=2 to i div 2 do
if i mod j = 0 then inc(k);
if (k>2)and(i mod 3 = 0 ) then
pr:=pr*i;
end;
writeln('Proizv_N:', pr);
if sum>pr then writeln('Da, sum prost del M > proizv sost del N')
else
writeln('Net, sum prost del M < proizv sost del N');
end.
type razbivka = array[0..PTR] of byte;
var n, i, z, k: byte;
x: razbivka;
procedure p(var x: razbivka; var z: byte);
var i, j, s: byte;
begin
i := z - 1;
s := x[z];
while (i > 1) and ( x[i - 1] <= x[i] ) do
begin
s := s + x[i];
dec(i);
end;
inc( x[i] );
z := i + s - 1;
for j := i + 1 to z do
x[j] := 1;
end;
begin
write('Введите число: ');
readln(n);
write(n,' = ');
z := n;
for i := 1 to z do
x[i] := 1;
for i := 1 to n do begin
if i > 1 then write(' + ');
write( x[i], '' );
end;
writeln;
repeat
p( x, z );
inc(k);
write( n,' = ' );
for i := 1 to z do begin
if i > 1 then write(' + ');
write( x[i], '' );
end;
writeln;
until z = 1;
end.
p.s: нашел в интернете для вас вариант с рекурсией. Сами можете убедиться, что с ней только хуже (по быстродействию уж точно)
const m = 100;
var a: array[1..m] of integer;
k, n: integer;
procedure p(j,n: integer);
var i: integer;
begin if ( n = 0 ) and ( k > 1 ) then
begin for i := 1 to k do
write( a[i] : 4 );
writeln;
end else for i := j to n do
begin
Inc(k);
a[k] := i;
p( j, n - i );
Dec(k);
end;
end;
begin
write('Введите число: ');
readln(n);
k := 0;
p(1,n);
end.
значения PTR и m можно поставить и больше, но тогда я не ручаюсь)