La Web del Programador: Comunidad de Programadores
 
    Pregunta:  64506 - TRANSFORMAR CADENA A NUMERO
Autor:  Vicen
tengo una duda al realizar un programa, tengo que leer de teclado uan expresion tipo "3-2", "3 / 7", "8 *6",leerlo como cadena y transformarlo para que sea una expresion aritmetica y con el signo de "+ - * /" tengo problemas porque no se como hacerlo.

Muchas gracias por adelantado.

  Respuesta:  ramon garcia
{Espero este te ayude a entenderlo}

program cuentas;

uses
crt, dos;
type
string12 = string[12];
var
dat1, dat2, dat3 : real;
tecla : char;
cade1, cade2, cade3 : string12;

function combierte(ent : string12) : real;
var
num : real;
erro : integer;
begin
val(ent,num,erro);
if erro <> 0 then
exit;
combierte := num;
end;

function entra_dato(x,y : integer) : string12;
var
conta : integer;
cadena : string12;
begin
conta := 1;
fillchar(cadena,13,' ');
cadena[0] := chr(12);
textcolor(1);
repeat
tecla := readkey;
if tecla in[#47..#57,#42,#43,#45] then
begin
cadena[conta] := tecla;
cadena[0] := chr(conta);
conta := conta + 1;
if conta > 12 then
conta := 12;
gotoxy(x,y);write(cadena);
end;
if tecla = #32 then
begin
conta := conta - 1;
if conta < 1 then
conta := 1;
cadena[conta] := ' ';
cadena[0] := chr(conta);
gotoxy(x,y);write(cadena);
end;
until (tecla = #13) or (tecla = #27);
textcolor(15);
if tecla = #13 then
entra_dato := copy(cadena,1,length(cadena))
else
entra_dato := ' ';
end;

function operacion(como : string12) : real;
var
n, cu : integer;
da1, da2 : string12;
nu1, nu2 : real;
dos : boolean;
opera : char;
begin
dos := false;
cu := 1;
n := 1;
fillchar(da1,13,' ');
da1[0] := chr(12);
fillchar(da2,13,' ');
da2[0] := chr(12);
repeat
if como[cu] in [#42,#43,#45,#47] then
begin
opera := como[cu];
dos := true;
end
else
begin
if dos = false then
begin
da1[cu] := como[cu];
da1[0] := chr(cu);
end
else
begin
da2[n] := como[cu];
da2[0] := chr(n);
n := n + 1;
end;
end;
cu := cu + 1;
until cu > Length(como);
nu1 := combierte(da1);
nu2 := combierte(da2);
case opera of
#42 : begin
operacion := nu1 * nu2;
end;
#43 : begin
operacion := nu1 + nu2;
end;
#45 : begin
operacion := nu1 - nu2;
end;
#47 : begin
operacion := nu1 / nu2;
end;
end;
end;

begin
clrscr;
gotoxy(10,20);write('Entre dato : ');
TextBackground(7);
gotoxy(9,22);write(' ');
gotoxy(9,22);
cade1 := entra_dato(10,22);
TextBackground(0);
textcolor(14);
gotoxy(22,20);write(operacion(cade1):8:2);
textcolor(15);
readln;

end.