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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 ... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 [69] 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 ... 102
681  Programación / Programación C/C++ / Re: matriz de estructuras en: 6 Abril 2019, 01:34 am
Código
  1. mostrar(casillero[10][10], 69, x, y);
El error está ahí porque como te dice el propio error, la función está esperando un puntero de arrays (es decir, una matriz) y tú le estás pasando un elemento concreto de esa matriz (la casilla [10][10] de la matriz, la cual además se sale de los límites). La opción correcta sería:
Código
  1. mostrar(casillero, 69, x, y);
682  Programación / Programación C/C++ / Re: Programación C en: 4 Abril 2019, 22:07 pm
La función <printf()> tiene unos parámetros que cuesta ver si no se conocen. Te dejo AQUÍ un enlace a una página donde puedes ver todo lo relacionado con esa función.

El primer parámetro siempre es una cadena de <char> que puede:
  • Ser literal: Muestra tal cual lo que le pones.
Código
  1. printf("Hello World"); // Salida: Hello World
  • Usar especificadores de formato: Permite mostrar el valor de variables o funciones que devuelven algo.
Código
  1. int a = 3, b = 2;
  2. printf("La suma de %d + %d es %d", a, b, a+b); // Salida: La suma de 3 + 2 es 5
Puedes encontrar todos los especificadores de formato que hay en el enlace que te he dejado antes. Según el tipo de variable que quieres mostrar o literales (como en este caso) tienes que usar un especificador u otro.
683  Programación / Programación C/C++ / Re: Como comparar un string con una palabra dentro de un documeto de texto en: 4 Abril 2019, 22:00 pm
Entonces no tiene ningún sentido que guardes los datos en la matriz usando <strcpy()> como has hecho.
Lo que tienes que hacer es: de un fichero que ya tiene las variables guardadas con su valor y todo, meterlas en una matriz. Te dejo un ejemplo mejor que ir caracter a caracter...
Código
  1. #define MAX_SIZE 20
  2.  
  3. int main(){
  4.    FILE *fichero;
  5.    fichero = fopen("fichero.txt", "r");
  6.    char registro[MAX_SIZE][MAX_SIZE];
  7.    int num_variables = 0; // numero de variables/lineas del fichero
  8.    while(!feof(fichero))
  9.        fgets(registro[num_variables++], MAX_SIZE, fichero);
  10.    num_variables--;
  11. }

Luego tienes que pedir una palabra/variable y buscar en la matriz si está y si está devolver el valor que está a la derecha del "=". Mírate las funciones de la librería <string.h> ya que son de utilidad para este ejercicio.
PD: Te recomiendo pedir la palabra usando la función <fgets()> (tendrás que hacer una pequeña modificación para quitar el ENTER que le des al terminar de escribir la palabra).

Vete probando lo que te comento y cuando te quedes bloqueado, intento ayudarte más específicamente ya que ahora estoy ocupado. Suerte :-X
684  Programación / Programación C/C++ / Re: Como comparar un string con una palabra dentro de un documeto de texto en: 4 Abril 2019, 04:12 am
Vale. Todo depende de cómo estés guardando esos datos. Tienes varias opciones como pueden ser:
  • Pedir al usuario la cadena entera (no te lo recomiendo... el usuario siempre tiende a equivocarse y tenemos que vigilar todo lo que hace  :xD)
  • Pedir al usuario el numero y el resto de la cadena lo creamos nosotros
  • No pedir nada al usuario y establecer unos valores fijos en tiempo de compilacion
  • Estan los datos en el fichero y tenemos que cogerlos de ahi

Según la opción que quieras implementar, tenemos que seguir unas restricciones u otras.
Si no es la opción 4, yo te recomendaría la segunda opción, te evitas los problemas de la primera y no pierdes tanta funcionalidad como en la tercera (estoy suponiendo que nosotros conocemos los nombres de las variables de antemano, es decir, que van a ser "var1", "var2", etc) Si lo que quieres es que el usuario introduzca el nombre que el quiera para la variable, entonces hay que implementar la primera opción.

