Форум: "Начинающим";
Текущий архив: 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