Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2013, 14:38   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

ViktorR
Цитата:
для русских букв (кириллицы) в Дос кодировке (она же OEM, она же 866) такой способ работать не будет
Кроме того, нужно все же делать битовые операции, а не прибавление, т.к. прибавление сдвинет символ в любом случае. Но и битовая операция творит странные вещи с символами, которые не являются буквами, что, имхо, нехорошо.

igagogi, у Вас функции требуют параметров, да и результат нужно печатать.
Код:
program pr;
uses crt, MyString;
var i:integer;
    c:string;
    l:boolean;
    n1,n2:byte;
begin
  repeat
    writeln;
    writeln('vvedite nomer funcsiyi : 1 - CHARSORT,2 - CHARODD,3 - ISLOWER');
    readln(i);
    case i of
      1:begin
        readln(c);
        readln(n1,n2,L);//проверьте, можно ли считывать булеву переменную
        writeln(CHARSORT(c,n1,n2,L));
      end;
      2:begin
        readln(c);
        writeln(CHARODD(c));
      end;
      3:begin
        readln(c);
        writeln(ISLOWER(c));
      end;
    end;
    if #27=readkey then break;
  until false;
end.
Сам модуль:
Код:
unit MyString;

interface

function CHARSORT(c: STRING; n1, n2: byte; l: boolean): STRING;
function CHARODD(c: STRING): STRING;
function ISLOWER(c: STRING): boolean;

implementation

function CHARSORT(c: STRING; n1, n2: byte; l: boolean): STRING;
var
  i, j: integer;
  res: string;
  temp: char;
begin
  CHARSORT := c;
  if (n2 > length(c)) or (n2 < 1) or (n1 < 1) or (n1 + n2 - 1 > length(c)) then
    exit;
  res := c;
  for i := n2 to n2 + n1 - 2 do
    for j := i + 1 to n2 + n1 - 1 do
      if (res[i] > res[j]) and l or (res[i] < res[j]) and (not l) then
      begin
        temp := res[j];
        res[j] := res[i];
        res[i] := temp;
      end;
  CHARSORT := res;
end;

function CHARODD(c: STRING): STRING;
var
  i: integer;
  rez: string;
begin
  rez := '';
  i := 1;
  while i <= length(c) do
  begin
    rez := rez + c[i];
    inc(i, 2);
  end;
  CHARODD := rez
end;

Function ISLOWER(c: STRING): boolean;
begin
  ISLOWER := (length(c) <> 0) and (c[1] in ['a' .. 'z']);
  // вписать все нужные буквы
end;

end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 06.01.2013 в 15:03.
BDA вне форума Ответить с цитированием
Старый 06.01.2013, 19:02   #12
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,371
По умолчанию

BDA
И тут я с Вами вновь согласился. Понял поздновато, что прибавление годится только если заведомо известно, что символ из верхнего регистра и, соответственно, для вычитания...

Serge_Bliznykov
Цитата:
для русских букв (кириллицы) в Дос кодировке (она же OEM, она же 866) такой способ работать не будет.
Соглашусь, что возможно есть такая кодировка, где способ побитовой обработки не сработает. В данном случае я проверял на FPC, с 866 кодировкой. Коды символов кириллицы менялись верно.
В далекие времена в Си и ТР тоже работало.


В общем, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка структуры данных, алгоритма, программы smurf Помощь студентам 0 23.10.2012 19:35
разработка алгоритма Shaggrath Помощь студентам 6 05.01.2012 10:57
Как избежать конфликта строковых функций? Trust_357 Visual C++ 2 09.04.2011 15:09
Разработка программ обработки символьных и строковых данных(блок-схема) Stellar_light Помощь студентам 0 27.12.2010 20:50
нужен аналог строковых функций DOS Общие вопросы C/C++ 4 05.01.2008 00:05