Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Allitnam2004 en 1 Enero 2011, 21:03 pm



Título: Duda de Super Principiante
Publicado por: Allitnam2004 en 1 Enero 2011, 21:03 pm
Buen Año para todos! Para comenzar el 2011 decidi ponerme a aprender un poco de C. Viendo un par de tutoriales me disupse a escribir un par de lineas pero siento que siempre termino estancado con errores estupidos. En este caso con el clasico "Hola Mundo" un poco cambiado.
Código:
# include <stdio.h>
int main()
{
     char nom [20];
     printf("/n Escribe tu nombre: ");
     scanf("%s",nom);
     printf("/n Hola %s", nom);
     return (0);
}


En primer lugar queria saber como se hace para que la ventana que se abre al ejecutar el programa no se cierre inmediatamente despues de ejecutar. Segun tengo entendido se utiliza el system("pause") pero en muchos lados lei que no era la manera mas eficiente de hacerlo. Igualmente intente colocarlo al final del codigo pero el compilador no lo reconoce. Si me pudiera guiar mas o menos como hacerlo se los agradeceria mucho.
Tambien estoy teniendo problemos con el manipulador de formato /n ya que si lo tengo bien entendido es para que la linea haga un salto de renglon, pero una vez ejecutado simplemente muestra directamente la palabra /n.
Todas estas cosas que me pasan es por que estoy con un tutorial antiguo? Hay una version mas moderna del lenguaje o simplemente lo estoy escribiendo mal?
Muchas Gracias por su ayuda de antemano.


Título: Re: Duda de Super Principiante
Publicado por: xassiz~ en 1 Enero 2011, 21:05 pm
Es \n, no /n.

Para usar system() tienes que incluir stdlib.h, pero llámalo desde la consola mejor, así ves la salida :rolleyes:

En el return no se porque utilizas paréntesis.


Título: Re: Duda de Super Principiante
Publicado por: Amadeo Magnus en 1 Enero 2011, 21:26 pm
Para que no se te cierre la ventana apenas termine de ejecutarse el programa, podes correr el mismo a travez de una pantallita de DOS (vas a Inicio, Ejecutar, cmd...).


Título: Re: Duda de Super Principiante
Publicado por: Allitnam2004 en 1 Enero 2011, 21:41 pm
Muchas gracias muchachos, sabia que algun error estupido habia jaja. Para no seguir molestandolos mas, existe algun sitio donde pueda conseguir ejemplos de ejercicios en c basicos para ir aprendiendo?
Les reitero Muchas Gracias por su tiempo.
Un Abrazo


Título: Re: Duda de Super Principiante
Publicado por: xassiz~ en 1 Enero 2011, 22:10 pm
Para que no se te cierre la ventana apenas termine de ejecutarse el programa, podes correr el mismo a travez de una pantallita de DOS (vas a Inicio, Ejecutar, cmd...).
:huh:
[...], pero llámalo desde la consola mejor
;D

@Allitam2004: te recomiendo coger un libro en vez de aprender de tutoriales. Además de que va ser una fuente fiable, va a fijarse en todo tipo de detalles y siempre te va a incluir algún que otro ejercicio... Busca en el subforo sobre "El lenguaje de programación C", escrito por los mismos creadores de C.

Un saludos ^.^


Título: Re: Duda de Super Principiante
Publicado por: Oblivi0n en 2 Enero 2011, 14:58 pm
Citar
@Allitam2004: te recomiendo coger un libro en vez de aprender de tutoriales. Además de que va ser una fuente fiable, va a fijarse en todo tipo de detalles y siempre te va a incluir algún que otro ejercicio... Busca en el subforo sobre "El lenguaje de programación C", escrito por los mismos creadores de C.

Ese libro es mejor para gente que ya sabe algo de C, (creo que cuando lo lei ponia que era un libro de referencia)

Para mi los mejores son:

Name: Cómo Programar en C/C++ y Java (Los 15 primeros capitulos son dedicados solo a C, y explica las cosas muy bien)

Name: Programación en C, Metodologia, Algoritmos y Estructura de Datos

Todos estan en la sección de Libros/Papers que encabeza este subforo Ambos en castellano, si tienes conocimientos de ingles, te recomiendo ver libros en ingles, por que originalmente suelen estar escritos es ese idioma, y son mas completos, para practicar puedes buscar ejercicios en este mismo foro -> http://foro.elhacker.net/programacion_cc/recopilatorio_sources_interesantes-t298479.0.html

P.D: Intenta ahorrarte libros de "aprende en 21 dias"

