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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2014, 23:14   #1
Grenki
 
Регистрация: 06.03.2014
Сообщений: 8
По умолчанию Символьный тип данных

Всем привет, на днях столкнулся с задачей помогите плиз. В текст, длина которого не превышает 80 символов, равномерно вставить между словами символ пробел, чтобы его длина равнялась 80. Заранее Спасибо!
Grenki вне форума Ответить с цитированием
Старый 24.03.2014, 23:16   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Пока не в чем помогать. Где Ваши наработки?
Самостоятельные попытки были?
Streletz вне форума Ответить с цитированием
Старый 24.03.2014, 23:37   #3
Grenki
 
Регистрация: 06.03.2014
Сообщений: 8
По умолчанию Вот наработка

Код:
uses crt;
var s:string;
    i:byte;
begin
writeln('Ââåäèòå ñòðîêó èç ñëîâ,
 ðàçäåëåííûõ ïðîáåëàìè
 íå äëèííåå 80 ñèìâîëîâ');
read(s);
{repeat}
i:=length(s);



while(i>=1)and(length(s)<80) do
 begin
  if s[i]=' ' then insert(' ',s,i);
  i:=i-1;
 end;
{until length(s)=80;}
write(s);
end.

Последний раз редактировалось Stilet; 24.03.2014 в 23:39.
Grenki вне форума Ответить с цитированием
Старый 24.03.2014, 23:47   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

В принципе, здесь даже лучше использовать string.
Получаете длину строки (количество символов). Количество пробелов 80-длина строки.
Дальше вычисляете номера позиций для каждого пробела и осуществляете вставку.
Streletz вне форума Ответить с цитированием
Старый 25.03.2014, 09:47   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это между символами. Между словами по аналогии, только еще запоминать длину слов
Код:
var s,c: String;
    i,k,j,m: Integer;
    a: array[1..80] of Integer;
...
  k:=0;
  for i:=1 to Length(s) do if s[i]<>' ' then begin Inc(k); a[k]:=i; end;
  if k=0 then c:=StringOfChar(' ',80)
  else if k=1 then c:=s[a[1]]+StringOfChar(' ',79)
  else begin
    c:=''; j:=(80-k) div (k-1); m:=(80-k) mod (k-1);
    for i:=1 to k-1 do begin c:=c+s[a[i]]+StringOfChar(' ',j); if i<=m then c:=c+' '; end;
    c:=c+s[a[k]];
  end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 25.03.2014 в 12:58.
Аватар вне форума Ответить с цитированием
Старый 25.03.2014, 15:01   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Grenki, а мне ваш подход в принципе понравился.
Единственно, недочёт, за один проход по циклу вставляется столько пробелов, сколько уже есть пробелов в строке.
я бы вот так подправил ваш код:
Код:
uses crt;
var s:string;
    i,k:byte;
begin
  writeln('Введите строку: ');
  read(s);

  while length(s)<80 do begin
    i:=length(s);
    k := i;
    while(i>=1)and(length(s)<80) do
    begin
      if s[i]=' ' then insert(' ',s,i);
      i:=i-1;
    end;
    if length(s)=k then
       for i:=1 to 80-Length(s) do s := s + ' ';
  end;
  write(s);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символьный Тип Данных И Строки. николас Помощь студентам 6 05.04.2013 06:38
символьный тип kop Общие вопросы C/C++ 3 15.05.2011 15:14
Символьный тип kop Общие вопросы C/C++ 0 15.05.2011 01:10
Символьный тип данных. acho Помощь студентам 0 19.06.2010 22:55
Символьный тип Patrick Паскаль, Turbo Pascal, PascalABC.NET 1 24.09.2009 13:19