Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
Лиля   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.056 c
15-1161580480
Бугага
2006-10-23 09:14
2006.11.12
В мире есть 10 категорий людей: те, кто знает двоичное исчисление


8-1144273040
QuickFinder
2006-04-06 01:37
2006.11.12
Декомпиляция Flash-файла


2-1161782928
vitv
2006-10-25 17:28
2006.11.12
lookup в гриде


15-1161346025
McSimm
2006-10-20 16:07
2006.11.12
Дабы не офтопить:


15-1161790219
oldman
2006-10-25 19:30
2006.11.12
Вот и до нас дошел прогресс... :(





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский