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

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

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

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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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


-
****

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

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


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


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


Новичок
*

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

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


Ну типа я этим же и руководствовалась вот уже целый час в попытках что-нибудь написать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


-
****

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

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


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

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


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


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


Гость






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


-
****

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

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


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


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


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

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

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


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


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


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

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

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


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


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


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


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

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

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


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

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


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


Новичок
*

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

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


я это сделала примерно так как VOLVO...спасибо ребята. Вы мне очень помогли.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

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

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


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

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

 





- Текстовая версия 26.04.2024 5:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name