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 можно поставить и больше, но тогда я не ручаюсь)
1) в расстановке скобок здесь ошибка, в решении показан один из возможных вариантов исправления этой ошибки: F:=not((x<0) and (y<0)) or ((z<-2) and D) ⇒ not((-3<0) and (3<0)) or ((-5<-2) and false) ⇒ not(true and false) or (true and false) ⇒ not false or false ⇒ true or false ⇒ true
2) здесь тоже в условии что-то не то (z - лишняя переменная получается) и корень из чего извлекать - тоже непонятно var x,a,y:real; begin x:=3; a:=ln(abs(x+1))/ln(10); y:=exp(ln(5)*(1/3))*a*a-3*x*x; writeln('y = ',y); end. Результат: y = -26.3801743600581
Код на C++:
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));
for (int i = 1; i <= 15; i++)
{
cout << i << " ";
}
return 0;
}
Объяснение:
При простого цикла мы выводим значение итератора i от 1 до 15 включительно. По крайней мере я так понял задачу