Saludos!


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 2 Enero 2011, 20:53 pm
Hacking. Técnicas fundamentales --> Es un poco avanzando, pero mete ensamblador, C y hacking... pasaras horas!


Título: Re: Duda de Super Principiante
Publicado por: Oblivi0n en 2 Enero 2011, 20:57 pm
Hacking. Técnicas fundamentales --> Es un poco avanzando, pero mete ensamblador, C y hacking... pasaras horas!

Sagrini podrias decirme donde encontrar ese libro???  ;D :huh:


Título: Re: Duda de Super Principiante
Publicado por: leogtz en 2 Enero 2011, 20:59 pm
Yo siempre recomiendo el de "Lenguaje C" de Fco. Javier Ceballos, es excelente.


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 2 Enero 2011, 22:32 pm
Gracias Leo lo mirare xD
+1

Bueno, el mio tmb esta muy bien  :silbar:


Título: Re: Duda de Super Principiante
Publicado por: flony en 3 Enero 2011, 06:51 am
Sagrini de donde se puede descargar ese libro o tutorial?...lo podes subir  ;)


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 3 Enero 2011, 11:48 am
Que yo sepa.. o de la biblioteca que tengas por alli o en una libreria.
El libro es de John Ericson, y esta fenomenal xD...

No he podido encontrar ningun pdf :¬¬ :¬¬ :¬¬
Pero si lo pedis en un libreria o biblioteca os lo dan xD!


Título: Re: Duda de Super Principiante
Publicado por: Allitnam2004 en 4 Enero 2011, 22:28 pm
Muchisimas Gracias por tomarse el tiempo en despejar mis cuantiosas dudas.
Siguiendo con el tema, ya que me pareceria feo abrir otro tema con el mismo nombre, acudo a ustedes una vez mas para solventar mis dudas. Nuevamente es un ejemplo muy simple de C en el que se tiene que sacar el factorial de un numero dado.
Código:
#include <stdio.h>
void main()
{
    //Definicion de Variables
    int i,num;
    double fact;
    //Logica e Interaccion con el usuario
    printf("\nIntroduzca un Valor para realizar el Factorial= ");
    scanf("%d",&num);
    for(i=1;i>num;i++)
    {
        fact=fact*i;
    }
    printf("\nEl Factorial del Numero %d es %lf",num,fact);
}
Yo creo que la logica en si, esta bien. Sin Embargo el resultado del factorial me tira simbolos en lugar del resultado mismo.

Si me pudiesen hacer ver que esta mal estaria eternamente agradecido. Muchas Gracias de nuevo. Un Abrazo


Título: Re: Duda de Super Principiante
Publicado por: Oblivi0n en 4 Enero 2011, 22:46 pm
Buenas allitnam.

1 error = la funcion main() se recomienda que sea del tipo int
2 error = el factorial de un entero nunca va tener decimales, asique es mejor usar un int, que un double
3 error = la variable fact no esta inicializada en ningun momento, procura inicializar las variables
4 error = este es de entendimiento del factorial, un factorial es la multiplicacion de un numero por todos sus anteriores, te dejo la forma adecuada en el code.

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    //Definicion de Variables
  6.    int i,num;
  7.    int fact = 1;
  8.    //Logica e Interaccion con el usuario
  9.    printf("\nIntroduzca un Valor para realizar el Factorial= ");
  10.    scanf("%d",&num);
  11.    for(i=num;i>0;i--)
  12.    {
  13.        fact = fact*i;
  14.    }
  15.    printf("\nEl Factorial del Numero %d es %d",num,fact);
  16.    return 0;
  17. }
  18.  

P.D: Recuerda utilizar las etiquetas GeSHi al poner codigos

Saludos y suerte con el aprendizaje :)


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 4 Enero 2011, 22:51 pm
Una vez solucionado esto, pasate por aqui
http://foro.elhacker.net/ejercicios/ejercicios_en_c-t34911.0.html

Repasalos todos !


Título: Re: Duda de Super Principiante
Publicado por: leogtz en 5 Enero 2011, 01:04 am
Además de que no retornó nada.


Título: Re: Duda de Super Principiante
Publicado por: Allitnam2004 en 5 Enero 2011, 02:38 am
guru6 Gracias por el codigo y las recomendaciones, las voy a tener muy en cuenta. Pero disculpame que te vuelva a preguntar. Viendo tu codigo y el mio veo que se diferencian en la parte de la logica con los i en el que lo inicializo en uno y lo aumento hasta el numero que se elige. La pregunta mas puntual es por que al cambiar esa logica funciona si tecnicamente segun creo yo tambien deberia funcionar; en mi caso siempre da el resultado en el que incializo la variable fact. No se si me pude explicar bien. Ante todo muchas gracias nuevamente. Un abrazo


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 5 Enero 2011, 11:49 am
Sencillamente es cuestion de gusto... No te preoocupes por eso ;) fff xD


