Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ 2 строки файла

Автор: Ellsa 22.12.2006 2:00

Здравствуйте.У меня такое вот задание.....
Даны две строки текста.Вывести слова,присутствующие в каждой строке.


По идее это элементарно..но я не могу вообще ничего написать!Особенно возникает сложность с написанием куска,где мы переходим на вторую строку,чтоб сравнивать с первой....вообще не понимаю,как это осуществить...если есть какие-нибудь мысли,поделитесь пожалуйста....



я обрыла поиск весь....находила только повторяющиеся слова в одной строке или символы....это сами понимаете...не то.... unsure.gif

Автор: ammaximus 22.12.2006 3:09

Разбей на слова.
http://forum.pascal.net.ru/index.php?showtopic=6972
Пусть будут 2 массива первая строка и вторая строка.
Считывай слова в первый массив while not eoln
readln; - переход на другую строку
И снова считываешь, но уже во второй массив.
Потом просто сравни полученные строки.

Автор: volvo 22.12.2006 3:12

Цитата
Даны две строки текста.Вывести слова,присутствующие в каждой строке.
А прочесть этот текст в 2 строковых переменные запрещено? А потом "on the fly" в одной строке вычленять слова, и проверять их наличие во второй строке (через Pos например)...

Автор: ammaximus 22.12.2006 3:35

uses crt;
const s1:string[200] ='aaa bbb ccc ddd';
s2:string[200] ='ccc';
var i,j,k:integer;
s:string[200];
a1:array[0..8] of string[200];
begin
for j:=1 to length(s1) do
if s1[j]<>' ' then
a1[i]:=a1[i]+s1[j]
else
inc(i);
k:=i;
for j:=1 to length(s2) do
if s2[j]<>' ' then
s:=s+s2[j]
else
begin
for i:=1 to k do
if s=a1[i] then writeln(a1[i]);
end;
write(s);
readkey;
end.

C использованием массива проще. Но можно и без него.

Автор: volvo 22.12.2006 3:42

Цитата
C использованием массива проще
Во-первых, решение неэффективно (посмотри, сколько памяти расходуется впустую, не приучайся делать СРАЗУ плохо)... А во-вторых - использование массивов может и запрещаться ...

К тому же, автору был задан вопрос, который она почему-то игнорировала... Ну что ж - дело ее...

Автор: Ellsa 22.12.2006 3:47

volvo,мне ваш вопрос несовсем понятен.Через pos на данный момент пытаюсь составить программу,а все,что было сказано перед этим мне несовсем понятно. unsure.gif
ammaximus,спасибо большое. smile.gif попытаемся разными способами. Думаю моя программа все равно не заработает...

Автор: ammaximus 22.12.2006 4:05

Ellsa, с использованием POS в прикреплении. Но я советую вам самой попробовать решить, не заглядывая. wink.gif


Прикрепленные файлы
Прикрепленный файл  STROK.PAS ( 452 байт ) Кол-во скачиваний: 278

Автор: Ellsa 22.12.2006 4:08

я пытаюсь....но я встала на моменте,когда надо следующее слово рассматривать...после пробела.....мне тут помогли написать до этого момента....а теперь я все.... sad.gif
спать больше надо...может соображать лучше буду...

Автор: volvo 22.12.2006 4:15

ammaximus, твой "способ" валится при элементарном тесте:

const
s1:string[200] ='aaa bbb ccc ddd';
s2:string[200] ='ccc bbbred';

Легитимно? Вполне, кто сказал, что во второй строке будет только одно слово? Ан, твоя программа это НЕ пропускает...

Правило №7 и к тебе относится!

Вот так надо было делать проверку:
Спойлер (Показать/Скрыть)

Автор: Ellsa 22.12.2006 4:33

боюсь,что мне сейчас не понять всех мудренностей последней программы....спасибо,что откликнулись.Но я ничерта не могу понять...

and
(
(p = 1) or ((p > 1) and (s2[p - 1] = ' '))
)
and
(
(p + length(_word) - 1 = length(s2)) or
((p + length(_word) - 1 < length(s2)) and (s2[p + length(_word)] = ' '))
)
then begin
writeln('word: ', _word, ' exists in s1 & s2 ...');
end;

вообще непонятно.... unsure.gif