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 - rir3760

#1431
Debe funcionar siempre y cuando la declaracion de la estructura se encuentre antes de la declaracion y uso de la funcion.

¿Puedes publicar el codigo fuente completo del programa?

Un saludo
#1432
Cita de: Chico_Maravilla en  8 Noviembre 2011, 12:59 PMno entiendo eso de los printf, pues el /n, tengo entendido que salta de renglón, y si iría al final, mostraría en el siguiente renglón el scanf

El problema al llamar a printf de esta forma:
printf("\n Input an integer value for x: ");
scanf("%d", &x);

Es que no tenemos garantizado que la cadena "\n Input an integer value for x: " se imprima inmediatamente en la salida estándar (puede quedarse en su bufer).

Para tener esa seguridad se debe cumplir uno de tres escenarios:

A) El bufer de la salida estándar se llena.
B) La secuencia de caracteres a imprimir termina con '\n'.
C) Se indica explícitamente que debe vaciarse el bufer.

El primer caso no lo controlamos así que mejor nos olvidamos de el.

El segundo caso se consigue al llamar a la función así:
printf("\n Input an integer value for x: \n");
Pero como no se formatea valor alguno se puede sustituir esa función con "puts" generando el mismo efecto (ella imprime automáticamente el '\n' después de la cadena indicada):
puts("\n Input an integer value for x: ");

El tercer caso se consigue llamando a la función "fflush" para que vacie el bufer del stream indicado como argumento (stdout es la salida estándar):
printf("Input an integer value for x: ");
fflush(stdout);


Por ultimo lo subjetivo (cuestión de estilo): cuando uno escribe no pasa al siguiente renglón y empieza a escribir ahí así nada mas.

En su lugar uno escribe hasta alcanzar el final del renglón y solo entonces pasa al siguiente. Esa es la idea de tener el '\n' al final de la cadena (y no al principio).

Un saludo
#1433
Para empezar elimina el uso de <conio.h>, mas informacion en el tema Lo que no hay que hacer en C/C++. Nivel basico.

Para leer tres numeros debes utilizar:
printf("Introduce tres numeros separados por espacios:\n");
scanf("%i %i %i", &num1, &num2, &num3);


Un saludo
#1434
Cita de: s00rk en  8 Noviembre 2011, 14:26 PMNo deberia ser &palabra[0 + 1] ?
Ambas son equivalentes y resultan en la direccion en memoria del segundo elemento del array. Para el caso la forma mas corta es "palabra + 1".

Un saludo
#1435
Si ese programa lo copiaste tal cual de ese libro mejor cambia a otro ya que tiene un error y varios "detallitos". El tema obligatorio a leer en este caso es [Libros/Papers] C/C++.

El error se encuentra en la ultima llamada a scanf, se deben pasar dos argumentos pero la función solo recibe uno:
scanf("%d");

Los detallitos son la definición de la función "main" (en C99 no se puede omitir el tipo) y las llamadas a printf: las tres primeras, al no terminar con el carácter '\n', no dan garantías de que el bufer de la salida estándar se vacié y las tres ultimas se pueden remplazar con llamadas a "puts".

Un saludo
#1436
Cita de: Principios en C en  7 Noviembre 2011, 02:28 AMPero si los ordena de la a la z... ya lo ejecute varias veces.
Tienes razón. Lo siento.

El programa tiene errores en la función "insertar", demasiado larga en mi opinión y si tratas de insertar los caracteres 'a', 'b' y 'c' en ese orden todos menos el primero se pierden, revisala.

Un saludo
#1437
Te respondo al MP:

Los datos en el programa aparecen desordenados en el programa porque este ... no los ordena. Para ello necesitas de una función mas que ordene los nodos de la lista. En el caso de listas vinculadas lo usual es MergeSort pero si apenas empiezas es mejor la ordenación al insertar cada nodo.

En cuanto a la función que imprima el numero de caracteres antes de uno dado debes descomponer eso también en funciones: una que imprima el resultado y otra que calcule el numero de caracteres antes del buscado.

Y faltan los requisitos de la(s) funcion(es). Sin eso difícil dar una respuesta exacta.

No voy a hacerlo todo. En el caso del calculo de forma recursiva del numero de elementos antes de uno dado ello se puede realizar de esta forma:
struct nodo {
    char valor;
    struct nodo *sig;
};

/* ... */

struct nodo *nodos_antes(struct nodo *p, int *num, char ch);

/* ... */

void imprimir_na(struct nodo *p, char ch)
{
    int num = 0;
   
    if (nodos_antes(p, &num, ch) == NULL)
        puts("El caracter no es parte de la lista");
    else
        printf("Hay %d elementos antes del caracter %c\n", num, ch);
}

struct nodo *nodos_antes(struct nodo *p, int *num, char ch)
{
    if (p == NULL || p->valor == ch)
        return p;
    else {
        ++*num;
        return nodos_antes(p->sig, num, ch);
    }
}

Es una función de soporte "imprimir_na" que imprime el resultado de la otra función recursiva "nodos_antes".

Un saludo
#1438
Cita de: Crutchlow_13 en  6 Noviembre 2011, 20:52 PMP.D: Por qué si no pongo getchar(); antes de return 0; no se puede apreciar bien el resultado porqué la pantalla se va muy rápido.
Ese no es problema del programa sino de tu entorno de desarrollo (IDE), la mayoría como los basados en LCC o la versión gratuita de Microsoft no tienen ese problema.

¿Cual estas utilizando? (Si es Dev-C++ simplemente cambia a otro)

Un saludo
#1439
Programación C/C++ / Re: Ayuda con recursion...
6 Noviembre 2011, 01:44 AM
En el primer punto te piden que imprimas la lista en orden inverso, para ello basta con:
void imprimir_inv(struct lista_nodos *p)
{
    if (p != NULL){
        imprimir_inv(p->sigPtr);
        printf("valor == %c\n", p->valor);
    }
}


Para la segunda función debes indicar los requisitos de esta con relación al numero de nodos antes y después del nodo a buscar.

Un saludo
#1440
Cita de: Sasori_MoP en  6 Noviembre 2011, 00:48 AMnecesito ayuda con un programa que me pide sumar un numero con su inverso
Primero tienes que definir "inverso" ya que 8 no es el inverso de 8.

Cita de: Sasori_MoP en  6 Noviembre 2011, 00:48 AMen bases desde 10 hasta 2, obviamente en base 10 es facil pero en las otras es donde me complico ya que no sé como hacer que en vez de por ejemplo me sume 8 + 8 = 16  lo haga en base 9 8+8=18
El problema no es la suma sino presentar el resultado en una base dada, para ello puedes empezar utilizando el motor de búsqueda de los foros para revisar los temas sobre conversión de bases numéricas.

También debes presentar los avances que llevas del programa.

Un saludo