Dudas programación

Bueno puesto que este es un foro de software libre creo que mi pregunta estara mejor ubicada que en Pc General.

Tengo problemillas con el lenguaje C, sobre todo con las funciones asi que os agradeceria que me echarais una mano.

Mis dudas son:

-No tengo ni idea de porque a veces se puede poner o no el return del final y porque a veces se le pone seguido de un 0 o de otra palabra.

-En esta funcion ¿no se supone que 'a' y 'b' deberian ser num1 y num2 o viceversa?

#include
#include

void compara( int a, int b ) /* Metemos los parámetros a y b a la función */
{
if ( a>b ) printf( "%i es mayor que %i\n" , a, b );
else printf( "%i es mayor que %i\n", b, a );

return;
}

void main()
{
int num1, num2;

printf( "Introduzca dos números: " );
scanf( "%i %i", &num1, &num2 );

compara( num1, num2 );/* Llamamos a la función con sus dos argumentos */
}

Os agradeceria si de paso me poneis algun link con ejercicios resueltos porque lo que he encontrado yo no sirve para nada

Gracias por la ayuda
XresaX escribió:-No tengo ni idea de porque a veces se puede poner o no el return del final y porque a veces se le pone seguido de un 0 o de otra palabra.
Es facil. Las funciones devuelven un valor cuando acaban, ese 0 (u otro numero, o una variable), es el valor que devuelven a la funcion que las llama.

Por ejemplo, una funcion sumar(int a, int b) que haga la suma y la devuelva, tendria algo como:
int resultado;
resultado=a+b;

return resultado;


XresaX escribió:-En esta funcion ¿no se supone que 'a' y 'b' deberian ser num1 y num2 o viceversa?

void compara( int a, int b )     /* Metemos los parámetros a y b a la función */

compara( num1, num2 );/* Llamamos a la función con sus dos argumentos */

No, no deberian. No te confundas con los parametros que se le pasan al a funcion al LLAMARLA, con los nombres de variables que dicha funcion usa internamente para referirse a esos parametros.

En tu caso, podrias llamar perfectamente a compara con compara(45, 77), es decir, con numeros directamente.
pero porque algunas veces no hace falta ponerlo o se pone 0 cuando no da cero?...joder qlio...
A ver el return por norma es bueno ponerlo a mi por ejemplo no me gusta que el main sea void, lo pongo como int y siempre me gusta devolver algo en mis funciones... eso supongo que es a gustos. Y muchas veces el resultado que devuelve la función como podría ser un "int main" no te interesa por lo tanto devuelves cualquier cosa en el caso que tu comentas se devolvería un 0; simplemente es una marca y creo recordar que en los voids se pone un return; para indicar que devuelves un vacío. Si me equivoco que alguien me corrija

Un saludo
osea q cuando es int main se pone return 0 y cuando es void main return a secas?

Cuando se cambia lo de return? es decir...cuando se puede poner return numero mayor o algo asi?
XresaX, es interesante que aprendas a PROGRAMAR. Tus problemas no son con C, son con la programación en general. Los valores que devuelvan las funciones de tu programa dependerán de lo que hagan esas funciones.

- ferdy
Seria bueno que hicieses un curso introductorio a la programacion, que te expliquen bien los tipos de datos, funciones/metodos, etc... y despues exportarlo todo a el lenguaje de programacion que te plazca.

Un saludo.
Y más revelador todavía es aprender programar un poco en ensamblador y ver como traduce un compilador de C a ensamblador.

Aprendes todo lo de pasar los argumentos por valor/referencia, guardar registros en la pila ante llamadas a subprogramas (de hecho aquí le verás la gracia al inline), etc..... Muy, muy revelador, y tampoco tardarías tanto.
DemonR escribió:Y más revelador todavía es aprender programar un poco en ensamblador y ver como traduce un compilador de C a ensamblador.

Aprendes todo lo de pasar los argumentos por valor/referencia, guardar registros en la pila ante llamadas a subprogramas (de hecho aquí le verás la gracia al inline), etc..... Muy, muy revelador, y tampoco tardarías tanto.