Título: Re: Duda de Super Principiante
Publicado por: Slava_TZD en 5 Enero 2011, 11:51 am
Nosé lo que está mal en el code que has puesto, pero no hace la factorial correctamente. (Ahora no tengo tiempo de mirarlo) Este seria un ejemplo:

Código
  1. #include <stdio.h>
  2. main()
  3. {
  4.    int a,b=1;
  5.    char x='x';
  6.    printf("Introduce el numero: ");
  7.    scanf("%d", &a);
  8.    printf("%d! = ", a);
  9.    for(a; a>0; a--) {
  10.        if (a==1) x=' ';
  11.        b=b*a;
  12.        printf("%d %c ", a, x);
  13.    }
  14.    printf("es %d", b);
  15.  
  16. }
  17.  


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 5 Enero 2011, 11:57 am
Código:
for(a; a>0; a--) {
La A primera sobra. Es mas, es incorrecta... GCC la elimina, creo, pero de todos modos es incorrecta...


Título: Re: Duda de Super Principiante
Publicado por: Slava_TZD en 5 Enero 2011, 12:03 pm
Código:
for(a; a>0; a--) {
La A primera sobra. Es mas, es incorrecta... GCC la elimina, creo, pero de todos modos es incorrecta...

No es incorrecta, y no sé de donde lo sacas, que está demas vale, pero el code es para que lo lea alguien con pocos conocimientos y así resulta mas legible.


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 5 Enero 2011, 12:18 pm
Mas que nada lias bastante ...


Título: Re: Duda de Super Principiante
Publicado por: Slava_TZD en 5 Enero 2011, 12:42 pm
Mas que nada lias bastante ...

En que sentido... :rolleyes:


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 5 Enero 2011, 12:48 pm
En este:  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:


Título: Re: Duda de Super Principiante
Publicado por: Slava_TZD en 5 Enero 2011, 15:21 pm
Ahm, cagada, ahora me doy cuenta de lo que hace el code...¬¬ :xD


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 5 Enero 2011, 16:27 pm
Jaja por fin! Solucionado el tema no?
Suerte!


Título: Re: Duda de Super Principiante
Publicado por: Slava_TZD en 5 Enero 2011, 16:32 pm
Jaja por fin! Solucionado el tema no?
Suerte!

Solucionado no, el creador ha hecho una pregunta...Pero no la entiendo... :P
PD: No obstante, el code que puso guru6 y el que puse yo, hacen lo mismo.


Título: Re: Duda de Super Principiante
Publicado por: Oblivi0n en 5 Enero 2011, 16:49 pm
Madre de dios como se va el tema xD

Lo que hago en la parte "logica" es cuestion de gustos como dice sagrini, yo lo hago según la definicion matematica... n! = n! * n!-1 etc etc etc hasta llegar a 1

saludos!

y en lo del bucle for, sagrini lleva razon, la primera condicion de inicio es para inicializar variables, no es un error, pero tira un warning


Título: Re: Duda de Super Principiante
Publicado por: Garfield07 en 5 Enero 2011, 17:05 pm
Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int i, num=3, fact=1, x;
  6.  
  7. printf("Introduzca un valor para realizar el factorial: ");
  8. scanf("%d",&num);
  9.  
  10. for(i=1; i<=num; i++)
  11. {
  12. x = i * fact;
  13. fact=fact*i;
  14. }
  15.  
  16. printf("El factorial de %d es %d\n", num, fact);
  17. return 0;
  18. }
  19.  
  20.  
Realmente confieso que ni siquiera mire el codigo ... Resuelto por mi, eh... xD

PD MOD: Mensaje  444!!!


Título: Re: Duda de Super Principiante
Publicado por: Oblivi0n en 5 Enero 2011, 21:14 pm
Y esa int x?  :huh:  :xD


Título: Re: Duda de Super Principiante
Publicado por: leogtz en 5 Enero 2011, 22:11 pm
Pongo mi versión:

Código
  1. unsigned long int factorial(signed int numero)
  2. {
  3.    if(numero <= 1)
  4.    return 1;
  5.    unsigned long int producto = 1, i;
  6.    for(i = numero; i >= 1; i--)
  7.    producto *= numero--;
  8.    return producto;
  9. }