Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 526

/ вопрос решён /

Уважаемые эксперты!
Пропала подсветка циклов в редакторе кода. Заметил только сейчас. Куда я случайно нажал и все испортил?

Примечание #1 (20 марта 2014, 18:13):
Раньше были такие цветные полосочки с левой стороны кода, а begin и end были разноцветными...

zvygin1964 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: zvygin1964 (статус: Посетитель)
Вопрос отправлен: 20 марта 2014, 18:09
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 19; последнее сообщение — 17 мая 2014, 12:03; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 20 марта 2014, 18:16 [#1]:

Цитата (zvygin1964):

Раньше были такие цветные полосочки с левой стороны кода, а begin и end были разноцветными...

Скриншот где?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 21 марта 2014, 23:25 [#2]:

Скриншот тут: http://gfile.ru/a7f2K
min@y™

min@y™ (статус: Доктор наук), 22 марта 2014, 02:11 [#3]:

Цитата (zvygin1964):

Скриншот тут: http://gfile.ru/a7f2K

Ой, бяда-бяда, огорченье!!!1...
Какая, хоть, версия delphi-то? У меня в 7-й фолдинга отродясь не было, и ничо, обходился.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Толяныч

Толяныч (статус: 4-ый класс), 22 марта 2014, 10:20 [#4]:

Ну ты это напрасно, прога зупер. А цикл так вооще : с 0 до 24 ни фига не делать ! Это - про меня ... И не смущай девушков таким откровенным возгласом восхищения :-)
zvygin1964

zvygin1964 (статус: Посетитель), 22 марта 2014, 11:09 [#5]:

Все работает до:
for i:=0 to n do c[i+1]:=c[i]+1; //заполняю массив расчетными часами в размерности от 0 до 24+24
А дальше я пытался проверить содержимое элементов массива выполнению условия if ... then ... else ...
Ответ про цветные полосочки понял как:"Всё нормально, просто это другая версия среды".
Я до этого дня думал, что это Delphi 7.
Куда переставить:"И вот ЭТО, блин",-пока не знаю, вроде должно стоять в этом месте...
А какие у вас есть предложения?
Пытаюсь получить бегущую строку из цифр от 0 до 24 (как таблица часовых поясов:"А в Петропавловске-Камчатском полночь").
Толяныч

Толяныч (статус: 4-ый класс), 22 марта 2014, 16:26 [#6]:

Да пустой цикл ставь в какое хошь место, все равно компилятор его выкинет. Наверно.
min@y™

min@y™ (статус: Доктор наук), 22 марта 2014, 16:50 [#7]:

Цитата (zvygin1964):

for i:=0 to n do c[i+1]:=c[i]+1; //заполняю массив расчетными часами в размерности от 0 до 24+24

Чего в итоге должно быть в массиве-то? И зачем?

Цитата (zvygin1964):

А дальше я пытался проверить содержимое элементов массива выполнению условия if ... then ... else ...

Зачем проверять элементы массива, которые ты САМ только что заполнил значениями?

Цитата (zvygin1964):

Ответ про цветные полосочки понял как:"Всё нормально, просто это другая версия среды".

Понял, как всегда, неправильно.

Цитата (zvygin1964):

Я до этого дня думал, что это Delphi 7.

Истина где-то рядом, ага...

Цитата (zvygin1964):

Куда переставить:"И вот ЭТО, блин",-пока не знаю, вроде должно стоять в этом месте...

А кто говорил про "переставить"? Я спрашивал "...это, блин, чо?". И выделил прямоугольником специально, шоб носом ткнуть.

Цитата (zvygin1964):

А какие у вас есть предложения?

Перечитать ещё раз 100 "сагу про X-Y-Z", а потом объяснить, что ж тебе, таки, надо. Что у тебя на входе (до begin) и что должно быть на выходе (после end)?

Цитата (zvygin1964):

Пытаюсь получить бегущую строку из цифр от 0 до 24 (как таблица часовых поясов:"А в Петропавловске-Камчатском полночь").

Тогда зачем тут массивы и Memo1, Memo4?

Цитата (Толяныч):

все равно компилятор его выкинет. Наверно.

146%.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 23 марта 2014, 21:24 [#8]:

-"Чего в итоге должно быть в массиве-то?",-ОТВЕТ: мне безразлично, что будет в массиве."И зачем?",-ОТВЕТ: я научился массив создавать!
-"Зачем проверять элементы массива, которые ты САМ только что заполнил значениями?",-ОТВЕТ: чтобы научиться проверять соответствие элементов массива необходимым для меня свойствам в соответствии содержимым урока Ерёмина А.А. №14 "Выбор (ветвления)": https://www.delphi-int.ru/articles/114/ ;
-"Понял, как всегда, неправильно",-ОТВЕТ: как смог;
-"Истина где-то рядом, ага...",-ОТВЕТ: посылаю два скриншота с картинками загрузки Delphi. По какому из них вы меня пытаетесь обучать? ( http://gfile.ru/a5zPV ) или по ( http://gfile.ru/a5Y1W );
-"И выделил прямоугольником специально, шоб носом ткнуть",-ОТВЕТ: во что носом ткнуть? В точку с запятой или чего? Вы ребенка в двухмесячном возрасте тоже в дерьмо сразу носом суёте, или сначала от груди матери оторвёте?
-Сагу перечитал ещё раз;
-"Тогда зачем тут массивы и Memo1, Memo4?",-ОТВЕТ: массив просто попробовал в учебных целях, а текстовый редактор Memo использую после каждого действия, чтобы увидеть произошедшие изменения в данных и контролировать ход выполнения программы (это единственный текстовый редактор, который меня немного понимает под Вашим снисходительным оком).
-"компилятор его выкинет",-ОТВЕТ: дайте правильный пример, Толяныч: , это уже задание для Вас:
Элементы массива проверить на соответствие условию if ... then ... else ... и записать в другой массив.
Толяныч

Толяныч (статус: 4-ый класс), 23 марта 2014, 21:48 [#9]:

Даю правильный пример.
for i:=0 to n do ; // Это пустой цикл, и компил его выбросит.
//..Разве что отключить оптимизацию...
Компилю.
Вычеркиваю эту строчку.
Компилю. Ничего не изменилось.

Ну как, мне задание засчитано ?
zvygin1964

zvygin1964 (статус: Посетитель), 23 марта 2014, 22:04 [#10]:

Я просил научить меня, как элементы массива проверить на соответствие условию if ... then ... else ... и записать в другой массив. Это можно делать не торопясь, до конца моей жизни. А вы сейчас о чём?
min@y™

min@y™ (статус: Доктор наук), 24 марта 2014, 03:20 [#11]:

Цитата (zvygin1964):

ОТВЕТ: мне безразлично, что будет в массиве.
ОТВЕТ: я научился массив создавать!
ОТВЕТ: чтобы научиться проверять соответствие элементов массива необходимым для меня свойствам...
Вы ребенка в двухмесячном возрасте тоже в дерьмо сразу носом суёте, или сначала от груди матери оторвёте?

БРЕД. Полный бред.

Цитата (zvygin1964):

По какому из них вы меня пытаетесь обучать?

По "заставка Delphi 7 без полосочек.JPG".

Цитата (zvygin1964):

чтобы научиться проверять соответствие элементов массива необходимым для меня свойствам в соответствии содержимым урока Ерёмина А.А. №14 "Выбор (ветвления)": https://www.delphi-int.ru/articles/114/ ;

Сходил по ссылке, никаких массивов там не нашёл, только теорию по ветвлению.

Цитата (zvygin1964):

во что носом ткнуть? В точку с запятой или чего?

Уже теплее... Короче, цикл по for (с параметром) в общем виде:
for Index:= AFrom to {или downto} ATo do { тело цикла } ; // <--- точка с запятой
У тебя получилось пустым тело цикла, поэтому компилятор просто проигнорировал всю твою писанину от "for" до ";" включительно. И поэтому твой оператор
if c[i] > 24 then ...
выполнится только 1 раз, причём индекс "i" в этом месте будет иметь неопределённое значение (мусор, любое число); представляю, как твой компайлер матерится на тебя сообщениями типа [Warning] и [Hint], на которые ты не обращаешь внимания! :)

Цитата (zvygin1964):

текстовый редактор Memo использую после каждого действия, чтобы увидеть произошедшие изменения в данных и контролировать ход выполнения программы (это единственный текстовый редактор, который меня немного понимает под Вашим снисходительным оком).

Хорош фигнёй заниматься, ибо для этих (и не только) целей есть встроенный отладчик, с помощью которого отладка ускоряется в 100500 раз по сравнению с использованием визуальных компонентов для отображения промежуточных значений переменных.

Что, Андрюха не наприсал урок про использование отладчика? Зря!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 24 марта 2014, 04:25 [#12]:

Теперь по делу.
Если включить телепатор, то, судя по твоему жуткому коду, ты хотел получить:

  • час в текущих сутках - число в диапазоне [0..23];
  • заполнить массив из 24 часов, начиная с текущего часа - (если, к примеру, сейчас время 14:32, то массив должен получиться такой: "14, 15, ..., 23, 0, 1, ..., 13").

Если я предположил правильно, попробую сотворить какое-нибудь решение на коленке. Вот тебе домашнее задание:

№1 - разобраться, как работает вот этот код:
const
  HrCount = 24;
var
  c24: array[0..HrCount - 1] of Byte;
  Index: Integer;
begin
  c24[0]:= Trunc(24 * Frac(Now())); // начальный элемент массива = [0...23]
 
  // цикл, 23 итерации
  for Index:= 1 to HrCount - 1 do
    begin
      c24[Index]:= c24[Index - 1] + 1;
 
      // ветвление
      if c24[Index] > 23
        then Dec(c24[Index], 24); // эта строка выполнится не более 1 раза
    end;
 
  // здесь имеем полностью заполненный массив, который можно вывести,
  // посмотреть, обработать и т.д.
end;

Домашнее задание №2* (со звёздочкой, решишь - поставлю 5 за четверть :) ). Выяснить назначение данной функции:
function TimeSpan(const AFrom, ATo: TDateTime): TTime;
var
  F, T: TTime;
begin
  F:= Frac(AFrom); 
  T:= Frac(ATo);   
 
  if T >= F
    then Result:= Frac(T - F)
    else Result:= Frac(1 - (F - T));
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 25 марта 2014, 23:43 [#13]:

Ответ на домашнее задание №1:
procedure TForm1.Button1Click(Sender: TObject);
 var
  c24: array[0..HrCount - 1] of Byte;//Определил статический массив, 1 измерения в диапазоне Byte (0..255)
  Index: Integer; //индексы массива являются целыми числами, размер которых не гарантируется (до Int64)
 begin
 c24[0]:= Trunc(24 * Frac(Now())); { начальный элемент массива = [0...23] {Функция Frac возвращает дробную часть числа с
плавающей запятой от функции Now (Возвращает текущие дату и время в формате TDateTime.(Тип TDateTime - это обычный тип
double. Целая часть этого числа - это номер дня от какой-то фиксированной даты в прошлом, дробная часть - это часть от
текущих суток - из нее и вычисляется время. Соответственно Now содержит обе этих части))
  Функция Trunc возвращает целочисленную часть числа с плавающей запятой.
 Ну, где-так: c24[0]:=12=Trunc(24*0,5)=Trunc(24*Frac(24,5))}
   // цикл, 23 итерации
  for Index:= 1 to HrCount - 1 do {счетчик := начальное_значение равно 1, до конечного значения равного  HrCount-1=23}}
    begin       {действие при каждом увеличении счетчика}
      c24[Index]:= c24[Index - 1] + 1; {присваиваю элементу с очередным индексом значение предыдущего элемента
увеличенного на 1 час}
      { ветвление и тут же проверяю соответствует ли он человеческому часу (от 0 до 24)}
      if c24[Index] > 23          //если элемент больше 23-го часа
        then Dec(c24[Index], 24); {то выполним процедуру  Dec (из System unit), которая уменьшает переданный ей как
параметр порядковую переменную}
        {procedure Dec ( var Variable : Ordinal variable; Count : Integer ) ;
 в данном случае произойдет уменьшение элемента массива на Count:=24.}
{Поскольку дальнейшее вычисление будет производиться от этой декриментированной порядковой переменной, то эта строка
выполнится не более 1 раза}
    end;
    {else , begin, end;   тут не понадобились, потому, что иначе выполняется действие} 
 
c24[Index]:= c24[Index - 1] + 1; //до элемента массива  с номером HrCount - 1
    Label1.Caption:=FloatToStr(c24[23])+'    '+FloatToStr(c24[22])+'    
 
'+FloatToStr(c24[21])+'    '+FloatToStr(c24[20])+'    '+FloatToStr(c24[19])+'    
 
'+FloatToStr(c24[18])+'    '+FloatToStr(c24[17])+'    '+FloatToStr(c24[16])+'    
 
'+FloatToStr(c24[15])+'    '+FloatToStr(c24[14])+'    '+FloatToStr(c24[13])+'    
 
'+FloatToStr(c24[12])+'    '+FloatToStr(c24[11])+'    '+FloatToStr(c24[10])+'    
 
'+FloatToStr(c24[9])+'    '+FloatToStr(c24[8])+'    '+FloatToStr(c24[7])+'    
 
'+FloatToStr(c24[6])+'    '+FloatToStr(c24[5])+'    '+FloatToStr(c24[4])+'    
 
'+FloatToStr(c24[3])+'    '+FloatToStr(c24[2])+'    '+FloatToStr(c24[1])+'    
 
'+FloatToStr(c24[0]);
   end;
end.
zvygin1964

zvygin1964 (статус: Посетитель), 25 марта 2014, 23:46 [#14]:

Ответ на домашнее задание №2*: функция переключает циферблат часов в таймер(осталось до полуночи) и обратно.
function TimeSpan(const AFrom, ATo: TDateTime): TTime;{подпрограмма, участвующая в выражении как операнд. Состоит из
зарезервированного слова function, имени функции -TimeSpan,необязательные заключенные в круглые скобки формальные
параметры (постоянные числа AFrom и ATo типа TDateTime  как переменная Double, с датой как целая часть, а время как
дробная. Дата сохраняется как число дней с 30 декабря 1899.; тип возвращаемого функцией значения TTime "23:59:59", то
есть "HH:MM:SS"- часы, минуты, секунды через двуеточие.}
var
  F, T: TTime;{эти переменные имеют значения в виде значения как "23:59:59"}
begin
  F:= Frac(AFrom);//Frac возвращает дробную часть постоянного числа AFrom, то есть время
  T:= Frac(ATo);  //Frac возвращает дробную часть постоянного числа ATo, то есть время
 
  if T >= F    //если время T больше или равно  F
    then Result:= Frac(T - F) //то получим текущее время
    else Result:= Frac(1 - (F - T));{иначе сколько времени осталось до полуночи}
end;
zvygin1964

zvygin1964 (статус: Посетитель), 25 марта 2014, 23:49 [#15]:

А помог поставить недостающую точку с запятой в моём некрасивом коде Посетитель kritika . Пиво перечислено по указанным им реквизитам в славный город Одесса :
procedure TForm1.Button1Click(Sender: TObject);
  var
   S: string;     //часы реального времени, например 15, можно выводить в Memo
   Chas: Integer; //часы реального времени, например 15.Для вычислений.
   i:Integer;    {номера элементов массива написания часа}
   begin
  S:= FormatDateTime( 'h', Now); //функция реального времени в часах MSK (GMT+4)
  Chas:= StrToInt(S);////часы реального времени (например 15 часов).Для вычислений.
  c[0]:= Chas ;//подготавливаю значение элемента начала массива времени в часовых поясах
   for i:=0 to n do c[i+1]:=c[i]+1; {заполняю массив расчетными часами в размерности от 0 до 24+24 часов, но это не
правильно, поэтому:}
     for i:=0 to n do //Проверяю входят ли часы в человеческий диапазон 0-24 часа и исправляю ошибку:
   if c[i]>24 then    {если часов больше 24, то это ошибка, и ее устраняем}
    begin
    c24[i]:=c[i]-24;//посчитал и записал в другой массив
    end
   else
   begin
   c24[i]:=c[i];    //иначе ничего не делать не надо. Значение правильное в диапазоне 0-24часа
   end ;
 end;
end.
min@y™

min@y™ (статус: Доктор наук), 26 марта 2014, 02:31 [#16]:

Цитата (zvygin1964):

функция переключает циферблат часов в таймер(осталось до полуночи)

Не угадал.

Цитата (zvygin1964):

и обратно.

Опять не угадал. Садись, 2. Останешься на второй год. :)

Цитата (zvygin1964):

А помог поставить недостающую точку с запятой в моём некрасивом коде Посетитель kritika .

Правильно сделал. Лучше пиво сейчас, чем ещё один конкурент потом.
Я же пытался тебя научить пользоваться своими мозгами при написании кода. Выходит, не надо было этого делать и терять своё время. Мне даже по этому поводу один коллега личное сообщение прислал, вот такое:



Пожалуй, коллега прав. Всего тебе хорошего и творческих узбеков.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 26 марта 2014, 02:49 [#17]:

Label1.Caption:=FloatToStr(c24[23])+'    '+FloatToStr(c24[22])+ ...
ГЕНИАЛЬНО!!! Хорошо, что это часы в сутках, а не секунды в часе!

Цитата (zvygin1964):

тип возвращаемого функцией значения TTime "23:59:59", то есть "HH:MM:SS"- часы, минуты, секунды через двуеточие.

ГЕНИАЛЬНО!!!

Цитата (zvygin1964):

формальные параметры (постоянные числа AFrom и ATo типа TDateTime

ГЕНИАЛЬНО!!!
var
  F, T: TTime;{эти переменные имеют значения в виде значения как "23:59:59"}
Да НЕУЖЕЛИ???!!!111
  if T >= F    //если время T больше или равно  F
    then Result:= Frac(T - F) //то получим текущее время
    else Result:= Frac(1 - (F - T));{иначе сколько времени осталось до полуночи}
Ваще, no comments... Рукалицо... O_o
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 13 апреля 2014, 09:56 [#18]:

min@y™: "Хорошо, что это часы в сутках, а не секунды в часе!" ,-
это интересно.

16 мая 2014, 08:55: Статус вопроса изменён на решённый (изменил автор вопроса — zvygin1964): Ответ min@y™ :"Это разные версии", полосочки будут при наличии в ней CnPack.

zvygin1964

zvygin1964 (статус: Посетитель), 17 мая 2014, 12:03 [#19]:

Не понял, а куда делись "5" для давшего правильный ответ min@y™. Поставьте пожалуйста!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:42
Выполнено за 0.06 сек.