Programación desde CERO // hilo de dudas

Topic created · 174 Mensajes · 12865 Visitas
  • PiRaTaX prueba a guardarlo como .c y nos cuentas.

    @danibonilla1: La función main SIEMPRE devuelve un número entero en C y C++. El propósito de esto es saber si el programa terminó con algún fallo o no. Si la función main no devuelve 0 se entiende que ha habido un error, y si devuelve 0 ha terminado correctamente. La función main de momento no recibe nada (hay casos en los que podemos hacer que reciba algo pero de momento no lo vamos a ver). Tú siempre pon main() o main(void) mientras no la veamos en el curso de otra forma.

  • Gracias por la ayuda ya me funcionó, aora tengo una duda, lo del main lo que haya entre paréntesis quiere decir que en el momento que se inicie el programa va a ejecutarse automaticamente lo del main no? si eso es asi como es que no ponemos lo de printf dententro de los paréntesis y se inicia solo?

    Y por último lo que nos devuelva un numero siempre se tiene que poner? i simepre debe ser 0 si funciona correctamente?

    Bueno gracias por la ayuda

  • lo del main lo que haya entre paréntesis quiere decir que en el momento que se inicie el programa va a ejecutarse automaticamente lo del main no? si eso es asi como es que no ponemos lo de printf dententro de los paréntesis y se inicia solo?

    exactamente no es asi, el "main" es una funcion, pero en C/c++ es la funcion principal con la que se inicia dicho programa.
    entonces, al iniciar un programa en C/c++ lo primero que se ejecuta es todo lo que esta dentro de los { } desde la funcion principal llamada "main".

    lo que esta entre los parentesis al lado de "main" sirve para almacenar los llamados parametros de la funcion main que se usaran para dicha funcion como variables dentro del mimo, en caso se la llame desde otra parte del codigo(vale decir desde otra funcion), que ya en algun momento hawkings hablara de ello.

    por lo tanto resumiendo, al ejecutarse main() lo primero que se ejcuta es lo que sta entre { } , llamados bloques y nada mas.

    Y por último lo que nos devuelva un numero siempre se tiene que poner? i simepre debe ser 0 si funciona correctamente?

    pues si, al declarar a main como un entero (int) éste debe devolver un numero, pues al colocar "return 0" hace eso mismo, retornar un valor 0 que quiere decir que la funcion ah terminado de ejecutarse correctamente, y finaliza el programa.
    Hay o habrá casos en los que se usara return algo asi: "return var*2;" que puede estar en otra funcion, y lo que hara es que retornara ese valor (var*2) desde la funcion a la que se llamo.
    Tambien existe el tipo de dato "void" que quiere decir mas o menos, no devolver nada. Si pones "void main(void)" ya no sera necesiario el "return 0" porque ese tipo de dato ya no devuelve nada desde esa funcion.

    por lo tanto resumiendo, poner "return 0;" cuando declaremos la funcion main como (int) para que éste pueda terminar correctamente, otros ejemplos de return creo que ya lo explicara mas adelante Hawkings.

    saludos, y espero e haya entendido algo je! , sino ahi hawkings te lo explicara

  • si me ayudaras con el ejercicio Ejercicio 7 (M): Diseña el DF de un programa que pida al usuario dos números. Si su suma es menor que su producto mostrará por pantalla el doble del primer número y terminará, y si no le pedirá al usuario un tercer número. Si el tercer número es diferente de 4 el programa se despedirá y terminará, y si no terminará sin despedirse. es k un rollo k no entiendo

  • Diseña el DF de un programa que pida al usuario dos números. Si su suma es menor que su producto mostrará por pantalla el doble del primer número y terminará, y si no le pedirá al usuario un tercer número. Si el tercer número es diferente de 4 el programa se despedirá y terminará, y si no terminará sin despedirse. es k un rollo k no entiendo

    quizas lo veas algo complicado de entender pero veras que no lo es solo mucha concentracion, ahi vamos:

    te piden 2 numeros...ponle numero1 y numero2 e ingresamos valores a esos dos numeros.
    ahora te dan una condicion: si sumamos estos dos numeros y esta suma, es menor que a la multiplicacion de los mismos numeros tendras que mostrar en pantalla (asi como mostrabas tu nombre en el ejercicio1) el primero numero (numero1) multiplicado por 2(eso quiere decir el doble de un numero, nada mas multiplicarlo por 2) y de ahi el programa terminara de ejecutarse.

    ahora en caso de que la suma sea mayor a la multlicacion de los 2 numeros, el programa nos debera pedir otro numero mas, le llamamos numero3. Ahora si ese tercer numero(numero3) le damos un valor y si es diferente del 4 el programa debera mostrarte un mensaje de despedida y de ahi se debe terminar el programa. Y, si el valor del tercer numero(numero3) es 4 tan solo debe terminarse el programa, sin mandar ni un mensaje de despedida.

    algo engorroso pero veras que es facil en si, leelo y leelo y poco a poco mas notando que se te hara muy facil.

    cualquier duda ponla aer que mas podemos hacer.

  • @PiRaTaX said:

    Gracias por la ayuda ya me funcionó, aora tengo una duda, lo del main lo que haya entre paréntesis quiere decir que en el momento que se inicie el programa va a ejecutarse automaticamente lo del main no? si eso es asi como es que no ponemos lo de printf dententro de los paréntesis y se inicia solo?

    Y por último lo que nos devuelva un numero siempre se tiene que poner? i simepre debe ser 0 si funciona correctamente?

    Bueno gracias por la ayuda

    Lo que hay entre los paréntesis es lo que recibe la función (por ejemplo printf() que recibe una cadena de texto que quieras mostrar). Lo que se ejecuta es lo que está dentro de las llaves { }.
    Y sí, siempre ha de devolver 0 para indicar que no hay errores, si hubiera errores devolvería cualquier otro número (normalmente 1).

    @dantox: hasta ahora como yo te he explicado ese ejercicio no lo has entendido, si la explicación de freak7z no te lo deja tampoco demasiado claro dímelo y trataré de explicártelo lo más sencillo que pueda.

    PD: gracias a freak7z por resolver las dudas mientras no estoy :wiii:

  • m apunto!!

  • Oye haw, en el ultimo que subiste tengo un problema, el primero es por qué en

     printf("%i", numero);
    

    necesita detrás la variable? he probado en poner el 1º solo el "%i" y me sale un numero enorme xD
    Y otra, por qué necesitas el

    scanf("%i", &numero);
    

    si lo quito me sale otro número enorme negativo :S

  • @Anghios said:

    Oye haw, en el ultimo que subiste tengo un problema, el primero es por qué en

     printf("%i", numero);
    

    necesita detrás la variable? he probado en poner el 1º solo el "%i" y me sale un numero enorme xD
    Y otra, por qué necesitas el

    scanf("%i", &numero);
    

    si lo quito me sale otro número enorme negativo :S

    bueno quizas hawkings te pueda dar alguna otra respuesta
    pero te respondo aer si puede saciar tus dudas.

    printf es una funcion de las bibliotecas del compilador C
    que hace?, pues formatea una linea de salida de texto, al poner el '%i' formateas el texto a que alguna variable que vas a imprimir en pantalla se convierta en 'entero', por ello existen muchos especificadores como %c,%d,%f entre muchos otros.
    te sale un numero enorme porque no estas asiganando que variable se formateara con el '%i', por ello te muestra cualquier 'basura'

    resumiendo: si vas a mostrar variables en pantalla con printf, debes formatear el tipo de dato que se va a mostrar de dicha variable, y despues del texto poner nombre de la variable despues de una coma y seguir poniendo comas, si se ponen mas variables.

    el scanf es algo asi, lo que hace es formatear el tipo de dato que se va a guardar en una variable, con el '%i' haces que se guarde como entero, despues de la coma se pone con ese signo '&' porque al parece esa funcion toma el nombre de la variable como puntero y con el '&' haces que se guarda el valor que se ingrese dentro de la direccion de memoria a la que ese puntero esta apuntando, y si no pones el '&' se guarda en cualquier lado y cualquier cosa esta guardando.

    resumiendo: siempre debes colocar el formato o tipo de dato de la variable a la que se va a guardar cualquier valor, y usar el '&' para guardar correctamente el valor dentro de la direccion de memoria a la que apunta el nombre de la variable.

    resumiento todo se podria decir que para mostrar variables o ingresar variables debes formatear el tipo de dato que s emuestra o se pida a guardar, usando los especificadores %i, %f, %c, %d , etc. y para scanf nunca olvidarte de antepones el '&' antes del nombre de la variable para que guarde bien el valor a la direccion de memoria a la que esa variable esta apuntando.

    bueno espero que en algo te haya ayudado, sino comentalo y buscare algunos conceptos mas sencillos y concretos a lo que se refiere cada cosa o esperar aer si hawkings lo explica algo mejor je.

    saludos

  • @Anghios said:

    Oye haw, en el ultimo que subiste tengo un problema, el primero es por qué en

     printf("%i", numero);
    

    necesita detrás la variable? he probado en poner el 1º solo el "%i" y me sale un numero enorme xD
    Y otra, por qué necesitas el

    scanf("%i", &numero);
    

    si lo quito me sale otro número enorme negativo :S

    No quería meter lo de los punteros todavía... Se puede decir que es lo más complicado de C, y lo quería dejar para el final. Basta con decir que para usar scanf siempre le pones delante &. Ahora mismo no importa demasiado por qué, ya lo veremos en su debido tiempo pero es un poco más complicado, y no veo difícil aprender que con scanf pones & delante de la variable y ya está. Si en scanf o prinf no pones después la variable que vas a usar el ordenador no sabe que usar y usa lo que se llama basura, que puede ser cualquier cosa.

    Conclusión: ahora mismo no hace falta que lo entiendas, más adelante lo iremos explicando, si no pones después las variables no harán lo esperado esas funciones. printf usa las funciones normal sin poner el & y scanf necesita que le pongas el &. No te compliques, ponlo siempre y te irá perfecto, como ya he dicho a su debido tiempo lo explicaremos.

    PD: freak7z, te agradezco que resuelvas las dudas, pero por favor no adelantes cosas que no hemos dado porque normalmente tienden a liar a la gente, pero de todas formas muchas gracias 😄