Recent

Author Topic: Why did my project didn't work?  (Read 6451 times)

lex cuper

  • New Member
  • *
  • Posts: 11
Why did my project didn't work?
« on: April 16, 2013, 06:20:30 pm »
Yesterday I tried to use Lazarus to write programs, and after I install it I found that it has a lot of tools and that I can use to make programs that have interface. Today I decided to try to make one and it acctualy don't work, I search on Internet but did'n found something, so here is source, if somebody can explain why my function "SchimbaBaza" doesn't do anything I'll be glad to read his message :) Sorry my English

Quote
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1EditingDone(Sender: TObject);
    procedure Edit2EditingDone(Sender: TObject);
    procedure Edit3EditingDone(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var n:string;
    n1,n2:integer;
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }


procedure TForm1.Button1Click(Sender: TObject);
function SchimbaBaza(x1,x2:integer;num:string):string;

const nmax=10000;
type tabel=array[0..nmax] of Int64;
     numar=array[0..nmax] of char;
var a,r:tabel;
    n,baza,cif,baza2,lung:integer;
    s:numar;
    v:string;

procedure Initializare;
var i:integer;
begin
 for i:=1 to nmax do begin r:=0; a:=0; end;
 cif:=0; n:=0;
 baza:=x1;
 for i:=1 to length(num) do s:=num;
 lung:=length(num);
 baza2:=x2;
end;

procedure TransIn10(var x:tabel; s:numar; var lol:integer);
{Transforma numarul din baza initiala in baza 10}

var i,j,k,l:integer;
    p:int64;
begin
 for i:=1 to nmax do x:=0;
 i:=-1;
 l:=lung;

 while l>0 do
  begin
   case s[l] of
   '0': k:=0;
   '1': k:=1;
   '2': k:=2;
   '3': k:=3;
   '4': k:=4;
   '5': k:=5;
   '6': k:=6;
   '7': k:=7;
   '8': k:=8;
   '9': k:=9;
   'A': k:=10;
   'B': k:=11;
   'C': k:=12;
   'D': k:=13;
   'E': k:=14;
   'F': k:=15;
   end;

   dec(l);
   inc(i);
   p:=1;
    for j:=1 to i do p:=p*baza;
    x[1]:=x[1]+p*k;
    j:=1;
    while x[j]>0 do
     begin
       if x[j]>9 then
        begin x[j+1]:=x[j+1]+(x[j] div 10); x[j]:=x[j] mod 10; end;
       inc(j);
     end;
  end;
 lol:=j-1;
end;

procedure TransFrom10(x:tabel; n:integer);
var i,j:integer;
    t:tabel;
    k:int64;

begin
 for i:=0 to nmax do t:=0;
 j:=0;
 k:=x[n];
 x[0]:=0;

 while n>0 do
  begin
   if k div baza2>0 then
    begin
     inc(j);
     t[j]:=k div baza2;
     k:=k mod baza2;
     dec(n);
     k:=k*10+x[n];
    end
   else
    begin
     dec(n);
     k:=k*10+x[n];
     inc(j);
     t[j]:=0;
    end;
  end;
 inc(cif);
 if k>0 then r[cif]:=k div 10
        else r[cif]:=0;
 n:=j div 2;
 for i:=1 to n do
  begin
   k:=t;
   t:=t[j+1-i];
   t[j+1-i]:=k;
  end;
 while t[j]=0 do dec(j);
 if j>0 then TransFrom10(t,j);
end;

procedure Afisare;
var i:integer;
begin
 v:='';
 for i:=cif downto 1 do v:=v+IntToStr(r);
 SchimbaBaza:=v;
end;

begin
 Initializare;
 TransIn10(a,s,n);
 TransFrom10(a,n);
 Afisare;
end;
begin

 Edit4.Text:=SchimbaBaza(10,2,'123');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Edit1EditingDone(Sender: TObject);
begin
 if Edit1.Text<>'' then
  n1:=StrToInt(Edit1.Text);
  Edit4.text:=IntToStr(n1);
end;

