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

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

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

> Обработка Строк, Помогите решить
-Alex-
сообщение 6.11.2006 22:48
Сообщение #1


Гость






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

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

И прога должна вставить его отчество после имени: Иван Васильевич работает!!!
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 17)
arhimag
сообщение 6.11.2006 23:08
Сообщение #2


Знаток
****

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

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


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


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 7.11.2006 8:49
Сообщение #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 
 К началу страницы 
+ Ответить 
Malice
сообщение 7.11.2006 10:22
Сообщение #4


Профи
****

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

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


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

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

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


Гость






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


Гость






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


Гость






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


Профи
****

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

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


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


Знаток
****

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

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


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


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


Гость






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

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


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


Знаток
****

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

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


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


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 7.11.2006 16:18
Сообщение #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.


М
Теги !

 К началу страницы 
+ Ответить 
arhimag
сообщение 7.11.2006 16:44
Сообщение #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 - 7.11.2006 23:56


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


Гость






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


Знаток
****

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

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


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


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


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


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 7.11.2006 18:05
Сообщение #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 
 К началу страницы 
+ Ответить 
Гость
сообщение 7.11.2006 21:33
Сообщение #17


Гость






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


Гость






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

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

 



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