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

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

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

Восстановить пароль

Купить рекламу на форуме - 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,833
По умолчанию

Две страницы из-за стандартной оптимизации, которая не влияет на правильность работы программы?
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