Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2015, 17:15   #11
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

а так катит?

Код:
for i := 0 to High(Images)-Low(Images) do
или я что-то недопонял...
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 22.07.2015, 17:33   #12
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

и так, начинает с 99))
я пробовал кучу разных вариантов и всё равно он начинает с максимума))
даже downto с -99)))
Вобщем, компилятор оказался неестественно хитрый)))
ДралсяСошибками вне форума Ответить с цитированием
Старый 22.07.2015, 18:31   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Оптимизатор.
Вообще отключение его должно было дать эффект.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.07.2015, 19:03   #14
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Да хрен с ним, главное работает как и задумал, тестировал с разным текстом, всё отлично)))

Пусть это останется на совести компиля и пусть ему будет стыдно))
ДралсяСошибками вне форума Ответить с цитированием
Старый 22.07.2015, 20:42   #15
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от ДралсяСошибками Посмотреть сообщение
Пробовал, без изменений, но странность в том, что цикл работает как надо)))
Фраза, реально насмешила. Если цикл работает, в чём проблема?
Я обычно плюю на всякие заморочки типа соблюдение правил и прочую фигню. Иногда и г-код пишу. Работает и ладно. Найду время - поправлю...
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 22.07.2015, 22:24   #16
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
Вопрос

JUDAS, Для массива
Код:
Images: Array[10..19] of ImagesX;
Low(Images) равен 10, а High(Images) равен 19.
И цикл перебирает i от 10 до 19. Должен. И вот у них как-то выходит что задом-наперёд меняется i.

Цитата:
Сообщение от Toxa Посмотреть сообщение
ResourceSpace
мешает эта строка
Код:
S:=S+'|'+IntToStr(i);
если смотреть в дебаге значение переменной i то она ведет отсчет с 100 к нулю, а если добавить использование переменной i, то отсчет нормалиизуется
Я смотрел по всякому:
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var i: Integer; S: String;
Begin
S:='';
For i:=Low(Images) To High(Images) Do
      Begin
      S:=S+'|'+IntToStr(i);
      Memo1.Text := StringReplace(Memo1.Text, Images[i].Code, Images[i].Image, [rfReplaceAll, rfIgnoreCase]);
      End;
S:=S+'|';
ShowMessage(S);
End;

Procedure TForm1.Button2Click(Sender: TObject);
Var i: Integer;
Begin
For i:=Low(Images) To High(Images) Do
      Begin
      ShowMessage('pause');
      Memo1.Text:=StringReplace(Memo1.Text, Images[i].Code, Images[i].Image, [rfReplaceAll, rfIgnoreCase]);
      End;
End;
Всё от минимального к максимальному. И в дебаге тоже - всегда только по порядку идут.

Как вы это видите, что начинает с 99 до 0? И у меня Делфи7. Хочу увидеть у себя. Не могу повторить. Всегда считает с начала до конца. Что я делаю не так? %)
ResourceSpace вне форума Ответить с цитированием
Старый 22.07.2015, 22:48   #17
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Ставлю bp на:
Код:
Memo1.Text:=StringReplace(Memo1.Text, Images[i].Code, Images[i].Image, [rfReplaceAll, rfIgnoreCase]);
И смотрю в окошко локальных переменных.

Вот полный код, который я давече расписывал:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  ImagesX = packed record
    Code: String;
    Image: String;
  end;

var
  Form1: TForm1;

const
  Images: Array[0..1] of ImagesX = ((Code: '0:)'; Image: '2'),
                                    (Code: ':)';  Image: '1'));

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Lines.Add(':),0:)');
  for i := Low(Images) to High(Images) do
    begin
      Memo1.Text := StringReplace(Memo1.Text, Images[i].Code, Images[i].Image, [rfReplaceAll, rfIgnoreCase]);
    end;
end;

end.

Последний раз редактировалось ДралсяСошибками; 22.07.2015 в 23:03.
ДралсяСошибками вне форума Ответить с цитированием
Старый 23.07.2015, 10:09   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ДралсяСошибками Посмотреть сообщение
Вот полный код, который я давече расписывал:
товарищ, Вам же сразу предложили ОТКЛЮЧИТЬ оптимизацию.
Где опции отключения в вашем коде?

второе.
попробуйте банальное:

Код:
{$O-} // выключили оптимизацию
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Lines.Add(':),0:)');
  for i := Low(Images) to High(Images) do
    begin
      Memo1.Text := StringReplace(Memo1.Text, Images[i].Code, Images[i].Image, [rfReplaceAll, rfIgnoreCase]);
    end;
end;
{$O+} // включили оптимизацию
не помогло?

тогда так:
Код:
{$O-} // выключили оптимизацию
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  s : string;
begin
  Memo1.Lines.Add(':),0:)');
  i:= Low(Images);
  s :=  Memo1.Text;
  while i<= High(Images) do
    begin
       s := StringReplace(s, Images[i].Code, Images[i].Image, [rfReplaceAll, rfIgnoreCase]);
       inc(i);
    end;
  Memo1.Text := s
end;
{$O+} // включили оптимизацию


p.s. расскажите, пожалуйста, о результатах...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.07.2015, 13:18   #19
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Отключал оптимизация перед циклом, не помогало, а вот отключение оптимизации перед процедурой помогло))
ДралсяСошибками вне форума Ответить с цитированием
Старый 23.07.2015, 13:40   #20
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Две страницы из-за стандартной оптимизации, которая не влияет на правильность работы программы?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как составить цикл (for) чтобы цикл работал пока RegExp.Match не будет пустым? FleXik Общие вопросы Delphi 11 05.03.2014 14:49
написать процедуры для “Цикл For ... Next ” и «Цикл Do ... Loop» по ниже приведенному условию Кристина_Патачиц Microsoft Office Excel 3 17.04.2013 17:01
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34