procedure TForm1.Edit2EditingDone(Sender: TObject);
begin
  n:=Edit2.Text;
  Edit4.text:=n;
end;

procedure TForm1.Edit3EditingDone(Sender: TObject);
begin
 if Edit3.Text<>'' then
  n2:=StrToInt(Edit3.Text);
  Edit4.text:=IntToStr(n2);
end;


end.

typo

  • Hero Member
  • *****
  • Posts: 3051
Re: Why did my project didn't work?
« Reply #1 on: April 16, 2013, 07:27:52 pm »
Probably all you would need to write would be:

Code: [Select]
// uses StrUtils
procedure TForm1.Button1Click(Sender: TObject); 
begin
   Edit4.Text := Dec2Numb(Numb2Dec(Edit1.Text, StrToInt(Edit3.Text)), 10, StrToInt(Edit2.Text));
end;

Anyway, you could use this code to find the errors on your routine.
« Last Edit: April 16, 2013, 07:34:44 pm by typo »

lex cuper

  • New Member
  • *
  • Posts: 11
Re: Why did my project didn't work?
« Reply #2 on: April 16, 2013, 07:42:25 pm »
Cool..I didn't know about this functions, and Lazarus too :(

Quote
unit1.pas(175,24) Error: Identifier not found "Dec2Numb"
unit1.pas(175,33) Error: Identifier not found "Numb2Dec"

I actually want to understand why did my function "SchimbaBaza" do nothing, because I did it as a program before and it works fine

Here is source:
Code: [Select]
program baze;
uses crt;
const nmax=10000;
type tabel=array[0..nmax] of Int64;
     numar=array[0..nmax] of char;
var a,r:tabel;
    n,baza,cif,baza2,lung:integer;
    s:numar;

procedure Initializare;
var i:integer;
begin
 for i:=1 to nmax do begin r[i]:=0; a[i]:=0; end;
 cif:=0; n:=0;
 write('Introduceti baza initiala a numarului: ');
 readln(baza);
 write('Introduceti numarulul: ');
 lung:=0;
 while not eoln do
  begin
   inc(lung);
   read(s[lung]);
  end;

 write('Introduceti baza finala a numarului: ');
 readln(baza2);
end;

procedure TransIn10(var x:tabel; s:numar; var lol:integer);
{Transforma numarul din baza initiala in baza 10}

var i,j,k,l:integer;
    p:int64;
begin
 for i:=1 to nmax do x[i]:=0;
 i:=-1;
 l:=lung;

 while l>0 do
  begin
   case s[l] of
   '0': k:=0;
   '1': k:=1;
   '2': k:=2;
   '3': k:=3;
   '4': k:=4;
   '5': k:=5;
   '6': k:=6;
   '7': k:=7;
   '8': k:=8;
   '9': k:=9;
   'A': k:=10;
   'B': k:=11;
   'C': k:=12;
   'D': k:=13;
   'E': k:=14;
   'F': k:=15;
   end;

   dec(l);
   inc(i);
   p:=1;
    for j:=1 to i do p:=p*baza;
    x[1]:=x[1]+p*k;
    j:=1;
    while x[j]>0 do
     begin
       if x[j]>9 then
        begin x[j+1]:=x[j+1]+(x[j] div 10); x[j]:=x[j] mod 10; end;
       inc(j);
     end;
  end;
 lol:=j-1;
end;

procedure TransFrom10(x:tabel; n:integer);
var i,j:integer;
    t:tabel;
    k:integer;

begin
 for i:=0 to nmax do t[i]:=0;
 j:=0;
 k:=x[n];
 x[0]:=0;

 while n>0 do
  begin
   if k div baza2>0 then
    begin
     inc(j);
     t[j]:=k div baza2;
     k:=k mod baza2;
     dec(n);
     k:=k*10+x[n];
    end
   else
    begin
     dec(n);
     k:=k*10+x[n];
     inc(j);
     t[j]:=0;
    end;
  end;
 inc(cif);
 if k>0 then r[cif]:=k div 10
        else r[cif]:=0;
 n:=j div 2;
 for i:=1 to n do
  begin
   k:=t[i];
   t[i]:=t[j+1-i];
   t[j+1-i]:=k;
  end;
 while t[j]=0 do dec(j);
 if j>0 then TransFrom10(t,j);
end;

procedure Afisare;
var i:integer;
begin
 Write('Numarul in baza ',baza2,' = ');
 for i:=cif downto 1 do
  case r[i] of
   0: write(r[i]);
   1: write(r[i]);
   2: write(r[i]);
   3: write(r[i]);
   4: write(r[i]);
   5: write(r[i]);
   6: write(r[i]);
   7: write(r[i]);
   8: write(r[i]);
   9: write(r[i]);
   10: write('A');
   11: write('B');
   12: write('C');
   13: write('D');
   14: write('E');
   15: write('F');
  end;
end;

begin
 clrscr;
 Initializare;
 TransIn10(a,s,n);
 TransFrom10(a,n);
 Afisare;
 readln;
end.

lex cuper

  • New Member
  • *
  • Posts: 11
Re: Why did my project didn't work?
« Reply #3 on: April 16, 2013, 07:45:29 pm »
Quote
// uses StrUtils
now it works :) but it also do nothing when i run it (like my function).

typo

  • Hero Member
  • *****
  • Posts: 3051
Re: Why did my project didn't work?
« Reply #4 on: April 16, 2013, 07:50:02 pm »
Put an integer on Edit1, a base on Edit2 and another base on Edit3. This code will change de base of Edit1.Text from Edit2.Text to Edit3.Text and show the result on Edit4.

Blaazen

  • Hero Member
  • *****
  • Posts: 3241
  • POKE 54296,15
    • Eye-Candy Controls
Re: Why did my project didn't work?
« Reply #5 on: April 16, 2013, 08:00:14 pm »
Currently your function "SchimbaBaza" is nested function of "procedure TForm1.Button1Click(Sender: TObject);". It is intended? The code from your first post is somewhat badly readable for me.
Lazarus 2.3.0 (rev main-2_3-2863...) FPC 3.3.1 x86_64-linux-qt Chakra, Qt 4.8.7/5.13.2, Plasma 5.17.3
Lazarus 1.8.2 r57369 FPC 3.0.4 i386-win32-win32/win64 Wine 3.21

Try Eye-Candy Controls: https://sourceforge.net/projects/eccontrols/files/

lex cuper

  • New Member
  • *
  • Posts: 11
Re: Why did my project didn't work?
« Reply #6 on: April 16, 2013, 08:09:31 pm »
Yes it is... Actually first i tried to make it a "global" function but there was an error:
Quote
Forward declaration not solved

typo

  • Hero Member
  • *****
  • Posts: 3051
