Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Pascal / 7 сообщений из 7, страница 1 из 1
09.12.2009, 19:44:24
    #36357669
Ivan85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal
Здравствуйте! есть задание заданы два текста. Каждый текст составлен из попарно различных
слов. Определить, можно ли получить второй текст из первого
удалением некоторых его символов.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
uses crt;
var i,j:integer;
mas:array[ 1 .. 10 ] of string; 
begin
writeln('Add text mas ');
readln(mas[ 1 ]); // первый текст
writeln('Add text mas2 ');
readln(mas[ 2 ]); // второй текст
for i:= 1  to length(mas[ 1 ])- 1  do //длина mas[ 1 ]
for j:=i+ 1  to length(mas[ 2 ]) do // длина mas[ 2 ]
if mas[ 1 ]=mas[ 2 ] then writeln('Not elements for delete') //если они равны то выводим
else if mas[ 1 ]<>mas[ 2 ] then //если не равны то тут как получить второй текст из первого удалением некоторых его символов
Зарание спасибо!
...
Рейтинг: 0 / 0
10.12.2009, 00:15:38
    #36357966
Ivan85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal
думаю что надо проитись циклом по второму тексту, если есть символы из первого то их оставить , а остальные удалить потом снова проверить по длинам совпадают или нет. только как это реализовать непойму.
...
Рейтинг: 0 / 0
10.12.2009, 15:09:52
    #36359231
vino
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal
Ivan85, "можно ли получить второй текст из первого удалением некоторых его символов " равносильно "последовательно проверять наличие букв первого массива во втором", но, конечно, программа должна быть чуть другая
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
uses crt;
var i,j,k:integer;
mas:array[ 1 .. 10 ] of string; 
begin
writeln('Add text mas ');
readln(mas[ 1 ]); // первый текст
writeln('Add text mas2 ');
readln(mas[ 2 ]); // второй текст
j :=  0 ; // пока не искали
k :=  0 ; // пока без пропусков
for i:= 1  to length(mas[ 1 ]) do //длина mas[ 1 ]
 j:=j+ 1 ; // смотрим с очередного символа
 while j <= length(mas[ 2 ]) do // длина mas[ 2 ]
 begin
  if mas[i]=mas[j] then break; //если они равны то нашли символ
  k:=k+ 1 ; // учли пропуск
  j:=j+ 1 ; // перешли к следующей букве
 end;
 if j > length(mas[ 2 ]) then // mas[ 2 ] исчерпан? значит очередной символ не нашли
  writeln('Can''t convert mas to mas2 with delete only!') // выводим отказ
 else //если не равны то тут как получить второй текст из первого
  writeln('Can convert mas to mas2 with delete ', k,' chars') // можно, с удалением k символов
end.
Однако, в условии что-то говориться о словах ? Может, и перестановка слов допускается, а не только удаление некоторых символов?
...
Рейтинг: 0 / 0
10.12.2009, 15:14:33
    #36359248
vino
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal
опа, эт я слишком рано отправил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
uses crt;
var i,j,k:integer;
mas:array[ 1 .. 10 ] of string; 
begin
writeln('Add text mas ');
readln(mas[ 1 ]); // первый текст
writeln('Add text mas2 ');
readln(mas[ 2 ]); // второй текст
j :=  0 ; // пока не искали
k :=  0 ; // пока без пропусков
for i:= 1  to length(mas[ 1 ]) do //длина mas[ 1 ]
 j:=j+ 1 ; // смотрим с очередного символа
 while j <= length(mas[ 2 ]) do // длина mas[ 2 ]
 begin
  if mas[ 1 ][i]=mas[ 2 ][j] then break; //если они равны то нашли символ
  k:=k+ 1 ; // учли пропуск
  j:=j+ 1 ; // перешли к следующей букве
 end;
 if j > length(mas[ 2 ]) then // mas[ 2 ] исчерпан? значит очередной символ не нашли
 begin
  writeln('Can''t convert mas to mas2 with delete only!'); // выводим отказ
  exit
 end;
end;
writeln('Can convert mas to mas2 with delete ', k,' chars') // можно, с удалением k символов
end.
...
Рейтинг: 0 / 0
10.12.2009, 16:37:05
    #36359508
Ivan85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal
vino, да возможно тут еще надо учитывать пробелы и перестановку.
ввожу
mas case
mas2 ca
то выводит 'Can''t convert mas to mas2 with delete only!'
если наоборот вводить то выводит 'Can convert mas to mas2 with delete 0 chars'


делал вот так но чет вообще не то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
uses crt;
var h,i,j,k:integer;
mas:array[ 1 .. 10 ] of string;
begin
k:= 0 ;
writeln('Add text mas ');
readln(mas[ 1 ]);
writeln('Add text mas2 ');
readln(mas[ 2 ]);
for i:= 1  to length(mas[ 1 ])- 1  do
for j:=i+ 1  to length(mas[ 2 ]) do
if mas[ 1 ]<=mas[ 2 ] then
for h:= 0  to length(mas[ 2 ]) do  h:=h+ 1 ;
if mas[ 2 ] = mas[ 1 ] [k] then k:=k+ 1 
else mas[ 1 ] := '_';
if k = length(mas[ 1 ]) then writeln(mas[ 2 ])
else writeln('No match');
end.
...
Рейтинг: 0 / 0
10.12.2009, 17:06:42
    #36359587
vino
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal
Ivan85, да, я чет проглядел, что mas[2] с mas[1] надо переставить. Само решение-то почти готово
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
var i,j,k,l:integer;
mas:array[ 1 .. 2 ] of string; 
begin
writeln('Add text mas ');
readln(mas[ 1 ]); // первый текст
writeln('Add text mas2 ');
readln(mas[ 2 ]); // второй текст
j :=  0 ; // пока не искали
k :=  0 ; // пока без пропусков
l := length(mas[ 1 ]); // длина mas[ 1 ]

for i:= 1  to length(mas[ 2 ]) do //длина mas[ 2 ], как наименьшего текста
 j:=j+ 1 ; // смотрим с очередного символа в mas[ 1 ]
 while j <= l do
 begin
  if mas[ 2 ][i]=mas[ 1 ][j] then
   break; //если они равны, то нашли символ
  k:=k+ 1 ; // учли пропуск
  j:=j+ 1 ; // перешли к следующему символу
 end;
 if j > l then // mas[ 1 ] исчерпан? значит - очередной символ не нашли
 begin
  writeln('Can''t convert mas to mas2 with delete only!'); // выводим отказ
  exit
 end;
end;
writeln('Can convert mas to mas2 with delete ', k,' chars') // можно, с удалением k символов
end.
тут, кстати, возможна оптимизация циклов при большой длине строк
...
Рейтинг: 0 / 0
11.12.2009, 18:53:46
    #36362186
Ivan85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal
vino, Спасибо разобрался!
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Pascal / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]