Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.01.2013, 23:56
Аватар для Chiara_7z7
Chiara_7z7 Chiara_7z7 вне форума
Прохожий
 
Регистрация: 05.01.2013
Адрес: Germany
Сообщения: 9
Версия Delphi: 6
Репутация: 10
По умолчанию Квадратный корень по вавилонски

Здравствуйте!
Очень прошу, не кидайте в меня тапками за мои вопросы!
Я совершеннеший новичок в программировании и очень нуждаюсь в помощи!
Задача такова:
"Необходимо высчитать квадратный корень числа (задано число в SpinEdit) вавилонским способом:
1) Нужно, что бы число было больше ноля
2) Что бы число было больше единицы. Если число отрицательное, то необходимо сделать его положительным и запомнить его. Это число нужно разделить на 2 и получить результат, который в сл. шаге будет делителем. Полученное среднее значение будет делителем в сл. шаге. Делитель и среднее значение приводят к приблизительно одному результату, которе и является квадратным корнем. Программа будет прервана после 6 попыток и именно шестая будет наиболее близка к ответу. "

Уфф....если не совсем понятно, что значит по вавилонски, пожалуйста, посмотрите тут:
http://en.wikipedia.org/wiki/Methods...onian_metho d


Вот, мои мучения...позориться нам не привыкать :

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin;

type
  TForm1 = class(TForm)
    SpinEdit1: TSpinEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;
  Zahl1,Zahl2,Wurzel: Real;
  Quadratwurzel:Integer;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

   Zahl1:=StrToFloat(SpinEdit1.Text);


     If Zahl1>1 then

     Wurzel:= Quadratwurzel(Zahl1);

     Label1.Caption:=FloatToStr(Wurzel);
     end;

If Zahl1<1 then

Zahl2:=Zahl1*(1/-1);
Wurzel:=Quadratwurzel(Zahl2);
Label1.Caption:=FloatToStr(Wurzel);


end;

function TForm1.Quadratwurzel:String;

Mittelwert1:= (Zahl1+1)/2;
Mittelwert2:=(Mittelwert1+Zahl1/Mittelwert1);
Mittelwert3:=(Mittelwert2+Zahl1/Mittelwert2);
Mittelwert4:=(Mittelwert3+Zahl1/Mittelwert3);
Mittelwert5:=(Mittelwert4+Zahl1/Mittelwert4);
Mittelwert6:=(Mittelwert5+Zahl1/Mittelwert5);
Ergebnis:=Mittelwert6;
Label1.Caption:=FloatToStr(Ergebnis);

end;

end.
Админ: Пользуемся тегами для оформления кода!

Буду очень признательна за помощь! Уж хочется решить задачку и начать спокойно спать по ночам!

Последний раз редактировалось Admin, 07.01.2013 в 14:26.
Ответить с цитированием
  #2  
Старый 06.01.2013, 01:00
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Хочешь сказать, что этот код компилиться?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 06.01.2013, 01:04
Аватар для Chiara_7z7
Chiara_7z7 Chiara_7z7 вне форума
Прохожий
 
Регистрация: 05.01.2013
Адрес: Germany
Сообщения: 9
Версия Delphi: 6
Репутация: 10
По умолчанию

Нет, не хочу сказать... иначе не просила бы о помощи!
Где моя ошибка? Что я делаю неправильно?
Ответить с цитированием
  #4  
Старый 06.01.2013, 01:07
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Для начала: куча неопределённых переменных, несоответствие типов, неверно расставлены операторные скобки (begin/end).
И после всех исправлений - неверный алгоритм.

Мне лень разбираться с алгоритмом, пока только подправил ваш код
Код:
type
  TForm1 = class(TForm)
    Label1: TLabel;
    SpinEdit1: TSpinEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Quadratwurzel(Value : Single);
  end;

var
  Form1: TForm1;
  Zahl1 : Single;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Zahl1 := StrToFloat(SpinEdit1.Text);
  if Zahl1 > 1 then
    Quadratwurzel(Zahl1);

  if Zahl1 < 1 then
    Quadratwurzel(Abs(Zahl1));
end;

procedure TForm1.Quadratwurzel(Value : Single);
var
  I : Integer;
  S : Single;
begin
  S := Value / 2;
  for I := 0 to 4 do
    S := (S + Value) / S;
  Label1.Caption := FloatToStr(S);
end;

end.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 06.01.2013 в 01:19.
Ответить с цитированием
  #5  
Старый 06.01.2013, 01:23
Аватар для Chiara_7z7
Chiara_7z7 Chiara_7z7 вне форума
Прохожий
 
Регистрация: 05.01.2013
Адрес: Germany
Сообщения: 9
Версия Delphi: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Для начала: куча неопределённых переменных, несоответствие типов, неверно расставлены операторные скобки (begin/end).
И после всех исправлений - неверный алгоритм.


Про неверный алгоритм я сразу поняла, спасибо...а вот с неопреленной кучей, пожалуй, не соглашусь. Обозвала как могла...при этом дико старалась! Ткните носом, пожалуйста! Я внимательно еще раз все просмотрела и не вижу у себя ошибок (за исключением оп. скобок begin/end)
Ответить с цитированием
  #6  
Старый 06.01.2013, 01:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ух как здорово - не согласится. Ну так возьми и откомпилируй. Пусть Дельфи натыкает носом во все неверные места.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 06.01.2013, 01:26
Аватар для Chiara_7z7
Chiara_7z7 Chiara_7z7 вне форума
Прохожий
 
Регистрация: 05.01.2013
Адрес: Germany
Сообщения: 9
Версия Delphi: 6
Репутация: 10
По умолчанию

Спасибо большое... пара слов совсем незнакомы, буду разбираться
Ответить с цитированием
  #8  
Старый 06.01.2013, 01:27
Аватар для Chiara_7z7
Chiara_7z7 Chiara_7z7 вне форума
Прохожий
 
Регистрация: 05.01.2013
Адрес: Germany
Сообщения: 9
Версия Delphi: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Ух как здорово - не согласится. Ну так возьми и откомпилируй. Пусть Дельфи натыкает носом во все неверные места.


Вам легко говорить, когда вы спец! А что делать нам, чайникам?
Ответить с цитированием
  #9  
Старый 06.01.2013, 01:28
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Что незнакомо?

Учиться.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 06.01.2013, 01:33
Аватар для Chiara_7z7
Chiara_7z7 Chiara_7z7 вне форума
Прохожий
 
Регистрация: 05.01.2013
Адрес: Germany
Сообщения: 9
Версия Delphi: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Что незнакомо?

Учиться.


Дык учимся, вот...
Незнакомо Value : Single
Abs это ж функция?
И почему for I := 0 to 4, а не for I:=0 to 6 do, извиняюсь?
Ответить с цитированием
  #11  
Старый 06.01.2013, 01:38
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

1. В Дельфи тип Real оставлен для совместимости, рекомендуется использовать Single.
2. Abs - возвращает абсолютное значение от числа.
3. Цикл от 0 до 4 равен 5 "шагам" + получение первого делителя (S := Value / 2). Попытка for I:=0 to 6 do ни к чему хорошему не приведёт, так получится 7 "шагов".
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #12  
Старый 06.01.2013, 01:43
Аватар для Chiara_7z7
Chiara_7z7 Chiara_7z7 вне форума
Прохожий
 
Регистрация: 05.01.2013
Адрес: Germany
Сообщения: 9
Версия Delphi: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
1. В Дельфи тип Real оставлен для совместимости, рекомендуется использовать Single.
2. Abs - возвращает абсолютное значение от числа.
3. Цикл от 0 до 4 равен 5 "шагам" + получение первого делителя (S := Value / 2). Попытка for I:=0 to 6 do ни к чему хорошему не приведёт, так получится 7 "шагов".


Огромное спасибо! Сейчас попробую...
Ответить с цитированием
  #13  
Старый 06.01.2013, 02:01
Аватар для Chiara_7z7
Chiara_7z7 Chiara_7z7 вне форума
Прохожий
 
Регистрация: 05.01.2013
Адрес: Germany
Сообщения: 9
Версия Delphi: 6
Репутация: 10
По умолчанию

Ответы не те...видать формула неверна.
Ответить с цитированием
  #14  
Старый 06.01.2013, 02:04
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Посмотреть приведённый вариант сложно?
Код:
procedure TForm1.Quadratwurzel(Value : Single);
var
  I : Integer;
  S : Single;
begin
  S := Value / 2;
  for I := 0 to 4 do
    S := (S + Value) / S;
  Label1.Caption := FloatToStr(S);
end; 
здесь переменная I как раз локальная, что и "любит" компилятор.

Формула, конечно, неверна. Но направление есть, теперь правьте формулу.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #15  
Старый 06.01.2013, 02:07
Аватар для Chiara_7z7
Chiara_7z7 Chiara_7z7 вне форума
Прохожий
 
Регистрация: 05.01.2013
Адрес: Germany
Сообщения: 9
Версия Delphi: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Посмотреть приведённый вариант сложно?
Код:
procedure TForm1.Quadratwurzel(Value : Single);
var
  I : Integer;
  S : Single;
begin
  S := Value / 2;
  for I := 0 to 4 do
    S := (S + Value) / S;
  Label1.Caption := FloatToStr(S);
end; 
здесь переменная I как раз локальная, что и "любит" компилятор.

Формула, конечно, неверна. Но направление есть, теперь правьте формулу.

Да, я после заметила...исправила!

Огромное спасибо! Вы спасли меня от мук!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025