Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из процедуры в функцию 
V
    Опции темы
Melcharikov
  Дата 28.1.2014, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток форумчане! Прошу помочь разобраться с моей задачей
задача:
Использовать отдельный модуль для кодирование/декодирование текстового файла. 

Попробовал написать подобную процедуру, взяв наработки с этого форума. 
Листинг модуля кодирования:
Код

unit CriptoUnit;

{$mode objfpc}{$H+}

interface
procedure CodeFile(var Source: string; securlvl: integer);

implementation
uses
  Classes, SysUtils;

procedure CodeFile(var Source: string; securlvl: integer);
var
  Result : string;
  i : Integer;
begin
  SetLength(Result, length(Source));
  for i := 1 to length(Source) do begin
    Result[i] := chr(ord(Source[i])+securlvl);
  end;
 end;

end.

Теперь вопрос:
Можно ли использовать в данной задаче функцию? чтобы работала конструкция подобного типа:
Код

var
Text: String;
begin
Memo1.Text:=Text;
CodeFile(Text,-12);
Memo2.Text:=Text;
end;


В процедуре такое не получается, ведь значение переменной Result процедура не может вернуть в отличии от ф-ции. 

Если не сложно, подскажите на данном конкретном примере работу с ф-цией, дело в том, что в сети в основном математические ф-ции с малым кол-вом входных данных и я собственно не могу понять куда объявить входные переменные и как вернуть содержание переменной Result.

Заранее, спасибо! 

Среда разработки Lazarus 1.2 RC 2

Это сообщение отредактировал(а) Melcharikov - 28.1.2014, 13:45
PM MAIL   Вверх
Агрох
Дата 28.1.2014, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Запись var Source: string; в объявлении процедуры:
Код

procedure CodeFile(var Source: string; securlvl: integer);

означает, что все изменения в параметре Source, произошедшие в ходе выполнения процедуры, будут применены к переменной, которую ты передал в качестве параметра при вызове этой процедуры.

Код

procedure SomeProc(var Param: integer);
begin
  Inc(Param);
end;

procedure ButtonClick(Sender: TObject);
var
  i: integer;
begin
  i := 1;
  SomeProc(i);
  ShowMessage(IntToStr(i));
end;


После вызова процедуры SomeProc в переменной i будет находиться число 2.
--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
Melcharikov
  Дата 28.1.2014, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Агрох @ 28.1.2014,  14:41)
Запись var Source: string; в объявлении процедуры:
Код

procedure CodeFile(var Source: string; securlvl: integer);

означает, что все изменения в параметре Source, произошедшие в ходе выполнения процедуры, будут применены к переменной, которую ты передал в качестве параметра при вызове этой процедуры.

Код

procedure SomeProc(var Param: integer);
begin
  Inc(Param);
end;

procedure ButtonClick(Sender: TObject);
var
  i: integer;
begin
  i := 1;
  SomeProc(i);
  ShowMessage(IntToStr(i));
end;


После вызова процедуры SomeProc в переменной i будет находиться число 2.

Спасибо за быстрый и содержательный ответ с примером!
Решил данную проблему таким методом:
Код

procedure codefile(var Source: string; securlvl: integer);
var
  Result : string;
  i : Integer;
begin
  SetLength(Result, length(Source));
  for i := 1 to length(Source) do begin
    Result[i] := chr(ord(Source[i])+securlvl);
  end;
  Source:=Result;
 end;
end.


Пояснение:
Дело в том, что я думал переменные объявленные в самой процедуре предназначенны только для входных параметров. 
Код

procedure codefile(var Source: string; securlvl: integer);

Была идея после цикла задать переменной Source:= Result; Но, мысли о том, что переменной: "Source" в области Begin...End; ее не будет видно меня остановили. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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