Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMemo, Обращение к отдельным словам текста 
:(
    Опции темы
Khan
Дата 6.11.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте! У меня yа форме два Memo, нужно брать текст из Memo1 по словам, преобразовать и поместить в Memo2. Т.е.
- берем первое слово текста из Memo1,
- преобразовываем его,
- помещаем в Memo2;
- берем следующее слово из Memo1,
...
...
и так до конца текста.

Вопрос в следующем: Я раньше с Memo толком не работал, и не знаю как "брать" отдельные слова из его текста? Заранее благодарю.
PM MAIL   Вверх
Grom
Дата 6.11.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

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



Khan, только парсить Memo на пробелы и выдирать слова.
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
Rodman
Дата 6.11.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



ну если ты из строки можешь выбрать слова то обьяви переменную и
Код

MyVar=Memo1->Text


так весь текст занесешь в нее и разбирай

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Romikgy
Дата 6.11.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Khan @  6.11.2006,  13:40 Найти цитируемый пост)
- преобразовываем его,

как?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 6.11.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если можно, хотелось бы пример поподробней. Romikgy, преобразовываем (шифруем, например) не столь важно пока, суть вопроса: как по очереди выбирать слова из текста Memo?
PM MAIL   Вверх
Romikgy
Дата 6.11.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Khan, тогда зачем по словам?
и что в твоем понимание слово?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
apook
Дата 6.11.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



strtok-ом по пробелам разбей строку
Цитата

Код

MyVar=Memo1->Text




--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Grom
Дата 6.11.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

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



Khan, ну я ж сказал... вот тебе примерный код
Код

#include "StrUtils.hpp"
.
.
.
int i,j;
i=0;
j=0;
AnsiString Word,N;
N=Memo1->Text;
do
{
i=N.Pos(" ");
 if (i!=0)
  {
   Word=N.SubString(1,i);
   //тут твоя шифрация слова которое хранится в Word
   N=N.SubString(i+1,70000);
  }
  else
  {
   Word=N;
   //тут твоя шифрация слова которое хранится в Word
  }
}
while (i!=0);

правда последнее слово берётся в конце с ентором. как его убрать - не додумался.

Это сообщение отредактировал(а) Grom - 6.11.2006, 21:51
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
apook
Дата 6.11.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Непонятно надо преобразовать слова в строке при этом строку оставит или
именно разбить на слова

для второго случая:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//int Size = Memo1->Text.Length();

int Size = Memo1->GetTextLen();
Size++;
char *MyVar=new char[Size];
Memo1->GetTextBuf(MyVar, Size);

strtok(MyVar, " \n\0");
for(;  ;)
{
if(MyVar)
{
        //Здесь что нибудь зделал
        //..
        Memo2->Lines->Add(MyVar);
        }
else    break;
MyVar =strtok(NULL, " \n\0");
        }
}



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Romikgy
Дата 6.11.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



имхо можно сделать проще через TStringList


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 7.11.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Прошу прощения, если я непонятно разъясняю проблему. Вообще у меня идея такая. Я нашел программу на C++ шифрование треугольником Паскаля:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...
Ровно k букв в слове -> ровно k числел в выбранной строке треугольника Паскаля:
_с т о л_    <- слово
  1 3 3 1     <- строка в треугольнике паскаля
Закодированное слово будет 'с'+1, 'т'+3, 'о'+3, 'л'+1, то есть "тхсм" . Вот код программы:
Код

#include <conio.h>
#include <stdio.h>
#include <string.h>

char abc[]="АБВГДЕЁЖЗИЙКЛМНОПРСТУЙХЦЧШЩЪЫЬЭЮЯабвгдеёжзиклмнопрстуфхцчшщъыьэюя\0";
int m[20][20];

void build()               //эта процедура заполняет треугольник Паскаля
{
for(int t=0; t<20; t++)
{
m[0][t]=1;
m[t][0]=1;
}
for(t=1; t<19; t++)
for(int x=1; x<=t; x++)
m[t-x+1][x]=m[t-x][x]+m[t-x+1][x-1];
}

void print()                     //эта проседура выводит его на экран
{
for(int x=0; x<20; x++)
{
for(int y=0; y<20; y++)
if(x+y<13)
printf("%3d ", m[x][y]);
printf("\n");
}
}

void getWord(char *str, char *s)       //следующая процедура ищет в строке str слово (до первого пробела ''), записывает его в s, и удаляет из str все слово вместе с пробелом
{
for(int t=0; t<strlen(str); t++)
if(str[t]!=' ')s[t]=str[t];else break;
for(int i=t+1; i<strlen(str); i++)
str[i-t-1]=str[i];
str[i-t-1]=0;
s[t]=0;
}

int find(char *str, char ch) //эта функция ищет символ ch в строке str и возвращает его положение, либо возвр. -1 если символ не найден.
{
for(int t=0; t<strlen(str); t++)
if(str[t]==ch)return t+1;
return -1;
}

void encode(char *str) // эта процедура, собственно, производит шифрование
{
char s[50], res[50];
res[0]=0;
int len=0;
int a,b,c;
for(;;)
{
getWord(str, s);
len=strlen(s);
if(strcmp(s, "")==0)break;
for(int t=0; t<len; t++)
{
a=find(abc,s[t]);
b=a+m[len-t-1][t];
if((a<=33 && b>33)||(a>33)&&(b>66))b-=33;
s[t]=abc[b-1];
}
if(res[0]!=0)strcat(res, " ");
strcat(res, s);
}
printf("Encoded string is \"%s\"", res);
}

void main()
{
clrscr();
build();
print();
encode("");
getch();
}

Я хочу сделать эту программу на Buildere, только потом внесу изменения в функцию шифрования. В Memo1 исходный текст, шифруем треугольником Паскаля и помещаем шифрованный текст в Memo2.
Напимер, исходный текст в Memo1:
Я из лесу вышел
Был сильный мороз

Жмем Button и шифрованный текст в Memo2:
А йи мзфф гяюим
Вэм тоъпьбк нтцти

 smile   smile  please  smile 
PM MAIL   Вверх
Rodman
Дата 7.11.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Код

#include <conio.h>
#include <stdio.h>
#include <string.h>
char abc[]="АБВГДЕЁЖЗИЙКЛМНОПРСТУЙХЦЧШЩЪЫЬЭЮЯабвгдеёжзиклмнопрстуфхцчшщъыьэюя\0";
int m[20][20];
void build()               //эта процедура заполняет треугольник Паскаля
{for(int t=0; t<20; t++)
 {m[0][t]=1;
   m[t][0]=1;
 }
 for(t=1; t<19; t++)
    for(int x=1; x<=t; x++)
        m[t-x+1][x]=m[t-x][x]+m[t-x+1][x-1];
}

void printCode()                     //эта проседура выводит его на экран
{ for(int x=0; x<20; x++)
   { for(int y=0; y<20; y++)
          if(x+y<13)
             Memo->Lines->add(m[x][y]);
    }
}

void getWord(char *str, char *s)       //следующая процедура ищет в строке str слово (до первого пробела ''), записывает его в s, и удаляет из str все слово вместе с пробелом
{for(int t=0; t<strlen(str); t++)
       if(str[t]!=' ')
              s[t]=str[t];
       else 
              break;
       for(int i=t+1; i<strlen(str); i++)
            str[i-t-1]=str[i];
       str[i-t-1]=0;
       s[t]=0;
}

int find(char *str, char ch) //эта функция ищет символ ch в строке str и возвращает его положение, либо возвр. -1 если символ не найден.
{  for(int t=0; t<strlen(str); t++)
        if(str[t]==ch)
           return t+1;
        return -1;
}

void encode(char *str) // эта процедура, собственно, производит шифрование
{ char s[50], res[50];
   res[0]=0;
   int len=0;
   int a,b,c;
   for(;;)
   { getWord(str, s);
      len=strlen(s);
      if(strcmp(s, "")==0)
            break;
      for(int t=0; t<len; t++)
      { a=find(abc,s[t]);
         b=a+m[len-t-1][t];
         if((a<=33 && b>33)||(a>33)&&(b>66))
              b-=33;
         s[t]=abc[b-1];
     }
     if(res[0]!=0)strcat(res, " ");
         strcat(res, s);
   }
  Memo2->Lines->text=res;
}

//здесь определи нажатие клавиши и в нем этот текст
{ build();
   printCode();
   encode(Memo->Text);
}


Добавлено @ 13:23 
я не проверял, писал в IE
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Khan
Дата 8.11.2006, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Rodman, вылетают такие сообщения:

  [C++ Warning] Unit1.cpp(42): W8012 Comparing signed and unsigned values
  [C++ Warning] Unit1.cpp(47): W8012 Comparing signed and unsigned values
  [C++ Warning] Unit1.cpp(54): W8012 Comparing signed and unsigned values
  [C++ Error] Unit1.cpp(90): E2034 Cannot convert 'AnsiString' to 'char *'
  [C++ Error] Unit1.cpp(90): E2342 Type mismatch in parameter 'str' (wanted 'char *', got 'AnsiString')


Первые три предупреждения на строки типа:
Код

for(int t=0; t<strlen(str); t++)


Последние два на строку:
Код

encode(Form1->Memo1->Text);

 smile 
PM MAIL   Вверх
Rodman
Дата 8.11.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Все ошибки на не соответствие типов... я же говорил, что не проверял...

Сделай приведение типов и должно пойти...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Khan
Дата 8.11.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Сделай приведение типов и должно пойти... 


 smile   smile 
 
PM MAIL   Вверх
Alexeis
Дата 8.11.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Вот пример приведения типов double -> int
Код

  int t1;
  double t2;
  t2 = 4.7;
  t1 = int(t2);



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Khan
Дата 9.11.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Никак не получается с задачкой, помогите, пожалуйста  smile   
PM MAIL   Вверх
Romikgy
Дата 9.11.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



что длать если слово будет слишком длинное? как кодировать буквы по середине?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 9.11.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Romikgy , 
Цитата

что длать если слово будет слишком длинное?
я думаю слишком длинных слов не будет, там треугольник на 12-13 букв - больше и не нужно. 
Цитата
как кодировать буквы по середине?
 В смысле?
PM MAIL   Вверх
Romikgy
Дата 9.11.2006, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



для 10 букв треугольник
Код

1    1    1    1    1    1    1    1    1    1
        1    2    3    4    5    6    7    8    9
        1    3    6    10    15    21    28    36
        1    4    10    20    35    56    84
        1    5    15    35    70    126
        1    6    21    56    126
        1    7    28    84
        1    8    36
        1    9
        1

уже числа порядка 126 а дальше больше будет, и что будет если я к букве "я" числовое значение 255 прибавишь 126 ?

Добавлено @ 22:56 
user posted image
а вот до 14 символов
+3432 где такой символ брать?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 10.11.2006, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здесь в программе предусмотрено было так:
Код

void encode(char *str) 
{
//объявляем переменные 
   char s[50], res[50]; 
   res[0]=0; 
   int len=0; 
   int a,b,c; 
//делаем бесконечный цикл
   for(;;) 
   { 
      getWord(str, s);                 //выделяем очередное слово
      len=strlen(s); 
      if(strcmp(s, "")==0)break; //если пусто, то прерываем цикл
      for(int t=0; t<len; t++)      //цикл, в котором зашифровывется слово
      { 
         a=find(abc,s[t]);            //ищем символ в алфавите
         b=a+m[len-t-1][t];         //прибавляем соответствующее число из треугольника паскаля
         //если выходим за рамки алфавита, то делаем так, чтобы после "я" шла "а"
         if((a<=33 && b>33)||(a>33)&&(b>66))b-=33; 
         s[t]=abc[b-1];               //записываем соответствующюю букву
      } 
      if(res[0]!=0)strcat(res, "_"); 
      strcat(res, s);                   //приписываем это слово к конечной строке
   } 
   printf("Encoded string is \"%s\"", res); //выводим конечную строку
} 



PM MAIL   Вверх
Khan
Дата 10.11.2006, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Romikgy, получается, что число, например 3432, нужно делить на 33. 
3432/33=104
104/33, а остаток =5 прибавляем к "я", в итоге получится "д". Только не знаю как это в коде будет.
В принципе, если сложности с треугольником Паскаля, то можно привести в пример какую-нибудь другую функцию шифрования, так как мне нужно будет придумать и использовать алгоритм шифрования с открытым ключем. У меня загвоздка в том, как шифровать текст из Memo1 в Memo2, хотелось бы посмотреть на примере как разделяются слова, шифруются и заносятся в Memo.  smile   smile 
PM MAIL   Вверх
Romikgy
Дата 10.11.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



а большие буквы? что с ними ? что делать если будут в тексте латинские буквы , цифры?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 11.11.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Действительно... Я думаю, что нужно предусмотреть только для русского текста. Это учебная программа, поэтому наверно сильно заморачиваться не надо, главное чтобы работала и был более менее нормальный алгоритм шифрования. Про прописные и про цифры я что-то даже не знаю, но прописные буквы были предусмотрены в представленной программе на C++ -  в начале объявлен одномерный массив. 
PM MAIL   Вверх
Romikgy
Дата 12.11.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



последний вопрос ты в чем делаешь в C++ Builder ? или в чем то другом? консольное приложение или с формами?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 12.11.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, я делаю в C++ Builder с формами, иначе зачем бы я говорил о TMemo. 
PM MAIL   Вверх
Romikgy
Дата 14.11.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



переменые 
Код

long mas[21][21]={0};
String code_pack="АБВГДЕЁЖЗИЙКЛМНОПРСТУЙХЦЧШЩЪЫЬЭЮЯабвгдеёжзиклмнопрстуфхцчшщъыьэюя0123456789";


инициализация
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
int j,i;
for (i=1;i<=20;i++)
{
 for (j=0;j<=i;j++)
 {
  mas[i][j]=((long)c(j,i))%code_pack.Length();
 }
}
}

ф_ции
Код


ulong fact(ulong x)
{
 ulong i=1;
 if (x)
 {
    if (x==1) return i;
    for (ulong j=2;j<=x;j++)
     i*=j;

 }
 
 return i;
}

ulong p(int n,int k)
{
ulong t=1;

 for (int i=n;i<=k;i++)
 t*=i;
 return t;
}

ulong c(int n, int k)
{
 ulong temp=1;
 if (n==0 || k==0 ||n>=k ) return 1;
 if (n>(k-n))
 {
   temp=p(n+1,k)/(fact(k-n));
 }
 else
 if ((k-n)>(n))
 {
   temp=p((k-n)+1,k)/(fact(n));
 }
 else
 temp=p(n+1,k)/fact(k-n);
 return temp;
}

String code_word(String str)
{
  int i,q,w;
  String s;
  s=str;
  w=str.Length();
  for (i=1;i<=str.Length();i++)
  {
    q=code_pack.Pos(s[i])-1;

    q+=mas[w-1][i-1];
    q%= code_pack.Length();

    s[i]=code_pack[q+1];
  }
  return s;
}

String code_text(String str)
{
  String sx1,sx2;
  TStringList * sl;
  TReplaceFlags rpfl;
  int i;
  rpfl<<rfReplaceAll;

  sx1=str;
  sx1=StringReplace(sx1,"\t",cl,rpfl);
  sx1=StringReplace(sx1," ",cl,rpfl);
  sx1=StringReplace(sx1,",",cl,rpfl);
  sx1=StringReplace(sx1,".",cl,rpfl);
  sx1=StringReplace(sx1,"!",cl,rpfl);
  sx1=StringReplace(sx1,"?",cl,rpfl);


  sl= new TStringList();
   sl->Text=sx1;
   for (i=sl->Count-1;i>=0;i--)
   {
     if (sl->Strings[i]=="") sl->Delete(i);
   }
   sx1=str;
   for  (i=sl->Count-1;i>=0;i--)
   {
    sx2=code_word(sl->Strings[i]);
    sx1=StringReplace(sx1,sl->Strings[i],sx2,rpfl);
   }
  delete sl;
  return sx1;
}

вызов
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Memo2->Text=code_text(Memo1->Text);
}



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 15.11.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Romikgy, спасибо огромное, что ты отзываешься на мои просьбы и так сильно помогаешь! Ты, видимо, проверял этот код, но у меня что-то не работает, может я что-то не то делаю, но у меня выдает такие, Messages:

[C++ Error] Unit1.cpp(25): E2268 Call to undefined function 'c'
[C++ Error] Unit1.cpp(30): E2141 Declaration syntax error


Код следующий, как ты и написал:
Код

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
long mas[21][21]={0};
String code_pack="АБВГДЕЁЖЗИЙКЛМНОПРСТУЙХЦЧШЩЪЫЬЭЮЯабвгдеёжзиклмнопрстуфхцчшщъыьэюя0123456789";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
int j,i;
for (i=1;i<=20;i++)
{
 for (j=0;j<=i;j++)
 {
  mas[i][j]=((long)c(j,i))%code_pack.Length();
 }
}
}
//---------------------------------------------------------------------------
ulong fact(ulong x)
{
 ulong i=1;
 if (x)
 {
    if (x==1) return i;
    for (ulong j=2;j<=x;j++)
     i*=j;

 }
 
 return i;
}
//---------------------------------------------------------------------------

ulong p(int n,int k)
{
ulong t=1;

 for (int i=n;i<=k;i++)
 t*=i;
 return t;
}
//---------------------------------------------------------------------------

ulong c(int n, int k)
{
 ulong temp=1;
 if (n==0 || k==0 ||n>=k ) return 1;
 if (n>(k-n))
 {
   temp=p(n+1,k)/(fact(k-n));
 }
 else
 if ((k-n)>(n))
 {
   temp=p((k-n)+1,k)/(fact(n));
 }
 else
 temp=p(n+1,k)/fact(k-n);
 return temp;
}
//---------------------------------------------------------------------------

String code_word(String str)
{
  int i,q,w;
  String s;
  s=str;
  w=str.Length();
  for (i=1;i<=str.Length();i++)
  {
    q=code_pack.Pos(s[i])-1;

    q+=mas[w-1][i-1];
    q%= code_pack.Length();

    s[i]=code_pack[q+1];
  }
  return s;
}
//---------------------------------------------------------------------------

String code_text(String str)
{
  String sx1,sx2;
  TStringList * sl;
  TReplaceFlags rpfl;
  int i;
  rpfl<<rfReplaceAll;

  sx1=str;
  sx1=StringReplace(sx1,"\t",cl,rpfl);
  sx1=StringReplace(sx1," ",cl,rpfl);
  sx1=StringReplace(sx1,",",cl,rpfl);
  sx1=StringReplace(sx1,".",cl,rpfl);
  sx1=StringReplace(sx1,"!",cl,rpfl);
  sx1=StringReplace(sx1,"?",cl,rpfl);


  sl= new TStringList();
   sl->Text=sx1;
   for (i=sl->Count-1;i>=0;i--)
   {
     if (sl->Strings[i]=="") sl->Delete(i);
   }
   sx1=str;
   for  (i=sl->Count-1;i>=0;i--)
   {
    sx2=code_word(sl->Strings[i]);
    sx1=StringReplace(sx1,sl->Strings[i],sx2,rpfl);
   }
  delete sl;
  return sx1;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo2->Text=code_text(Memo1->Text);
}
//---------------------------------------------------------------------------

Что я сделал не так, что у меня не компилится? И если можно, хоть небольшие комментарии...  smile  
PM MAIL   Вверх
Rodman
Дата 15.11.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Код

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
long mas[21][21]={0};
String code_pack="АБВГДЕЁЖЗИЙКЛМНОПРСТУЙХЦЧШЩЪЫЬЭЮЯабвгдеёжзиклмнопрстуфхцчшщъыьэюя0123456789";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
ulong c(int n, int k)
{
 ulong temp=1;
 if (n==0 || k==0 ||n>=k ) return 1;
 if (n>(k-n))
 {
   temp=p(n+1,k)/(fact(k-n));
 }
 else
 if ((k-n)>(n))
 {
   temp=p((k-n)+1,k)/(fact(n));
 }
 else
 temp=p(n+1,k)/fact(k-n);
 return temp;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int j,i;
for (i=1;i<=20;i++)
{
 for (j=0;j<=i;j++)
 {
  mas[i][j]=((long)c(j,i))%code_pack.Length();
 }
}
}
//---------------------------------------------------------------------------
ulong fact(ulong x)
{
 ulong i=1;
 if (x)
 {
    if (x==1) return i;
    for (ulong j=2;j<=x;j++)
     i*=j;
 }
 
 return i;
}
//---------------------------------------------------------------------------
ulong p(int n,int k)
{
ulong t=1;
 for (int i=n;i<=k;i++)
 t*=i;
 return t;
}
//---------------------------------------------------------------------------

String code_word(String str)
{
  int i,q,w;
  String s;
  s=str;
  w=str.Length();
  for (i=1;i<=str.Length();i++)
  {
    q=code_pack.Pos(s[i])-1;
    q+=mas[w-1][i-1];
    q%= code_pack.Length();
    s[i]=code_pack[q+1];
  }
  return s;
}
//---------------------------------------------------------------------------
String code_text(String str)
{
  String sx1,sx2;
  TStringList * sl;
  TReplaceFlags rpfl;
  int i;
  rpfl<<rfReplaceAll;
  sx1=str;
  sx1=StringReplace(sx1,"\t",cl,rpfl);
  sx1=StringReplace(sx1," ",cl,rpfl);
  sx1=StringReplace(sx1,",",cl,rpfl);
  sx1=StringReplace(sx1,".",cl,rpfl);
  sx1=StringReplace(sx1,"!",cl,rpfl);
  sx1=StringReplace(sx1,"?",cl,rpfl);
  sl= new TStringList();
   sl->Text=sx1;
   for (i=sl->Count-1;i>=0;i--)
   {
     if (sl->Strings[i]=="") sl->Delete(i);
   }
   sx1=str;
   for  (i=sl->Count-1;i>=0;i--)
   {
    sx2=code_word(sl->Strings[i]);
    sx1=StringReplace(sx1,sl->Strings[i],sx2,rpfl);
   }
  delete sl;
  return sx1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo2->Text=code_text(Memo1->Text);
}
//------------------

по правилу тело функции (процедуры) должно находиться до использования...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Romikgy
Дата 15.11.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Khan, напиши все мои ф_ции выше ф_ции 
Цитата(Khan @  15.11.2006,  10:11 Найти цитируемый пост)
void __fastcall TForm1::FormCreate(TObject *Sender)

прибл так
Код

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
long mas[21][21]={0};
String code_pack="АБВГДЕЁЖЗИЙКЛМНОПРСТУЙХЦЧШЩЪЫЬЭЮЯабвгдеёжзиклмнопрстуфхцчшщъыьэюя0123456789";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

ulong fact(ulong x)
{
 ulong i=1;
 if (x)
 {
    if (x==1) return i;
    for (ulong j=2;j<=x;j++)
     i*=j;

 }
 
 return i;
}
//---------------------------------------------------------------------------

ulong p(int n,int k)
{
ulong t=1;

 for (int i=n;i<=k;i++)
 t*=i;
 return t;
}
//---------------------------------------------------------------------------

ulong c(int n, int k)
{
 ulong temp=1;
 if (n==0 || k==0 ||n>=k ) return 1;
 if (n>(k-n))
 {
   temp=p(n+1,k)/(fact(k-n));
 }
 else
 if ((k-n)>(n))
 {
   temp=p((k-n)+1,k)/(fact(n));
 }
 else
 temp=p(n+1,k)/fact(k-n);
 return temp;
}
//---------------------------------------------------------------------------

String code_word(String str)
{
  int i,q,w;
  String s;
  s=str;
  w=str.Length();
  for (i=1;i<=str.Length();i++)
  {
    q=code_pack.Pos(s[i])-1;

    q+=mas[w-1][i-1];
    q%= code_pack.Length();

    s[i]=code_pack[q+1];
  }
  return s;
}
//---------------------------------------------------------------------------

String code_text(String str)
{
  String sx1,sx2;
  TStringList * sl;
  TReplaceFlags rpfl;
  int i;
  rpfl<<rfReplaceAll;

  sx1=str;
  sx1=StringReplace(sx1,"\t",cl,rpfl);
  sx1=StringReplace(sx1," ",cl,rpfl);
  sx1=StringReplace(sx1,",",cl,rpfl);
  sx1=StringReplace(sx1,".",cl,rpfl);
  sx1=StringReplace(sx1,"!",cl,rpfl);
  sx1=StringReplace(sx1,"?",cl,rpfl);


  sl= new TStringList();
   sl->Text=sx1;
   for (i=sl->Count-1;i>=0;i--)
   {
     if (sl->Strings[i]=="") sl->Delete(i);
   }
   sx1=str;
   for  (i=sl->Count-1;i>=0;i--)
   {
    sx2=code_word(sl->Strings[i]);
    sx1=StringReplace(sx1,sl->Strings[i],sx2,rpfl);
   }
  delete sl;
  return sx1;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
int j,i;
for (i=1;i<=20;i++)
{
 for (j=0;j<=i;j++)
 {
  mas[i][j]=((long)c(j,i))%code_pack.Length();
 }
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo2->Text=code_text(Memo1->Text);
}
//---------------------------------------------------------------------------



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 15.11.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот эта ошибка: [C++ Error] Unit1.cpp(30): E2141 Declaration syntax error все равно остается и ссылается на первую строку функций

Код

ulong fact(ulong x)
...

Если я ее комментарю, то ошибка идет на следующую 
Код

ulong p(int n,int k)
...

и так далее
Код

ulong c(int n, int k)
...

Эта же ошибка, насколько я знаю, говорит о нехватке точки с запятой smile 
PM MAIL   Вверх
dumb
Дата 16.11.2006, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



в Unit1.h добавь строчку:
Код

typedef unsigned long ulong;

PM MAIL   Вверх
Romikgy
Дата 16.11.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



почти smile
только я юзал так
Код

#define ulong unsigned __int64
#define cl      "\r\n"



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 17.11.2006, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, Romikgy, запустилась, но при кодировке перемешивает строчные буквы, прописные и цифры, т.е. не так как задумывалось 
А как на счет небольших комментариев  smile   smile 
PM MAIL   Вверх
Romikgy
Дата 17.11.2006, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Khan @  17.11.2006,  11:31 Найти цитируемый пост)
но при кодировке перемешивает строчные буквы, прописные и цифры, т.е. не так как задумывалось 

А где было об этом сказано?

Цитата(Khan @  17.11.2006,  11:31 Найти цитируемый пост)
А как на счет небольших комментариев

хех раскажи покажи да дай попробывать (с) молва


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Crut
Дата 4.1.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 27.11.2007
Где: Воронеж

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



 /прошу модеров удалить это сообщение/
/незнаю как/

Это сообщение отредактировал(а) Crut - 4.1.2008, 14:28
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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