Sí, seguro que debería empezar por ahí. :-O
DemonR, tu has visto las dudas que tiene? XD
Dices en serio lo del ASM? xD
pues yo te recomiendo para empezar los lenguajes más fáciles Basic, Pascal y Fortran. A mi me parecen extraordinariamente simples lo que hace que todo se entienda rápido y bien... y luego ya te meterás en camisa de once varas ^^

Un saludo y ánimo!
Ok, ciertamente yo empecé con visual basic y después fui descendiendo, pero no descubres la "verdad" hasta que llegas al nivel más bajo, y tampoco creo que sea imposible empezar programando en ensamblador... así lo hicieron los informáticos en su día.
No si esto no lo hago por gusto, porque aunque me esta molando el rollo de programar lo tengo que hacer para la uni, que me examino en septiembre.

¿Qué me recomendais?Me he leido un libro, miles de manuales en internet y he intentado saber como y porque se hacen asi los ejercicios que he encontrado por ahí pero aun asi me parece imposible...¿Qué me recomendais?

¿Existe alguna guia/manual para tontos sobre C?

Gracias por la ayuda.
Prueba en esta conocidilla pagina, aunque no se como de basica sera, pero supuestamente es para empezar XD
Gracias por las molestias, pero yo necesito lenguaje C y si en las explicaciones me lo mezclas con C++ no me entero de nada, pero gracias de todas formas.

Una pregunta:

#include

void main()
{
int a,b,c;

printf("introduce 3 números:\n");
scanf("%i %i %i", &a,&b,&c);

printf ("has introducido los numeros %i %i %i\n", a,b,c);
return;
}

Alguien me puede explicar que esta mal?Porque meta los valores que meta me sale que los que he introducido son 0,0 y -1215 [noop]

Y si no se hacer esta mierda de programa no se como voy a hacer para aprobar...
La guia en realidad empiza por las bases de C, pero como quieras...

XresaX escribió:Alguien me puede explicar que esta mal?Porque meta los valores que meta me sale que los que he introducido son 0,0 y -1215 [noop]
Pues el codigo esta bien, que haces al ejecutarlo?
Lo compilo y meto los valores separados por un espacio, da igual que valores meto que me da esos resultados [buuuaaaa] ....

Me voy a volver loco....que me recomendais para aprender a programar?estudiar teoria? matarme a hacer ejercicios?


PD: Alguien puede explicarme para que sirve la sentencia

system("PAUSE");

porque nunca antes la habia visto
XresaX escribió:Lo compilo y meto los valores separados por un espacio, da igual que valores meto que me da esos resultados [buuuaaaa] ....

Me voy a volver loco....que me recomendais para aprender a programar?estudiar teoria? matarme a hacer ejercicios?


PD: Alguien puede explicarme para que sirve la sentencia

system("PAUSE");

porque nunca antes la habia visto


la funcion system() (declarada en stdlib.h) es una funcion para pasar comandos al sistema operativo. En este caso pasaras el comando PAUSE a Windows.

No es bueno que la uses ya ke reduce la portabilidad del codigo a otros sistemas ya ke no todos los comandos son iguales en todos los sistemas.

En este caso podrias probar con un getchar() en vez de con el system("PAUSE"), ya ke el efecto es el mismo.

PD= Tu codigo si que me funciona.

Salu2
no se pero yo siempre he usado %d para los enteros, en lugar de %i, en C.
Desconozco si son equivalentes o no en C.... prueba a ver.

A por cierto, segun nos comento el profesor, el tema de los espacios y el scanf, no se llevan bien en segun que sistemas(no recuerdo si linux o windows o que).
en linux los scanf y los espacios no se llevan mal... así que supongo que será problema del windows...
¿Que compilador gratis y bueno me recomendais?Si es simple de utilizar mejor que mejor.

Yo ahora tengo el pacific pero me esta dando problemillas asi que prefiero uno del estilo.

¿Que me recomendais que haga para aprender a programar?Porque la verdad es que estoy un poco desesperado...

gracias por la ayuda

Un saludo
Compilador para C, creo que todos estaran de acuerdo con ke GCC.

Para Linux pues lo tienes alli, en los morros.

Para Windows, personalmente te recomiendo la IDE de programacion Dec-C++, la encuentro la mejor (y obiamente lleva como compilador GCC)


