Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Alex Rodríguez

Páginas: 1 ... 73 74 75 76 77 [78] 79 80 81 82 83 ... 93
1541
A ver si no me pierdo aunque después de darle unas cuantas vueltas me he perdido

plano es un JPanel sobre el cual se dibuja.

Graficadora contiene como atributo un objeto tipo "plano" que está declarado como tipo estático

¿Por qué lo declaras de tipo estático?


En el método Grafico() de Graficadora se crea un JFrame pero le añades dos actionListener, línea repetida

        start.addActionListener(frame);
        //start.addActionListener(frame);


Supongo que esta repetición es un error ¿no?



El objeto plano que es un JPanel atributo de Graficadora es añadido al Jframe (tipo Ventana que extiende a JFrame) con que se trabaja en el método Grafico()

Luego haces la invocación para dibujar la línea cuando se pulsa el botón

Graficadora.plano.paintSQRFunc(Graficadora.plano.getGraphics(),a5,b5,c5,-200,200);

¿Por qué usas este tipo de invocación? (Supongo que la respuesta es la misma a por qué declaras el objeto plano como atributo estático... pero no logro entender el por qué)


1542
Parece que tienes Java instalado, pero tal y como dice el mensaje de bluej para trabajar en desarrollo de código no basta con Java, sino que hace falta el JDK. Puedes probar a desinstalar java (todas las versiones) e intentar instalar el paquete jdk (que te reinstalará java). Haz una copia de seguridad antes de nada por si tienes problemas. Saludos

1543
Viendo el código no entiendo bien qué es lo que quieres hacer, o como dices si no estás entendiendo bien el concepto de función.

double numero (double x) significa que esta función te devuelve un double y te pide un double para poder ser ejecutada.

Para invocar esta función necesitarías llamarla con por ejemplo numero(3.63) donde 3.63 es el número que le pasas a la función.

Tú escribes numero; pero esto no es una llamada válida a la función.

Si entiendo lo que quieres hacer podrías escribir:

double pedirNumeroyDevolverlo ()
{
       printf("Por favor introduzca un n%cmero: ",163);
       scanf("%lf", &x);
       return x;
}

El () indica que no hay que pasarle ningún dato a la función. double indica que la función devolverá un tipo double.

El valor que te devuelve la función tendrías que almacenarlo o invocarlo directamente. Si lo almacenas podría ser en una variable auxiliar como:

numeroObtenido = pedirNumeroyDevolverlo();

Y luego...

printf("El seno trigonom%ctrico del n%cmero introducido es: %.2lf \n\n", 130, 163, sin(numeroObtenido) );

La otra alternativa sería invocarlo directamente (aunque esto es más lioso y no te aseguro que vaya a funcionar):

printf("El seno trigonom%ctrico del n%cmero introducido es: %.2lf \n\n", 130, 163, sin(pedirNumeroyDevolverlo()) );

Saludos.

1544
No está depurado, pero con este código creo que se puede construir la idea de lo que quieres hacer, hay cosas que faltan por completar y cosas que habría que mejorar, pero lo esencial que es recorrer todos los resultados lo hace, a partir de ahí una idea es guardarlos en un array, pero también podría hacerse de otras maneras, quizás más sencillas:

Código: [Seleccionar]
Option Explicit
Dim xlApp As Excel.Application
Dim wb As Workbook
Dim ws As Worksheet
Dim strResults, strSearch As String
Dim encontrado As Boolean
Dim contador As Integer
Dim rngfnd As Range
Dim txtSearch As String
Dim resultadosHoja(50) As String
Dim resultadoCelda(50) As String

Private Sub Form_Load()
contador = 0
End Sub

Private Sub cmdSearch_Click()
txtSearch = Text1
Set xlApp = New Excel.Application
Set wb = xlApp.Workbooks.Open("C:\Users\Asus\Desktop\prueba.xls")
For Each ws In ActiveWorkbook.Worksheets
Set rngfnd = ws.UsedRange.Find(What:=txtSearch, After:=ws.UsedRange.Cells(ws.UsedRange.Cells.Count), LookIn:= _
       xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
       xlNext, MatchCase:=False, SearchFormat:=False)
Do While Not rngfnd Is Nothing And contador < 20
   encontrado = True
  MsgBox ("Encontrado resultado en hoja" & ws.Name & " y celda " & rngfnd.Address & " contador = " & contador)
   resultadosHoja(contador) = "" & ws.Name
   resultadoCelda(contador) = rngfnd.Address
   Set rngfnd = ws.UsedRange.FindNext(After:=rngfnd)
   contador = contador + 1
Loop
Next ws
contador = 0
If encontrado = False Then
   MsgBox "Texto no encontrado en el archivo Excel"
End If
End Sub
Private Sub CommandSalir_Click()
'BOTON Salir'
xlApp.Workbooks.Close
xlApp.Quit
Application.Quit
xlApp.Parent.Quit
End
End Sub

1545
De nada, ya me extrañaba que no hubieras respondido  :D

1546
Esto ha sido un despiste: int numprod='0'; debido a que estaba probando con declarar numprod como char.

La comilla simple sería de aplicación cuando trabajas con caracteres (char). Si no usas la comilla simple en realidad no estás trabajando con un carácter, otra cosa es que el compilador realice la conversión automática y te lo permita...

1547
No estoy seguro de que usar EOF sea correcto ¿por qué usas EOF?

Existen problemas con la conversión de tipos con getchar y scanf debido a que el salto de línea cuando pulsas enter queda almacenado en el buffer y se asigna a la siguiente petición de datos, esto son detalles internos de c. (Por eso en el siguiente código he introducido saltoLinea = getchar(); para absorber ese caracter \n):

Código: [Seleccionar]
// Ejercicio 4.19: uso de la instrucción switch //

#include <stdio.h>
int main() {
    int numprod='0';
    char saltoLinea;
    int cantidad=0;
    float total = 0;
    saltoLinea = '1';
    printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (- en producto y cantidad para terminar):\n", 163, 161);
    while ( numprod != '-') {
        printf("Por favor introduzca numero de producto:");
        numprod = getchar();
        saltoLinea = getchar();
        printf("Por favor introduzca cantidad vendida:");
        scanf("%d", &cantidad);
        saltoLinea = getchar();

        switch (numprod) {
            printf("numprod vale ahora %c", numprod);
        case '1':
            total += 2.98 * cantidad;
            break;

        case '2':
            total += 4.50 * cantidad;
            break;

        case '3':
            total += 9.98 * cantidad;
            break;

        case '4':
            total += 4.49 * cantidad;
            break;
        case '5':
            total += 6.87 * cantidad;
            break;
        case '-':
            break;
        default:
            printf("\n\nEl n%cmero de producto no es el correcto\n", 163);
            printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
            break;
        } // Fin switch//
    } //Fin de while //
    printf("\n\nEl valor total de ventas es de %.2f $\n\n", total);
//system("pause");
    return 0;
}

1548
El problema está en que los computadores no pueden trabajar con números infinitamente grandes, tienen un límite. Hay factoriales que no podrás calcular por exceder la capacidad de los computadores. Puedes solucionar parcialmente el problema usando el tipo de dato double en vez del tipo int, ya que double es el que permite un rango numérico más amplio (tiene más capacidad), pero siempre llegará un momento en que excedas la capacidad y ya no sea posible realizar el cálculo. Saludos.

1549
Hola, para cada acción un constructor diferente no es la idea. En principio, trabajaremos con un constructor para una clase y diferentes métodos (tantos como sea necesario).

Un método debe encargarse de una tarea, por ejemplo establecer el valor de un atributo.

En este caso tendríamos diferentes métodos: un método cuyo fin es establecer el valor de tipoBomba (atributo de la clase):

Código: [Seleccionar]
public void setTipoBomba (int valorTipoBomba){
        tipoBomba = valorTipoBomba;
}

Otro método cuyo fin es mostrar un mensaje por pantalla indicando el tipo de bomba que tiene como atributo un objeto:

Código: [Seleccionar]
public void dimeTipoMotor (){
        switch (tipoBomba){
            case 0: System.out.println ("No hay un valor definido para tipo de bomba");break;
            case 1: System.out.println ("La bomba es una bomba de agua");break;
            case 2: System.out.println ("La bomba es una bomba de gasolina");break;
            case 3: System.out.println ("La bomba es una boomba de hormigon");break;
            case 4: System.out.println ("La bomba es una bomba alimenticia");break;
            default : System.out.println ("No existe un valor valido para tipo de bomba");break;
        }


Esto es lo que dice el enunciado del ejercicio: <<Crea un método tipo procedimiento denominado dimeTipoMotor()>>

Saludos.

1550
Hola, los métodos get y set se consideran en general métodos estándar que se incluyen en casi todas las clases java. Por tanto, para todos los atributos debes definir métodos get y set, aquí te falta crear los métodos get. Otra cosa poco correcta es inicializar con tipoFluido = "Diesel";, sería más correcto tipoFluido = ""; ó tipoFluido = "Desconocido";, lo mismo para combustible. Y finalmente debes cambiar el método set tipo Bomba y dejarlo para establecer el valor de tipo de bomba y no para indicar de qué tipo es la bomba, para eso debes crear un nuevo método que sirva para decir de qué tipo es la bomba...

1551
Hola, he revisado el código y está correcto. Saludos.

1552
Aprender a programar desde cero / Re:Ejercicio java (CU00632B)
« en: 26 de Abril 2014, 19:51 »
Hola, he revisado el código y está correcto tanto para CU00632B como para CU00633B. Te falta que se muestren algunos mensajes de cambio por ejemplo en  public void setCasado (boolean valorCasado){casado = valorCasado;} no has incluido un mensaje de cambio, pero como indicas con lo que has hecho se ve que ya has resuelto bien el ejercicio. Saludoss

1553
Hola, la respuesta a esta cuestión ya ha sido indicada por Ogramar más arriba:

Citar
Si la información existe en forma de atributos del objeto, no será necesario en principio pasarle la información puesto que ésta ya está disponible. Por otro lado, si se decidiera pasarle un parámetro no bastaría con pasarle la duración de una canción, sino que tendrías que pasarle public float obtenerDuracionDisco(float duracionCancion1, float duracionCancion2, float duracionCancion3, float duracionCancion4, float duracionCancion5, float duracionCancion6 ) si por ejemplo el disco tuviera seis canciones, para poder calcular la duración del disco completo. Esto que he puesto es solo un ejemplo para entender el concepto, en realidad no se haría así sino usando arrays u objetos pero esto es algo más avanzado de lo que se está explicando en esa entrega del curso. Saludos

La información de la duración de cada canción del disco estará almacenada en el propio disco, por tanto lo que hay que hacer es preguntarle al disco cuál es la duración total (sin pasarle ningún parámetro puesto que el propio disco ya tiene esa información).

Las soluciones que podrían ser correctas son las ya indicadas también anteriormente en este mismo hilo:


float obtenerDuracionCancionMinutos (int numeroDeCancion) { } ó getDurancionCancionMinutos(int numeroDeCancion) { }  (Es tipo función).

void pedirDuraciones() { } (Es tipo procedimiento)

float obtenerDuracionDiscoMinutos() { } ó getDuracionDiscoMinutos { }(Es tipo función)

void añadirCancion (String cancion, float duracion) { }  (Es tipo procedimiento)


1554
Hola, por favor no repitas la misma pregunta en diferentes hilos del foro. Sobre la cuestión que comentas, lo primero que necesitas saber es qué línea del archivo quieres modificar. Supongamos que quieres modificar aquellas líneas que contengan 14 y cambiar ese 14 por un 12. Una forma de hacerlo sería leer los datos del archivo y guardarlos en un array, pero allí donde se detecte un 14 en vez de guardar el 14 guardamos el 12. Después escribimos el fichero (con lo cual destruimos lo existente anteriormente) con el contenido del nuevo array. No he probado el código con lo cual no te puedo asegurar que funcione a la primera. La idea sería un código así:

Código: [Seleccionar]
from array import *
# Lectura del contenido del fichero
try:
ins = open( "file.txt", "r" )
contenidoLinea = []
for line in ins:
if line == 14:
        insertamos = 12
    else:
        insertamos = line

    contenidoLinea.append( insertamos )
ins.close()
finally:
f.close()
except IOError:
pass



# Escritura del nuevo contenido del fichero
try:
# Escribimos el fichero
f = open("file.txt", "w")
try:
for idx, val in enumerate(contenidoLinea):
f.writelines(contenidoLinea[idx]) # Escribimos la línea
finally:
f.close()
except IOError:
pass


1555
Hola, te comento las cuestiones a tener en cuenta:

Para insertar código usa el botón # que aparece en el editor del foro, así el código saldrá como código, de otra forma puede aparecer distorsionado. Para ello pulsa el botón # y escribe el código entre las etiquetas [ code ] ... [ / code] que aparecerán.

Text1 = CemEntregado se lee "Text1 toma el valor que tenga CemEntregado"

Esto es incorrecto, tú quieres que CemEntregado tome el valor de Text1, por tanto habría que escribir:

CemEntregado = Text1

Recordar siempre que a = b se lee como "a toma el valor que tenga b", o en el caso de

a = a * a se lee "a toma el valor que tenía a previmente multiplicado por el valor que tenía a previamente"

Por ejemplo a = 6

a = a * a

Supone que a ahora tiene el valor 6*6, es decir, a = 36



La siguiente cuestión:

CemEntregado = MsgBox("Cemento retirado de almacén") se lee de la siguiente manera "CemEntregado vale <<mostrar por pantalla Cemento retirado de almacén>>". Esto no es una sintaxis válida. ¿Qué necesitamos? Que en cada pasada del bucle se pida el dato de cemento entregado, esa es la condición que permite la evolución del bucle hasta llegar a poder salir de él. Si no hay evolución, el bucle se repite indefinidamente (bucle infinito) La sintaxis a emplear para realizar esta operación es:

CemEntregado = Val(InputBox("Introduzca cantidad de cemento entregado", "Entrega"))

Esto se lee: "La variable CemEntregado toma el valor numérico (Val) introducido por el usuario en una ventana de petición de datos (inputbox) donde el mensaje que se muestra al usuario es "Introduzca cantidad de cemento entregado" y el titulillo de la ventana es "Entrega".

El código nos quedaría entonces así (eliminamos el text1, puesto que no vamos a hacer uso del textbox, sino que la petición de datos se hará a través del inputbox, que es otra forma de pedir datos al usuario:

Código: [Seleccionar]
Option Explicit
Dim TotalCemento As Integer
Dim CemEntregado As Integer

Private Sub Form_load()
Form1.Caption = "Control de cemento en almacén"
Label1.Alignment = 2
Label1.Caption = "Por favor, introduzca el total de kilos de cemento a retirar:"
Command1.Caption = "Retirar cemento"
TotalCemento = 25000
End Sub

Private Sub Command1_Click()
Do While TotalCemento >= 6000
CemEntregado = Val(InputBox("Introduzca cantidad de cemento entregado", "Entrega"))
TotalCemento = TotalCemento - CemEntregado
Loop
Label2.Alignment = 2
Label2.FontBold = True
Label2 = "El inventario ha bajado de 6000 kilos de cemento. Por favor, comuníquelo al almacén"
End Sub

También nos podemos plantear la opción de hacerlo a través del textBox. Pero en ese caso no podríamos usar un bucle do while, porque no tendríamos forma de salir de él, la repetición se produciría porque el usuario iría haciendo click muchas veces en el commandbutton hasta llegar a cumplirse la condición de terminación. En este momento mostraríamos un mensaje indicando que ya no se puede retirar más cemento:

Código: [Seleccionar]
Option Explicit
Dim TotalCemento As Integer
Dim CemEntregado As Integer

Private Sub Form_load()
Text1 = "" 'Limpiamos el text1
Label2 = "" 'Limpiamos el text2
Form1.Caption = "Control de cemento en almacén"
Label1.Alignment = 2
Label1.Caption = "Por favor, introduzca el total de kilos de cemento a retirar:"
Command1.Caption = "Retirar cemento"
TotalCemento = 25000
End Sub

Private Sub Command1_Click()
If TotalCemento >= 6000 Then
CemEntregado = Text1
TotalCemento = TotalCemento - CemEntregado
MsgBox ("Se han retirado " & CemEntregado & " kilos de cemento y quedan " & TotalCemento & " kgs")
Text1 = "" 'Limpiamos el text1
Else
MsgBox ("El inventario ha bajado de 6000 kilos de cemento. Por favor, comuníquelo al almacén")
End If
End Sub

¿Es mejor hacerlo con un bucle do while o mediante el commandbutton? Depende de lo que se pretenda. A veces hay múltiples maneras de hacer las cosas y ninguna de ellas puede decirse que sea mejor que otra, simplemente serían distintas alternativas. Posiblemente este problema se pueda resolver de más maneras, muchas veces hay múltiples alternativas. En este caso al ser un ejercicio fíjate en lo que pida el enunciado y hazlo de la forma que se adapte mejor a lo que indique el enunciado.

Quizás me he alargado demasiado, si hay algo que no se entienda dímelo. Saludos.

1556
Aprender a programar desde cero / Re:Ejercicio 5 Semana 8
« en: 24 de Abril 2014, 12:21 »
Hola, el planteamiento es correcto y en realidad no sería necesario usar un interruptor, aunque se puede introducir si se quiere. La introducción de un interruptor simplemente sería auxiliar (no estrictamente necesario).

Podría verse así:

1.Inicio
   2. TotalCajero = 600
   3. alcanzadoLimite = falso
   4. Mientras alcanzadoLimite = falso Hacer
      Mostrar “Introduzca el importe a extraer”
      Pedir Cantidad
      TotalCajero = TotalCajero – Cantidad
      Si TotalCajero < 0 Entonces
                   alcanzadoLimite = verdadero
      FinSi
   Repetir
   5. Mostrar “Se ha excedido de la cantidad máxima permitida”
6. Fin

La variable TotalCajero funciona como acumulador.

Aquí el interruptor es alcanzadoLimite y toma valor verdadero sólo cuando se alcanza el límite de 600 euros, momento en que se produciría la salida del bucle. El interés de usar un interruptor es que en algunas ocasiones las condiciones a evaluar son muy complejas y usar un interruptor hace más fácil la escritura y el entendimiento del código.

Saludos,

1557
Parece una pregunta tonta pero no lo es en absoluto, de hecho es bastante molesto... Hay varias maneras de solucionar esto, lógicamente se puede digamos que automatizar. Una forma "pobre" (pero que nos puede dar una idea) de resolverlo sería esta:

printf("%c Ponemos el acento o tilde en canel%cn\n",162, 162); //ó

Es decir, invocar el código de carácter que corresponde a la letra acentuada...

Códigos:

á: 160
é: 130
í: 161
ó: 162
ú: 163
Á: 181
É: 144
Í: 214
Ó: 224
Ú: 23
ñ: 164
Ñ: 165



1558
Seguramente sí, hay un dicho que dice que un programa siempre se puede hacer más eficiente, y otro que dice que si pretendes esperar a que un programa tenga la máxima eficiencia antes de comenzar a utilizarlo, nunca comenzarás a utilizarlo. Para mejorar la eficiencia de los programas hay varias vías, las principales estudiar, razonar, practicar y aprender de otros... Así que aquí seguimos aprendiendo  :)

 

1559
Hola, no tienes bien las condiciones, estás poniendo "OR" cuando debes poner "AND"

Tienes escrito:

Código: [Seleccionar]
if (vertical != 1 || vertical != lado){
                               if (horizontal != 1 || horizontal != lado){
                                             printf("o");
                                             horizontal++; } // fin if 2 //
                               else {
                                    printf("*");
                                    horizontal++;}
                               } // fin if 1 //

                 else {
                 printf("*");
                 horizontal++; }


Debe ser:

Código: [Seleccionar]
if (vertical != 1 && vertical != lado){
                               if (horizontal != 1 && horizontal != lado){
                                             printf("o");
                                             horizontal++; } // fin if 2 //
                               else {
                                    printf("*");
                                    horizontal++;}
                               } // fin if 1 //

                 else {
                 printf("*");
                 horizontal++; }


Completo:
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

// Ejercicio 3.34: Mostrar con "*" el perimetro de un cuadrado en funcion de su lado //

int main() {
      int lado = 0;
      int horizontal = 1;
      int vertical = 1;

      printf("Por favor introduzca la medida del lado (entre 1 y 20): "); scanf("%d", &lado);
      printf("\n");

      // Si se introduce un numero erroneo //
      while (lado < 1 || lado > 20) {
            printf("El numero introducido no es correcto\n\n");
            printf("Por favor introduzca la medida del lado (entre 1 y 20): "); scanf("%d", &lado);
            printf("\n");
            } // Fin while //


     // Si el numero es correcto //

     while (vertical <= lado) {
           while (horizontal <= lado) {
                 if (vertical != 1 && vertical != lado){
                               if (horizontal != 1 && horizontal != lado){
                                             printf("o");
                                             horizontal++; } // fin if 2 //
                               else {
                                    printf("*");
                                    horizontal++;}
                               } // fin if 1 //

                 else {
                 printf("*");
                 horizontal++; }
                 } // fin while 2 //
           horizontal = 1;
           printf("\n");
           vertical++; } // fin while 1 //

     printf("\n");


system("pause");
return 0;
}

Saludos.

1560
Código para búsqueda en todas las hojas de excel:

Código: [Seleccionar]
Dim xlApp As Excel.Application
Dim wb As Workbook
Dim ws As Worksheet
Dim strResults, strSearch As String
Dim encontrado As Boolean

Private Sub cmdSearch_Click()
Dim rngfnd As Range
Dim txtSearch As String
txtSearch = Text1
Set xlApp = New Excel.Application
Set wb = xlApp.Workbooks.Open("C:\Users\Asus\Desktop\prueba2.xls")

For Each ws In ActiveWorkbook.worksheets
Set rngfnd = ws.UsedRange.Find(What:=txtSearch, After:=ws.UsedRange.Cells(ws.UsedRange.Cells.Count), LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False)
If Not rngfnd Is Nothing Then
   ' Mostrar el resultado
   encontrado = True
   MsgBox "Texto encontrado en la hoja " & ws.Name & " y en la celda: " & rngfnd.Address
End If
Next ws
If encontrado = False Then
   MsgBox "Texto no encontrado en el archivo Excel"
End If
End Sub

Páginas: 1 ... 73 74 75 76 77 [78] 79 80 81 82 83 ... 93

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".