Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2010, 13:47   #1
Эльвира777
Новичок
Джуниор
 
Регистрация: 25.06.2010
Сообщений: 1
Восклицание задача

вывести на экран все целые числа которые являются полными квадратами в диапазоне n1доn2 и количество выведенных чисел
Эльвира777 вне форума Ответить с цитированием
Старый 25.06.2010, 14:06   #2
Ol'ga_new
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 125
По умолчанию

Правильно думаю: диапозон [1,10], ответ 4 и 9 всего 2 цифры?
Ol'ga_new вне форума Ответить с цитированием
Старый 25.06.2010, 14:13   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Ну тогда:
Код:
n:=0;
for i:=n1 to n2 do
begin
       x:=sqrt(i);
       if frac(x) = 0 then begin 
       write(i,' ');
       n:=n+1;
       end;
end;
Цитата:
Правильно думаю: диапозон [1,10], ответ 4 и 9 всего 2 цифры?
Во-первых, орфография: диапазон, а не диапозон.
Во-вторых, неправильно думаете: не 4 и 9, а 1,4,9, и всего 3 числа

Последний раз редактировалось _-Re@l-_; 25.06.2010 в 14:20.
_-Re@l-_ вне форума Ответить с цитированием
Старый 27.06.2010, 13:26   #4
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

Вообще, я бы сделал так (работает гораздо быстрее предложенного выше способа):

Код:
program roots;
var
   n1, n2, i: integer;
begin
     readln(n1, n2);

     {Получаем корень из n1 и округляем до целого}
     i := Trunc(Sqrt(n1));

     {Проверяем, является ли n1 правильным квадратом.}
     {Вообще, здесь можно было оставить  проверку на равенство дробной части нулю, как и в вышенаписанном варианте,}
     {но у меня есть привычка опасаться погрешности при работе с дробными числами.}
     {Поэтому я стараюсь сводить всё либо к целочисленным сравнениям, либо учитываю при сравнении погрешность.}

     {Итак, если n1 у нас полный квадрат, выводим его значение и увеличиваем i на единицу}
     if i * i = n1 then
        write(n1);
     inc(i);

     {До тех пор, пока квадрат i меньше или равен n2, выводим квадрат i и увеличиваем i на единицу}
     while sqr(i) <= n2 do
     begin
          write(' ', sqr(i));
          inc(i);
     end;

     readln;
end.
Работает быстрее за счёт того, что необходимо меньше итераций цикла для получения всех чисел в диапазоне, а также используется исколючительно целочисленная арифметика (за исключением получения первого значения i)

Последний раз редактировалось kogemrka; 27.06.2010 в 13:35.
kogemrka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++, Задача XanderV13 Помощь студентам 5 29.11.2009 11:36
C++ Задача! Kiret Помощь студентам 1 26.11.2009 18:41
задача! Татяна Паскаль, Turbo Pascal, PascalABC.NET 3 15.05.2009 05:06