Salu2
Pues programar se aprende a base de ostias, pero no estaría mal que tuvieras el "The C Programming Language" o similar como referencia, pero también para quitarte la mayor parte de tus dudas que son muy simples (lo que no te enseña este libro es a programar algoritmos ni nada de eso, pero tus dudas que son de sintaxis del lenguaje están todas ahí).
Ese libro no vale para APRENDER a programar. Es un buen libro para aprender C una vez se sabe programar. Ni pienses leerlo por ahora.

- ferdy
XresaX escribió:osea q cuando es int main se pone return 0 y cuando es void main return a secas?

Cuando se cambia lo de return? es decir...cuando se puede poner return numero mayor o algo asi?
Eso depende del tipo que declares la función:

void funcion(....){
....

return;

}
Ahora, que quieres que devuelva un char, por ejemplo, o cualquier otra cosa

char funcion(...){
char result;
...

return result;
}
Ni que decir tiene que el tipo de retorno puede ser tan complejo-simple como se te ocurra, y ser lógico.... o totalmente incoherente y a tu libre albedrío.

Eso si, es buena costumbre al programar, sobre todo en entornos Unix, pero también en Windows, que el main de la función devuelva un int .... y ya dependerá del SSOO que uses el convenio te debe guiar para devolver 0 en caso de éxito u otro número en error o viceversa.... pero vamos, que para aprender a programar si quieres pide ejemplos en distintos lenguajes y te posteo alguno.

P.D. Gente, si le iluminamos con Python puede que no vuelva a aprender a programar con tipos, punteros y demás en su vida no? A mi ya se me está olvidando :D
Eso que has pegado es C pre-ANSI. Ya son ganas de marear al chaval...

- ferdy
yo aprendí primero con ejercicios estúpidos del tipo de hacer sumitas y eso sino que la pereza de aprender en C lo del printf y scanf siempre usaba cin y cout jajajajaja que está en la iostream.h pero creo que es c++, igual programar como decian mis profesores es como nadar, puedes leer mil libros de natación pero hasta que no te tires al agua y tragues agua un par de veces ( programando un par de miles jajaja ) no aprendes.

yo generalmente antes de la ingeniería de software y algo después tambien jejeje, prefería los manuales de referencia a los libros de paso a paso, y me tiraba a lo bestia a programar chorradas y a quemarme las pestañas y a maldecir a los cuatro vientos hasta que me corrian sin errores y a veces de desocupado eliminaba los warnings también wiijijijiji

pero es como todo constancia eso al principio es difícil y juras que el compilador te la montó hasta que encuentras el error que a veces el compilador si se equivocaba de la línea donde apuntaba.

algo bueno es aprender a manejar un debuger o hacer como hacía yo jajaja cambiaba pedazos de código, números o cosas así a ver que ocurría, si cambiaba el resultado o el error cuando compilaba encontraba los errores mas fácil.

este ide me ayudó mucho " Xwpe " porque tiene una ayuda de todas las funciones con ejemplitos de cómo se usan ( es para linux, para windows el turbo c que es muy viejo pero tiene una excelente ayuda también es mas el que te dije es una copia descarada del turb c jajaja es en dos pero pues igual no estás programando guis aún)
buscate un libro de introduccion a la programacion, y para aprender empieza con python,pascal o algun lenguaje sencillito, ya luego bajaras a c.
demnim escribió:buscate un libro de introduccion a la programacion, y para aprender empieza con python,pascal o algun lenguaje sencillito, ya luego bajaras a c.

A mi mi experiencia me aconseja lo contrario... prefiero empezar con lo difícil y luego pasarme a lo "fácil" ... si lo hago al revés me da pereza :D
Lk2 escribió:A mi mi experiencia me aconseja lo contrario... prefiero empezar con lo difícil y luego pasarme a lo "fácil" ... si lo hago al revés me da pereza :D



Tienes razón, yo como programador python, quiero aprender C++, pero da una perezaaaa, siempre digo, brrr, esto en python es más facil... :P
Fox escribió:Tienes razón, yo como programador python, quiero aprender C++, pero da una perezaaaa, siempre digo, brrr, esto en python es más facil... :P
... y es que es más fácil :P
30 respuestas