Ir al contenido


Foto

[Ayuda] Creando calculadora en delphi.


  • Por favor identifícate para responder
6 respuestas en este tema

#1 edwinmoq

edwinmoq

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 12 mayo 2013 - 07:38

Hola a todos, la verdad es que soy nuevo en este foro y necesito ayuda, es que en la escuela la profesora nos puso a hacer una calculadora en delphi, y yo con mucho trabajo y buscando informacion en internet logre crearla, pero tiene dos  errores que no tengo ni idea de como resolverlos, he buscado en internet y no encuentro nada que me ayude, y pense que aqui algun experto me podria ayudar.

tengo estos dos errores:

Imagen Enviada

este es el formulario:

Imagen Enviada

este es el codigo:



delphi
  1. unit UntMain;
  2.  
  3. interface
  4.  
  5. uses
  6.   XPMan, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, ExtCtrls;
  8.  
  9. type
  10.   TFrmCalculadora = class(TForm)
  11.     BtnEqual: TButton;
  12.     BtnSuma: TButton;
  13.     BtnResta: TButton;
  14.     BtnMult: TButton;
  15.     BtnDiv: TButton;
  16.     BtnPi: TButton;
  17.     BtnSin: TButton;
  18.     BtnCos: TButton;
  19.     BtnTan: TButton;
  20.     BtnAC: TButton;
  21.     BtnSqrt: TButton;
  22.     BtnPow2: TButton;
  23.     BtnPow3: TButton;
  24.     BtnP: TButton;
  25.     Btn0: TButton;
  26.     EdtDisplay: TEdit;
  27.     Btn1: TButton;
  28.     Btn2: TButton;
  29.     Btn3: TButton;
  30.     Btn4: TButton;
  31.     Btn5: TButton;
  32.     Btn6: TButton;
  33.     Btn7: TButton;
  34.     Btn8: TButton;
  35.     Btn9: TButton;
  36.     LblTitle: TLabel;
  37.     Label1: TLabel;
  38.     procedure Numero(Num: string);
  39.     procedure Calculo();
  40.     procedure Operaciones();
  41.     procedure Btn1Click(Sender: TObject);
  42.     procedure Btn2Click(Sender: TObject);
  43.     procedure Btn3Click(Sender: TObject);
  44.     procedure Btn4Click(Sender: TObject);
  45.     procedure Btn5Click(Sender: TObject);
  46.     procedure Btn6Click(Sender: TObject);
  47.     procedure Btn7Click(Sender: TObject);
  48.     procedure Btn8Click(Sender: TObject);
  49.     procedure Btn9Click(Sender: TObject);
  50.     procedure BtnSqrtClick(Sender: TObject);
  51.     procedure BtnPiClick(Sender: TObject);
  52.     procedure BtnSinClick(Sender: TObject);
  53.     procedure BtnTanClick(Sender: TObject);
  54.     procedure BtnCosClick(Sender: TObject);
  55.     procedure BtnACClick(Sender: TObject);
  56.     procedure FormCreate(Sender: TObject);
  57.     procedure BtnPow2Click(Sender: TObject);
  58.     procedure BtnPow3Click(Sender: TObject);
  59.     procedure BtnPClick(Sender: TObject);
  60.     procedure BtnSumaClick(Sender: TObject);
  61.     procedure BtnEqualClick(Sender: TObject);
  62.     procedure BtnMultClick(Sender: TObject);
  63.     procedure BtnRestaClick(Sender: TObject);
  64.     procedure BtnDivClick(Sender: TObject);
  65.     procedure Btn0Click(Sender: TObject);
  66.   private
  67.     { Private declarations }
  68.   public
  69.     { Public declarations }
  70.   end;
  71. const
  72. pi: real = 3.1415926535897932384626433832795;
  73. var
  74.   Resp: Real;
  75.   FrmCalculadora: TFrmCalculadora;
  76. implementation
  77.  
  78. {$R *.dfm}
  79.  
  80. procedure TFrmCalculadora.Numero(Num: string);
  81. begin
  82. if EdtDisplay.Tag <> 0 then
  83.     EdtDisplay.Text := EdtDisplay.Text + Num
  84.   else
  85.     EdtDisplay.Text := Num;
  86.   EdtDisplay.Tag := 1;
  87. end;
  88.  
  89. procedure TFrmCalculadora.Calculo();
  90. begin
  91.   EdtDisplay.Tag := 0;
  92.   BtnP.Tag := 0;
  93.   BtnSuma.Tag := 1;
  94.   BtnResta.Tag := 1;
  95.   BtnMult.Tag := 1;
  96.   BtnDiv.Tag := 1;
  97. end;
  98.  
  99. Procedure TFrmCalculadora.Operaciones();
  100. var Error: integer;
  101. begin
  102. Error := 0;
  103. if BtnSuma.Tag = 2 then
  104.   if BtnSuma.Tag = 2 then
  105. <<<<<<< HEAD
  106.     if BtnSuma.Tag = 2 then
  107.         Resp  := Resp + strtofloat(EdtDisplay.Text);
  108. =======
  109.     if BtnSuma.Tag = 2 then
  110.       if BtnSuma.Tag = 2 then
  111.         if BtnSuma.Tag = 2 then
  112.           if BtnSuma.Tag = 2 then
  113.             Resp  := Resp + strtofloat(EdtDisplay.Text);
  114. >>>>>>> 871d4b9aa6c92b13e4e8a006f335c24930a9a46f
  115. if BtnResta.Tag = 2 then
  116.   Resp  := Resp - strtofloat(EdtDisplay.Text);
  117. if BtnMult.Tag = 2 then
  118.   Resp  := Resp * strtofloat(EdtDisplay.Text);
  119. if BtnDiv.Tag = 2 then
  120.   If strtofloat(EdtDisplay.Text) <> 0 then
  121.     Resp := Resp  / StrToFloat(EdtDisplay.Text)
  122.   else
  123.     Error := 1;
  124. if Error = 0 then
  125.   EdtDisplay.Text := FloatToStr(Resp)
  126. else
  127.   EdtDisplay.Text := 'Error: División por Cero'
  128. end;
  129.  
  130. procedure TFrmCalculadora.Btn1Click(Sender: TObject);
  131. begin
  132. Numero('1');
  133. end;
  134.  
  135. procedure TFrmCalculadora.Btn2Click(Sender: TObject);
  136. begin
  137. Numero('2');
  138. end;
  139.  
  140. procedure TFrmCalculadora.Btn3Click(Sender: TObject);
  141. begin
  142. Numero('3');
  143. end;
  144.  
  145. procedure TFrmCalculadora.Btn4Click(Sender: TObject);
  146. begin
  147. Numero('4');
  148. end;
  149.  
  150. procedure TFrmCalculadora.Btn5Click(Sender: TObject);
  151. begin
  152. Numero('5');
  153. end;
  154.  
  155. procedure TFrmCalculadora.Btn6Click(Sender: TObject);
  156. begin
  157. Numero('6');
  158. end;
  159.  
  160. procedure TFrmCalculadora.Btn7Click(Sender: TObject);
  161. begin
  162. Numero('7');
  163. end;
  164.  
  165. procedure TFrmCalculadora.Btn8Click(Sender: TObject);
  166. begin
  167. Numero('8');
  168. end;
  169.  
  170. procedure TFrmCalculadora.Btn9Click(Sender: TObject);
  171. begin
  172. Numero('9');
  173. end;
  174.  
  175. procedure TFrmCalculadora.BtnSqrtClick(Sender: TObject);
  176. var
  177. error: Integer;
  178. aux: real;
  179. begin
  180. Val(EdtDisplay.text,aux,error);
  181. if error = 0 then
  182.   EdtDisplay.Text := floattostr(sqrt(aux))
  183. else
  184.   EdtDisplay.Text := 'Error de cálculo';
  185. EdtDisplay.Tag := 0;
  186. end;
  187.  
  188. procedure TFrmCalculadora.BtnPiClick(Sender: TObject);
  189. begin
  190. EdtDisplay.Text := floattostr(pi);
  191. EdtDisplay.Tag := 0;
  192. end;
  193.  
  194. procedure TFrmCalculadora.BtnSinClick(Sender: TObject);
  195. var
  196. error: Integer;
  197. aux : Real;
  198. begin
  199. Val(EdtDisplay.text,aux,error);
  200. if error = 0 then
  201.   begin
  202.     aux := aux * pi/180;
  203.   EdtDisplay.Text := floattostr(sin(aux));
  204.   end
  205. else
  206.   EdtDisplay.Text := 'Error de cálculo';
  207. EdtDisplay.Tag := 0;
  208. end;
  209.  
  210. procedure TFrmCalculadora.BtnTanClick(Sender: TObject);
  211. var
  212. error: Integer;
  213. aux : Real;
  214. begin
  215. Val(EdtDisplay.text,aux,error);
  216. if error = 0 then
  217.   begin
  218.     aux := aux * pi/180;
  219.   EdtDisplay.Text := floattostr(Sin(aux)/Cos(aux));
  220.   end
  221. else
  222.   EdtDisplay.Text := 'Error de cálculo';
  223. EdtDisplay.Tag := 0;
  224. end;
  225.  
  226. procedure TFrmCalculadora.BtnCosClick(Sender: TObject);
  227. var
  228. error: Integer;
  229. aux : Real;
  230. begin
  231. Val(EdtDisplay.text,aux,error);
  232. if error = 0 then
  233.   begin
  234.     aux := aux * pi/180;
  235.   EdtDisplay.Text := floattostr(Cos(aux));
  236.   end
  237. else
  238.   EdtDisplay.Text := 'Error de cálculo';
  239. EdtDisplay.Tag := 0;
  240. end;
  241.  
  242. procedure TFrmCalculadora.BtnACClick(Sender: TObject);
  243. begin
  244. EdtDisplay.Text := '0';
  245. EdtDisplay.Tag := 0;
  246. BtnP.Tag := 0;
  247. Resp := 0;
  248. end;
  249.  
  250. procedure TFrmCalculadora.FormCreate(Sender: TObject);
  251. begin
  252. EdtDisplay.Text := '0';
  253. EdtDisplay.Tag := 0;
  254. end;
  255.  
  256. procedure TFrmCalculadora.BtnPow2Click(Sender: TObject);
  257. var
  258. error: Integer;
  259. aux: real;
  260. begin
  261. Val(EdtDisplay.text,aux,error);
  262. if error = 0 then
  263.   EdtDisplay.Text := floattostr(sqr(aux))
  264. else
  265.   EdtDisplay.Text := 'Error de cálculo';
  266. EdtDisplay.Tag := 0;
  267. end;
  268.  
  269. procedure TFrmCalculadora.BtnPow3Click(Sender: TObject);
  270. var
  271. error: Integer;
  272. aux: real;
  273. begin
  274. Val(EdtDisplay.text,aux,error);
  275. if error = 0 then
  276.   EdtDisplay.Text := floattostr(sqr(aux)* aux)
  277. else
  278.   EdtDisplay.Text := 'Error de cálculo';
  279. EdtDisplay.Tag := 0;
  280. end;
  281. procedure TFrmCalculadora.BtnPClick(Sender: TObject);
  282. begin
  283. if BtnP.Tag = 0 then
  284.   if EdtDisplay.Tag = 0 then
  285.     Numero('0,')
  286.   else
  287.     Numero(',');
  288. BtnP.Tag := 1;
  289. end;
  290.  
  291. procedure TFrmCalculadora.BtnSumaClick(Sender: TObject);
  292. begin
  293. if BtnSuma.Tag = 0 Then
  294.   Resp  := strtofloat(EdtDisplay.Text)
  295. else
  296.   Operaciones();
  297. Calculo();
  298. BtnSuma.Tag := 2;
  299. end;
  300.  
  301. procedure TFrmCalculadora.BtnEqualClick(Sender: TObject);
  302. begin
  303.   Operaciones();
  304.   EdtDisplay.Tag := 0;
  305.   BtnP.Tag := 0;
  306.   BtnSuma.Tag := 0;
  307.   BtnResta.Tag := 0;
  308.   BtnMult.Tag := 0;
  309.   BtnDiv.Tag := 0;
  310. end;
  311.  
  312. procedure TFrmCalculadora.BtnMultClick(Sender: TObject);
  313. begin
  314. if BtnMult.Tag = 0 Then
  315.   Resp  := strtofloat(EdtDisplay.Text)
  316. else
  317.   Operaciones();
  318. Calculo();
  319. BtnMult.Tag := 2;
  320. end;
  321.  
  322. procedure TFrmCalculadora.BtnRestaClick(Sender: TObject);
  323. begin
  324. if BtnResta.Tag = 0 Then
  325.   Resp  := strtofloat(EdtDisplay.Text)
  326. else
  327.   Operaciones();
  328. Calculo();
  329. BtnResta.Tag := 2;
  330. end;
  331.  
  332. procedure TFrmCalculadora.BtnDivClick(Sender: TObject);
  333. begin
  334. if BtnDiv.Tag = 0 Then
  335.   Resp  := strtofloat(EdtDisplay.Text)
  336. else
  337.   Operaciones();
  338. Calculo();
  339. BtnDiv.Tag := 2;
  340. end;
  341.  
  342. procedure TFrmCalculadora.Btn0Click(Sender: TObject);
  343. begin
  344. if EdtDisplay.Tag  = 1 then
  345.   Numero('0')
  346. else
  347.   EdtDisplay.Text := '0';
  348. end;
  349. end.



Y aqui es justamente donde estan los dos errores 8o|:

Imagen Enviada

si alguien puede ayudarme se lo agradeceria de corazon. AYUDAA!





  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 12 mayo 2013 - 07:47

Ésta parte de código no es correcta, lo copiaste o lo escribiste?



delphi
  1. <<<<<<< HEAD
  2.     if BtnSuma.Tag = 2 then
  3.         Resp  := Resp + strtofloat(EdtDisplay.Text);   
  4. =======
  5.     if BtnSuma.Tag = 2 then
  6.       if BtnSuma.Tag = 2 then
  7.         if BtnSuma.Tag = 2 then
  8.           if BtnSuma.Tag = 2 then
  9.             Resp  := Resp + strtofloat(EdtDisplay.Text);
  10. >>>>>>> 871d4b9aa6c92b13e4e8a006f335c24930a9a46f



Si lo copiaste hubo un error al copiarlo/pegarlo.

Si lo escribiste, que es lo que se supone que es HEAD ?

En todo caso, borra estas tres lineas y nos comentas.

<<<<<<< HEAD
=======
>>>>>>> 871d4b9aa6c92b13e4e8a006f335c24930a9a46f


Saludos

  • 0

#3 edwinmoq

edwinmoq

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 12 mayo 2013 - 08:17

Ésta parte de código no es correcta, lo copiaste o lo escribiste?



delphi
  1. <<<<<<< HEAD
  2.     if BtnSuma.Tag = 2 then
  3.         Resp  := Resp + strtofloat(EdtDisplay.Text);   
  4. =======
  5.     if BtnSuma.Tag = 2 then
  6.       if BtnSuma.Tag = 2 then
  7.         if BtnSuma.Tag = 2 then
  8.           if BtnSuma.Tag = 2 then
  9.             Resp  := Resp + strtofloat(EdtDisplay.Text);
  10. >>>>>>> 871d4b9aa6c92b13e4e8a006f335c24930a9a46f



Si lo copiaste hubo un error al copiarlo/pegarlo.

Si lo escribiste, que es lo que se supone que es HEAD ?

En todo caso, borra estas tres lineas y nos comentas.

<<<<<<< HEAD
=======
>>>>>>> 871d4b9aa6c92b13e4e8a006f335c24930a9a46f


Saludos


Hice lo que dijiste, y la aplicacion corre pero no funciona bien, la mayoria de las operaciones salen mal, la suma, resta, etc. Al parecer alguna de las lineas que me dijiste que borre es importante. :@

No se que hacer.

Saludos
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 13 mayo 2013 - 01:41

Las lineas que has borrado no son código delphi. Si no funciona revisa el código de cada operación. Los trabajos no son para copiar y pegar sino para aprender. Si no te esfuerzas no aprendes nada. No esperes que aquí te realicen tus tareas escolares.


Un saludo.


  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 13 mayo 2013 - 07:56


Hice lo que dijiste, y la aplicacion corre pero no funciona bien, la mayoria de las operaciones salen mal, la suma, resta, etc. Al parecer alguna de las lineas que me dijiste que borre es importante. :@

No se que hacer.

Saludos


Dudo que esas líneas fueran imortantes para la ejecución del programa pues no cumplen con la sintaxis establecida para Object Pascal.  Ya que el problema está en que las operaciones salen  mal, seguramente el algoritmo de cálculo está incorrecto. Si gustas podemos ir una por una corrigiéndolas. Así que comencemos con suma:

Cuál es el algoritmo que hace la operación suma? podrías mostrarlo y darnos dos datos que usaste para probarla y el resultdo que te arrojó tu sistema?




  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 mayo 2013 - 02:58

Pues este pedazo es el problema:



delphi
  1. if BtnSuma.Tag = 2 then
  2.   if BtnSuma.Tag = 2 then
  3. <<<<<<< HEAD
  4.     if BtnSuma.Tag = 2 then
  5.         Resp  := Resp + strtofloat(EdtDisplay.Text);
  6. =======
  7.     if BtnSuma.Tag = 2 then
  8.       if BtnSuma.Tag = 2 then
  9.         if BtnSuma.Tag = 2 then
  10.           if BtnSuma.Tag = 2 then
  11.             Resp  := Resp + strtofloat(EdtDisplay.Text);
  12. >>>>>>> 871d4b9aa6c92b13e4e8a006f335c24930a9a46f



Elimina las lineas que te indicaron más arriba y elimina los "if BtnSuma.Tag = 2 then" repetidos, luego prueba.

Saludos.
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 13 mayo 2013 - 06:32

Hola
Aqui un ejemplo sencillo.
Saludos

Archivos adjuntos


  • 0




IP.Board spam blocked by CleanTalk.