Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как написать цикл while с чтением из массива, array[20..100] 
:(
    Опции темы
Serhik_z
  Дата 28.2.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Как написать цикл while с чтением из массива. array[20..100] Числа из массива
подставляются в результат сравнения ((a/b)*(c/d)) но не
повторяясь как (20/20)*(40/40), а (25/34)*(50/23)
по формуле. Если 1,3456 = ((a/b)*(c/d)) то вывести полученные результаты
сравнения чисел которые подошли из массива в memo.
P.S. Буду очень благодарен.
smile smile smile
PM MAIL   Вверх
Marriage
Дата 28.2.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



НИчего не понял, напиши попонятнее...


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Serhik_z
Дата 28.2.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Есть число 1.23445. Нужно по форуме (a/b)*(c/d) методом перебора чисел от 20 до 100 только целые
сравнить с полученным числом 1.23445 и что сошлось с числом 1.23445 вывести результат.
тоесть Если 1.23423 = (a/b)*(c/d) - вместо "a b с d" подставляются числа от 20 до 100
PM MAIL   Вверх
Александра
Дата 28.2.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



Serhik_z
по идее так:

Код

const f = 1.23445;
var a,b,c,d: integer;
begin
 a := 20;
 while a <> 100 do begin
   b := 20;
   while b <> 100 do begin
     c := 20;
     while c <> 100 do begin
       d := 20;
       while d <> 100 do begin
         if {сошлось} then;
         inc(d)
       end;
       inc(c)
     end;
     inc(b)
   end;
   inc(a)
 end;


тока ничего не сойдется, нужно брать примерное. сам посмотри как тебе лучше
--------------------
PM   Вверх
Snowy
Дата 28.2.2005, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

var
 a,b,c,d: integer;
begin
 for a:=20 to 100 do
   for b:=20 to 100 do
     for c:=20 to 100 do
       for d:=20 to 100 do
         if (a/b)*(c/d) = 1.23423 then
           Memo1.Lines.Add(Format('a=%d, b=%d, c=%d, d=%d',[a,b,c,d]));

Через for аккуратнее. Тока нет такой комбинации. Видимо число другое.
PM MAIL   Вверх
Serhik_z
Дата 28.2.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Большое Спасибо, попробуем.
smile smile smile
PM MAIL   Вверх
Snowy
Дата 28.2.2005, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Serhik_z @ 28.2.2005, 16:47)
но не
повторяясь как (20/20)*(40/40),

Для этого перед добавлением в мемо нужно добавить еще строчку
Код

if (a<>b) and (c<>d) then

PM MAIL   Вверх
Serhik_z
Дата 28.2.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Snowy - спасибо.

Все работает, результат в memo не виден.
Код

procedure TForm1.RzShapeButton1Click(Sender: TObject);
var
   m: real;  
   k: real;  
   i: real;    
   c: integer;  
   d: integer;
   v: real;    
   aa,bb,cc,dd: integer;

begin

// получить исходные данные из полей ввода
m:= StrToFloat(RxCalcEdit1.Text);
k:= StrToFloat(RxCalcEdit2.Text);
i:= StrToFloat(RxCalcEdit3.Text);
// предварительные преобразования
c:= Trunc(m);
d:= Trunc(m/2) mod 10000;
// вычисление
v:=sin(((k+i/60)*pi)/180)*4.0425/m;

for aa:=20 to 100 do
  for bb:=20 to 100 do
    for cc:=20 to 100 do
      for dd:=20 to 100 do
        if ((aa/bb)*(cc/dd)) = v then
         if (aa<>bb) and (cc<>dd) then
          Memo1.Lines.Add(Format('aa=%dd, bb=%dd, cc=%dd, dd=%dd',[aa,bb,cc,dd]));

end;

smile smile smile

PM MAIL   Вверх
Александра
Дата 28.2.2005, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



Serhik_z
Хм.. ты же через while хотел?
--------------------
PM   Вверх
Serhik_z
Дата 1.3.2005, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Александра - Спасибо, и так попробовал.
Код

// получить исходные данные из полей ввода
m:= StrToFloat(RxCalcEdit1.Text);
k:= StrToFloat(RxCalcEdit2.Text);
i:= StrToFloat(RxCalcEdit3.Text);
// предварительные преобразования
c:= Trunc(m);  // это целая часть числа t
d:= Trunc(m/2) mod 10000; // это дробная часть числа t
// вычисление
v:=sin(((k+i/60)*pi)/180)*4.0425/m;
aa := 20;
while aa <> 100 do begin
  bb := 20;
  while bb <> 100 do begin
    cc := 20;
    while cc <> 100 do begin
      dd := 20;
      while dd <> 100 do begin
        if ((aa/bb)*(cc/dd))= v then
        if (aa<>bb) and (cc<>dd) then
        Memo1.Lines.Add(Format('aa=%dd, bb=%dd, cc=%dd, dd=%dd',[aa,bb,cc,dd]));
        inc(dd)
      end;
      inc(cc)
    end;
    inc(bb)
  end;
  inc(aa)
end;

Результат не выводится в memo
Код

Memo1.Lines.Add(Format('aa=%dd, bb=%dd, cc=%dd, dd=%dd',[aa,bb,cc,dd]));


PM MAIL   Вверх
Snowy
Дата 1.3.2005, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Ничего удивительного. Просто его нет.
Вместо
v:=sin(((k+i/60)*pi)/180)*4.0425/m;
напиши
v:=5;
Тебе столько результатов выдаст...
Может тебе нужно v как-то округлять, до 1-2 знаков после запятой.
По твоей формуле у тебя v - число с кучей знаков после запятой,
а по формуле ((aa/bb)*(cc/dd)), думаю столько знаков и не будет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0983 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.