Coméntame cuál se adapta mejor a lo que quieres/necesitas e intentaré echarte una mano desde lo más básico para corregir el problema de raíz. :-X
685  Programación / Programación C/C++ / Re: Programación C en: 4 Abril 2019, 04:05 am
Coloca tus códigos entre etiquetas de código GeSHi (puedes seleccionar el lenguaje apropiado en el desplegable que hay encima del cuadro de texto)... :rolleyes:

Código
  1. // incluyes la libreria <stdio.h> para poder usar las funciones que contiene (printf() en este caso)
  2. #include <stdio.h>
  3.  
  4. int power(int m, int n); // prototipo de una funcion <power()> que recibe dos enteros <int> como parametros y devuelve otro entero <int>
  5.  
  6. /* prueba la funcion power */
  7. main() // funcion principal (lo que realmente se ejecuta. PD: Aunque funciona asi es recomendable poner <int main()> ya que devuelve un <int>
  8. {
  9.   int i; // declaras una variable <i> de tipo entero <int>
  10.   for (i = 0; i < 10; ++i) // bucle que empieza asignando 0 a <i>, se ejecuta mientras (i < 10) y en cada vuelta se suma 1 a <i> [(++i) es igual que (i = i+1) y que (i += 1)]
  11.      printf ("%d %d %d\n", i, power(2,i), power (-3,i); // muestra por pantalla 3 enteros, primero <i>, luego 2 elevado a <i> y luego -3 elevado a <i>
  12.   return 0; // devuelve 0, es lo que suele indicar que el programa se ha ejecutado correctamente hasta el final
  13. }
  14. /* power: eleva la base a la enesima potencia; n > = 0 */
  15. int power(int base, int n) // implementas la funcion cuyo prototipo has puesto al principio
  16. {
  17.   int i, p; // declaras dos variables enteras <int> que son <i> y <p>
  18.   p = 1 // asignas a p el valor 1. PD: Has olvidado el ;
  19.   for ( i = 1; i < = n; + + i) // bucle empezando en 1,  e incrementando de 1 en 1 mientras (i <= n)
  20.      p = p * base // asignas a <p> el producto de <p> por la variable <base> (primer parametro de la funcion. Se puede abreviar como p *= base
  21.   return p; // devuelve el valor que tiene <p> al terminar la funcion
  22. }
686  Programación / Programación C/C++ / Re: como inicializar una matriz char** en: 3 Abril 2019, 17:44 pm
Mientras que la función de <comparar()> es correcta, la de <ordenarVectorStrings()> no lo es. Tienes un lío bien montado ahí cuando la función es mucho más sencilla.
Además no necesitas devolver nada, puedes reordenar el array que pasas como parámetro simplemente.

Antes de nada si tienes errores hay que asegurarse de que el error no está en la entrada de datos. Por lo que te dejo aquí una forma de pedir las palabras y un algoritmo para ordenarlas. No te lo voy a dar hecho en C++ para no dártelo todo hecho, pero te servirá para guiarte:
Código:
// almacenar palabras
reservarFilas(palabras, cantidad_palabras)
para i := 0 hasta cantidad_palabras-1
    nueva_palabra := pedirPalabra()
    longitud := longitud(nueva_palabra)
    reservarColumnas(palabras[i], longitud)
    palabras[i] := nueva_palabra
fin para

// ordenar palabras
para i := 0 hasta cantidad_palabras-2
    para j := i+1 hasta cantidad_palabras-1
        si compararPalabras(palabras[i], palabras[j] > 0)
            intercambiar(palabras[i], palabras[j])
        fin si
    fin para
fin para

Espero que te sirva y si tienes alguna duda más o problema no olvides dejar tú código para poder corregir esos errores. :-X :-X
687  Programación / Programación C/C++ / Re: NECESITO AYUDA CON UNA ACTIVIDAD en: 3 Abril 2019, 10:44 am
Lo primero de todo coloca el código entre etiquetas de código GeSHi (encima del cuadro de texto tienes un desplegable dónde elegir el lenguaje apropiado)...

Y bueno, has creado todas las funciones dentro de una clase lo que luego complica más la forma de usarlas. Creo que sería más correcto dejarlo sólo como funciones sin meterlas dentro de una clase...

Un par de errores tontos que no te habrás dado cuenta al escribirlo:
  • En el <main> has usado <menuMensaje()> cuando no existe esa función.
  • En el <main> tienes dos <if> seguidos que comprueban lo mismo.
  • El cálculo del perímetro del paralelogramo no está bien...

Los menús te recomiendo hacerlos que muestren las opciones y devuelvan la que el usuario toma. Así puedes además hacer un filtro dentro de la propia función para que el usuario no introduzca valores no permitidos.
Código
  1. int menuPrincipal(){
  2.    int opcion;
  3.    do{
  4.        cout << "1. Calcular perimetro" << endl;
  5.        cout << "2. Calcular area" << endl;
  6.        cout << "3. Salir" << endl;
  7.        cout << "Opcion: ";
  8.        cin >> opcion;
  9.    }   while(opcion < 1 || opcion > 3);
  10.    return opcion;
  11. }
  12.  
  13. int main(){
  14.    int opcion1 = menuPrincipal();
  15.    if(opcion1 == 3)
  16.        return 1;
  17.    int opcion2 = menuSecundario(); // en este muestras las figuras disponibles con un esquema similar al anterior
  18.    switch(opcion2){
  19.        case 1:
  20.            if(opcion1 == 1)
  21.                // calculas el perimetro de la figura 1 elegida en la opcion 2
  22.            else
  23.                // calculas el area de la figura 1 elegida en la opcion 2
  24.            break;
  25.  
  26.        case 2:
  27.                // igual que antes con la figura 2
  28.             break;
  29.  
  30.         // asi con cada figura
  31.    }
  32. }
  33.  

Creo que te he dejado una plantilla bastante completita. Ahora sólo queda que la completes a tu gusto... :-X :-X
688  Programación / Programación C/C++ / Re: Como comparar un string con una palabra dentro de un documeto de texto en: 3 Abril 2019, 10:23 am
No entiendo muy bien lo que pretendes hacer, ni lo que haces, ya que lo que estás guardando es {"Var1" / "Var2" / "Var3"} pero en ningún momento estás guardando los números con el "=".
Además <palabra> es un <char> cuando creo que lo que querías es que fuera un array de <char>.

Y creo que esto no se cumple nunca:
Código
  1. palabra += read;
  2. strcmp(palabra, DATA_B[0]) == 0  && read == '='
Porque cuando <palabra> es igual a <DATA_B[0]> ("Var1") en <read> todavía tienes almacenado el "1".
Cuando en <read> tienes almacenado el "=", en <palabra> ya tendrías "Var1=" (asumiendo que corrijas lo de que <palabra> es un array). 
689  Programación / Programación C/C++ / Re: TENGO VARIAS DUDAS CON MI CODIGO en: 2 Abril 2019, 21:08 pm
Hola,
Soy nuevo en esto de la programación, vi tu duda y me pareció un buen reto el  poder encontrar solución tanto al programa, como a tus dudas, espero haber ayudado.
Código
  1. #include <iostream>
  2. #include <conio.h>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int arreglo[5], i, numero = 5, positivos = 0, negativos = 0,  mayor = 0, menor = 0, posicion = 0, posicion1 = 0,x;
  8. int pos[5] = {}, neg[5] = {};//inicializamos todas las posiciones en 0, ya que por defecto el compilador inicializa los elementos que no tienen un valor específico.
  9.  
  10.  
  11.  
  12. for (i = 0; i < numero; i++)//Se llena el arreglo con los 10 elementos que le pones
  13. {
  14. printf("Introduzca numero: \n");
  15. cin >>arreglo[i];
  16.  
  17.     //vamos guardando en nuestros array auxiliares los valor negativos y positivos
  18. if (arreglo[i] > 0) {
  19. pos[i] = arreglo[i];
  20.  
  21.  
  22. }else {
  23. neg[i] = arreglo[i];
  24. }
  25.  
  26. }
  27.  
  28. for (i = 0; i < numero; i++) {
  29.  
  30. if (arreglo[i] > mayor) {
  31. mayor = arreglo[i];
  32. posicion = i;
  33.  
  34. }
  35.  
  36. if (arreglo[i] < menor) {
  37. menor = arreglo[i];
  38. posicion1 = i;
  39.  
  40. }
  41. }
  42.  
  43. for (i = 0; i < numero; i++)
  44. {
  45. if (arreglo[i] > 0)
  46. positivos += arreglo[i];
  47.  
  48. }
  49.  
  50.  
  51. for (i = 0; i < numero; i++)
  52. {
  53. if (arreglo[i] < 0)
  54. negativos += arreglo[i];
  55.  
  56. }
  57.  
  58.  
  59. //Salidas por pantalla
  60. cout << "Los numero positivos son: ";
  61. for (i = 0; i < numero; i++) //bucle que nos permitira imprimir todos los numero positivos como negativos
  62. {
  63. if (pos[i] > 0)  
  64. {
  65. cout << (pos[i]) << "  ";
  66. }
  67. }
  68. printf("\nSuma de numeros positivos: %d", positivos);
  69. printf("\nEl numero mayor es: %d y se encuentra en la posicion: %d", mayor, posicion);
  70.  
  71. cout << "\nLos numero negativos son: ";
  72. for (i = 0; i < numero; i++) //bucle que nos permitira imprimir todos los numero positivos como negativos
  73. {
  74. if (neg[i] < 0)
  75. {
  76. cout << (neg[i]) << "  ";
  77. }
  78.  
  79. }
  80. printf("\nSuma de numeros negativos: %d", negativos);
  81. printf("\nEl numero menor es: %d y se encuentra en la posicion: %d", menor, posicion1);
  82.  
  83. return 0;
  84. }
  85.  
 
Ya que estás empezando vamos a comentar el programa aunque he de decir que no se hacen tareas por lo que no deberías haber puesto tu código tan pronto. De todos modos tiene algunos fallos así que vamos a verlos. Al final dejo otras correcciones aunque no son errores como tal está bien corregirlos también:
  • ¿Has probado a ejecutarlo?
Cuando muestras los negativos y los positivos, seguro que no aparecen como esperarías. Estás guardando valores en dos arrays/arreglos distintos por lo que cada uno va  a su "ritmo". No puedes usar sólo el contador <i>. Piénsalo a ver.
  • Problema si todos los valores son positivos o si todos los valores son negativos
Estás igual que al principio. Si ponemos <maximo = 0> y <minimo = 0>, si introducimos todo números positivos nos va a dar como resultado que el más pequeño es 0 cuando no lo es y si introducimos todo números negativos, nos va a dar que el máximo es 0 cuando tampoco lo es.

No sé si me he dejado algún error más, pero los más visibles son esos.

Ahora vamos a ver algunos detalles:
  • La librería <conio.h>
Esa librería no es estándar por lo que no todos los compiladores pueden usarla y es una librería que no es necesaria. La función más común de esa librería suele ser <getch()> que podemos sustituir por <getchar()> que se encuentra en <stdio.h> (en C) o <cstdio> (en C++) o por <cin.get()> que se encuentra en <iostream> en C++.
  • Mezcla de <printf()> y <cout>
