Среда, 08.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

И вновь...
TexnarДата: Суббота, 05.01.2008, 21:57 | Сообщение # 1
Знакомый
Группа: Пользователи
Сообщений: 16
Репутация: 1
Замечания: 0%
Статус: Offline
Code
Program Zhivykh_22;
Const MaxWr = 20;
       znaks=':;.,!?-" ';
Type
       str2 = string[255];
       simvol=string[1];
       slovo=string[30];
       mas = Array[1..MaxWr] of slovo;
       str = string[200];

Procedure ReadNameofFile(var f1,f2,g:text);
var nazv1,nazv2,nazv3:str;
Begin
      Writeln('Введите имя файла с текстом: ');
      readln(nazv1);
      Writeln('Введите имя файлов со словами: ');
      Readln(nazv2);
      Writeln('Введите имя файла куда будет записан результат: ');
      readln(nazv3);
      Assign(f1,nazv1);
      Assign(f2,nazv2);
      Assign(g,nazv3);
      {$I-}
      Reset(f1);
      Reset(f2);
      {$I+}
end;

procedure schitat_slovo(var f2:text; var sl:slovo);
var
  sim:simvol;
begin
  sl:='';
  repeat
   read(f2,sim); {До тех пор пока не дойдем до запятой}
   sl:=sl+sim;               {считать символ и добавить к слову}
  until (sim=',') or eoln(f2);
  if not(eoln(f2)) then {если это было не последнее слово}
   delete(sl,length(sl),1);   {удалить запятую из конца этого слова}
end;

Procedure CreateArrays(var f2:text; var zamenyemie,zamenyushie:mas; var kolvo:integer);
var
  mode:byte;
  sl:slovo;
Begin
  mode:=1;
  kolvo:=0;
  while not(eoln(f2)) do   {пока не дойдем до конца строки}
  begin
   schitat_slovo(f2,sl);{считать слово}
   if mode=1 then {если это заменяемое слово}
   begin
    inc(kolvo);
    zamenyemie[kolvo]:=sl;{добавить его в массив заменяемых слов}
    mode:=2; {следующее слово заменяющее}
   end
   else              {иначе заменяющее слово}
   begin
    zamenyushie[kolvo]:=sl; {добавить в массив заменяющих слов}
    mode:=1;  {следующее слово будет заменяемое}
   end;
  end;
End;

function posznak(s:str; start:integer):integer;
{Ищем позицию первого знака начиная с заданой позиции}
var
  i:integer;
begin
  i:=start;
  while (pos(copy(s,i,1),znaks)=0) and (i<=length(s)) do {пока не достигнут конец строки
                и не найден знак}
   i:=i+1;{смотреть следующий символ}
  posznak:=i;{возвратить позицию}
end;

function proverka_na_ne_odni_znaki(s:str):boolean;
{проверка на то что в строке не одни знаки}
var
   i:integer;
begin
  proverka_na_ne_odni_znaki:=false;
  for i:=1 to length(s) do {переберем все символы}
   if pos(copy(s,i,1),znaks)=0 then {если символ не найден среди знаков}
    proverka_na_ne_odni_znaki:=true; {вернуть правду}
end;

1-ая часть

---------------------------------------------

Code
function zamenaslov(var s1:str; word1,word2:slovo):str2;
var
  prom:str2;
  stroka:string[202];
  prom2:integer;
begin
  stroka:=' '+s1+' ';
  prom:='';
  while (length(stroka)>0) and proverka_na_ne_odni_znaki(stroka) and (pos(word1,stroka)>0) do
   {пока строка не пуста и в ней содержатся слова и содержится искомая комбинация(word1)}
  begin
   prom2:=pos(word1,stroka);{находим позицию начала совпадения}
   if pos(copy(stroka,prom2-1,1),znaks)>0 then{предыдущий симво знак(комбинация стоит в начале)}
   begin
    if pos(copy(stroka,prom2+length(word1),1),znaks)>0 then { если после комбинации стоит тоже знак(
      слово стоит в конце)}
    begin
     {комбинация отделена знаками справа и слева}
     delete(stroka,prom2,length(word1));{удаляем слово}
     insert(word2,stroka,prom2);{заменяем на нужное}
     prom:=prom+copy(stroka,1,posznak(stroka,prom2)-1);{добавляем в новую строчку}
                    {все от начала до конца слова }
     delete(stroka,1,posznak(stroka,prom2)-1);{ удаляем скопированную часть}
    end
    else
    begin
     {после комбинации стоит не знак а символ}
     prom:=prom+copy(stroka,1,posznak(stroka,prom2)-1);
     delete(stroka,1,posznak(stroka,prom2)-1);
    end;
   end
   else
   begin
    {перед комбинацией стоит символ}
    prom:=prom+copy(stroka,1,posznak(stroka,prom2)-1);
     delete(stroka,1,posznak(stroka,prom2)-1);
   end;
  end;
  prom:=prom+stroka;{добавляем остаток}
  zamenaslov:=prom;
end;

procedure zamenaslov_f(var f,g:text; const zamenyemie,zamenyushie:mas; kolvo:integer);
var
  s:str;
  s2:str2;
  i:integer;
begin
  while not(eof(f)) do {перебираем строки в файле}
   begin
    readln(f,s);
     for i:=1 to kolvo do
      begin
       s2:=zamenaslov(s,zamenyemie[i],zamenyushie[i]);{ищем в строке файла f1 заменяемые слова и заменяем на заменяющее слово}
      end;
     writeln(g,s2);         {и записать в новый файл}
   end;
end;

Var f1, f2: Text;
     g: Text;
     zamenyemie,zamenyushie: mas;
     kolvo:integer;

Begin
ReadNameofFile(f1,f2,g);                             {получаем имена файлов и попытаемся открыть файл данных}
if IOResult<>0 then                    {Если неудачно то}
     begin
       writeln('Ошибка в имени файла(ов)');           {выводим сообщение}
       readln;
     end
else                    {иначе}
    begin
     rewrite(g);                    {открываем выходной файл на перепись}
     CreateArrays(f2,zamenyemie,zamenyushie,kolvo);   {заполняем массив с заменяемыми и заменяющими}
                    {словами, а также пересчитать их}
     ZamenaSlov_f(f1,g,zamenyemie,zamenyushie,kolvo); {заменяем слова заменяемые на заменяющие и сохраняем в новом файле}
     Close(f1);
     close(f2);                    {сохраняем данные}
     Close(g);
    End;
End.

2-ая часть.

Кодировку нужную я у себя не нашел(

Сообщение отредактировал Texnar - Суббота, 05.01.2008, 21:57
 
SeqularДата: Воскресенье, 06.01.2008, 10:29 | Сообщение # 2
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Да, насчет кодировки. Я делаю так:
пользуюсь текстовым редактором "Bred3" - аналог блокнота, но с кодировками не глючит! Очень советую скачать. Бесплатный. Весит мало. Подсвечивает синтаксис паскаля. В общем выделяешь задачу с сайта. "Бред" переключаешь в кодировку OEM (справа вверху кнопка с 3-мя кодировками), вставляешь в текст условие. Кириллица остается кириллицей. Сохраняешь. И все! В паскале читается нормально.


Поддерживаю также проект сообщество молодых сисадминов
 
TexnarДата: Воскресенье, 13.01.2008, 01:22 | Сообщение # 3
Знакомый
Группа: Пользователи
Сообщений: 16
Репутация: 1
Замечания: 0%
Статус: Offline
Ладно на будующее учту. Можете помочь с этой? Очень надо до 8 числа((( А еще экзамены на програмирование время щас вообще нет.

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

Добавлено (12.01.2008, 18:22)
---------------------------------------------
Все спасибо помощь больше не нужна. Сам все доделал) И тем самым успешно поставили мне автомат)

Сообщение отредактировал Texnar - Вторник, 08.01.2008, 05:24
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;