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

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

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

 
 Ответить  Открыть новую тему 
> Работа со строками, Первый опыт...
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


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

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

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


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


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

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

 





- Текстовая версия 20.04.2024 16:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name