![]() |
|
|
Регистрация | << Правила форума >> | 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] jmp $ ; Happy End! The Cake Is A Lie. |
#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
|
||||
|
||||
![]() Имхо, просто хороший тон.
![]() jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Пионер (17.02.2012)
|
#8
|
||||
|
||||
![]() в данном случае под Text компилятор имел в виду свойство Text у TControl, от которого унаследован TForm. поэтому и ругался. дописав UnitMain мы ему дали четко понять что это переменная Text типа String модуля UnitMain. т.к. в первоначальной версии объекты не используются, то и соответственно компилятору все понятно.
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Пионер (17.02.2012)
|