IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа со строками, Первый опыт...
Relrin
сообщение 14.12.2010 18:40
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Суть задачи следующая: Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв. Между соседними словами – не менее одного пробела, а за последним словом – точка. Напечатать все слова, отличные от последнего слова, преобразовав следующим образом: если слово нечетной длины, то удалить среднюю букву.

Пока не в недоумении как решить задачу... Вот найду я длину строки, как дальше поступать? Что нужно сделать, чтобы "вычленить" последнее слово и после сделать некоторые действия:
1) то, что осталось от строки, сделать преобразования
2) сравнивать новую строку с последним словом
3) как выкручиваться из случаев, когда общее количество символов превышает 255 без подключения каких-либо сторонних модулей?

Пока дошел до этого:

Var
st:string;
a,b: string;
i,j,k: integer;

begin
clrscr;
{Введи последовательность слов}
writeln('Write you words: ');
readln(st);
k:=1;
{Работаем с исходной строкой, пока она больше 0}
while length(st)>0 do
begin
{Ищем те случаи, когда строка оканчивается на пробел или точку}
k:=pos(' ',st);
if k=0 then k:=pos('.',st);
{когда нашли - переносим}
a:=copy(st,1,k-1);
{удаляем слово из последовательности}
delete(st,1,k);
{Если количество букв в слове нечетное - исключаем среднюю букву}
if length(a) mod 2<>0 then
begin
k:=(length(a)div 2)+1;
delete(a,k,1);
end;
end;
{Вывод результата}
for i:=1 to length(a) do
begin
write(a[i]);
end;
readln;
end.



Сообщение отредактировано: Relrin - 14.12.2010 18:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
Relrin
сообщение 14.12.2010 23:02
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Вот к такому виду уже пришел... Задачу я почти сделал... Только я хочу под массив сейчас переделать... Помогите пожалуйста!

Uses
crt;

Var
a: string;
b,c:array [1..100] of string;
i,j,k,n,m,pos,count: integer;

Begin
clrscr;
{Ввод последовательости слов}
readln(a);
i:=length(a)-1;
k:=1;
count:=0;
{Переносим последнее слово в отдельный массив}
while a[i]<>' ' do
begin
inc(count);
b:=b[count]+a[i];
k:=k+1;
i:=pred(i);
end;
{Работаем со оставшейся строкой}
while a[1]<>'.' do
begin
{До момента нахождения пробела с начала строки}
while a[1]=' ' do
delete(a,1,1);
k:=1;
{Как нашли - "вырезаем" это слово и переносим в массив для дальнейшей обработки}
while (a[k]<>' ') and (a[k]<>'.') do
k:=succ(k);
c:=copy(a,1,k-1);
delete(a,1,k-1);
{Работа со словом}
if c<>b then
begin
{Если количество букв нечетное - то удаляем среднюю букву}
if length© mod 2<>0 then
begin
pos:=(length©div 2)+1;
delete(c,pos,1);
end;
{Вывод слова}
for i:=1 to length© do
write(c[i]);write(' ');
end;
end;
readln;
End.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 15.12.2010 8:51
Сообщение #3


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Посмотри FAQ - там есть разбиение строки на слова.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"