elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 ... 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 [47] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ... 102
461  Programación / Programación C/C++ / Re: Alguna manera de saber si un numero es narcisista sin utilizar el pow? en: 12 Noviembre 2019, 18:10 pm
En este caso se trata del cálculo de números narcisistas por lo que el número tendrá mínimo 1 dígito. Entonces la "potencia" siempre sería de exponente 1 como mínimo por lo que no hay que tener en cuenta exponentes negativos o 0.
462  Programación / Java / Re: ayuda con ejercicio para calcular las notas medias en: 12 Noviembre 2019, 15:13 pm
El ejercicio dice asi.

calcular la nota parcial y mostrará tanto la nota final como la nota final ponderada tal y como se muestra a continuación. Pedirá el peso que tiene el parcial en la nota final, la nota sobre 100 que obtenido el estudiante y si tiene puntos extra o no. Los puntos extra se sumarán a la nota del examen hasta llegar a 100 que será el valor máximo para este concepto. Es decir, si alguien tiene una nota de 95 y 10 puntos extra, el valor que obtendrá será 100 y no 105 que sería lo que realmente le correspondería. La nota final ponderada la calculará multiplicando la nota por el peso entre 100:

lo que ido haciendo  a sido sacar esos datos por el metodo Scanner, pero luego necesito hacer unos calculos con ellos, si tienes razon no cambiado el void para que haga el return. el problema es sacar el dato del if bueno uno de ellos, poco a poco vamos..
Bueno lo que yo entiendo de esto es que te piden el porcentaje de la nota final que vale dicho examen (por ejemplo un 50%), la nota de dicho examen (que si es 100 pues la nota final sería 50 porque faltarían otros exámenes o cosas con el otro 50% de la nota y unos puntos extra que se pueden sumar al examen hasta llegar a 100.

Podrías pedir al usuario que introduza si tiene o no puntos extra y después si sí que los tiene pedirle la cantidad exacta o directamente pedir la cantidad y quien no tenga puntos extra que ponga 0.
Código:
INICIO
    PEDIR porcentaje
    PEDIR notaExamen
    PEDIR puntosExtra
    notaExamen = notaExamen + puntosExtra
   
    SI notaExamen > 100 ENTONCES
        notaExamen = 100
    FIN SI
   
    notaFinal = notaExamen * porcentaje / 100
    MOSTRAR notaFinal
FIN
Este sería el pseudocódigo si pides directamente la cantidad de puntos extra. El porcentaje se introduce en tanto por ciento (0 - 100) para dividirlo por 100 en la última línea. Si se introduce en tanto por uno (0 - 1) entonces no hay que dividir por 100.

Código:
INICIO
    PEDIR porcentaje
    PEDIR notaExamen
    PEDIR hayPuntosExtra

    SI hayPuntosExtra ENTONCES
        PEDIR puntosExtra
        notaExamen = notaExamen + puntosExtra
    FIN SI

    SI notaExamen > 100 ENTONCES
        notaExamen = 100
    FIN SI

    notaFinal = notaExamen * porcentaje / 100
    MOSTRAR notaFinal
FIN
Y este sería el pseudocódigo para la versión en la que primero preguntas si hay o no puntos extra. El condicional para corregir los números superiores a 100 lo estoy poniendo después en ambos casos por si alguien introduce como <notaExamen> un número mayor que 100, para que la corrección también se aplique.

Intenta pasar ambos pseudocódigos a Java porque así es como aprendes. Si miras códigos ya hechos no sirve de nada ya que lo entenderás según lo vayas leyendo pero el día que lo hagas tú, te aparecerán errores y no sabrás de qué son.
Y si tienes algún problema para pasar alguno de los pseudocódigos siempre puedes preguntar por aquí poniendo los códigos entre etiquetas de Código GeSHi.
463  Programación / Java / Re: ayuda con ejercicio para calcular las notas medias en: 12 Noviembre 2019, 01:18 am
Bueno pues digamos que los nombres de las clases/métodos no son muy descriptivos.
Tampoco sé cómo es la fórmula que necesitas para calcular la media.
No puedes hacer un <return> a un método de tipo <void> (<void> significa justamente que no devuelve nada)
Y la línea del <else> sobra un poco (bastante) yo creo.

Y por favor, los códigos entre etiquetas de Código GeSHi
464  Programación / Programación C/C++ / Re: Ayuda con Ejercicio de arreglos en Lenguaje C en: 8 Noviembre 2019, 01:57 am
El enunciado no indica que los vectores que se ingresan estan ordenados, que parece ser asumido por las soluciones presentadas.
Cierto. Fue una cosa que di por supuesto sin darme cuenta.
Mi implementación necesitaría ordenar primero cada uno de los vectores y después mezclarlos en uno.
465  Programación / Programación C/C++ / Re: Ayuda con Ejercicio de arreglos en Lenguaje C en: 7 Noviembre 2019, 14:38 pm
Pon el código entre etiquetas de Código GeSHi (en lenguaje C).

La solución en pseudocódigo sería algo así:
Código:
lista1 : array[n]
lista2 : array[m]
listaMezcla : array[n+m]
INICIO
    PARA i := 0 hasta n-1 HACER
        PEDIR lista1[i]
    FIN PARA
    PARA i := 0 hasta m-1 HACER
        PEDIR lista2[i]
    FIN PARA
   
    i := 0
    j := 0
    k := 0
    MIENTRAS i < n && j < m HACER // Mientras ninguna de las lista llegue al final...
        SI lista1[i] < lista2[j] ENTONCES // Si el valor actual de lista1 es menor...
            listaMezcla[k++] := lista1[i] // ...guardas dicho valor e...
            i := i + 1 // ...incrementas el valor del indice que recorre la lista1
        SINO // Si el valor actual de la lista2 es menor o igual
            listaMezcla[k++] := lista2[j] // ...guardas dicho valor e...
            j := j + 1 // ...incrementas el valor del indice que recorre la lista2
        FIN SI
    FIN MIENTRAS

    MIENTRAS i < n HACER // Si lista 1 es mas larga, terminas de meterla
        listaMezcla[k++] := lista1[i]
    FIN MIENTRAS

    MIENTRAS j < n HACER // Si lista 2 es mas larga, terminas de meterla
        listaMezcla[k++] := lista2[j]
    FIN MIENTRAS
FIN
466  Programación / Programación C/C++ / Re: tengo errores la verdad soy muy novato y se me dificulta encontrar los errores en: 5 Noviembre 2019, 13:20 pm
Si te paras a leer tu mensaje verás que el código está modificado y se han agregado listas en las x entre corchetes [], letra cursiva en las i entre corchetes [], negritas en las b entre corchetes, etc.

Para evitar todos estos problemas mete tu código entre etiquetas de Código GeSHi seleccionando el lenguaje adecuado (C++ en tu caso). Así además se numerará cada línea de tu código para poder referirnos a una línea concreta.

Los errores los puedes poner sin etiquetas o entre etiquetas de code sin especificar ningún lenguaje.

Que quede algo así:
Código
  1. #include <iostream>
  2. //...
  3. // TU CODIGO C++

Código:
Etiqueta code sin especificar lenguaje para los errores 
467  Programación / Programación C/C++ / Re: ayuda en c++ en: 5 Noviembre 2019, 13:14 pm
Algo que me ayuda a mi a programar es crear unas órdenes de exactamente lo que quiero hacer instrucción a instrucción independientemente de mis conocimientos en el lenguaje de programación. Después implemento cada instrucción en código.
En caso de no ser capaz de completar una de esas instrucciones me leo algún capítulo de un libro sobre esa temática. Te recomiendo descargar varios libros del lenguaje. Mínimo tener 10 libros descargados. Puedes ir leyéndolos todos a lo largo del tiempo. Mirarlos todos sin pararte mucho para usarlos como referencia y acordarte: "Ahh pues este tema de las funciones venía con muchos ejemplos sencillos en el libro Programación para principiantes y muy bien explicado en fundamentos de la programación en C++. Voy a revisar como era.

Entonces, según tu enunciado, las instrucciones que yo planteo de lo que tengo que hacer:
LEER 100 NÚMEROS QUE SEAN POSITIVOS,  CALCULAR Y MOSTRAR LA SUMA DE ESOS 100 NÚMEROS.

Leer 100 numeros.
Código
  1. cout << "Pon 100 numeros positivos" << endl;
  2. int numero = 0;
  3. for (short int i = 0; i != 100; ++i)
  4. {
  5. cin >> numero;
  6. }

Que sean positivos:
Código
  1. cout << "Pon numeros" << endl;
  2. int numero = 0;
  3. for (short int i = 0; i != 100; ++i)
  4. {
  5.   if (numero > 0)
  6.   {
  7.   cin >> numero;
  8.   }
  9.  
  10.   else
  11.   {
  12.   --i;
  13.   }
  14. }

Calcular la suma de esos 100 numeros:
Código
  1. cout << "Pon numeros" << endl;
  2. int numero = 0;
  3. int suma = 0;
  4. for (short int i = 0; i != 100; ++i)
  5. {
  6.   if (numero > 0)
  7.   {
  8.   cin >> numero;
  9.   suma = suma + numero;
  10.   }
  11.  
  12.   else
  13.   {
  14.   --i;
  15.   }
  16. }

Mostrar la suma de esos 100 numeros:
Código
  1. cout << "Bienvenido, puede sumar 100 numeros positivos." << endl;
  2. int numero = 0;
  3. int suma = 0;
  4. for (short int i = 0; i != 100; ++i)
  5. {
  6.   if (numero > 0)
  7.   {
  8.   cout << endl << "Introduce un número positivo ";
  9.   cin >> numero;
  10.   cout << endl << endl << "Realizando la suma número " << i << ":" << endl;
  11.   cout << "Se suma el número " << numero << " y " << suma;
  12.   suma = suma + numero;
  13.   cout << " y el resultado es " << suma << endl;
  14.   }
  15.  
  16.   else
  17.   {
  18.   cout << "El numero introducido no es positivo" << endl;
  19.   --i;
  20.   }
  21. }


Librerías, funciones, comentarios...
Código
  1. #include <iostream>
  2. /* Incluye la librería para entrada salida del sistema.
  3. En concreto para cout, cin, endl y cin.get()
  4. */
  5.  
  6. using namespace std;
  7. /* Utiliza el namespace standart
  8. En concreto para no tener que especificarlo manualmente std::cout std:cin ... y así reducir el tamaño del código.
  9. */
  10.  
  11.  
  12. int main() /* Función principal obligatoria del programa */
  13. { /* Inicio del cuerpo de la función principal */
  14.  
  15. cout << "Bienvenido, puede sumar 100 numeros positivos." << endl;
  16. /* Imprime en pantalla (y hace 1 salto de linea al final):
  17. Bienvenido, puede sumar 100 numeros positivos.
  18.  
  19.  
  20. unsigned int numero = 0;
  21. unsigned int suma = 0;
  22. /* Se declaran dos variables de tipo entero sin signo y se inicializan asignándoles valor 0.
  23. */
  24.  
  25.   for (unsigned short int i = 0; i != 100; ++i) /* Bucle for:
  26. Primer parámetro, inicialización de variables. Se declara una variable de tipo entero corto, sin signo y se le asigna valor 0.
  27. Segundo parámetro, condición a cumplir para salida del bucle. Continua el bucle mientras la variable i no tenga el valor 0 al evaluar la condición.
  28. Tercer parámetro, modificación para cumplir la condición. Se suma 1 a la variable i en cada iteración.
  29. */
  30.   { /* Cuerpo del bucle for.
  31.  
  32.       if (numero >= 0) /* Condición: Si la variable número es mayor o igual a 0. */
  33.      { /* Cuerpo del if.
  34.       cout << endl << "Introduce un número positivo ";
  35.  
  36.       cin >> numero;
  37. /* Se obtiene el numero introducido por el usuario */
  38.  
  39.      cout << endl << endl << "Realizando la suma número " << i << ":" << endl;
  40.      cout << "Se suma el número " << numero << " y " << suma;
  41.  
  42.     suma = suma + numero;
  43. /* Se suman la variable para guardar el resultado de la suma y el número del usuario.
  44.  
  45.     cout << " y el resultado es " << suma << endl;
  46. /* Se imprime el resultado de la suma */
  47.      }
  48.  
  49.      else /* Si el número es menor a 0 */
  50.      {
  51.      cout << "El numero introducido no es positivo" << endl;
  52.      --i; /* Se resta 1 a i para no contabilizar esta iteración del bucle for */
  53.      }
  54.   }
  55.  
  56. cin.get(); /* Pausa la consola para que no se cierre automáticamente. */
  57. return 0; /* Retorna el control a la función principal */
  58. }
Eso no me parece que funcione debidamente... No puedes primero comprobar que el número sea positivo y después pedir el número y sumarlo ya que la comprobación de que el número sea positivo tienes que realizarla, de una manera u otra, entre la petición del número y la suma.
468  Programación / Programación General / Re: Como puedo implementar un arbol (tree) en C++? en: 5 Noviembre 2019, 01:58 am
Para que tenga mas de un hijo debo implemenarlo con una lista enlazada.
struct node{
      struct node *padre;
      vector<node> hijos;
      void *dato; (Sustituir por el dato).
}
Bueno, lo primero es que para que cada nodo tenga más de un hijo no es necesario utilizar una lista enlazada. Los árboles binarios son los más extendidos en programación y cada nodo tiene dos punteros (hijoIzquierda e hijoDerecha) aunque puede tener tres para incluir otro puntero (padre) y poder ascender por el árbol. Depende de lo que tú necesites.
Sería más correcto decir que árboles de n hijos utilizan una lista enlazada y entonces te aviso que la lista enlazada de la STL es <list>, no <vector> aunque es una puntualización pequeña.
Debes estar seguro también de usar correctamente los punteros <void*>.

Quitando esos pequeños detalles, diría que la implementación no está mal.
469  Programación / Programación C/C++ / Re: ayuda en c++ en: 5 Noviembre 2019, 01:51 am
Bueno en lo que al enunciado respecta, leer 100 números suele referirse a pedir 100 números al usuario a no ser que se especifique leer números de un fichero u otra entrada diferente a la estándar (que es por teclado).
Lo de que sean números positivos puede interpretarse de dos maneras:
  • Comprobar que los números introducidos sean positivos y contabilizar únicamente los que lo sean.
  • Establecer la precondición de que sean positivos por lo que el programador/a (en este caso, tú) no tiene que tomar ninguna medida para asegurar que dicha condición se cumpla.
En este caso que no se concreta ninguna de las dos interpretaciones supongo que dependerá de lo que sabes o no sabes hacer. Si sabes (o deberías saber) hacer un filtro (usando <do while> normalmente) pues mi recomendación es que lo implementes ya que te ayudará a practicar más que si no lo haces; en cambio, si es algo que todavía no has estudiado, no pasa nada, se presupone que los valores serán positivos y no tienes que hacer nada.
Por último, mostrar la suma de los 100 números pues lógicamente es sumar los 100 valores positivos y mostrar el resultado final.

En lo que a tu código respecta, primero para próximas consultas (puedes modificar tu mensaje para corregirlo) los códigos colócalos entre etiquetas de Código GeSHi seleccionando el lenguaje correspondiente (C++ en tu caso).
Código
  1. #include <iostream>
  2. // La libreria math.h no la utilizas ya que esta se usa para funciones como calcular potencias, raices cuadradas y otras funciones complejas
  3. // Los operadores basicos (suma, resta, producto, division,...) no estan en esta libreria
  4. #include <math.h>
  5.  
  6. using namespace std;
  7.  
  8. int main (){  
  9.    int numeros;
  10.  
  11.    cout<<"Ingrese un numero:"<<endl; // Pedir un numero al usuario
  12.    cin>>numeros; // Guardarlo
  13.  
  14.    if (numeros>=0){ // Si el numero es mayor o igual que 0...
  15.        cout<<"La suma de los numeros es:"<<numeros + numeros; // ...mostrar el doble del numero introducido
  16.    }
  17.    else if (numeros<=100){ // si no es mayor o igual que 0 pero si es menor o igual que 100...
  18.        cout<<numeros+numeros; // mostrar el doble del numero introducido
  19.    }
  20.    else cout<<"no puede ser negativo"; // Si no es mayor o igual que 0 y tampoco es menor o igual que 100...Avisar de que no puede ser negativo
  21.  
  22.    return 0;
  23. }
Te he comentado tu código para que veas lo que estás haciendo. Los problemas que hay son los siguientes:
  • El usuario sólo introduce un número, no 100.
  • Si el número es 0 o mayor muestra su doble, si no es mayor o igual que 0 pero sí es menor o igual que 100 (cosa un poco rara), muestra el doble también y si no es mayor o igual que 0 y tampoco es menor o igual que 100 entonces no es válido. Ahora dime... habría algún número no válido?? Porque hasta donde yo sé contar, todos lo son... :silbar:

    El algoritmo correcto en pseudocódigo sería algo así (sin el filtro de los números positivos):
    Código:
    INICIO
        numerosIntroducidos := 0
        suma := 0
        MIENTRAS numerosIntroducidos < 100 HACER
            PEDIR numero
            suma := suma + numero
            numerosIntroducidos := numerosIntroducidos + 1
        FIN MIENTRAS
        MOSTRAR suma
    FIN
470  Programación / Programación C/C++ / Re: Listas + recursividad en: 2 Noviembre 2019, 20:24 pm
Bueno... antes de nada avisarte que este foro es específico para C/C++. Para cualquier otro tema como es el pseudocódigo, tienes el foro de "Programación General".

La segunda cosa a tratar es que entendía lo que querías decir hasta que has llegado al ejemplo... No puedes representar un ² como un 2 normal porque anda que no hay diferencia de 32 a 3²... :rolleyes:

Y por último, la función en cuestión. La función tiene dos parámetros el número inicial y la cantidad de sumandos que tendrá la operación. Si te fijas, tienes (4,3) que significa sumar 4 números al cuadrado empezando por el 3. Cuando ya tengas sumado el 3² te quedarás por sumar 3 números más y el primero será el 4 porque el 3 ya está sumado. Por lo que empezaría siendo (4,3) y después sería (3,4), después (2,5), luego (1,6) y finalmente (0,7) que como con el 0 haces un break no se llegaría a sumar el 7² por lo que parece que de primeras está bien.

Sin embargo el valor de <res> en el último caso es desconocido por lo que te podría salir cualquier cosa y no te daría el resultado esperado. Tienes dos formas de solucionar esto, una es asignando el valor 0 a <res> al principio de la función para que así en el caso base (n == 0) se devuelva un 0 que no afecta a la suma o usar un <return> en vez de un <break>
Código:
SI n == 0 ENTONCES
    return 0
FIN SI
return (d*d) + sum_squares(n-1, d+1)
Al usar <return> el <else> se vuelve innecesario y la creación de la variable <res> también.
Páginas: 1 ... 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 [47] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines