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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2010, 20:21   #1
Ногин Антон
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 19
По умолчанию Строки (Pascal)

Добрый вечер!

Пользователь вводит слова через пробел. Нужно в каждом слове первую букву поместить в конец слова.

Подскажите, пожалуйста.
Ногин Антон вне форума Ответить с цитированием
Старый 23.09.2010, 20:27   #2
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

алгоритм

считываешь строку с начала.
находишь первый пробел-i значит конец слова i-1. потом с начала строки i=1 перемещаешь в конец слова(тут наверное функцию забабахать с буфером) и всё.далее повторяешь операцию начала с i символа(это пробел).
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 23.09.2010, 20:39   #3
Ногин Антон
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 19
По умолчанию

Я Вас правильно понял?

for i:=1 to length(s1) do
begin
if s1[i] = ' ' then

Как обозначить, что это конец слова?
Ногин Антон вне форума Ответить с цитированием
Старый 23.09.2010, 21:08   #4
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

пробел между словами означает что кончилось слово.

в ручную попробуй на листочке.напиши предложение,и в ручную прогони алгоритм.записывай i стрелочками что куда идёт и какой индекс получает,и тогда всё поймёшь.
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 23.09.2010, 21:11   #5
Ногин Антон
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 19
По умолчанию

Написал для частного случая (для слов из четырёх букв)

writeln('Enter some words');
read(s);

for i:=1 to length(s) do
begin
if s[i] = ' ' then
s2:=s2+copy(s, i+2, 3) + copy(s, i+1, 1) + ' ';
end;
writeln(s2);

Не могу свести к общему.
Ногин Антон вне форума Ответить с цитированием
Старый 23.09.2010, 21:13   #6
m.a.x.i.m
Пользователь
 
Регистрация: 29.03.2008
Сообщений: 32
По умолчанию

Код:
function BeginToEnd(str:string):string;//меняет первую и последнюю букву в слове
var buf1,buf2:string;
begin
buf1:=copy(str,1,1);//в буфер первую букву
buf2:=copy(str,length(str),1);//в буфер последнюю букву
delete(str,1,1);//удаляем из слова первую букву
delete(str,length(str),1);//удаляем из слова последнюю букву
Result:=buf2+str+buf1;//и приписываем первую и последнюю буквы с разных концов
end;

function smena(str:string):string;//мняет в тексте для каждого слова первую
var buf:string;                   //и последнюю буквы
begin
buf:='';//обнуляем буфер
repeat                                      ///////////////////////
buf:=buf+BeginToEnd(copy(str,1,pos(' ',str)-1));//берем первое слова, меняем через функцию BeginToEnd первую и последнюю буквы
buf:=buf+' ';                               //добавляем пробел
delete(str,1,pos(' ',str));                 //удаляем первое слово
until pos(' ',str)=0;                       /////////////////////// повторяем пока не кончатся пробелы
buf:=buf+BeginToEnd(str);//как пробелы кончились - добавляем последнее слово.
result:=buf;
end;
используем
Код:
writeln('Enter some words');
read(s);
writeln(smena(s));

Последний раз редактировалось m.a.x.i.m; 23.09.2010 в 21:15.
m.a.x.i.m вне форума Ответить с цитированием
Старый 23.09.2010, 21:17   #7
Ногин Антон
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 19
По умолчанию

А можно обойтись без функций? Их ещё не изучал..
Ногин Антон вне форума Ответить с цитированием
Старый 23.09.2010, 21:45   #8
m.a.x.i.m
Пользователь
 
Регистрация: 29.03.2008
Сообщений: 32
По умолчанию

без функций нельзя, изучай. Просто пишешь функции перед Begin-End. У меня паскаля нет - но вроде программа должна быть такой

Код:
Program test;
var s:string;

function BeginToEnd(str:string):string;//меняет первую и последнюю букву в слове
var buf1,buf2:string;
begin
buf1:=copy(str,1,1);//в буфер первую букву
buf2:=copy(str,length(str),1);//в буфер последнюю букву
delete(str,1,1);//удаляем из слова первую букву
delete(str,length(str),1);//удаляем из слова последнюю букву
Result:=buf2+str+buf1;//и приписываем первую и последнюю буквы с разных концов
end;

function smena(str:string):string;//мняет в тексте для каждого слова первую
var buf:string;                   //и последнюю буквы
begin
buf:='';//обнуляем буфер
repeat                                      ///////////////////////
buf:=buf+BeginToEnd(copy(str,1,pos(' ',str)-1));//берем первое слова, меняем через функцию BeginToEnd первую и последнюю буквы
buf:=buf+' ';                               //добавляем пробел
delete(str,1,pos(' ',str));                 //удаляем первое слово
until pos(' ',str)=0;                       /////////////////////// повторяем пока не кончатся пробелы
buf:=buf+BeginToEnd(str);//как пробелы кончились - добавляем последнее слово.
result:=buf;
end;

Begin
writeln('Enter some words');
read(s);
writeln(smena(s));
End.
m.a.x.i.m вне форума Ответить с цитированием
Старый 23.09.2010, 23:06   #9
Ногин Антон
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 19
По умолчанию

Большое спасибо!
Ногин Антон вне форума Ответить с цитированием
Старый 24.09.2010, 12:44   #10
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Держи без функций (правда проверить не могу, но должен быть рабочим)

Код:
program MyProg;

var
  Str: string;
  I, WordStartPos: Integer;
  Ch: Char;

begin
  writeln('Vvedite stroku');
  readln(Str);

  WordStartPos := 0;
  I := 1;
  // проходит по введенной строке
  while I <= Length(Str) do
  begin
    // Если текущий символ пробел или достигнут конец строки
    if (Str[I] = ' ') or (I = Length(Str)) then
    begin
      // если предыдущий символ тоже пробел, то переходим на следующий
      if WordStartPos = 0 then
      begin
        Inc(I);
        Continue;
      end;
      // Берем первый символ слова
      Ch := Str[WordStartPos];
      // Удаляем первой символ слова из строки
      Delete(Str, WordStartPos, 1);
      // Если не достигнут конец строки
      if I < Length(Str) then
        // то вставляем символ в конец слова (текущая позиция)
        Insert(Ch, Str, I-1)
      else
        // иначе добавляем символ в конец строки
        Str := Str + Ch;
      // и обнуляем индекс начала слова
      WordStartPos := 0;
    end else
    begin
      // иначе если инедкс начала слова не занесен то делаем его равным текущей позиции
      if WordStartPos = 0 then
        WordStartPos := I;
    end;
    // переходим на следующий символ строки
    Inc(I);
  end;

  writeln('Resultat: ', Str);
  readln;
end.
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal - строки Kris92 Помощь студентам 13 06.07.2010 19:31
Pascal.Строки blondinochka Помощь студентам 3 04.06.2009 16:44
Pascal. Строки blondinochka Помощь студентам 2 30.05.2009 18:44
Pascal. Строки. Dexterello Помощь студентам 2 20.12.2008 17:42
Строки в Pascal Альбиша Помощь студентам 3 18.12.2008 22:36