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

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

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

 
 Ответить  Открыть новую тему 
> Обработка Строк, Помогите решить
сообщение
Сообщение #1


Гость






Задача такова.... Дана строка символов, представляющая предложение и строки, представляющие имя и отчество. Поместить в строку - предложение после имени отчество. Имя может быть указано несколько раз. Порядок ввода исходных данных:последовательность строк, представляющих - предложение; - имя; -отчество.
Порядок вывода результатов: - преобразованное предложение!

В двух словах - это так:
к примеру, вводиться строка: Иван работает,
потом вводится его отчество: Васильевич,

И прога должна вставить его отчество после имени: Иван Васильевич работает!!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

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

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


Можешь полностью привести 2-3 примера входных данных


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Вставить строку B в середину строки A, имеющей вид <Слово1> <проблел> <Слово2>

var
A, B: String;

begin
A := 'Иван работает';
B := 'Васильевич';
Insert(B + ' ', A, pos(' ', A) + 1);
writeln(A);
end.


Это в случае если мы точно знаем, что имя - первое слово в строке A, а после него стоит пробел. Если мы ничего не знаем о том где стоит имя и что стоит после него (запятая, точка ...), то задача стновится намного интереснее ;)

Цитата(arhimag)
Можешь полностью привести 2-3 примера входных данных


yes2.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


Цитата(-Alex- @ 6.11.2006 22:48) *

Задача такова.... Дана строка символов, представляющая предложение и строки, представляющие имя и отчество.

Задача на 3 переменных и 10 строк smile.gif Что не получается?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






На самом деле, всё что дано, я написал.... Вот именно так нужно понимать эту задачу! И именно в этом у меня проблемы, т.к. я не опнимаю до конца условие! В этом весь трабл!!!
Всё что я понял от учителя, это то что, есть строка символов содержащая имя и какой-то текст, и нужно вставить отчество после имени..... dry.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






И неизвестно на какой позиции стоит имя.....((( может в конце, а может в середине...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
И неизвестно на какой позиции стоит имя.....((( может в конце, а может в середине...
Тогда тебе придется создавать словарь допустимых имен, и искать слова, в него входящие, в заданной строке... unsure.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

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

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


Судя по условию нужно ввести _3_ строки: предложение, имя и отчество. Потом ищещь в предложинии имя и ставищь после него отчество. Т.к. имя может повторятся, поиск нужно производить повторно в той части строки, в которой еще не искали, т.е. после предыдущего вхождения имени в предложение.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Знаток
****

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

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


А... понял smile.gif
Задача проста как мир.
Смотри пробегаешь по тексту, далее ищещь слова с заглавными буквами, если нашел, то проверяещь первое слово совадает с эти Именем, если да то после первого вставляешь отчество. и вставляешь после этого имени отчество и ищешь дальше.


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата(arhimag @ 7.11.2006 14:49) *

А... понял smile.gif
Задача проста как мир.
Смотри пробегаешь по тексту, далее ищещь слова с заглавными буквами, если нашел, то проверяещь первое слово совадает с эти Именем, если да то после первого вставляешь отчество. и вставляешь после этого имени отчество и ищешь дальше.


Если не трудно, можешь написать кусок этой процедуры! я просто уже половину написал : создание файла, чтение и вывод на экран(это тоже нужно было), осталось эта процедурка! ПЛИЗ)))
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Знаток
****

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

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


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


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






program pataya_laboratornaya;
var s,name,name1:string;
k:integer;
procedure stroki(var st:string);
var i,n,j:integer;
begin
i:=pos(' ',st);
while (i<>0) do
begin
delete(st,i,1);
i:=pos(' ',st);
end;
end;
procedure create(name:string);
var i,n:integer;f:text;
x:string;
begin
assign(f,name);
{$I-}
rewrite(f);
{$I+}
if ioresult <> 0 then writeln ('error')
else
begin
readln(n);
for i:=1 to n do
begin
readln(x);
writeln(f,x);
end;
close(f);
end;
end;
procedure print_file(name:string);
var x:string;f:text;
begin
assign(f,name);
{$I-}
reset(f);
{$I+}
if ioresult <> 0 then writeln ('error')
else
begin
while not(eof(f)) do
begin
readln(f,x);
writeln(x);
end;
close(f);
end;
end;
procedure obrabotka(name,name1:string);
var x,s:string;
f1:text;
f2:text;
begin
assign(f1,name);
{$I-}
reset(f1);
{$I+}
if ioresult <> 0 then writeln ('error')
else
begin
assign(f2,name1);
{$I-}
rewrite(f2);
{$I+}


if ioresult <> 0 then writeln ('error')
else
begin

while not(eof(f1)) do
begin
readln(f1,x);
stroki(x);
writeln(f2,x);
end;
close(f2);
end;
close(f1);
end;
end;

begin
{ writeln('ўўҐ¤ЁвҐ бва®Єг');
readln(s);
stroki(s);
writeln('१г«мв в');
writeln(s);}
writeln('name=');
readln(name);
create(name);
writeln('name1=');
readln(name1);
obrabotka(name,name1);
print_file(name);
print_file(name1);
end.


М
Теги !

 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Знаток
****

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

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


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

const

delitel = [#0..#32, '.', ',', ':', ';', '!', '?', '"'];
type
TWords = array[1..100] of string;
type
tdel = array[1..100] of string;
var
S : string;
W : twords;
D : tdel;

function words_from_string (s : string; var w : twords; var d : tdel) : integer;
var
i,j,k,count : integer;
begin
i := 1;
count := 0;
while ( i <= length(s) ) do begin
k:=i;
while( i <= length(s) ) and ( s[i] in delitel ) do
inc(i);
d[count+1] := copy (s , k, i-k );
if i <= length( s ) then begin
j := i;
while(i <= length( s )) and not( s[i] in delitel) do
inc(i);
inc(count);
w[count] := copy(s, j, i-j);
end;
end;

result := count;
end;
var count : integer;
var
name : array [ 1..100 ] of boolean;

procedure get_name (w : twords);
var i : integer;
flag : boolean;
begin
name[1]:=false;
for i:= 2 to count do
if (w[i,1] in ['A'..'Z']) or (w[i,1] in ['А'..'Я']) then begin
name[i]:=true;
if w[1]=w[i] then name[1] := true;
end else name[i]:=false;
flag:= false;
for i:=2 to count do
if name[i] then flag:=true;
if not flag then name[1]:=true;

end;

function make_s(w : twords; d : tdel; otch : string):string;
var s : string;
i : integer;
begin
s:='';
for i:= 1 to count do begin
s:= s + d[i];
s:= s + w[i];
if name[i] then s:= s +' '+ otch;
end;
result:=s;
end;




var b : string;
begin
s:='Vasa bili tut.';
b:='Ivanovich';
count := words_from_string(s,w,d);
get_name(w);
write(make_s(w,d,b));
readln;
s:='Ja i Vasa bili tut.';
b:='Ivanovich';
count := words_from_string(s,w,d);
get_name(w);
write(make_s(w,d,b));
readln;

{ TODO -oUser -cConsole Main : Insert code here }
end.

Лень искать лажу вот код, сам разбирайся ( работает под Delphi )
чтобы перевестим на паскалевский замени result на название функции

Кстати код не работает в строке "Vasa." но как исправить ты я думаю догадаешься smile.gif

Сообщение отредактировано: volvo -


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Он выдает переполнение стека!!!! чё подскажешь?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Знаток
****

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

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


уменьшь размеры типов


type
TWords = array[1..100] of string[15];
type
tdel = array[1..100] of string[5];


Сообщение отредактировано: volvo -


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Профи
****

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

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


Думаю тебе нужна функция типа такой:

function f(s,n,o:string):string;
begin
if pos(n,s)=0 then f:=s else
f:=copy(s,1,pos(n,s)-1)+n+' '+o+f(copy(s,pos(n,s)+length(n),255),n,o);
end;

Которая в предложении s после n ставит o.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Спасибо за советы..... Помогли))
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






блин, требуется, чтобы выводил строки друг под другом, помогите плз!!!
 К началу страницы 
+ Ответить 

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

 





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