![]() |
Programa de promedio
Hola acabo de iniciar en esto de delphi y me han dejado un programa que calcule el promedio de 6 edits, el programa si me funciona, pero el profesor dice que tambien saque el promedio de por ejemplo 3 edits solamente y al momento de correr el programa y solo rellenar 3 edits me marca un error no se como hacer que si lleno solo 2, 3, 4 o 5 edits tambien me saque el promedio y no me salga el error espero me puedan ayudar
procedure TPromediometal.Button2Click(Sender: TObject); var c1,c2,c3,c4,c5,c6: integer; x: real; begin c1:=Strtoint (edit1.text); c2:=Strtoint (edit2.text); c3:=Strtoint (edit3.text); c4:=Strtoint (edit4.text); c5:=Strtoint (edit5.text); c6:=Strtoint (edit6.text); x:=(c1+c2+c3+c4+c5+c6) / 6; end; memo1.lines.clear; memo1.lines.add (FormatFloat ('Tu promedio #.##!' ,x)); if x < 7 then memo1.lines.add ('Reprobaste ¡Lo Sentimos!') else memo1.lines.add ('Aprobaste ¡Felicidades!'); end; |
Por favor, usa etiquetas adecuadas para escribir código.
Necesariamente debes verificar Edit por Edit cuál se rellenó y contarlos pues, si sólo se escribieron tres números, entonces el promedio no puedes tomarlo dividiendo entre seis. // Saludos |
Cita:
|
Hola alenbebote.
roman se refiere a que encierres tu código entre las etiquetas [delphi] tu_codigo [/delphi] para que se pueda leer más fácil. Cita:
Saludos. |
Cita:
me podrias ayudar en un ejemplo de mi ejercicio, es mi examen final y no eh podido con este programa mil gracias |
Hola.
Seleccioná todos los edits mediante el mouse o presionando la tecla Shift y haciendo click sobre cada uno de ellos hasta que estén todos seleccionados. Luego anda al Object inspector, donde dirá: 6 items selected. Hace click sobre la pestaña Events y doble click sobre OnExit. Delphi automáticamente te generará la cabecera: Agrega la declaración de variable y el código entre el begin/end que te puse en el mensaje anterior. Saludos. |
Cita:
Pues entonces, me temo que tu resultado será menor de 7, según tu ejemplo:
|
Cita:
|
Hola.
Cita:
Primero que nada borrá desde el editor toda linea que haga referencia a Edit1Exit, así como el código asociado al procedimiento, es decir cabecera de procedimiento y las líneas que que la siguen hasta el end; (incluído). También en el Object Inspector, el contenido de la casilla del evento OnExit de todos los Edits. Es decir, dejá todo como estaba antes. Seleccioná los seis Edits (te vas a dar cuenta por que tienen una marca en gris en cada una de sus esquinas). Ya no tenes que entrar ni tocar mas el formulario, el evento OnExit no tiene nada que ver con el botón, así que tampoco toques nada allí. Dirigite al Object Inspector, si no está visible hace View -> Object Inspector. En él verás dos pestañas, una de ellas dice Events, hacé click en ella y veras una lista con los eventos de los Edits. Sobre el que dice OnExit hace doble click. Ya estarás en el editor y con la cabecera creada como te comente en el mensaje #6: Borra las tres líneas que están debajo de la cabecera (desde el begin hasta el end). Seleccioná y copiá el siguiente trozo de código tál cuál como está: Y pegalo debajo de la cabecera (donde antes estaban las tres líneas que eliminaste). Saludos. Edito: Mucha suerte ;) |
También puedes ir acumulando y contando los valores válidos en la variable x y en otra variable contador:
PD: Te he resuelto la taréa, solo porque veo que haz puesto empeño. (Hay otra gente que viene con el enunciado y espera que le des una función terminada y probada) De todos modos, te veo un poco verde en el manejo de los componentes visuales y sus eventos (Edits, Botonoes, etc.). Deberías leer un poco más sobre el tema. Aquí verás un ejemplo de como crear un botón y responder al evento OnClick (cuando se presiona). Sigue practicando y diviértete mucho con Delphi! |
También puedes ir acumulando y contando los valores válidos en la variable x y en otra variable contador:
PD: Te he resuelto la taréa, solo porque veo que haz puesto empeño. (Hay otra gente que viene con el enunciado y espera que le des una función terminada y probada) De todos modos, te veo un poco verde en el manejo de los componentes visuales y sus eventos (Edits, Botonoes, etc.). Deberías leer un poco más sobre el tema. Sigue practicando y diviértete mucho con Delphi![/quote] mil gracias lo hice igual pero al momento de correrlo me marca un error en if (TryStrToFloat(edit1.text, aux)) then en ,aux) aqui me lo marca que puede ser muchas gracias por la ayuda. Nota: me sale esto there ins no overloaded version of 'trystrtofloat' that can be caller with these arguments |
Cita:
mil gracias lo hice igual pero al momento de correrlo me marca un error en if (TryStrToFloat(edit1.text, aux)) then en ,aux) aqui me lo marca que puede ser muchas gracias por la ayuda. Nota: me sale esto there ins no overloaded version of 'trystrtofloat' that can be caller with these arguments |
Declara x como Double en lugar de Real.
// Saludos |
Si no te funciona lo de "real" a "double" tendrías que chequear si haces un use de la librería SysUtils...
|
Cita:
|
Hola.
¿ Por que no nos pegas aquí todo el código que llevás echo ? Así es más fácil ver donde está el error. Saludos. :) |
Cita:
// Saludos |
Hola
Pensándolo bién... no voy a ser haragán, aquí tenés el código completo: Lo único que tenés que hacer es asignar FormCreate al evento OnCreate de Form1. Saludos. |
Cita:
// Saludos |
Cita:
Bueno, eso es por que consideré que dejar vacío un edit es un error. Una nota debería ser algún valor numérico... Saludos. |
Claro, pero el poder dejar vacíos algunos Edits es justo la razón por la que alenbebote abrió el hilo:
Cita:
Cita:
|
Me parece que le estamos liando más que ayudando. ¿Que tal algo más simplificado en el evento OnClick del Button1?
De esta forma puedes sacar el promedio de los 6 examenes, de 3, ó de 5 si te da la gana, solo tiene en cuenta aquellos que tienen algo escrito |
Hola roman.
Pues tenes razón, no había reparado en eso... En ese caso solamente habría que cambiar la línea:
Por:
Saludos.:) Edito: Y casi me olvido!!!, también el procedimiento asociado al botón:
|
Cita:
// Saludos |
Cita:
|
Hola.
Bueno, si no vamos a ser exquisitos con las comprobaciones y sólo importan aquellos Edits en que se ingresó un dato válido, basta con que hagas:
Saludos. |
Cita:
Código:
(10 + 10 + 10) / 3Código:
(10 + 10 + 10 + 0 + 0 + 0) / 6// Saludos |
Tenes razón, estoy empecinado con la idea de los seis valores... :D
Pero de todos modos sigo pensando que evaluando en el evento OnExit, se logra un código mas sencillo y compacto que haciéndolo todo al finalizar:
Saludos. |
Yo compartiría el evento OnKeyPress de los 6 edit, para evitar las comprobaciones.
Un Saludo. |
Hola.
Y me quedé pensando...:rolleyes: Se puede simplificar aún más:
Saludos. |
Cita:
El método que propones está bien... Siempre y cuando el usuario no tenga la osadía de regresar a algún edit a cambiar un valor o algo así :) // Saludos |
¿Que error es el que ta Alen? Porque no debería darte ninguno. Lo único que se me ocurre que pudiese fallarte es que por la configuración regional, tu ordenador tenga asignado como separador decimal la coma ',' y no el punto '.'
Prueba con
De todas maneras, si nos pones el error será muchísimo mas facil ayudarte. Ah! y como dice Roman con mucha razón, acuerdate de inicializar las variables a 0 para evitar el posible error de que se creen con valores basura.
|
Cita:
En realidad la primera propuesta que había pensado hacía la media aritmética al finalizar: Pero pensé que no correspondía al nivel del ejercicio. Luego me embarullé tratando de simplificar... Saludos.:) |
Todo las formas que le estais explicando son fantásticas, seguramente así es como lo hariamos la mayoría.
Pero si le están pidiendo que haga un promedio del valor de 6 variables, supongo que su profesor se morirá de un espasmo si le ve usar ComponentCount, TryStrTofloat y otras funciones similares que es improbable que conozca (Seguramente FormatFloat ya estaría de sobra). Seamos consecuentes que el nivel del ejercicio que le están pidiendo. |
Cita:
|
| La franja horaria es GMT +2. Ahora son las 17:24:53. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi