IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Выделить заголовки
Milena
сообщение 29.11.2004 17:32
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский

Репутация: -  0  +


В строке необходимо,чтоб те слова, которые идут после точки трех(и более) пробелов начинались с большой буквы.
Сижу ,мучаюсь, ничего не получается...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2004 17:35
Сообщение #2


Гость






Milena
Что значит не получается? Значит, что-то пробовали? Где проблема?
 К началу страницы 
+ Ответить 
Milena
сообщение 29.11.2004 17:39
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский

Репутация: -  0  +


ну жа проьывали...Я не знаю как организовать проверку было перед словом точка с тремя или более пробелами...вот ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
FreeMan
сообщение 29.11.2004 17:45
Сообщение #4


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


Посимвольно проверяй строку на наличие точки. Если нашла точку, то проверяешь, есть ли там три пробела и, если есть, занимаешься поиском следующего слова, в котором заменяешь первую букву на заглавную


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Milena
сообщение 29.11.2004 17:50
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский

Репутация: -  0  +


Ну типа я этим же и руководствовалась вот уже целый час в попытках что-нибудь написать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2004 18:02
Сообщение #6


Гость






Milena

Вот функция. Попробуй разобраться в алгоритме... (Upcase придется заменить на что-то, что корректно переводит кириллицу в верхний регистр...)

Код

const
 s: string = 'this is a .     test and. this is not';
var
 i, p: byte;
 count: integer;
 curr_p: integer;
begin
 curr_p := 1;
 repeat
   p := pos('.', copy(s, curr_p, length(s)));
   if p > 0 then
     begin
       count := 0; i := curr_p + p;
       while s[i] = ' ' do
         begin
           inc(count); inc(i)
         end;
       if count > 2 then s[i] := upcase(s[i])
     end;
   curr_p := i;
 until p = 0;

 writeln(s);
end.


Сообщение отредактировано: volvo - 29.11.2004 18:03
 К началу страницы 
+ Ответить 
FreeMan
сообщение 29.11.2004 18:09
Сообщение #7


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


Цитата
Upcase придется заменить на что-то, что корректно переводит кириллицу в верхний регистр...

разве upcase делает это с глюками?


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2004 18:11
Сообщение #8


Гость






FreeMan
Upcase насколько мне известно (об этом написано в документации на TP) вообще оставляет кириллицу без изменений.

Цитата
Converts a character to uppercase.

Declaration:
function UpCase(Ch: Char): Char;

Remarks:
Ch is an expression of type Char. The result of type Char is Ch converted to uppercase.
Character values not in the range a..z are unaffected.


Сообщение отредактировано: volvo - 29.11.2004 18:12
 К началу страницы 
+ Ответить 
Milena
сообщение 29.11.2004 18:18
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский

Репутация: -  0  +


спасибо ...
но я так думаю, что мнеж все же придется работать со стракой посимвольно, т.е. его элементы будут типа char, ведь у меня может на входе быть громадный текст и весь его надо будет обработать. Что-то только я не понимаю как с символами работать....Может кинить какой-нибудь примерчик , ну чтоб я хоть посмотрела...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2004 18:22
Сообщение #10


Гость






Milena
Значит так: скорее всего, текст будет в текстовом файле. Тогда нужно просто построчно читать файл и прогонять каждую строку через то, что я написал.
 К началу страницы 
+ Ответить 
FreeMan
сообщение 29.11.2004 18:30
Сообщение #11


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


volvo, без цитаты не поверил бы, thanks. Щас сяду писать UpCase :D


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Jahnerus
сообщение 29.11.2004 18:31
Сообщение #12


Уникальный
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  2  +


Чтобы заменить русские буквы на большие в DOS кодировке проще всего сделать это самому ... ручками ...
Можно задать две строки a='абвгд...' b='АБВГД...' и заменять a[i] на b[i]


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2004 18:31
Сообщение #13


Гость






Тогда так:
Код

Function CheckStr(s: String): String;
var
i, p: byte;
count: integer;
curr_p: integer;
begin
curr_p := 1;
repeat
  p := pos('.', copy(s, curr_p, length(s)));
  if p > 0 then
    begin
      count := 0; i := curr_p + p;
      while s[i] = ' ' do
        begin
          inc(count); inc(i)
        end;
      if count > 2 then s[i] := upcase(s[i])
    end;
  curr_p := i;
until p = 0;
CheckStr := s;
end;

Var f, fOut: text;
s: string;
Begin
 assign(f, 'mytext.txt');
 reset(f);
 assign(fOut, 'newtext.txt');
 rewrite(fOut);
 while not seekeof(f) do
   begin
     readln(f, s);
     s := CheckStr(s);
     { Полученную строчку можно вывести на экран, а можно записывать в другой файл...}
     WriteLn(fOut, s);
   end;
 Close(fOut);
 Close(f);
End.


Сообщение отредактировано: volvo - 29.11.2004 18:37
 К началу страницы 
+ Ответить 
Jahnerus
сообщение 29.11.2004 18:36
Сообщение #14


Уникальный
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  2  +


Можно попробовать так
Код
function upcase_rus(var Ch:char):char;
const
 a='абвгд';{весь алфавит до конца!!!}
 b='АБВГД';
begin
 upcase_rus:=b[pos(ch,a)];
end;


Сообщение отредактировано: Jahnerus - 29.11.2004 18:38


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2004 18:37
Сообщение #15


Гость






Jahnerus
Можно сделать гораздо удобнее:
Код

Function UpCase(Ch:Char):Char;
Begin
Case Ch Of
 'a'..'z':UpCase:=Chr(Ord(Ch)-$20);
 'а'..'п':UpCase:=Chr(Ord(Ch)-$20);
 'р'..'я':UpCase:=Chr(Ord(Ch)-$50);
Else
   UpCase := Ch
End
End;

© Oleg_Z

Сообщение отредактировано: volvo - 29.11.2004 18:48
 К началу страницы 
+ Ответить 
GoodWind
сообщение 29.11.2004 18:42
Сообщение #16


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


Цитата
Можно сделать гораздо удобнее:

ИМХО, идеальный вариант


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Milena
сообщение 29.11.2004 18:49
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский

Репутация: -  0  +


я это сделала примерно так как VOLVO...спасибо ребята. Вы мне очень помогли.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Milena
сообщение 30.11.2004 13:14
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский

Репутация: -  0  +


Плиз проверьте прогу...читаю файл по символьно...если делать без проверки на конец файла (not eof),обрабатывается тока одна строка....а с проверкой на конец файла прога зацикливается....
Вот код:
Код

program Verhnii_registr;
uses crt;

var
ch: char;
i : byte;
count:integer;
fin,fout:text;

Function UpStr(S:char):char; {перевод строки в верхний регистр}
Var I:Byte;
Begin

if  S in ['a'..'z']
   then S := UpCase(S)
   else
       begin
       if S in ['а'..'п']
       then

           S:=Chr(Ord(S)-$20)
       else if S in ['р'..'я']
            then S:=Chr(Ord(S)-$50);
       end;

UpStr:=S;
end;


begin
   clrscr;
   assign(fin,'in.txt');
   reset(fin);
   assign(fout,'out.txt');
   rewrite(fout);
   count:=0;
   while not eof(fin) do
   while not eoln(fin) do begin
   read (fin,ch);
   if ch=' ' then  count:=count+1

   else if count>2 then begin

                   ch:= UpStr(ch);
                   count:=0;
              end;
   write(fout,ch);
   end;
   close(fin);
   close(fout);
end.


Не забывай теги [ code] [ /code]

Сообщение отредактировано: volvo - 30.11.2004 13:20
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Milena
сообщение 30.11.2004 13:26
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский

Репутация: -  0  +


Спасибо volvo, но я даж не знала про теги....теперь буду знать :-)

Добавлено (30.11.04 12:35):
Ну я и балда...такую глупую ошибку совершила :-) ....Я разобралась :-) rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.11.2004 13:35
Сообщение #20


Гость






Я немножко изменил программу. У меня отработала без проблем. Попробуй...

Код

program Verhnii_registr;
uses crt;

var
ch: char;
i : byte;
count:integer;
fin,fout:text;

Function UpStr(S:char):char; {перевод строки в верхний регистр}
Var I:Byte;
Begin

if  S in ['a'..'z']
  then S := UpCase(S)
  else
      begin
      if S in ['а'..'п']
      then

          S:=Chr(Ord(S)-$20)
      else if S in ['р'..'я']
           then S:=Chr(Ord(S)-$50);
      end;

UpStr:=S;
end;


begin
  clrscr;
  assign(fin,'in.txt');
  reset(fin);
  assign(fout,'out.txt');
  rewrite(fout);
  count:=0;
  while not eof(fin) do
  begin
  read (fin,ch);
  if ch=' ' then  count:=count+1

  else begin
   if count>2 then ch:= UpStr(ch);
   count:=0;
  end;
  write(fout,ch);
  end;
  close(fin);
  close(fout);
end.
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 14.06.2024 15:39
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"