Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 212
  • Last Modified:

Tryin to call a function

Hello,

I have a quick question....  As it is academically related, I am not after answers, just a push in the right direction.  I am studying in isolation though, so any advise would be greatly appreciated!!

Basically, I am trying to do the palindrome thing, and I'm 1/2 way there. I have cleaned the string (removed all non alpha numeric and changed to lowercase), now I am trying to call: procedure reverse(const: string; var T: string);
Which is where I am running into problems.

Here is my code so far:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    edtInput: TEdit;
    Palindromes: TMemo;
    SaveDialog1: TSaveDialog;
    Test: TButton;
    procedure TestClick(Sender: TObject);

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

var
  Form1: TForm1;
  edtInput: TEdit;
  Palindromes: TMemo;

const
  Chars : Set of Char = ['a'..'z','A'..'Z','0'..'9'];

implementation

{$R *.DFM}

function clean(const S: string): string;
var count: Integer;
begin

for count := 0 To Length(s) do
if S[count] in Chars
  then result := result + S[count];

end;

procedure reverse(const S: string; var T: string);

begin
writeln(test);
// yet to write this part
end;

procedure TForm1.TestClick(Sender: TObject);
var result, input : string;

begin

if length(edtInput.Text) = 0 then
showMessage('Please enter text')
else
input := clean(edtInput.Text);
result := lowercase(s);
showmessage(clean(input));

{ tried top call the procedure here as in: input := reverse(edtInput); but it did not work. I am guessing that I am not passing enough parameters somehow, as in it expecting two strings? }

end;

end.
 

Many thanks.

0
south_paw
Asked:
south_paw
  • 2
1 Solution
 
rbohacCommented:
two problems in this code

1) S is undefined in your TestClick procedure
2) test is undefined in your reverse procedure

commenting those out allows the code to compile.

You are passing your variable by reference to the reverse function. Instead  the function returning the string, you are passing a pointer to the reverse procedure, so that it can store the value.

To call it do: reverse(edtInput.text,input);

of you can change your reverse procedure to a function:

function reverse(const S: string):String;
begin
Result := 'Reversed String';
end;

and call it like: input := reverse(edtInput.text);
0
 
south_pawAuthor Commented:
Thanks rbohac!

I amended it to:

procedure reverse(const S: string; var T: string);
begin

messagebeep(0);

end;

procedure TForm1.TestClick(Sender: TObject);
var input : string;

begin

 if length(edtInput.Text) = 0 then
 showMessage('Please enter text')

 else
 input := clean(edtInput.Text);
 input := lowercase(edtInput.Text);
 showmessage('Cleaned output: ' + clean(input));
 reverse(edtInput.text,input);

end;

end.


The code compiles, and I get the beep at the end. Of interest, I do not have any problems even though S is undefined in my testClick procedure. Wierd.
0
 
rbohacCommented:
Well actually S is not undefined. By default Delphi initializes a string valiable for you automatically. So actually S = ''
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now