Гость_Рада
17.11.2004 15:00
Дана строка символов. Изменить строку – во всех словах с четным номером поменять местами первый и последний символы. Слова ограничены одним или несколькими пробелами. Порядок ввода исходных данных: - исходная строка. Порядок вывода результатов: - новая строка.
Преобразовать обработку строки в процедуру (или функцию). Написать к ней тестовую программу.
Созданную процедуру использовать для построчной обработки текстового файла (Text). Результат обработки записывается в новый файл того же типа.
Гость_Рада
А в чем именно возникли трудности? Разбиение строки на слова? Работа со словами? Работа с файлом? Вы вообще начинали делать эту задачу?
Какие есть свои наработки по этому поводу? Выкладывай сюда.
Надеюсь, Вас не придется учить паскалю с нуля? Ведь у задачи явно "ноги растут" из какого-то курса преподавания...
Гость_Рада
17.11.2004 16:15
Да я икак не могу не понять,как определять номер элемента строки
Ограничение прбелом untill s[i]:=' ' Да?
А что надо сделать,чтобы потом слова считывались дальше?
А пробовали поискать на этом форуме? Для чего создан раздел F.A.Q. ?
http://forum.pascal.net.ru/index.php?showtopic=2361
Попробуйте разобраться в работе этой функции:
Код
function getToken(delim: char; var s: string): string;
var p: byte;
begin
getToken := '';
p := pos(delim, s);
if p <> 0 then
begin
getToken := Copy(s, 1, pred(p));
delete(s, 1, p); exit
end;
getToken := s; s := ''
end;
const
st : string = 'what is your name';
var
sTok: string;
p: byte;
begin
repeat
p := pos(' ', st);
if p > 0 then
begin
delete(st, p, 1);
end;
until p = 0;
while st <> '' do
begin
sTok := getToken(' ', st); writeln(sTok);
end;
end.
Как Вы думаете, для чего предназначена функция getToken, что именно она делает?
Как работать со словом строки(то,к-ое до прбела)???
Добавлено (17.11.04 12:33):
Ну ,в смысле,что надо сделать,чтобы я могла с ним работать?
Манго
А разобраться в приведенной программе не пробовали? Я по-Вашему это для себя пишу?
Нет,просто я это сообщение писала до того ,как читала ваше;
так выщло ,не сердитесь rolleyes.gif
Добавлено:Я не поняла работу функции getToken
Манго
Эта функция как раз и занимается тем, что берет из строки следующее слово. А дальше его нужно обработать - попробуйте.
Кстати, программу запускали или нет? По ее выходным данным можно однозначно сказать, для чего она предназначена :yes:
Хорощо,сейчас попрую.
Кстати,программу я написала,но она не работает <_<
А программа такая:
Код
program Stroka;
uses crt;
var s,s0 : string;
f : text;
t:char;
i,n,d,k,pssl,n0 : integer;
begin
clrscr;
writeln('Vvedite stroku ');
readln(s);
n:=length(s);
for k:=0 to pssl do begin {k-schetchik slov;pssl-poslednee slovo}
while s[i] <> ' ' do read(s[i]);
if s[i] =' ' then d:=i-1; { d-nomer poslednego elementa}
s0:=s[d];
n0:=length(s0);
end;
if (k mod 2)=0 then begin t:=s0[1];s0[1]:=s0[n0];s0[n0]:=t;end;
writeln('Novaja stroka ',s);
readkey;
end.
Код программ заключаем в соответсвующие теги!
Не подскажите,почему?????????? :p2:
Манго Смотрите, что происходит в программе:
Код
program Stroka;
uses crt;
var s,s0 : string;
f : text;
t:char;
i,n,d,k,pssl,n0 : integer;
begin
clrscr;
writeln('Vvedite stroku ');
readln(s);
n:=length(s);
{1. переменная pssl не инициализируется явно (хотя по умолчанию = 0)}
for k:=0 to pssl do begin {k-schetchik slov;pssl-poslednee slovo}
{2. Попытка считывания С КЛАВИАТУРЫ символов до тех пор, пока не будет введен пробел, а ведь надо читать из строки S}
while s[i] <> ' ' do read(s[i]);
{3. переменной i тоже явно не присвоено значение (по умолчанию тоже i=0), но ведь в нулевом символе хранится длина строки!}
if s[i] =' ' then d:=i-1; { d-nomer poslednego elementa}
s0:=s[d];
n0:=length(s0);
end;
if (k mod 2)=0 then begin t:=s0[1];s0[1]:=s0[n0];s0[n0]:=t;end;
writeln('Novaja stroka ',s);
readkey;
end.
Цитата
{1. переменная pssl не инициализируется явно (хотя по умолчанию = 0)}
for k:=0 to pssl do begin {k-schetchik slov;pssl-poslednee slovo}
{2. Попытка считывания С КЛАВИАТУРЫ символов до тех пор, пока не будет введен пробел, а ведь надо читать из строки S}
1)Я ,наверно,не так поняла,но разве pssl не будет увеличиваться сам в ходде работы счётчика?
2)Сильно ли влияет на программу считывание с клавиатуры или из строки?Символы то те же,или нет ?
Цитата
разве pssl не будет увеличиваться сам в ходде работы счётчика?
Нет!!! В ходе работы цикла
Цитата
for k=0 to pssl do
будет само собой увеличиваться значение переменной к (а вернее, не будет, поскольку по умолчанию pssl получит значение 0, и цикл будет работать, как
Цитата
for k=0 to 0 do
т.е., всего один раз). Лучше все-таки юзайте функцию от
Volvo. Или ищите добрую душу, которая сделает все за Вас. Если Вы очень-очень ласково попросите, может, я и разжалоблюсь. :p2:
Цитата
Сильно ли влияет на программу считывание с клавиатуры или из строки?
Так нельзя уже считывать с клавиатуры! Строка введена - теперь нужно пользоваться только тем, что уже было введено (тем более, что эта задача будет применяться к работе с файлами)
Да я не прошу ВСЁ за меня делать,я прошу помочь исправить то,что я уже
сделала так,чтобы программа работала
:yes: Я исправила программу!!!
Но она всё равно не работает!!!
Код
var s,s0 : string;
f : text;
t:char;
i,n,d,k,pssl,n0 : integer;
begin
clrscr;
writeln('Vvedite stroku ');
readln(s);
n:=length(s);
for k:=0 to pssl do begin {k-schetchik slov;pssl-poslednee slovo}
i:=1;pssl:=n;{!}
while s[i] <> ' ' do read(s[i]);
if s[i] =' ' then d:=i-1; { d-nomer poslednego elementa}
s0:=s[d];
n0:=length(s0);
end;
if (k mod 2)=0 then begin t:=s0[1];s0[1]:=s0[n0];s0[n0]:=t;end;
writeln('Novaja stroka ',s);
readkey;
end.[QUOTE]var s,s0 : string;
f : text;
t:char;
i,n,d,k,pssl,n0 : integer;
begin
clrscr;
writeln('Vvedite stroku ');
readln(s);
n:=length(s);
for k:=0 to pssl do begin {k-schetchik slov;pssl-poslednee slovo}
i:=1;pssl:=n;{!}
while s[i] <> ' ' do read(s[i]);
if s[i] =' ' then d:=i-1; { d-nomer poslednego elementa}
s0:=s[d];
n0:=length(s0);
end;
if (k mod 2)=0 then begin t:=s0[1];s0[1]:=s0[n0];s0[n0]:=t;end;
writeln('Novaja stroka ',s);
readkey;
end.
Что теперь неправильно?
Подскажите!!Немнжко же осталось,чтобы она заработала!!! :yes:
Манго
Эта программа не заработает никогда. Начните ее заново. :yes:
ПОЧЕМУ???????????????
Манго
Я уже сказал, читать с клавиатуры не нужно - нужно обрабатывать существующую строку. А у Вас этого нет...
А как сделать существующую строку?
Пресвятая Дева! .... чур меня, чур...
Вот, и не надо ее делать если она и так уже есть в переменной "s" :
Цитата
writeln('Vvedite stroku ');
readln(s);
Я вас не понимю!!!
ТО "нужно обрабатывать существующую строку. А у Вас этого нет... ",
ТО "Пресвятая Дева! .... чур меня, чур...
Вот, и не надо ее делать если она и так уже есть в переменной "s" :"
Манго Строка-то есть, но обрабатывать ее Вы даже не пытаетесь:
Код
while s[i] <> ' ' do read(s[i]); { несмотря на наличие строки, Вы зачем-то снова пытаетесь читать что-то с клавиатуры... }
У меня предложение - Манго, отойди от компьютера, возьми листок бумаги и попробуй набросать алгоритм работы.
Начинай с "крупных" элементов и постепенно переходя к мелким.
Т.е.:
1 этап
1. Получаем строку
2. Обрабатываем ее
3. Возвращаем во внешний источник (ведь нам нужна подпрограмма, т.е. процедура/функция)
2 этап
1.1 Разбиваем строку на слова
1.2 Выделяем каждое четное
1.3 Меняем местами символы
1.4 Дополняем выходную строку
.....
и т.д. и т.п.
Это только приблизительная схема. Дело за Вами!
Удачи и успехов....
Будут результаты или еще какие не ясные моменты - пиши!
Бродяжник
17.11.2004 20:44
...или другое предложение:
возьмите свою программу и напишите комментарии к каждой строке. Абсолютно к каждой и подробно. А потом сравните сей текст с тем, что требуется. И сами увидите, что нужно менять. Однако боюсь, что Volvo прав в своих мрачных пророчествах...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.