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

ПОМОГИТЕ ПОЖАЛУСТА составить программу на turbo pascal!

Составить программу решения задачи: Найти сумму и произведение всех трехзначных чисел, кратных 7.
Sonny Moore
Sonny Moore
101
Без ухищрений, как это решают в начальных классах школы (не используя формулу суммы членов арифметической прогрессии, с шагом изменения переменной цикла 1 и незатейливой проверкой делимости на 7):

{$N+,E-}
program N85571335;
const
  s: longint = 0;
  p: extended = 1;
var
  i: word;
begin
  for i := 100 to 999 do
    if i mod 7 = 0 then
    begin
      s := s + i;
      p := p * i
    end;
  writeln('Сумма = ', s);
  writeln('Произведение = ', p);
  readln
end.

Алексей Пилипенко, integer в Турбо Паскале 16-разрядный, и число 70336 (как раз требуемая сумма чисел) никак в него не поместится.

P.S. Extended пришлось использовать, потому что произведение этих же чисел даже в Double не помещается.
СС
Станислав Станиславович
51 590
Лучший ответ
— самое маленькое трёхзначное число кратное 7 равно 105
— следующие кратные 7 получаются прибавлением к предыдущему 7

var
  N, S : Longint;
  P : Extended;
begin
  N := 105;
  S := 0;
  P := 1;
  repeat
    S := S + N;
    P := P * N;
    N := N + 7;
  until N > 999;
  WriteLn('Сумма = ', S);
  WriteLn('Произведение = ', P);
end.

Если нужно получить целое число, которое в действительности являлось бы результатом произведения, то можно воспользоваться дополнительным массивом для накопления произведения:

const
  PSize = 50;

var
  N, S : Longint;
  P : array [0..PSize] of Longint;

procedure ClearP;
var
  i : Byte;
begin
  P[ i ] := 0;
end;

procedure Proizv(N : Longint);
var
  i : Byte;
  D : Longint;
begin
  D := 0;
  for i := 0 to PSize do
  begin
    D := D + P[ i ] * N;
    P[ i ] := D mod 1000;
    D := D div 1000;
  end;
end;

function PStr : String;
var
  i, j : Byte;
  S : String;
  N : Longint;
begin
  j := PSize;
  while P[j] = 0 do
    Dec(j);
  S := '';
  for i := 0 to j do
  begin
    N := P[ i ];
    while (N > 0) or (Length(S) mod 3 > 0) do
      begin
        S := Chr(N mod 10 + 48) + S;
        N := N div 10;
      end;
  end;
  while S[1] = '0' do
    Delete(S, 1, 1);
  PStr := S;
end;

begin
  N := 105;
  S := 0;
  ClearP; P[0] := 1;
  repeat
    S := S + N;
    Proizv(N);
    N := N + 7;
  until N > 999;
  WriteLn('Сумма = ', S);
  WriteLn('Произведение = ', PStr);
end.

В таком случае получим вот такой результат:

Сумма = 70336
Произведение = 679492019701041793265588243534089096235780775993490896034913388459039239197513918977358996347410750791909489236141670400
//Найти сумму трехзначных чисел, кратных 7.
function Krat(X:integer):boolean;
begin
if X mod 7 = 0 then Krat:=true else Krat:=false;
end;
var i,sum:integer;
begin
sum:=0;
for i:=100 To 999 do if Krat(i) then sum:=sum+i;
writeln;
writeln('Summa 3-znachnih chisel : ',sum);
end.
Юрий Кальчев
Юрий Кальчев
34 523
сумма=0
произведение = 1
для и = от 100 до 999
если и делется на 7 без остатка, сумма=сумма+и, произведение = произведение * и.

ну а конкретно под паскаль уже сама...