<printf()> es una función incluida en <stdio.h> (en C) y <cstdio> (en C++). Sin embargo es más típica de C ya que en C++ se suele optar por usar <cin> y <cout> (incluído en <iostream>) para entrada y salida sustituyendo a <printf()> y <scanf()> de C.
  • Uso de constantes
No se recomienda usar "números mágicos", es decir, números literales que aparecen de repente y no sabes por qué tienen ese valor. ¿Por qué un 5? Imagina que tienes un programa muy grande y tienes muchos arrays/arreglos de tamaño 5 y un día dices "voy a aumentar la capacidad a 10", tendrías que sustituir todos los "5" por "10" con cuidado de que haya algún 5 que no tengas que cambiar. Para ello usa constantes y sólo tendrás que cambiar el valor de la constante una vez para que cambie en todo el programa.
Código
  1. const int MAX_SIZE = 5;
  2. int main(){
  3.    int array[MAX_SIZE];
  4.    // ...
  5. }
PD: La variable <numeros = 5> es lo que hace en tu caso de constante pero no lo aprovechas tanto como podrías/deberías (además constante mejor para asegurarte de que no vas a cambiar su valor por error).
  • Nombres de las variables
Asegúrate de que puedes saber qué indica una variable leyendo únicamente su nombre y no porque lo hayas programado tú y te acuerdes que "x" es tal cosa.
PD: Tienes una variable <x> que no usas en todo el programa me parece.
Por ejemplo el array de <pos> podría dar lugar a equivocación ya que "posiciones" se suele abreviar como "pos" en muchos sitios. Igual que <posicion> y <posicion1>; mejor que sean algo como <posicion_maximo> y <posicion_minimo>.
  • Sentencias innecesarias
A partir de la línea 60, cuando quieres mostrar los positivos y los negativos. Recorres los vectores/arrays/arreglos :xD donde has guardado por un lado los positivos y por otro los negativos. No tienes que comprobar otra vez que el valor que hay guardado sea positivo o negativo respectivamente. Además usa dos contadores para saber cuántos positivos hay (esos serán los que tienes que recorrer cuando los quieras mostrar) y otro igual pero para los negativos. (Si tienes 3 positivos y 2 negativos, no muestres 5 posiciones porque las últimas contendrán basura o 0).

Creo que no me dejo nada más. Suerte y ya me comentarás lo que consigas avanzar... O lo que no. :-X :-X
690  Programación / Programación C/C++ / Re: TENGO VARIAS DUDAS CON MI CODIGO en: 2 Abril 2019, 10:41 am
Para la próxima el código del programa entre etiquetas de Código GeSHi (puedes seleccionar el lenguaje de programación apropiado en un desplegable que hay encima del cuadro de texto)

Ese código tiene un problema. Si introduces todos los elementos positivos, el mínimo va a ser incorrecto y si introduces todos los elementos negativos, el máximo va a ser incorrecto... :rolleyes: :rolleyes:
Además tienes una variable que parece que es para contar los 0, pero no la estás usando...

Citar
1- NO SE POR QUE CUANDO ME IMPRIME LA POSICION EN LA QUE ESTA EL NUMERO MAYOR Y EL MENOR ME DA LA MISMA POSICION DEBERIA SER DIFERENTE
La posición es la misma porque lo estás guardando en la misma variable <posicion>... Por eso se sobreescribe la primera asignación que es la posición del número mayor y se guarda la última asignación que haces que es la posición del menor número del array.

Citar
2- COMO PUEDO CONTAR LA CANTIDAD DE NUMERO POSITIVOS QUE SON Y CUALES SON, YA CONSIGO QUE ME HAGA LA SUMA DE LOS NUMEROS POSITIVOS Y NEGATIVOS PERO NO CONSIGO SABER COMO IMPRIMIR CUALES SON Y CUANTOS SON
Para contar los números positivos y los negativos, crea dos variables <cantidad_positivos> y <cantidad_negativos> y como ya tienes una condición para detectar cuándo un número es positivo o negativo, sólo tienes que incrementar la variable correspondiente en cada caso.
Para saber cuáles son puedes:
  • Obtenerlo al momento que recorres el array.
Código:
Numeros positivos:
Desde i := 0 hasta elementos-1
    si v[i] > 0
        mostrar v[i]
    fin si

Numeros negativos:
Desde i := 0 hasta elementos-1
    si v[i] < 0
        mostrar v[i]
    fin si
También puedes recorrer el array una sola vez y mostrar cada elemento en una línea seguido de "positivo" o "negativo" según el caso.

  • Guardarlos en otro array auxiliar
Código:
Desde i := 0 hasta elementos-1
    si v[i] > 0
        guardar v[i] en array_positivos
    sino
        guardar v[i] en array_negativos
    fin si

  • Guardar los índices en otro array auxiliar. En este caso es un poco lío pero si trabajas con objetos más grandes es una forma de ahorrar espacio.
Código:
Desde i := 0 hasta elementos-1
    si v[i] > 0
        guardar i en indices positivos
    sino
        guardar i en indices negativos
    fin si
Páginas: 1 ... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 [69] 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines