![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Данная программа выдает ошибку, связанную с функцией, помогите разобраться, подобный код запускал в PascalABC, всё работает нормально, Делфи же что-то не нравится!
Код:
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, XPMan;
type
TFormMain = class(TForm)
LabeledEdit_Source: TLabeledEdit;
LabeledEdit_Result: TLabeledEdit;
Button_Encode: TButton;
Button_Decode: TButton;
XPManifest: TXPManifest;
procedure Button_EncodeClick(Sender: TObject);
procedure Button_DecodeClick(Sender: TObject);
private
function Encode(c: Char): Char;
function Decode(c: Char): Char;
{ Private declarations }
public
{ Public declarations }
end;
var
FormMain: TFormMain;
implementation
{$R *.dfm}
const
ij: array[1..8,1..8] of Char =
(('Б', 'б', 'Н', 'н', 'Е', 'е', 'О', 'о'),
('Ь', 'ь', 'Г' ,'г', '3', 'з', 'Й', 'й'),
('М', 'м', 'С', 'с', 'У', 'у', 'X', 'х'),
('Ч', 'ч', 'Щ', 'щ', 'Ъ', 'ъ', 'Ю', 'ю'),
('А', 'а', 'Д', 'д', 'Р', 'р', 'Л', 'л'),
('В', 'в', 'Ж' ,'ж', 'и', 'и', 'К', 'к'),
('П', 'п', 'Т', 'т', 'Ф', 'ф', 'Х', 'х'),
('Ш', 'ш', 'Ы', 'ы', 'Э', 'э', 'Я', 'я'));
Marks: set of char = ['.', ',', '!', '?', ':', ';', '(', ')', '"', 'ё', 'Ё', '-'];
var Text: String; k: Integer;
function TFormMain.Encode(c: Char): Char;
var
i,j: Integer;
begin
for i:=1 to 8 do
for j:=1 to 8 do
if (c = ij[i,j]) then
begin
if (i <> 8)
then Encode := ij[i+1,j]
else Encode := ij[1,j];
end;
if (c in Marks) then Encode := c;
end;
function TFormMain.Decode(c: Char): Char;
var
i,j: Integer;
begin
for i:=1 to 8 do
for j:=1 to 8 do
if (c = ij[i,j]) then
begin
if (i <> 1)
then Decode := ij[i-1,j]
else Decode := ij[8,j];
end;
if (c in Marks) then Decode := c;
end;
procedure TFormMain.Button_EncodeClick(Sender: TObject);
begin
Text := LabeledEdit_Source.Text;
for k := 1 to Length(Text) do Text[k] := Encode(Text[k]);
LabeledEdit_Result.Text := Text;
end;
procedure TFormMain.Button_DecodeClick(Sender: TObject);
begin
Text := LabeledEdit_Source.Text;
for k := 1 to Length(Text) do Text[k] := Decode(Text[k]);
LabeledEdit_Result.Text := Text;
end;
end.А вот ошибка: [Error] UnitMain.pas: Left side cannot be assigned to Возникает в двух местах, я их подчеркнул! Последний раз редактировалось Admin, 16.02.2012 в 20:50. |
|
#2
|
||||
|
||||
|
Не вижу, где что подчёркнуто.
В Delphi вместо названия функции для результата надо использовать Result. Пример: Код:
// вместо Encode := ij[i+1,j] // сделать Result := ij[i+1,j] |
|
#3
|
|||
|
|||
|
Теперь подчёркнуто!) Заменил я в функциях на Result, а всё равно та же ошибка!
|
|
#4
|
||||
|
||||
|
Пионер, UnitMain.Text[k] := Encode(Text[k]); и UnitMain.Text[k] := Decode(Text[k]);
не используй для переменных такие имена. Код:
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
function Ok: String;
procedure TForm1.FormCreate(Sender: TObject);
begin
Caption:=Ok;
end;
function TForm1.Ok: String;
begin
Ok:='Hello, world!';
end;Последний раз редактировалось NumLock, 16.02.2012 в 20:44. |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Пионер (16.02.2012)
| ||
|
#5
|
|||
|
|||
|
Что-то я не совсем понял, зачем такое имя переменной использовать (ведь и так по умолчанию подразумевается этот модуль). Программа запустилась, но теперь ошибка динамическая, всё равно ничего не получается!
Вот эта программа на Паскале работает: Код:
uses CRT;
const ij: array[1..8,1..8] of Char =
(('Б', 'б', 'Н', 'н', 'Е', 'е', 'О', 'о'),
('Ь', 'ь', 'Г' ,'г', '3', 'з', 'Й', 'й'),
('М', 'м', 'С', 'с', 'У', 'у', 'X', 'х'),
('Ч', 'ч', 'Щ', 'щ', 'Ъ', 'ъ', 'Ю', 'ю'),
('А', 'а', 'Д', 'д', 'Р', 'р', 'Л', 'л'),
('В', 'в', 'Ж' ,'ж', 'и', 'и', 'К', 'к'),
('П', 'п', 'Т', 'т', 'Ф', 'ф', 'Х', 'х'),
('Ш', 'ш', 'Ы', 'ы', 'Э', 'э', 'Я', 'я'));
Marks: set of char = ['.', ',', '!', '?', ':', ';', '(', ')', '"', 'ё', 'Ё', '-'];
var
Text: String; k: Integer;
function Encode(c: Char): Char;
var
i,j: Integer;
begin
for i:=1 to 8 do
for j:=1 to 8 do
if (c = ij[i,j]) then
begin
if (i <> 8)
then Encode := ij[i+1,j]
else Encode := ij[1,j];
end;
if (c in Marks) then Encode := c;
end;
function Decode(c: Char): Char;
var
i,j: Integer;
begin
for i:=1 to 8 do
for j:=1 to 8 do
if (c = ij[i,j]) then
begin
if (i <> 1)
then Decode := ij[i-1,j]
else Decode := ij[8,j];
end;
if (c in Marks) then Decode := c;
end;
begin
Write('Исходный текст: ');
ReadLn(Text);
WriteLn;
WriteLn;
WriteLn;
for k := 1 to Length(Text) do Text[k] := Encode(Text[k]);
WriteLn('Зашифрованный текст: ', Text);
for k := 1 to Length(Text) do Text[k] := Decode(Text[k]);
WriteLn('Расшифрованный текст: ', Text);
Readln;
end.lmikle: Ну чё, самый упорный? Тегами пользуйся, блин!!! И ещё что с Result, что с именем функции получается одно и тоже! Последний раз редактировалось lmikle, 16.02.2012 в 22:39. |
|
#6
|
|||
|
|||
|
А, всё спасибо, я понял, в чём проблема (Text слово наверно зарезервированное). А в чём разница между Result и именем функции, и так и так работает!
|
|
#7
|
||||
|
||||
|
Имхо, просто хороший тон.
Логично не функции что-то присваивать, а её результату. А так - одно и то же. Основной сутью того сообщения было что "не подчеркнуто". И код надо заключать между тегами [ code] и [/code] (без пробела в начале). |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Пионер (17.02.2012)
| ||
|
#8
|
||||
|
||||
|
в данном случае под Text компилятор имел в виду свойство Text у TControl, от которого унаследован TForm. поэтому и ругался. дописав UnitMain мы ему дали четко понять что это переменная Text типа String модуля UnitMain. т.к. в первоначальной версии объекты не используются, то и соответственно компилятору все понятно.
|
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Пионер (17.02.2012)
| ||