Помощь - Поиск - Пользователи - Календарь
Полная версия: Умножение через циклы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Домовой
wink.gif
Я уже, наверное, немножко "поднадоел"?
smile.gif
Опять я встал при разработке программульки.
Вот задание:

Найти все трехзначные числа, которые в 7 раз больше суммы попарных произведений своих цифр (например, 182=7*(1*8+8*2+1*2))

Вроде все понятно и ясно.
Сейчас читал самоучитель и вроде вы понял, чтобы отображать например из числа 100 первую цифру,
надо использовать к переменной параметр [1], т.е. a=100, а отображение первой цифры a[1].

Но почему-то это не работает к присваиванию переменной sad.gif

Вот код:

Код

var a, m: real;
      i: integer;

begin

   FOR i := 101 TO  999 DO
      begin
         a:=7*(i[1]*i[2]+i[2]*i[3]+i[1]*i[3]);
         writeln(a);
      end;

end.
-Volvo-
Цитата
Сейчас читал самоучитель и вроде вы понял, чтобы отображать например из числа 100 первую цифру, надо использовать к переменной параметр [1], т.е. a=100, а отображение первой цифры a[1].
Именно ток... Только это - при работе со строками... у тебя же I - типа Integer, с ним это не пройдет...

Воспользуйся другим методом определения цифр в трехзначном числе X:
первая цифра: digit_1 = X div 100;
третья цифра: digit_3 = X mod 10;
вторая цифра, соответственно: digit_2 = (X - 100*digit_1 - digit_3) div 10;
Домовой
гм...
ага... с этим ясно...
вроде составил, но программа почему-то считает значения и двузначные и трехзначные...
Код

program zikl_8;

var c: real;
    a, i, d1, d2, d3: integer;

begin
   i:=101;
   repeat
      begin
         d1:=i div 100;
         d3:= i mod 10;
         d2:=(i-100*d1-d3) div 10;
         a:=7*(d1*d2+d2*d3+d1*d3);
         c:=a;
            if (c>100) or (c<1000) then
            begin
               writeln(a)
            end;
         i:=i+1;
         readln;
      end;
   until a>=999;

end.
-Volvo-
По-моему, тебе вполне достаточно этого:
program zikl_8;

var c: real;
    a, i, d1, d2, d3: integer;

begin
   i:=101;
   repeat

     d1:=i div 100;
     d3:= i mod 10;
     d2:=(i-100*d1-d3) div 10;
     a:=7*(d1*d2+d2*d3+d1*d3);

     { сравниваешь число с семикратным попарным произведением }
     if i = a then begin
       writeln(a);
       readln;
     end;
     i:=i+1;

   until i>=999; { цикл все-таки идет по I }

end.

Кстати, конструкция Repeat ... Until сама по себе является операторными скобками, то есть внутри нее Begin ... End просто лишние...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.