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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 86
71  Programación / Programación C/C++ / Re: Círculo para dibujar una luna en: 5 Noviembre 2020, 21:09 pm
y como se metería esa ecuación dentro de un for? porque lo que se me da mal de c es usar lenguaje matemático
No vamos a darte la tarea hecha.
Intenta hacerlo tú y será entonces cuando aprendas.

Si no lo consigues, adjunta tu código usando las etiquetas de Código GeSHi y el problema concreto que tienes y entonces será más fácil que alguien intente ayudarte.
72  Programación / Programación C/C++ / Re: Círculo para dibujar una luna en: 5 Noviembre 2020, 18:42 pm
Ya te adelanto que no vas a conseguir unos círculos perfectos pero es lo que se puede hacer.

Para dibujar un círculo tienes que aprovechar la propiedad de que un círculo de radio r está formado por todos los puntos que se encuentran a una distancia de r desde el centro.
La distancia entre dos puntos A(xa, ya) y B(xb, yb) se calcula como: d(A,B) = raiz((xa - xb)^2 + (ya - yb)^2).

PD: Cuanto mayor sea el círculo mejor se verá. Para "círculos" muy pequeños, el resultado serán cuadrados  :-\
73  Programación / Programación C/C++ / Re: Algoritmo en: 5 Noviembre 2020, 00:44 am
Como ya te comenté, depende mucho de cómo tengas estructurado tu código. Pero a grandes rasgos, aunque la función sea de tipo void puedes poner un return y hacer que termine.
Código
  1. void func(){
  2.  printf("Hola ");
  3.  return;
  4.  printf(" Mundo!");
  5. }

SALIDA:
Código:
Hola


También puedes usar una variable de control que mientras sea válida, sigue y cuando no lo sea, termine.
74  Programación / Programación C/C++ / Re: Algoritmo en: 4 Noviembre 2020, 19:50 pm
Eso es porque no puedes usar el operador de módulo (%) entre un número decimal y un entero.
Código
  1. producto1 += digito * ((int)pow(2,i) % 11);
Con esto haces un casting a int de la potencia de 2 truncando su parte decimal y después obtienes el resto de dividir ese número entre 11.
75  Programación / Programación C/C++ / Re: Ayuda con arreglo char en: 4 Noviembre 2020, 18:45 pm
Los problemas que tienes son los siguientes:
  • No inicializas las cadenas por lo que tienen basura y por eso te aparecen caracteres extraños.
En el ejemplo que te puse solo usé strcat() para que vieras su uso pero si la cadena no está inicializada hay que usar primero strcpy() para copiar el contenido y borrar la posible basura que haya y luego ya strcat().
Código
  1. int main(){
  2.  char frase[] = "Hola";
  3.  int n = 3;
  4.  char fraseN[strlen(frase) * n + 1]; // Se suma 1 para el caracter final '\0'
  5.  strcpy(fraseN, frase); // Copias el contenido de frase en fraseN eliminando la basura que pudiera tener
  6.  for(int i = 1; i < n; ++i){ // Empiezas el contador en 1 en vez de en 0 para no concatenar el contenido una vez mas
  7.    strcat(fraseN, frase); // Elimina el '\0', concatena la cadena e incluye otro '\0' al final
  8.  }
  9.  printf("%s\n", fraseN); // Resultado: HolaHolaHola
  10. }
  • En las líneas 72 y 73 no puedes usar strlen() porque esto te devuelve la longitud que tiene la cadena y no tienes ninguna cadena guardada. Lo que necesitas es que te devuelva la capacidad total del array y eso se consigue con sizeof().
  • En la línea 73 tienes que multiplicar por n2, no por n.
  • Las líneas 89-93 son innecesarias pues estás haciendo lo mismo que en las líneas 77-81.
76  Programación / Programación C/C++ / Re: Algoritmo en: 4 Noviembre 2020, 16:02 pm
Si lo que quieres hacer es para cada dígito d, calcular: d * ((2^posicion) % 11); ya lo estás haciendo en la línea 64...
No sé dónde está el problema... :huh:

Lo que sí veo son varias cosas:
  • Utiliza constantes para guardar los números que aparecen sueltos. Así tu programa será más fácil de modificar y de entender.
  • Los bucles do-while() no los aprovechas. Si metes un exit(), el programa terminará y no te dejará elegir otro número hasta que introduzcas uno válido.
Código
  1. const int MIN = 0; // lo que sea
  2. const int MAX = 1000; // lo que sea
  3. int main(){
  4.  int valido = 1; // variable entera usada como bool (0/1)
  5.  int numero;
  6.  do {
  7.    printf("Introduce un numero entre [%d, %d]: ", MIN, MAX);
  8.    scanf("%d", &numero);
  9.    valido = (numero >= MIN && numero <= MAX); // valdra 1 si es cierto y 0 en caso contrario
  10.    if(!valido){
  11.      printf("El numero no es valido\n");
  12.    }
  13.  } while(!valido);
  14.  //...
  15. }

  • Las comparaciones se hacen con el operador de comparación ==, no con el operador de asignación =. En los últimos condicionales estás asignando los valores y como son distintos a 0, siempre te dará true esa condición.
Código
  1. int numero = 10;
  2. if(numero == 10)  // Si el numero es igual a 10...
  3.  printf("El numero es 10\n"); // ...muestras ese mensaje
  4. if(numero = 5) // Asignas el valor 5 a numero y como es != 0, es true...
  5.  printf("El numero es 5\n"); // ...muestras ese mensaje tambien
  6. if(numero = 0) // Asignas el valor 0 a numero y como es == 0, es false...
  7.  printf("El numero es 0\n"); // ... no se muestra este mensaje

Al final numero valdrá 0 y la SALIDA será:
Código:
El numero es 10
El numero es 5
77  Programación / Programación General / Re: script & codigo en: 4 Noviembre 2020, 04:57 am
Normalmente cuando se habla de script se está haciendo referencia a un fichero que contiene instrucciones para ser interpretadas. En cambio, los "códigos" (o cualquier otro nombre que se utilice) suele hacer referencia a ficheros con instrucciones que van a ser compiladas.

Si estás empezando igual no conoces la diferencia entre los lenguajes compilados e interpretados.
Los lenguajes compilados usan un compilador para convertir el código fuente (código) en otro fichero con lenguaje máquina. Este lenguaje máquina es el que ejecuta el ordenador sin necesidad de tener el código fuente.
Por otro lado, los lenguajes interpretados usan un intérprete que se encarga de traducir a código máquina y ejecutar cada línea del código (script) una por una. Aquí es necesario tener siempre a mano el script pues en ningún momento se genera un fichero con el código máquina.

Algunos scripts bastante utilizados son los .sh (de Linux) o los .bat (de Windows) que suelen usarse para automatizar tareas agrupando varias instrucciones del sistema que quieres que se ejecuten juntas. También tienes lenguajes interpretados muy utilizados como Python cuyos ficheros se suelen denominar scripts.
78  Programación / Programación C/C++ / Re: Cadenas en: 4 Noviembre 2020, 02:02 am
A mí me funciona bien el código. Puede ser porque estés introduciendo cadenas demasiado largas o valores inválidos que hacen que queden restos en el buffer. De todas formas te comento algunas mejoras y seguro que si las implementas funciona correctamente:

  • Utiliza constantes para los tamaños.
Código
  1. const int SIZE_CADENA = 500;
  2. const int SIZE_PALABRA = 50;
  3.  
  4. int main(){
  5.  char cadena[SIZE_CADENA];
  6.  char palabra[SIZE_PALABRA];
  7.  //...
  8. }

  • Utiliza nombres de variables más descriptivos.
Código:
x -> longitudCadena
w -> longitudPalabra
z -> indiceBusqueda

  • La función gets() no debe usarse. Es más seguro utilizar fgets():
Código
  1. printf("Introduce una cadena: ");
  2. fgets(cadena, SIZE_CADENA, stdin); // guarda como mucho SIZE_CADENA-1 caracteres porque reserva el ultimo para '\0'

  • La función fflush() está implementada para limpiar el buffer de salida (stdout), no el de entrada (stdin). Tampoco se recomienda usarlo. Además cuando se usa gets()/fgets(), también se guarda el Enter ('\n') al final de la cadena.
Con el siguiente código puedes limpiar el buffer de entrada y al mismo tiempo eliminar el salto de línea al final de la cadena. Dos pájaros de un tiro (esto debe ir justo después del fgets() anterior):
* Para usar strlen() hay que importar <string.h>. Esta función devuelve la longitud de la cadena sin contar el '\0' (strlen("hola\0") = 4)
Código
  1. if(cadena[strlen(cadena)-1] == '\n') cadena[strlen(cadena)-1] = '\0'; // Si el ultimo caracter es el Enter, lo eliminamos con '\0'
  2. else while(getchar() != '\n'); // sino, significa que la cadena no cabia entera y quedan restos en el buffer. Lo limpiamos.

Después de usar scanf() también quedará un '\n' en el buffer. Lo puedes limpiar de nuevo con el while():
Código
  1. scanf("%d", &repetir);
  2. while(getchar() != '\n'); // Limpia todo el buffer de entrada

Si sigue sin funcionarte comenta qué pruebas estás haciendo o porque sabes que no te está leyendo la segunda cadena.
79  Programación / Programación C/C++ / Re: Trabajo universidad en: 3 Noviembre 2020, 19:04 pm
Para preguntas que no estén relacionadas las unas con las otras es mejor que abras un nuevo tema y especifiques su contenido en el título para que sea descriptivo.

Todo depende de cómo tengas estructurado el código. Obviamente si utilizas la función exit() el programa finalizará. Puedes hacerlo con un bucle controlado por una condición de validez o si el código se encuentra en otra función, puedes volver a la función que la llamó mediante un return.

Si incluyes tu código aunque sea de forma simplificada (lo necesario para poder visualizar tu problema) será más fácil concretarte una forma de hacerlo.

PD: Para insertar código utiliza las etiquetas de Código GeSHi y selecciona el lenguaje de programación adecuado.
80  Programación / Programación C/C++ / Re: Trabajo universidad en: 3 Noviembre 2020, 16:01 pm
Si lo que quieres es multiplicar por un conjunto finito de valores {1,2,3,4,5,6,7,8,9,0} y después volver a empezar por el 1 otra vez la mejor manera es utilizar el operador %.

La operación a%b devuelve el resto de dividir a/b y por las reglas de la división: el resto siempre será menor que el divisor. Si haces a%10=b, para cualquier a se cumplirá b < 10.

Código
  1. for(int i = 1; i <= 20; ++i){
  2.  printf("%d ", i % 10);
  3. }

Salida:
Código:
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 86
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines