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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2010, 05:21   #1
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
Радость "красивый код"

В t.fio лежит фамилия пробел имя пробел отчество
фамилия, имя, отчество - большие русские буквы
(ИВАНОВ ИВАН ИВАНОВИЧ)
нужно написать процедуру которая превратит эту строку в
(ИВАНОВ И. И.)
Вот моя процедура
Код:
type st:string[30];

...

procedure inic(var s:st);
var s2:st;
    i:integer;
begin
   i:=1;
   s2:='';
   while (s[i]<>' ') do
    begin
      s2:=s2+s[i];
      inc(i);
    end;
   inc(i);
   s2:=s2+' '+s[i]+'. ';
   while (s[i]<>' ') do
    inc(i);
   inc(i);
   s2:=s2+s[i]+'.';
   s:=s2;
end;

...
inic(t.fio);

Нельзя ли как-то по-красивее написать эту процедуру
Заранее спасибо!
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 21.04.2010, 05:39   #2
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

Второй вариант (более "красивый", но все же еще не то)

Код:
procedure inic(var s:st);
var s2:st;
    i:integer;
begin
  s:=s+' ';
  s2:='';
  i:=1;
  s2:=s2+copy(s,1,pos(' ',s)-1)+' ';
  delete(s,1,pos(' ',s));
  while i<=2 do
   begin
    s2:=s2+copy(s,1,1);
    delete(s,1,pos(' ',s));
    inc(i);
    s2:=s2+'. ';
   end;

  delete(s2,length(s2),1);
  s:=s2;
end;
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 21.04.2010, 06:02   #3
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

Третий:

Код:
procedure inic3(var s:st);
var s2,s3:st;
begin
  s2:='';
  s2:=s2+copy(s,1,pos(' ',s)-1)+' ';
  s2:=s2+copy(s,pos(' ',s)+1,1)+'. ';
  s3:=copy(s,pos(' ',s)+1,length(s)-pos(' ',s));
  s2:=s2+copy(s3,pos(' ',s3)+1,1)+'.';
  s:=s2;
end;
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 21.04.2010, 06:08   #4
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

finally!

Код:
procedure inic4(var s:st);
var s2:st;
begin
   s2:='';
   s2:=s2+copy(s,1,pos(' ',s)-1)+' '+copy(s,pos(' ',s)+1,1)+'. '+copy(copy(s,pos(' ',s)+1,length(s)-pos(' ',s)),pos(' ',copy(s,pos(' ',s)+1,length(s)-pos(' ',s)))+1,1)+'.';
   s:=s2;
end;
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 21.04.2010, 06:26   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

А теперь посчитайте коичество вызываемых функций в третьем и финальном вариантах. А каждая функция - это время. Так что третий пока (на данном этапе обучения) самый оптимальный.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 21.04.2010, 08:32   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
s1:=copy(s,1,pos(' ',s));
 delete(s,1,pos(' ',s));
 s1:=s1+s[1]+'. ';
 s1:=s1+Copy(s,Pos(' ',s)+1,1)+'.';
SERG1980 вне форума Ответить с цитированием
Старый 21.04.2010, 12:21   #7
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

Ты прав
да..., но мы знаем, что строка не больше 30 символов
поэтому потери времени минимальны
однако удалось все записать в одну строку
вот в чем заключалась красота!)
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 21.04.2010, 14:54   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
однако удалось все записать в одну строку
вот в чем заключалась красота
Код:
s2:=s2+copy(s,1,pos(' ',s)-1)+' '+copy(s,pos(' ',s)+1,1)+'. '+copy(copy(s,pos(' ',s)+1,length(s)-pos(' ',s)),pos(' ',copy(s,pos(' ',s)+1,length(s)-pos(' ',s)))+1,1)+'.';
красота конечно, если надо чтобы никто не разобрался в коде.
через сколько дней(часов) ты сам не сможешь понять, что здесь написано, без того чтобы не переписать этот код на несколько более простых строк.

красота - когда код легко читается (понимается его логика).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.04.2010, 20:41   #9
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

тогда лучшая - это третья... спасибо
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
2 задачи на паскале, нужен код. "горю на зачете" NIcque Помощь студентам 6 15.05.2009 05:59
Программа "простые итерации". Готовый код. Проблема с компилированием. Oleg330 Общие вопросы C/C++ 9 25.12.2008 23:51