Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMemo, Обращение к отдельным словам текста 
:(
    Опции темы
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   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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