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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 16.03.2012, 13:19   #1
Mrsqler
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 146
Вопрос Транслит текста

Тут на форуме,нашел тему о переводе с англ на рус язык.

Код:
const
 L: array[0..25] of char = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
   'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
 K: array[0..25] of char = ('ф', 'и', 'с', 'в', 'у', 'а', 'п', 'р', 'ш', 'о', 'л', 'д',
   'ь', 'т', 'щ', 'з', 'й', 'к', 'ы', 'е', 'г', 'м', 'ц', 'ч', 'н', 'я');
var
 i,j: byte;
begin
 for i := 0 to 25 do
 begin
  //Проверяем в нижнем регистре
  if Memo1.Text[1] = L[i] then
  begin
   Memo2.Text := K[i];
   Break;
  end;
  //И в верхнем тоже


  if Memo1.Text[1] = AnsiUpperCase(L[i]) then
  begin
   Memo2.Text := AnsiUpperCase(K[i]);
   Break;
  end;
 end;
end;
Но он переводит только первую букву.Т.е,если ввести ghdtn ,то он выведет просто 'п',а хотелось чтобы появилось полное слово 'привет'.Это тоже,как-то через цикл нужно делать?Никак понять не могу(
Mrsqler вне форума
Старый 16.03.2012, 13:33   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

1. оборачиваем перевод символа в функцию ( просто использовал приведенный с минимальными корректировками)
Код:
function Translit (chartxt: char): char;
var
 i,j: byte;
begin
  result:=charxt; //если вдруг нам подсунут что другое (цифру/русскую букву и т.д.) вернем ее же
 for i := 0 to 25 do
 begin
  //Проверяем в нижнем регистре
  if chartxt = L[i] then
  begin
   result := K[i];
   Break;
  end;
  //И в верхнем тоже


  if chartxt = AnsiUpperCase(L[i]) then
  begin
    result := AnsiUpperCase(K[i]);
   Break;
  end;
 end;
2. организуем работу с Memo
Код:
var
  s: string;
  j: integer;
s:=Memo1.text; //считываем весь текст в переменную
//не надо много раз мучить бедный Memo
for j:=1 to length(s) do 
  s[j]:=Translit( s[j]); // с помощью нашей функции переводим каждый символ
end;
Memo2.text:=s; //смотрим результат
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 16.03.2012 в 13:39.
evg_m вне форума
Старый 16.03.2012, 15:36   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

посмотрите, вот ТУТ я выкладывал свой вариант перевода в транслит..
Serge_Bliznykov вне форума
Старый 17.03.2012, 00:39   #4
Mrsqler
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 146
По умолчанию

Вот попробовал

Код:
function Translit (chartxt: char): char;
var
 i,j: byte;
 L:array of char;
 K:array of char;
begin
  result:=chartxt; //если вдруг нам подсунут что другое (цифру/русскую букву и т.д.) вернем ее же
 for i := 0 to 25 do
 begin
  //Проверяем в нижнем регистре
  if chartxt = L[i] then
  begin
   result := K[i];
   Break;
  end;
  //И в верхнем тоже


  if chartxt = AnsiUpperCase(L[i]) then
  begin
    result := AnsiUpperCase(K[i]);
   Break;
  end;
 end;

 var
  s: string;
  j: integer;
s:=Memo1.text; //считываем весь текст в переменную
//не надо много раз мучить бедный Memo
for j:=1 to length(s) do
  s[j]:=Translit( s[j]); // с помощью нашей функции переводим каждый символ
end;
Memo2.text:=s; //смотрим результат
end;
Появляется ошибка
[Pascal Error] Unit1.pas(53): E2010 Incompatible types: 'Char' and 'string'
Mrsqler вне форума
Старый 18.03.2012, 09:55   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
Появляется ошибка
[Pascal Error] Unit1.pas(53): E2010 Incompatible types: 'Char' and 'string'
Код:
  if chartxt = AnsiUpperCase(L[i]) then
  begin
    result := AnsiUpperCase(K[i]) [1]; //надо добавить; 
   Break;
  end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума
Старый 18.03.2012, 17:27   #6
Mrsqler
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 146
По умолчанию

А тут вроде лишний var есть.на него ругается.Убрал.После этого появилась другая ошибка [Pascal Error] Unit1.pas(71): E2029 Declaration expected but identifier 'Memo2' found
В uses вроде всё объявил.Что ему не нравится?Вот полный код:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    RadioGroup2: TRadioGroup;
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure Memo2Change(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

function Translit (chartxt: char): char;
var
 s: string;

 i,j: byte;
 L:array of char;
 K:array of char;
begin
  result:=chartxt; //если вдруг нам подсунут что другое (цифру/русскую букву и т.д.) вернем ее же
 for i := 0 to 25 do
 begin
  //Проверяем в нижнем регистре
  if chartxt = L[i] then
  begin
   result := K[i];
   Break;
  end;
  //И в верхнем тоже


  if chartxt = AnsiUpperCase(L[i]) then
  begin
    result := AnsiUpperCase(K[i]) [1];
   Break;
  end;
 end;



s:=Memo1.text; //считываем весь текст в переменную
//не надо много раз мучить бедный Memo

for j:=1 to length(s) do
     s[j]:=Translit( s[j]); // с помощью нашей функции переводим каждый символ
end;

Memo2.Text:=s; //смотрим результат
end;

end.
Mrsqler вне форума
Старый 18.03.2012, 18:44   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
unction Translit (chartxt: char): char;
var
 i,j: byte;
 L:array of char;
 K:array of char;
begin
  result:=chartxt; //если вдруг нам подсунут что другое (цифру/русскую букву и т.д.) вернем ее же
 for i := 0 to 25 do
 begin
  //Проверяем в нижнем регистре
  if chartxt = L[i] then
  begin
   result := K[i];
   Break;
  end;
  //И в верхнем тоже


  if chartxt = AnsiUpperCase(L[i]) then
  begin
    result := AnsiUpperCase(K[i]);
   Break;
  end;
 end;

end;// была забыта 
Код:
for j:=1 to length(s) do
     s[j]:=Translit( s[j]); // с помощью нашей функции переводим каждый символ
//  end; //здесь не нужно или же добавить begin в for
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума
Старый 19.03.2012, 01:47   #8
Mrsqler
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 146
По умолчанию

По-моему это бесполезно)
Теперь ему переменная s не нравится.
[Pascal Error] Unit1.pas(67): E2029 Declaration expected but identifier 's' found
Всё объявлено в начале...
Mrsqler вне форума
Старый 19.03.2012, 09:07   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject);

function Translit (chartxt: char): char;
var
 s: string;
,,,,,,
Код:
procedure  .....
..........
function Translit (chartxt: char): char;
//var
// s: string;
.........
end;

var
  s: string;
begin
  s:=...........
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума
Старый 19.03.2012, 14:36   #10
Mrsqler
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 146
По умолчанию

Опять не то)Всем спасибо.Тему можно закрывать)
Mrsqler вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транслит AllX Общие вопросы Delphi 2 14.05.2011 20:58
Транслит John34 Microsoft Office Excel 1 19.05.2009 15:57
Транслит как сделать? Naposaram PHP 13 05.02.2009 14:08
Программа транслит [Smarik] Паскаль, Turbo Pascal, PascalABC.NET 5 06.02.2008 07:29