Тут могла бути ваша реклама

Pascal , покажите где ошибка ?

  • Автор теми Автор теми Honorocker
  • Дата створення Дата створення
ну с таким успехом тогда вообще все числа в мире делятся одновременно на 3 и 4 :D
.
после такого утверждения ваш смех закономерен и понятен, я рад, что чувство юмора у вас есть
причём тут сомножители, если цикл всё равно все числа будет перебирать? ты вообще предлагаешь ещё дольше сделать, у тебя получится два цикла, первый на 200, а второй на 16.

какие 2 цикла, вы вообще читать умеете? код еще раз посмотреть бы не мешало там ровно 17 итераций
 
причём тут сомножители, если цикл всё равно все числа будет перебирать? ты вообще предлагаешь ещё дольше сделать, у тебя получится два цикла, первый на 200, а второй на 16.

покажи где там цикл "первый на 200"
тут один цикл на 16 элементов (17 если считать ноль)


ну по сути, это уберет только иф и сделает цикл еще проще и быстрее, кстати, интересно, что вычислительно сложнее, цикл с 200 итерациями, или с 16, но с более сложным условием?

Проще if вынести за пределы цикла и не забивать голову ;)
и нок а не нод :)
хотя думаю ноль тоже считать надо

$sum = 0;
$num = 0;
$low_lim = -100;
$high_lim = 100;
$nok = 12;
for ( $i=round($low_lim/$nok); $i <= round($high_lim/$nok); ++$i )
{ $sum +=$i; ++$num; }
if ( $low_lim <= 0 && $high_lim > 0)
--$num;
print $sum*$nok;
print $num;
 
Читайте задания хорошо, люди к вам потянутся.
В задании нигде не указано, что надо найти эти числа
Итого имеем - находимя числа a1,a2,...,ax
Потом программа Writeln('Sum is ', a1 + a2 + ax);
Ессно вписываем реальные числа. 1 Строчка, и все в точности по ТЗ.
 
ничего сложного в алгоритме не вижу. а также, кроме всего прочего, на 4 и 3 делятся только ЧЕТНЫЕ числа, поэтому от -150 можно идти шагом 2, таким образом, половина времени сокращается
 
а также, кроме всего прочего, на 4 и 3 делятся только ЧЕТНЫЕ числа, поэтому от -150 можно идти шагом 2, таким образом, половина времени сокращается

но для общего случая такой вариант не годится. Или необходима дополнительная логика определения шага.
 
Я просто сказал это с точки зрения оптимизации. например, если диапазон от -50 до 150, можно сразу начинать считать от 51 до 150
а как же количество? :rolleyes:

какие 2 цикла, вы вообще читать умеете? код еще раз посмотреть бы не мешало там ровно 17 итераций
чего-то я не увидел на паскале такого кода.

ничего сложного в алгоритме не вижу. а также, кроме всего прочего, на 4 и 3 делятся только ЧЕТНЫЕ числа, поэтому от -150 можно идти шагом 2, таким образом, половина времени сокращается
а если там будет другой диапазон и другие числа на которые делить надо будет, то ты собираешься программу переписывать? Я не пойму, ты математик или программист? Надо вообще сразу же универсальную программу написать, чтобы пользователь сам исходные данные вводил.
 
чего-то я не увидел на паскале такого кода.
и от этого там сразу второй цикл появился?
все конструкции стандартны переведите на паскаль и будет Вам счастье.
Алгоритм от языка не зависит.

мне лень вспоминать паскаль.

PS: кстати предел цикла нужно вынести в отдельную переменную.
PPS: и округлять строго вниз иначе можно насчитать лишнее.

to ASokol:
видел несколько часов назад Вы даже код своего решения выкладывали, отчего ж удалили?
 
Тут надо описать случай, когда из некоторого контейнера, содержащего разнородные, несистематизированные обьекты по некоторому признаку выбирается иформация и подается на абстрактный вывод :о
 
Код:
procedure CalcSumAndCount(pRangeFrom, pRangeTill, pDivisor: integer; var pCount, pSumm: integer);
var
  lRangeFrom, lRangeTill: integer;
begin
  pCount := (pRangeTill div pDivisor) - ((pRangeFrom - 1) div pDivisor);

  lRangeFrom := (pRangeFrom div pDivisor + integer(pRangeFrom mod pDivisor <> 0)) * pDivisor;
  lRangeTill := (pRangeTill div pDivisor) * pDivisor;

  if lRangeFrom = 0 then lRangeFrom := pDivisor;
  if lRangeTill = 0 then lRangeTill := pDivisor;

  pSumm := trunc((lRangeFrom + lRangeTill) / 2) * pCount;
end;

Вот универсальный алгоритм, для любых диапазонов и делителей. Правда действует только для положительных чисел. То есть если надо посчитать от -90 до 100, то всё довольно просто

Код:
CalcSumAndCount(0, 90, 12, lCount1, lSumm1);
CalcSumAndCount(0, 100, 12, lCount2, lSumm2);

Такие дела ;)
 
"В диапозоне от -100..100 посчитать количество и сумму чисел деляшихся одновременно на 3 и 4"
не найти числа и посчитать, а посчитать
о чем речь?

уже сто раз посчитали.
чисел 16 ( с нулём 17)
сумма 0

но лишь от того что ТЗ написано криво вовсе не значит что нужно и программу писать также.

Тут интересен сам процесс а не результат ;)
 
"В диапозоне от -100..100 посчитать количество и сумму чисел деляшихся одновременно на 3 и 4"
не найти числа и посчитать, а посчитать
о чем речь?
а для того, чтобы посчитать количество и сумму этих чисел в заданном диапазоне - их найти не надо что ли?
 
и от этого там сразу второй цикл появился?
все конструкции стандартны переведите на паскаль и будет Вам счастье.
Алгоритм от языка не зависит.

мне лень вспоминать паскаль.

PS: кстати предел цикла нужно вынести в отдельную переменную.
PPS: и округлять строго вниз иначе можно насчитать лишнее.
а, я понял, ну можно и так написать:

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
i,summa,kolvo,step:integer;

begin
summa:=0;
kolvo:=0;
step:=12;
for i:=-100 to 100 do
if ((i mod 3)=0) and ((i mod 4)=0) then
begin
summa:=summa+i;
kolvo:=kolvo+1;
if ((i+step)<=100) then
i:=i+step;
end;
if (kolvo = 0) then writeln('В заданном диапазоне не найдено ни одной цифры, которые делятся одновременно на 3 и 4!')
else writeln('summa: ',summa,' ;kolvo: ',kolvo);
readln;
end.
 
Назад
Зверху Знизу