Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - DickGumshoe

#271
Te pongo un ejemplo para que lo entiendas mejor:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *cadena; //Puntero a char
    char prueba[] = "Hola Mundo"; //Contenido que queremos poner en "cadena"
    int i, longitud;
    char letra = 'a'; //para asignarle valores a "cadena"

    cadena = (char*) malloc (27 * sizeof(char)); //Tenemos 27 espacios para la cadena.

    for(i=0; i<26; i++)
    {
        cadena[i] = letra;
        letra++; //Pasamos a la siguiente letra del abecedario (valor en ASCII).
    }
    cadena[26] = '\0';

    //Ya tenemos asignados todos los valores de "cadena". Ahora, vamos a concatenar.

    longitud = strlen(prueba); //Hallamos la longitud para después quitar memoria

    cadena = (char*) realloc (cadena, (longitud + 1) * sizeof(char)); 
    //Sabemos que "prueba" tiene una longitud menor que "cadena". Por tanto, con realloc() se le quita memoria a "cadena",
    //ya que no vamos a necesitar tanta. Se le reserva "longitud + 1" porque strlen() coge la longitud de la cadena sin
    // el '\0' final.

    strcpy(cadena, prueba); //Concatenamos

    puts(cadena); //¡Ya tenemos "Hola Mundo en cadena!

    return 0;

}



Si tienes alguna duda sobre cómo utilizar realloc() u otra función, pregunta.

Saludos.
#272
A no ser que uses memoria dinámica, no va a poder ser...

Tendrías que declarar la variable "caracteres" como un puntero a char, reservarle memoria, y asignarle los valores que quieras, por ejemplo, las letras del abecedario, como en tu ejemplo.

Después, hallas la longitud de "prueba" con strlen(), y dejas a "caracteres" con esa longitud (usando la función realloc() ).

Finalmente, copias el contenido con strcpy.

Saludos.
#273
Le he hecho algunas modificaciones al programa.

Me he dado cuenta que no necesito hallar si un número es primo o no, ya que si empiezo a ver los divisores del "número grande" desde el 2 hacia delante, siempre será divisible antes por un número primo que por uno compuesto. Así me calcula todo mucho más rápido, ¡y llega a la solución correcta!  :D

Saludos.
#274
El prototipo es: char *gets(char *cadena);

Por tanto, tendrías que poner:

gets(nombre_de_variable_de_tipo_*char);

Es decir:


#include <stdio.h>
#define SM 60
main()
{
int seg, resto, min;
int segu, minut, restoo;
char nombres[25];
printf("Si quieres de minutos a segundos, escribelo, y si quieres de segundos a minutos escribe 1\n");
gets(nombres);
if(strcmp(nombres, "de minutos a segundos")==0)
{
printf("Vamos a convertir los minutos que quieres convertir a segundos.\n");
scanf("%d", &min);
min = min * SM;
printf("El resultado es %d segundos.\n", min);
}
else if(strcmp(nombres, "de segundos a minutos")==0)
{
printf("Elige el numero de segundos a convertir\n");
scanf("%d", &segu);
    minut = segu / SM;
    restoo = segu % SM;
printf("%d segundos son, %d minutos y %d segundos", segu, minut, restoo);
}

while(1);
}


Saludos.
#275
Muchas gracias a los dos por responder.

En este código se me olvidó comprobar que los números primos obtenidos sean factores del número dado, pero ha sido al ponerlo en el foro, antes lo tenía pero lo borraría haciendo pruebas, supongo. Ahora lo hago de nuevo y edito el primer mensaje.

Sí, uno de los problemas que he tenido ha sido que al ser un número tan grande, por mucho que pusiera long long int, a veces el ordenador se inventa un número... Intentaré ver qué puedo hacer respecto a esto.

¿Entonces la función esPrimo no calcula bien si un número es primo o no? He hecho varias pruebas y creo que sí lo hace bien, al menos con números bajos...

Saludos.
#276
Hola.

Para entretenerme, estoy haciendo problemas en C de una página de Internet que son como retos.  

Uno de ellos dice así:

CitarThe prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?

Sería algo como: "Los factores primos de 13195 son 5, 7, 13 y 29. ¿Cuál es el factor primo más grande de 600851475143 ?"

He intentado esto:


#include <stdio.h>
#include <stdlib.h>

int main()
{
   long long int i, resultado;
   long long int MAX = 600851475143;
   int num;

   for( i = 2; i < MAX; i++)
   {
      if(MAX % i == 0)
      {
          MAX /= i;
          i = 2;
       }
   }

   printf("El maximo factor primo de 600851475143 es %d\n\n", MAX );

   system("pause");
   return 0;
}



Pero no me da el resultado correcto  :-\

He hecho varios intentos, pero nada...

Saludos.
#277
Yo lo que haría sería una función que calcule si cierto número es primo o no (en vez de ponerlo en main(), para que lo que viene después sea más fácil).

Entonces, con un bucle for, iría incrementando una variable en uno, y calculando si el valor de dicha variable es un número primo mediante la función anterior. En caso de serlo, aumentas una variable llamada contador y guardas el número primo en un vector. Cuando el contador llegue a 10, tendrás los 10 primeros números primos.

Saludos.
#278
De nada  :D
#279
Como una de las variables "palabra" o "cadena" es auxiliar, en una de ellas, cada vez que encuentres una carácter que coincida, puedes sustituirlo por un espacio.

Saludos.
#280
Bien, veo que ya has puesto el código entre GeSHi.

No puedes inicializar la cadena de caracteres así (poniéndole de tamaño "largo"). Para eso existe la memoria dinámica.

Sería tal y como te dije en http://foro.elhacker.net/programacion_cc/ayuda_con_el_uso_de_malloc_en_char_c-t365940.0.html .

Por otra parte, veo que a los vectores les das valores desde "vector[1]". Debes saber que los vectores empiezan por 0, no por el 1.

Por cierto, te recomiendo no declarar variables en mitad del código. A la larga puede resultar algo lioso cuando trabajes con códigos más extensos y darte problemas.

He editado tu código:



#include<stdio.h>
#include<conio.h>

int main(){
   int largo;
   char **vector1;
   int i;
   printf("Ingrese la cantidad de personas en : ");
   scanf("%d",&largo);
   fflush(stdin); // Después de scanf si vas a usar gets() encuentras problemas. Por ello, usamos fflush(stdin); (aunque yo recomiendo usar getchar() ).

  vector1 = (char**)malloc(largo * sizeof(char*)); //Inicializamos filas
  for(i = 0; i < largo; i++) vector1[i] = (char*)malloc(40 * sizeof(char)); //Inicializamos columnas
/* Con las dos líneas anteriores, hemos creado una matriz de "largo" número de filas, cada cual tiene 40 columnas (40 espacios). */

   for (i=0;i<largo;i++){
       printf("\nIngrese el valor para la posicion %d: ",i);
       gets( vector1[i]); //Pedimos cadenas de caracteres
   }


   for (i=0;i<largo;i++){
       printf("Vector[%d]: %s \n",i+1,vector1[i]); //Imprimimos el contenido

   }
   
    free(vector1);
   return 0;
}



Saludos.