Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

помогите разобраться   Найти похожие ветки 

 
Лиля   (2006-10-24 20:03) [0]

Текст задания
Вводятся числа a и b. Найти сумму таких чисел в диапазоне [a;b], которые являются точными квадратами.


 
Leonid Troyanovsky ©   (2006-10-24 20:14) [1]


> Лиля   (24.10.06 20:03)  

> Вводятся числа a и b. Найти сумму таких чисел в диапазоне
> [a;b], которые являются точными квадратами.


А x - это приблизительный квадрат от sqrt(x)?

--
Regards, LVT.


 
Лиля   (2006-10-24 20:18) [2]


> А x - это приблизительный квадрат от sqrt(x)?

Да.
Я написала код, но у меня не правильно считает. Ошибка где-то...


 
Leonid Troyanovsky ©   (2006-10-24 20:23) [3]


> Лиля   (24.10.06 20:18) [2]

> > А x - это приблизительный квадрат от sqrt(x)?

> Да.


Можно пример?


> Я написала код, но у меня не правильно считает. Ошибка где-
> то...


А.. Ну, это-то понятно.
В 17 строке ошибка.

--
Regards, LVT.


 
TUser ©   (2006-10-24 20:23) [4]

> Ошибка где-то...

В строке 17. Числа - только целые?


 
Лиля   (2006-10-24 20:26) [5]


> Можно пример?

procedure TForm1.Button1Click(Sender: TObject);
var A, B, i, x, sum: integer;
begin A:= StrToInt(Edit1.Text);
     B:= StrToInt(Edit2.Text);
     i:=sqrt(x)
      sum:=o
for i:=A to B do

     if i= x  then
     sum:=sum+i;
      Label1. Caption:=IntToStr(Sum)
       end;
end.

> В строке 17. Числа - только целые?

Все числа целые.


> Числа - только целые?


 
TUser ©   (2006-10-24 20:33) [6]

Варнинги читала? Как должен работать этот код (по строчкам)? У тебя х нигнде не инициализирован, а ты дцмаешь, что будут перебраны все значения. Это не так.


 
Лиля   (2006-10-24 20:39) [7]


> Варнинги читала? Как должен работать этот код (по строчкам)?
>  У тебя х нигнде не инициализирован, а ты дцмаешь, что будут
> перебраны все значения. Это не так.

Читаю, но я только учусь и слабо понимаю, что нужно делать.


 
TUser ©   (2006-10-24 21:04) [8]

Ты хочешь научиться или сдать? От этого зависит ответ - дать примерный код или только подсказку.


 
Leonid Troyanovsky ©   (2006-10-24 21:06) [9]


> Лиля   (24.10.06 20:39) [7]

> Читаю, но я только учусь и слабо понимаю, что нужно делать.



 sum:=0;
 i:= 0;
 x:= 0;
 while (x <= B) do
   begin
     if (x >= A) then
       sum:=sum+i;
     inc(i);
     x := i * i;
  end;


--
Regards, LVT.


 
Лиля   (2006-10-24 21:07) [10]


> Ты хочешь научиться или сдать? От этого зависит ответ -
> дать примерный код или только подсказку.

Хочу научиться! Можно подсказку?


 
Наиль ©   (2006-10-24 21:30) [11]

Подсказка:
Если в [9] заменить в одном месте i на x, то получишь решение своей задачи.
Для лучшего понимания этой программы напиши к ней комментарии и обязательно вышли сюда. Будем тебя учить.


 
Лиля   (2006-10-24 21:44) [12]


> Если в [9] заменить в одном месте i на x, то получишь решение
> своей задачи.
> Для лучшего понимания этой программы напиши к ней комментарии
> и обязательно вышли сюда. Будем тебя учить.

procedure TForm1.Button1Click(Sender: TObject);
var A, B, i, x, sum: integer;
begin A:= StrToInt(Edit1.Text);
     B:= StrToInt(Edit2.Text);
     i:=0;
     x:=0;
     while (x<=B)do
     begin
     if (x>=A)then
     sum:=sum+i;
     inc(i);
     x:=i*i;

    Label1.Caption:=IntToStr(sum)
       end;

        end.

Всё равно ошибки выдаёт


 
Лиля   (2006-10-24 21:44) [13]


> Если в [9] заменить в одном месте i на x, то получишь решение
> своей задачи.
> Для лучшего понимания этой программы напиши к ней комментарии
> и обязательно вышли сюда. Будем тебя учить.

procedure TForm1.Button1Click(Sender: TObject);
var A, B, i, x, sum: integer;
begin A:= StrToInt(Edit1.Text);
     B:= StrToInt(Edit2.Text);
     i:=0;
     x:=0;
     while (x<=B)do
     begin
     if (x>=A)then
     sum:=sum+i;
     inc(i);
     x:=i*i;

    Label1.Caption:=IntToStr(sum)
       end;

        end.

Всё равно ошибки выдаёт


 
Наиль ©   (2006-10-24 21:46) [14]

Для начала проставь комментарии к каждой строчке, как ты понимаешь эту программу, авось поймёшь где ошибка. А потом уже покажи нам, результат твоих рассуждений.


 
Пусик ©   (2006-10-24 21:50) [15]


> Всё равно ошибки выдаёт


1. Пиши обязательно, какие ошибки выдает.
2. Напиши алгоритм поиска словами, без кода, - для себя. Потом пошагово смотри, срабатывает ли твой алгоритм.


 
Наиль ©   (2006-10-24 21:50) [16]


>     Label1.Caption:=IntToStr(sum)

Лучше заменить на
ListBox1.Items.Add(IntToStr(sum));
Это должно навести тебя на некоторые мысли


 
Наиль ©   (2006-10-24 21:56) [17]


> 2. Напиши алгоритм поиска словами, без кода, - для себя.
> Потом пошагово смотри, срабатывает ли твой алгоритм.

Это означает, что на строчке
A:= StrToInt(Edit1.Text);
нужно поставить точку останова (клавиша F5)
Запустить программу и следить за состоянием переменых i,x и sum в окне Watch (Ctrl+Alt+W). Переменые должны быть добавлены в окно заранее. Движение от строчки к строчке осуществляется клавишей F8.
Продолжить выполнение программы можно клавишей F9.


 
Anatoly Podgoretsky ©   (2006-10-24 22:05) [18]


> В строке 17. Числа - только целые?

Это не только не квадрат, это даже простое число.


 
Лиля   (2006-10-24 22:17) [19]


> Переменые должны быть добавлены в окно заранее.

А как добавить?


 
Наиль ©   (2006-10-24 22:28) [20]

1. Ставишь в окно Watch курсор, нажимаешь Insert.
2. Пишешь название переменой.
3. ОК.


 
default ©   (2006-10-24 23:56) [21]

1*1 2*2 3*3 4*4 5*5 6*6 7*7 ...
1   4   9  16   25 36   49 ..
это ряд квадратов натуральных чисел(целых положительных)
каждый член ряда - точный квадрат
числа a,b задают какой-то кусок этого ряда
думай


 
MikePetrichenko ©   (2006-10-25 04:39) [22]


> Текст задания
> Вводятся числа a и b. Найти сумму таких чисел в диапазоне
> [a;b], которые являются точными квадратами.

А не вот так?

procedure TForm1.Button1Click(Sender: TObject);
var
 A: Integer;
 B: Integer;
 Sum: Integer;
 Loop: Integer;
begin
 A := StrToInt(Edit1.Text);
 B := StrToInt(Edit2.Text);
 Sum := 0;

 for Loop := A to B do
   if Sqrt(Loop) = Round(Sqrt(Loop)) then begin
     Inc(Sum, Loop);
     Memo1.Lines.Add("Number: " + IntToStr(Loop));
   end;

 Memo1.Lines.Add("Summ: " + IntToStr(Sum));
end;


 
Наиль ©   (2006-10-25 04:43) [23]

> Sqrt(Loop) = Round(Sqrt(Loop)) - ни когда не будет True


 
MikePetrichenko ©   (2006-10-25 04:48) [24]

А ты проверь :)


 
MikePetrichenko ©   (2006-10-25 04:51) [25]

В догонку. Можешь написать Trunc(), смысл и правильность работы не изменится


 
Наиль ©   (2006-10-25 05:02) [26]

> А ты проверь :)

Проверил, работает.
В справке написано sqrt:Extended.
Опыт показывает, что Extended и операция равенства не совместимы.
Оказывается и здесь бывают исключения.


 
MikePetrichenko ©   (2006-10-25 05:06) [27]


> Проверил, работает.
> В справке написано sqrt:Extended.
> Опыт показывает, что Extended и операция равенства не совместимы.
>
> Оказывается и здесь бывают исключения.

Это не исключение :)
Например
Sqrt(9) = 3 (хоть какое оно Extended или нет, но 3)
Соответственно и Round(Sqrt(9)) = 3
А вот Sqrt(10) = 3.xxxxxxxxxx
Все просто.


 
Наиль ©   (2006-10-25 06:13) [28]

Пример сравнения Extended
procedure TForm1.Button1Click(Sender: TObject);
Var
a,b:Extended;
begin
a:=1.1;
b:=3.1;
a:=a+0.9;
b:=b-1.1;
if a=b
 then Button1.Caption:="Ok"
 else Button1.Caption:="Foo";
end;


 
MikePetrichenko ©   (2006-10-25 06:31) [29]


> procedure TForm1.Button1Click(Sender: TObject);
> Var
> a,b:Extended;
> begin
> a:=1.1;
> b:=3.1;
> a:=a+0.9;
> b:=b-1.1;
> if a=b
>  then Button1.Caption:="Ok"
>  else Button1.Caption:="Foo";
> end;

Дык не факт, что a=2. Внутри оно вполне может быть 1.9999999999999999999
Тоже могу сказать и про b.
А в приведенном выше примере, если получилось челое число оно приводится к целому и сравнение пройдет на ура.


 
MikePetrichenko ©   (2006-10-25 06:46) [30]

Ну. Что я и говорил.
После вычитания
ST0: 3FFF FFFF FFFF FFFF FFFF
ST1: 4000 8000 0000 0000 0000

А вот после корней
ST0: 4000 0000 0000 0000 0000
ST1: 4000 0000 0000 0000 0000

(Для коренй сделал вот так:
procedure TForm1.Button1Click(Sender: TObject);
Var
a,b:Extended;
c,d: Integer;
begin
a:=1.1;
b:=3.1;
a:=a+0.9;
b:=b-1.1;
if a=b
then Button1.Caption:="Ok"
else Button1.Caption:="Foo";
c := 9;
d := 9;
if sqrt(c) = sqrt(d)
then Button1.Caption:="Ok"
else Button1.Caption:="Foo";
end;

)
Смотрел FPU перед сравнение но после вычислений.


 
MikePetrichenko ©   (2006-10-25 06:48) [31]


> ST0: 4000 0000 0000 0000 0000
> ST1: 4000 0000 0000 0000 0000


Опечатался:
ST0: 4000 С000 0000 0000 0000
ST1: 4000 С000 0000 0000 0000


 
Наиль ©   (2006-10-25 07:00) [32]

> [31] MikePetrichenko ©   (25.10.06 06:48)

Вот я и говорю, исключение из правил.
Хотя sqrt - Extended, а результат его работы как у целого.



Страницы: 1 вся ветка

Текущий архив: 2006.11.12;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.03 c
2-1161929308
viper03
2006-10-27 10:08
2006.11.12
помогите с SQL запросом


2-1161705819
Лиля
2006-10-24 20:03
2006.11.12
помогите разобраться


11-1137852891
Vladimir Kladov
2006-01-21 17:14
2006.11.12
KOL/MCK Версия 2.32 + Collapse


15-1160687510
Anatoly Podgoretsky
2006-10-13 01:11
2006.11.12
Delphi Master клиент чтения форума, сокращенно DMN


15-1161887904
Kerk
2006-10-26 22:38
2006.11.12
У меня столько энергии вырабатывается, что я ее гашу в труде (с)