| 
| 
 | Вопрос # 5 099/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!дана строка из чисел. нужно сделать так чтобы каждый символ в этой строе был увеличен на 1.
 я чёта наделал не то, что у меня программа зависает и оперативку забивает.
 Приложение:Переключить в обычный режим  var  i,c,b,f:integer;  str:string;procedure TForm1.codir;beginb:=1;f:=1;c:=length(edit1.Text);str:=edit1.Text;repeati:=ord(str[f]);case i of0:inc(i);1:inc(i);2:inc(i);3:inc(i);4:inc(i);5:inc(i);6:inc(i);7:inc(i);8:inc(i);9:i:=0;end; Delete(str, b, 1);Insert(inttostr(i),str,b);inc(b);inc(f);until b=c;edit2.Text:=str;end;
|  |   Вопрос задал: Andrew_Cyber (статус: Посетитель)Вопрос отправлен: 18 марта 2011, 22:01
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Толяныч Здравствуйте, Andrew_Cyber!Где-то вот так :
 
 Case здесь ни к чему, а внутри case изменять selectorExpression нельзя. Потому  имеем то, что имеем.
 Приложение:Переключить в обычный режим  varstro : string ; i,k,b : integer ;begin  stro := Ed1.Text ; k := Length (stro) ;  for i := 1 to k do     begin       b := Ord(stro[i]) ; Inc (b) ;       if (b>$39) then b := $30 ;       stro[i] := Chr(b)      end ;  Ed1.Text := stro ;end; 
|  | Ответ отправил: Толяныч (статус: 4-ый класс)Время отправки: 19 марта 2011, 13:25
 
 |  Ответ #2. Отвечает эксперт: min@y™ Здравствуйте, Andrew_Cyber!Упрощённый вариантик:
 
 function IncStr(const S: string): string;
var
  i: Integer;
begin
  SetLength(Result, Length(S));
  for i:= 1 to Length(S) do
    Result[i]:= Char((Byte(S[i]) - $2F) mod 10 + $30);
end;
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 19 марта 2011, 13:41
 
 |  
 Мини-форум вопросаВсего сообщений: 13; последнее сообщение — 6 апреля 2011, 20:35; участников в обсуждении: 3. 
|   | Толяныч (статус: 4-ый класс), 18 марта 2011, 22:56 [#1]:... |  
|   | bugmenot (статус: 3-ий класс), 19 марта 2011, 07:52 [#2]:ох лол, ваши сниппеты просто великолепны 
 
 for I:=1 to length(S) do
{ пробелы и капитализация убраны в качестве наказания за постинг неформатированного кода }
S[I]:=chr((ord(S[I])-ord('0')+1)mod 10+ord('0'));виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | Толяныч (статус: 4-ый класс), 19 марта 2011, 13:13 [#3]:Я так понимаю, это в мой огород. Исходники я, конечно же, форматирую - куда ж без этого, сам запутаешься; но когда код в ответе, так он сам антиформатируется. Пробовал "Вставить код" - код идет в репозитарий кодов, а в текст - ссылка на него( как в вопросе 5085). Когда кода много, тогда понятно, а тут пару строк. Наверно, теги надо применять, но пока не копенгаген. Слишком не пинайте - я как эксперт ишшо молодой
  
 А мой код хоть и длиннее, но проще в понимании для менее опытных.
 Ну вот - переместил из минифорума в ответы - и с форматированием no question .
 На звездочку 2 нажал случайно - прошу оценку вопроса не засчитывать.
 |  
|   | bugmenot (статус: 3-ий класс), 19 марта 2011, 19:56 [#4]:Толяныч, неа, у OP китайская каша вместо кода много круче, чем в твоём посте  (переменная k лишняя, for вычисляет однократно)
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | Толяныч (статус: 4-ый класс), 19 марта 2011, 21:14 [#5]:Возможно. Но - я не знаю, кто такой ОР
 - привычка ( не помню, то ли из фортрана, то ли из асма ) не писать длинных выражений, а в стиле Маяковского - лесенкой
  , так что k пускай будет - а как это for может вычисляться однократно - это уже не for.
 Однако тут мы меж собой, а вопрошающий слинял, не оставив ни оценки, ни спасиба.
 |  
|   | min@y™ (статус: Доктор наук), 20 марта 2011, 09:40 [#7]: Цитата (Толяныч): - а как это for может вычисляться однократно - это уже не for. Предел для for вычисляется однократно перед циклом. Так шо переменная k лишняя и компилятор при оптимизации 1хрен её выкинет и перевернёт цикл задом наперёд.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Толяныч (статус: 4-ый класс), 20 марта 2011, 11:54 [#8]:Все, сдаюсь !  Я же никогда не утверждал, что мой код - образец стиля, и кончно же, вы оба правы, но и не станете спорить, что мой код рабочий. А то, что компайлер выкинет k - дык за то ему и деньги плотять, шоб оптимизировал  Впредь при ответах и комментариях буду равняться на лучшие образцы, забыв лапидарный ФОРТРАН, как кошмарный сон.
 |  
|   | bugmenot (статус: 3-ий класс), 22 марта 2011, 18:55 [#9]:> перевернёт цикл задом наперёд это вы уже фантазируете
 
 Толяныч, это стандартная особенность паскального for`а, она уникальна среди прочих ЯВУ
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | min@y™ (статус: Доктор наук), 22 марта 2011, 19:44 [#10]: Цитата (bugmenot): это вы уже фантазируете  Ну я тя умоляю! 21 год занимаюсь программированием, поверь на слово. Если внутри цикла for нету вычислений с участием параметра цикла, компилятор, как правило, разворачивает цикл задом наперёд, ибо так он выполняется быстрее (на одну команду меньше в каждой итерации).
 Не знал? Проверь! За базар отвечаю.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 26 марта 2011, 19:39 [#11]:- У меня степень магистра! - Ааа, у кого её нет...
 
 Проверил, факт. Но это компиляторно/платформно специфическое, если паскальный счетчик цикла не используется, то оптимизатор заменяет его регистром C, в котором на интелах хранят число предстоящих итераций цикла. Если переменная не используется, то и волноваться о ней не надо, а цикл сводится к повторению тела N раз. Выше просто k выкинет
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | min@y™ (статус: Доктор наук), 27 марта 2011, 09:20 [#12]: Цитата (bugmenot): Проверил, факт. Но это компиляторно/платформно специфическое, если паскальный счетчик цикла не используется, то оптимизатор заменяет его регистром C, в котором на интелах хранят число предстоящих итераций цикла. Если переменная не используется, то и волноваться о ней не надо, а цикл сводится к повторению тела N раз. Выше просто k выкинет  Ну дык я про то и говорил.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 6 апреля 2011, 20:35 [#13]: Цитата (min@y™): и перевернёт цикл задом наперёдв примере выше счетчик не выкинет, поэтому эффекта "переворачивания цикла" не будет виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |