Другие языки программирования и технологии

Даны натуральные числа N и A1,…, AN. Образовать новые одномерные последовательности B1, …, BN и C1, …, CN

Даны натуральные числа N и A1,…, AN. Образовать новые одномерные последовательности , исходя из предположений, что B1=A1, B2=-A1*A2, B3=A1*A2*A3,..,BN=(-1)^(N+1)*A1*A2*…*AN, C1=A1!, C2=A1!*A2!, C3=A2!*A3! ,.CN=A(N-1)!*AN! Я получил массив B , а С выходит неправильно Program aaaasdd; uses crt; var A: array [1..100] of integer; B: array [1..100] of integer; C: array [1..100] of integer; n, i, f, S, k,t,g,d: integer; begin clrscr; Writeln(‘Введите размер :’); Readln(n); Writeln(‘Введите элементы A:’); for i:=1 to n do begin writeln(‘Введите’,i, ‘-ый элемент A:’); Readln(A); end; Writeln(‘Получение первого массива !’); i:=1; S:=1 k:=1 for f:=1 to n do begin S:=A*S B[f]:=k*S; k:=k*(-1); i:=i+1; write(B[f],’ ’); end; Write(‘.’);Writeln; Writeln(‘Получение второго массива !’); C[1]:=A[1]; Write(C[1], ‘ ’); for d:=2 to n do begin t:=1; g:=1; for i:=1 to d-1 do t:=t*A; for i:=1 to d do g:=g*A; C[d]:=t*g; write(C[d], ‘ ’); end; Write(.); Writeln; Writeln(‘Вывод полученных массивов’); for f:=1 to n do write(B[f], ‘ ’); Writeln; for d:=1 to n do write (C[d], ‘ '); Readkey: End. Помогите пожалуйста решить правильно массив С Метки:
Андрей Н.
Андрей Н.
933
Давай с этого места:

Writeln(‘Введите элементы A:’);
for i:=1 to n do
begin
writeln(‘Введите’,i, ‘-ый элемент A:’);
Readln(A); Почему здесь не A i-тое, а просто А?
end;
Writeln(‘Получение первого массива !’);
i:=1; Зачем это присвоение?
S:=1
k:=1
for f:=1 to n do
begin
S:=A*S Почему не A[f], а просто A?
B[f]:=k*S;
k:=k*(-1);
i:=i+1; Еще раз, тут i уже не используется
write(B[f],’ ’);
end;
Write(‘.’);Writeln;
Writeln(‘Получение второго массива !’);
C[1]:=A[1]; Вот тут уже ошибка C[1] должно равняться A[1]!, а не A[1]
-- Вставляем вычисление факториала - произведение чисел от 1 до A[1]
-- С [1] отдельно, потому, что формула разная для С [1] и остальных элементов
C[1] := 1;
for i := 1 to A[1] do
begin
C[1] := C[1]*i;
end;
-- Конец моей вставки
Write(C[1], ‘ ’);
t := 1; Здесь будет факториал от A[i-2]
for d:=2 to n do
begin
-- t:=1; g:=1; Это не нужно вовсе
-- А дальше, извини, полная чешуя.
-- Нужен один цикл - для вычисления факториала от A[d]
-- Сначала подготовим факториал от A[d-1]
C[d] := C[d-1] / t;
t := C[d];
-- Теперь уможим на числа от 1 до A[d]
for i:=1 to A[d] do C[d] := C[d]*i;
-- А следующие две строки просто удалить
-- for i:=1 to d do g:=g*A;
-- C[d]:=t*g;
-- До сих пор. И аккуратнее с массивом чисел - 10! уже больше 3,6 миллиона.
write(C[d], ‘ ’);
end;
Write(.);
Writeln;
Writeln(‘Вывод полученных массивов’);
for f:=1 to n do write(B[f], ‘ ’);
Writeln;
for d:=1 to n do write (C[d], ‘ ');
Readkey:
End.
Салават Шайдуллин
Салават Шайдуллин
19 095
Лучший ответ

Похожие вопросы