Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C]&[Pascal]Канонический вид текста 
:(
    Опции темы
APCEH
Дата 12.12.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.7.2007

Репутация: нет
Всего: нет



Дали задание в вузе. Надо написать программу в Си или в Паскале. Обычно все программы я писал сам но этой не выходит не в Паскале не в Си теболее. Искал в книжках похожих примеров, но не нашёл. Было бы не плохо если оказались бы такие люди которые помогли. 
Требования: Написать программу работающую с текстом. Программа читает текст с одного файла и записывает его в другой. В тексте строка состоит из 255 симболов, если строка длиннее остальные симболы можно проигнорировать. Для обработки текста должна быть использованна функция или процедура, которая обработывала бы по одной строке в тексте. Слово – последовательность любых симьболов кроме пробела. В программе нельзя исползовать элементы динамического программирования (динамические массивы и поинтеры).  
Задание:  Превратить данный текст в канонический вид. Каждое новое предложение начинается с большой буквы (точка признак конца предложения). Между словами должен быть всеголишь 1 пробел, точка или запятая должна стоять сразу после слова, после знаков «‘.‘,‘,‘,‘:‘,‘;‘» должен быть пробел.


Это сообщение отредактировал(а) APCEH - 12.12.2009, 23:27
PM MAIL   Вверх
APCEH
Дата 17.12.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.7.2007

Репутация: нет
Всего: нет



уже есть код.. Если кому то всё ещё надо...



Код

program uzd5;
const MAX = 100;
type masyvas = array[1..MAX] of string[255];

//==============================================================================
//  procedura dlya prochitki teksta iz faila
procedure skaita(var a: masyvas; var n: integer);
var f_in: String;
    f: text;
    ior, i: integer;
begin
   {$I-}
   repeat
        write('Input filename of input file : ');
        readln(f_in);
        
        assign (f, f_in);
        reset (f);
        close (f);
        ior := ioresult;
        
        if (ior <> 0)
        then writeln ('Error!!!');
    until (ior = 0);
    {$I+}
    
    assign (f, f_in);
    reset (f);
    i := 1;
    while (not eof(f)) do
    begin
      readln(f, a[i]);
      inc(i);
    end;
    close (f);
    
    n := i;
end;

//==============================================================================
//  ubiraem nenuzhnyje probely
procedure tarpai(var eil_in: string; var eil_out: string);
var n, i: integer;
begin
  n := length(eil_in);
  i := 1;
  while (n >= i) do
    begin
      if ((eil_in[i] = eil_in[i+1]) and (eil_in[i] = ' '))
      then
        begin
          delete(eil_in, i+1, 1);
          dec(i);
          dec(n);
        end;
      inc(i);
    end;
  eil_out := eil_in;
end;

//==============================================================================
//  to4ka ili zapiataja pishetsia srazu posle slova. Posle znaka prepinanija stavim probel.
procedure kabl_task(var eil_in: string; var eil_out: string);
var n, i: integer;
begin
  n := length(eil_in);
  i := 1;
  while (n >= i) do
    begin
      if (((eil_in[i] = '.') and (eil_in[i+1] <> ' '))or
          ((eil_in[i] = ',') and (eil_in[i+1] <> ' '))or
      ((eil_in[i] = ';') and (eil_in[i+1] <> ' ')))
      then
        begin
          insert(' ', eil_in, i+1);
          inc(n);
        end;
      inc(i);
    end;
  eil_out := eil_in;
end;

//==============================================================================
//  Kazhdoje predlozhenije na4inaetsia s novoj stro4ki.
procedure caps(var eil_in: string; var eil_out: string);
var n, i: integer;
begin
  n := length(eil_in);
  i := 1;
  
  // abc => Abc
  if ((eil_in[1] >= 'a') and
      (eil_in[1] <= 'z'))
  then eil_in[1] := chr(ord(eil_in[1])-32);
        
  // _abc => _Abc
  if ((eil_in[2] >= 'a') and
      (eil_in[2] <= 'z') and
      (eil_in[1] <= ' '))
  then eil_in[2] := chr(ord(eil_in[2])-32);
        
  //  abc. abc => abc. Abc
  while (n-2 >= i) do
    begin
      if ((eil_in[i] = '.') and
          (eil_in[i+1] = ' ') and
          (eil_in[i+2] >= 'a') and
          (eil_in[i+2] <= 'z'))
      then eil_in[i+2] := chr(ord(eil_in[i+2])-32);

      inc(i);
    end;
  eil_out := eil_in;
end;

//==============================================================================
//  Procedura po obrabotke teksta
procedure tvarka(var a: masyvas; var n: integer; var b: masyvas);
var i: integer;
    eil1, eil2: string;
begin
  for i := 1 to n do
    begin
      tarpai(a[i], eil1);
      kabl_task (eil1, eil2);
      caps (eil2, b[i]);
    end;
end;

//==============================================================================
//  vyvedinije obrabotannogo teksta v fail
procedure rezult(var b: masyvas; var n: integer);
var ior, i: integer;
    f_out: String;
    f: text;
begin
  {$I-}
   repeat
        write('Input filename of output file: ');
        readln(f_out);

        assign (f, f_out);
        rewrite (f);
        close (f);
        ior := ioresult;

        if (ior <> 0)
        then writeln ('Error!!!');
    until (ior = 0);
    {$I+}
    
    assign (f, f_out);
    rewrite (f);
    for i := 1 to n do writeln (f, b[i]);
    close (f);
end;

//==============================================================================
//  glavnaja chast programma
var a, b: masyvas;
    n: integer;
begin
  skaita(a, n);
  tvarka(a, n, b);
  rezult(b, n);
end.


Это сообщение отредактировал(а) APCEH - 17.12.2009, 21:09
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0460 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.