Вопрос № 176583: Добрый вечер!!!!Помогите пожалуйста решить 2 задачки: Дана матрица n*m, 1)обменять местами первую строку с последней 2)обменять местами вторую строку с последней ...
Вопрос № 176586: Помогите, пожалуйста, решить задачу на текстовые файлы. Для каждого из слов первого предложения указать, сколько раз оно встречается в остальном тексте, а также указать номер предложения....
Вопрос № 176593: Строковые. 1. Дана строка. Выдать номер позиции,в котором буква ''а'' 5-й раз повторяется. 2. Даны слова в одной строке. Выдать слова,которые имеют четную длину. 3. Дана строка. Заменить все 1 на ''а''...
Вопрос № 176583:
Добрый вечер!!!!Помогите пожалуйста решить 2 задачки: Дана матрица n*m, 1)обменять местами первую строку с последней 2)обменять местами вторую строку с последней
Отвечает Patriotix-N, 5-й класс :
Здравствуйте, aggressor92. Следуя вашему условия, в качестве входных и выходных данных я использовал текстовые файлы. Получая по одному символу из входного файла, формируются слова, которые сравниваются с базой слов из первого предложения. Так как нет указаний насчет прямой речи и сложности задания(типа текста) то есть ряд не учитываемых факторов. Так например если в предложении встретится знак ".":
Создаете базу слов из первого предложения(строка, заканчивающаяся ".", "?", "!").
то это будет считаться концом предложения. Конечно, если у вас не просто художественный текст, то тогда вам придется нем
ного усовершенствовать код. Также насчет прямой речи: "Hellow, World!". Дойдя до знака "!" будет закончено первое предложение, а дойдя до знака "." - второе. Так получится лишнее предложение, а если между кавычками и знаком конца предложения будут стоять слова автора, то их местоположение будет указано не правильно - на одно предложение больше, и далее пойдет аналогичный сдвиг для всех слов, увеличивающийся с каждой встречей прямой речи. Тут тоже потребуется усовершенствование
кода... Текст модуля:
Код:
program str_2;
function symbol(s:char):boolean; //Символы относящиеся к буквам begin symbol:=((s >= 'a') and (s<='z'))or
((s>='A') and (s<='Z'))or ((s >= #192) and (s<=#255))or //а-Я (s='''')//или заменить на 044 end;
function separator(sep:char):boolean; //Разделитель слов begin separator:=(sep = #32) or (sep=#9) or(sep=#13) or(sep=#10) or //Пробел, табуляци, перевод строки с возвратом каретки, перевод строки (sep=',')or (sep='-') or (sep='"') or (sep='.') or (sep='?')
or (sep='!') ; end;
var input,output:text; sntns_num,wrds_num,i,j:integer; words:array of string;//Слова из первого предложения w:string; //Текущее слово s:char; //Текущий символ outp_arr:array of array of integer; //Выходные данные outp_num:array of integer;//Количество вхождений слова outp_max:integer;//Максимальное количество вхождений begin
assignfile(input,'input.txt');
//Привязываем файл reset(input); //открываем для чтения sntns_num:=1;//Номер предложения wrds_num:=0; //Количество слов в первом предложениии outp_max:=0; While not eof(input) do begin read(input,s); //Считываем символ из файла. if symbol(s) then //Проверяем буква ли это w:= w + s //Записываем в слово else begin if (w<>'') and separator(s) then //Мы только, что закончили считывaть слово
begin if sntns_num=1 then //Если первое предложение begin SetLength(words,wrds_num+1); //Увеличиваем размер массива со словами words[wrds_num]:=w; //Добавляем слово wrds_num:=wrds_num+1; //Увеличиваем счетчик слов setlength(outp_num,wrds_num); //Количество найденных вхождений слова - устанавливаем длинну массива end
else begin for i:=0 to wrds_num-1 do //Проверяем совпадения begin
if w=words[i] then //Если наше слово есть в первом предложении begin if (outp_num[i]+1)>outp_max then //Если надо увеличивать begin setlength(outp_arr,wrds_num,outp_num[i]+1);//Увеличиваем размер массива outp_max:=outp_num[i]+1; //Устанавливаем новый максимальный размер end;
outp_arr[i,outp_num[i]]:=sntns_num;//Записываем в выходные данные номер предложения, где встретилось слово outp_num[i]:=outp_num[i]+1; //увеличиваем количество найденных вхождений для данного слова. end; end; end; w:=''; //Обнуляем слово end; if (s='.') or (s='?') or (s='!') then sntns_num:=sntns_num+1;
//Если встретился символ конца предложения - увеличиваем количество предложений end;
end; close(input); //Закрываем файл assignfile(output,'output.txt'); rewrite(output); //открываем для перезаписи for i:=0 to wrds_num-1 do //Выводим данные во второй файл begin Write(output,'Cлово '+'"'+words[i]+'"'+' найдено '+IntToStr(outp_num[i])+' раз'); if outp_num[i]>0 then //Если
слово встретилось в остальном тексте begin write(output,' в следующих предложениях: '+#13); for j:=0 to outp_num[i]-1 do //выводим список предложений begin write(output,#9); //табуляция write(output,IntToStr(outp_arr[i,j])+', '); end; end; write(output,#13);//перевод строки end; close(output); end.
Пример работы про
граммы: Входной файл:
Код:
1 Алиса сидела пеpед экpаном писишки, тщетно пытаясь сообpазить, что делать дальше. 2 После четыpех часов набивки маловpазумительной статьи, подсунутой шефом, в глазах pябило, хотелось спать и вообще думалось плохо. 3 Логичным
казалось попытаться сохpанить введенное. 4 Алиса помнила, что сначала надо было выбpать в меню пункт "File", поисками котоpого она и pешила заняться. 5 После пяти минут pассматpивания экpана Алиса вспомнила, что шеф только что поставил по совету некоего Хакеpа pусский воpд вместо английского, как было сказано, "чтоб облегчить жизнь девочкам". 6 Кто такой Хакеp, Алиса не знала, но после десятимину
тных попыток вспомнить, как будет "Save" по-pусски, она pешила, что это кто-то очень нехоpоший, ну или по меньшей меpе очень стpанный, что, собственно, одно и то же - стpанностей она очень не любила. 7 Сделанные усилия так утомили Алису, что на такой подвиг, как сообpазить, куда и как из этого воpда надо выходить, она уже способна не была, и ей оставалось только смотpеть на экpан в надежде, что войдет кто-нибудь менее усталый или более знающий и поможет
ей выйти из затpуднения. 8 Вpемя от вpемени только пpиходилось нажимать на клавишу Shift с наклейкой "Any key" (сделанной, по слухам, тем же Хакеpом) чтобы убpать с экpана летящие пpямо в лицо звезды. 9 Так пpошло несколько минут.
Выходной файл:
Код:
Cлово "Алиса" найдено 3 раз в следующих предложениях: 4, 5, 6,
Cлово "сидела" найдено 0 раз Cлово "пеpед" найдено 0 раз Cлово "экpаном" найдено 0 раз Cлово "писишки" найдено 0 раз Cлово "тщетно" найдено 0 раз Cлово "пытаясь" найдено 0 раз Cлово "сообpазить" найдено 1 раз в следующих предложениях: 7, Cлово "что" найдено 7 раз в следующих предложениях: 4, 5, 5, 6, 6, 7, 7, Cлово "делать" найдено 0 раз Cлово "дальше" найдено 0
раз
Исправлено по просьбе автора ответа
-----
∙ Отредактировал: Лысков Игорь Витальевич, Модератор
∙ Дата редактирования: 11.02.2010, 11:53 (время московское)
----- Лучше знать ничего обо всем, чем все ни о чем.
Ответ отправил: Patriotix-N, 5-й класс
Ответ отправлен: 11.02.2010, 00:49
Номер ответа: 259340
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 259340
на номер 1151 (Россия) |
Еще номера »
Вопрос № 176593:
Строковые. 1. Дана строка. Выдать номер позиции,в котором буква ''а'' 5-й раз повторяется. 2. Даны слова в одной строке. Выдать слова,которые имеют четную длину. 3. Дана строка. Заменить все 1 на ''а''
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.