Re: Why did my project didn't work?
« Reply #7 on: April 16, 2013, 08:13:36 pm »
Code: [Select]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  strutils;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit3: TEdit;
    Edit2: TEdit;
    Edit4: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit2EditingDone(Sender: TObject);
    procedure Edit3EditingDone(Sender: TObject);
    procedure Edit4EditingDone(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

function SchimbaBaza(x1,x2:integer;num:string):string;

const nmax=10000;
type tabel=array[0..nmax] of Int64;
     numar=array[0..nmax] of char;
var a,r:tabel;
    n,baza,cif,baza2,lung:integer;
    s:numar;
    v:string;

procedure Initializare;
var i:integer;
begin
 for i:=1 to nmax do
 begin
  r[i]:=0;
  a[i]:=0;
 end;
 cif:=0; n:=0;
 baza:=x1;
 for i:=1 to length(num) do s:=num;
 lung:=length(num);
 baza2:=x2;
end;

procedure TransIn10(var x:tabel; s:numar; var lol:integer);
{Transforma numarul din baza initiala in baza 10}

var i,j,k,l:integer;
    p:int64;
begin
 for i:=1 to nmax do x[i]:=0;
 i:=-1;
 l:=lung;

 while l>0 do
  begin
   case s[l] of
   '0': k:=0;
   '1': k:=1;
   '2': k:=2;
   '3': k:=3;
   '4': k:=4;
   '5': k:=5;
   '6': k:=6;
   '7': k:=7;
   '8': k:=8;
   '9': k:=9;
   'A': k:=10;
   'B': k:=11;
   'C': k:=12;
   'D': k:=13;
   'E': k:=14;
   'F': k:=15;
   end;

   dec(l);
   inc(i);
   p:=1;
    for j:=1 to i do p:=p*baza;
    x[1]:=x[1]+p*k;
    j:=1;
    while x[j]>0 do
     begin
       if x[j]>9 then
        begin x[j+1]:=x[j+1]+(x[j] div 10); x[j]:=x[j] mod 10; end;
       inc(j);
     end;
  end;
 lol:=j-1;
end;

procedure TransFrom10(x:tabel; n:integer);
var i,j:integer;
    t:tabel;
    k:int64;

begin
 for i:=0 to nmax do t[i]:=0;
 j:=0;
 k:=x[n];
 x[0]:=0;

 while n>0 do
  begin
   if k div baza2>0 then
    begin
     inc(j);
     t[j]:=k div baza2;
     k:=k mod baza2;
     dec(n);
     k:=k*10+x[n];
    end
   else
    begin
     dec(n);
     k:=k*10+x[n];
     inc(j);
     t[j]:=0;
    end;
  end;
 inc(cif);
 if k>0 then r[cif]:=k div 10
        else r[cif]:=0;
 n:=j div 2;
 for i:=1 to n do
  begin
   k:=t[n];
   t[n]:=t[j+1-i];
   t[j+1-i]:=k;
  end;
 while t[j]=0 do dec(j);
 if j>0 then TransFrom10(t,j);
end;

procedure Afisare;
var i:integer;
begin
 v:='';
 for i:=cif downto 1 do v:=v+IntToStr(r[i]);
 SchimbaBaza:=v;
end;

begin
 Initializare;
 TransIn10(a,s,n);
 TransFrom10(a,n);
 Afisare;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit4.Text := Dec2Numb(Numb2Dec(Edit1.Text, StrToInt(Edit3.Text)), 10, StrToInt(Edit2.Text));
 //Edit4.Text:=SchimbaBaza(10,2,'123');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Edit4EditingDone(Sender: TObject);
var
  n1 :integer;
begin
 {
  if Edit4.Text<>'' then
  n1:=StrToInt(Edit4.Text);
  Edit4.text:=IntToStr(n1);
  }
end;

procedure TForm1.Edit2EditingDone(Sender: TObject);
var
  n :string;
begin
 {
  n:=Edit2.Text;
  Edit4.text:=n;
  }
end;

procedure TForm1.Edit3EditingDone(Sender: TObject);
var
  n2 :integer;
begin
 {
 if Edit3.Text<>'' then
  n2:=StrToInt(Edit3.Text);
  Edit4.text:=IntToStr(n2);
  }
end;


end.

lex cuper

  • New Member
  • *
  • Posts: 11
Re: Why did my project didn't work?
« Reply #8 on: April 16, 2013, 08:23:47 pm »
wow..it work, i was thinking that i have to declare it in somewhere here
 
Code: [Select]
TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit3: TEdit;
    Edit2: TEdit;
    Edit4: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit2EditingDone(Sender: TObject);
    procedure Edit3EditingDone(Sender: TObject);
    procedure Edit4EditingDone(Sender: TObject);
  private

and only after write it.
however, i tried my function, your's, and it stil doesn't show anything after i press "button1", if it works fine in your project please say cause i don't understand why that happens

typo

  • Hero Member
  • *****
  • Posts: 3051
Re: Why did my project didn't work?
« Reply #9 on: April 16, 2013, 08:30:21 pm »
Attached.

lex cuper

  • New Member
  • *
  • Posts: 11
Re: Why did my project didn't work?
« Reply #10 on: April 16, 2013, 08:38:01 pm »
it is similat to my..but this works :D

 

TinyPortal © 2005-2018