Написать программу ** Паскале, которая считает произведение чисел, которые больше...

0 голосов

Написать программу на Паскале, которая считает произведение чисел, которые больше введенного числа, до 100. Числа только положительные.


спросил от (12 баллов) в категории Информатика
оставил комментарий от Бакалавр (10.6k баллов)

100 включительно?

2 Ответы
0 голосов
ответил от Бакалавр (10.6k баллов)

Var  s: real; 
a,x:integer;
begin 
writeln('введите целое число'); 
readln(a); 
s := 1; 
a := a + 1; 
for x := a to 100 {или 99, зависит от того, включается 100 или нет} do   begin   
s := s * a; 
 a := a + 1;
end; 
writeln(s);
end.

оставил комментарий от Бакалавр (13.3k баллов)

Вы хоть свою программу тестировали? Попробуйте ввести числа, меньше 85. Ваша программу будет считать неверно, ибо произведение числе от x до 100 достаточно велико и не вмещается ни в один тип, тем более 4-байтовый  integer. Мой вариант с длинной арифметикой был верный, а ваш, к сожалению, нет. 

оставил комментарий от Бакалавр (10.6k баллов)

Исправила, спасибо что заметили, сейчас программа выдает значения со степенью. Вроде бы, всё верно.

оставил комментарий от Бакалавр (13.3k баллов)

Сейчас программа считает верно, но теряется некоторая точность. Хотя не думаю, что автору понадобятся все цифры числа)

0 голосов
ответил от Бакалавр (13.3k баллов)
Решение с использование длинной арифметики.
var
  i, j, n, len, rem: integer;
  a: array[1..200] of byte;
begin
  write('Введите число: ');
  read(n);
  len := 1;
  a[1] := 1;
  for i := n + 1 to 99 {100} do
  begin
    for j := 1 to len do
    begin
      rem := a[j] * i + rem;
      a[j] := rem mod 10;
      rem := rem div 10;
    end;
    while rem > 0 do
    begin
      inc(len);
      a[len] := rem mod 10;
      rem := rem div 10;
    end;
  end;
  writeln('Произведение чисел из интервала (', n, '; 100): ');
  for i := len downto 1 do write(a[i]);
end.
Пример работы программы:
Введите число: 1
Произведение чисел из интервала (1; 100):
1948348720420644788695888257080283249381963823594360049498643927185579338215778728274424636079639781709574621897447185108592230400000000000000000000


оставил комментарий от Бакалавр (13.3k баллов)

Была опечатка в программе, исправил

...