Cuando programar en lenguaje de medio nivel te obligaba a pensar un poco más en detalles y profundidad, en comparación a los actuales lenguajes de alto nivel que son "más fáciles". Si tienes nociones básicas de programación utilizando C o C++, es más fácil extrapolar estos fundamentos teóricos para adaptarte a los nuevos lenguajes, pero si es a la inversa, te costará entender ciertas cosas. Tengo alumnos que vienen de Java, PHP y Javascript. Les hablas de esto y se desorientan. Hace más de 20 años, yo no entendía estos conceptos y menos en la práctica. Por cuenta propia aprendí C, C++, PHP, Javascript, C#, Java, y en este momento Python. Aprendí POO en Java por medio de struct en C. Me traes muchos recuerdos de cuando fui estudiante en el Tecnológico.
*Eh Ñery gracias por la explicacion, es un tema que cuesta entender* *(Pero en cuando escribi tu ejemplo de la diapositiva, no me compilaba, porque imprimis 2 variables en un printf, las imprimi por separado y me anduvo)* DEJO MI HUMILDE EJEMPLITO (a quien pueda servirle) *#include** * *int suma_resta(int num1, int num2, int *suma, int *resta){* *suma = num1 + num2; *resta= num1 - num2; *}* *int main(){* *int n1 = 10; int sumaMain = 0;* *int n2 = 5; int restaMain = 0;* *suma_resta(n1, n2, &sumaMain, &restaMain);* *printf("%i", sumaMain);* *printf(" %i", restaMain);* *}*
hola crack ya paso bastante tiempo de tu publicación, solo paso a decirte que veas los anteriores videos de facu porque tu ejemplo tiene varios errores conceptuales.
diseña un programa que solicite el día, mes, y año del usuario. En base a estos datos, el programa deberá calcular el día de la semana en el que se nació, y tendrá que revisar todos los años desde el año de nacimiento hasta el año actual, para comprobar dónde se vuelve a repetir dicho día de la semana, generando un impresión por pantalla desde el año de inicio del nacimiento
En el paso de parámetros por referencia, en el código del procedimiento se realiza el cálculo y el resultado se lleva directamente a la dirección de memoria respectiva gracias a la indirección, ¿verdad?. Esto debido a que los lugares donde se encuentran las operaciones (coc y res en este caso) no tienen espacio para almacenar ese valor debido a que están ocupados por las direcciones de memoria inicialmente obtenidas (aunque si chanco estos valores con los resultados ¿hubiera algún problema?). Esto debido a que se devuelven más de un resultado a diferencia de las funciones que al devolver un solo resultado se puede retornar ese único valor. Si me confirma esto, creo que habré entendido lo básico de este concepto. Me pregunto también si sería posible retornar varios valores en un solo procedimiento y trabajar todo por paso de parámetros por valor.
Es exactamente como lo dijiste. No se puede devolver mas de un valor en una función ya que el concepto de función es el de devolver un solo valor, podrías armar una estructura con varios campos y devolver eso pero a nivel conceptual seguirías devolviendo un único valor que seria el valor de la estructura. Si queres devolver varios valores por separados no te queda otra que hacerlo procedimiento y con parámetros por referencia, en otros lenguajes si se permite hacer esto pero C no.
Buena explicación. Por qué mencionas que C no pasa parámetros por referencia sino que hay que engañar al C para hacerlo. Entonces cómo sería un paso de parámetros por referencia normal si no se hiciera como se explica en el video. Gracias
Lo que sucede es que para hacer referencia a una variable en C hay que crear otra variable que tiene todos los atributos de una variable común, y lo que se hace es copiar el valor de la dirección de memoria de la variable a la cual se quiere hacer referencia a la nueva variable, por eso digo que es una manera de "engañar" al lenguaje porque es una copia de un valor a una variable nueva, donde ese valor es una direccion de memoria. Hay lenguajes en los cual se hace una verdadera referencia porque se crea como un "alias" a la variable a la cual se quiera hacer referencia, no se crea una variable nueva sino que es como tener diferentes maneras de nombrar a un mismo espacio de memoria.
Muchas gracias por su video, me ha quedado muchísimo más claro!
Cuando programar en lenguaje de medio nivel te obligaba a pensar un poco más en detalles y profundidad, en comparación a los actuales lenguajes de alto nivel que son "más fáciles". Si tienes nociones básicas de programación utilizando C o C++, es más fácil extrapolar estos fundamentos teóricos para adaptarte a los nuevos lenguajes, pero si es a la inversa, te costará entender ciertas cosas. Tengo alumnos que vienen de Java, PHP y Javascript. Les hablas de esto y se desorientan. Hace más de 20 años, yo no entendía estos conceptos y menos en la práctica. Por cuenta propia aprendí C, C++, PHP, Javascript, C#, Java, y en este momento Python. Aprendí POO en Java por medio de struct en C. Me traes muchos recuerdos de cuando fui estudiante en el Tecnológico.
Genial la explicación, quedó clarísimo.
*Eh Ñery gracias por la explicacion, es un tema que cuesta entender*
*(Pero en cuando escribi tu ejemplo de la diapositiva, no me compilaba, porque imprimis 2 variables en un printf, las imprimi por separado y me anduvo)*
DEJO MI HUMILDE EJEMPLITO (a quien pueda servirle)
*#include** *
*int suma_resta(int num1, int num2, int *suma, int *resta){*
*suma = num1 + num2;
*resta= num1 - num2;
*}*
*int main(){*
*int n1 = 10; int sumaMain = 0;*
*int n2 = 5; int restaMain = 0;*
*suma_resta(n1, n2, &sumaMain, &restaMain);*
*printf("%i", sumaMain);*
*printf("
%i", restaMain);*
*}*
hola crack ya paso bastante tiempo de tu publicación, solo paso a decirte que veas los anteriores videos de facu porque tu ejemplo tiene varios errores conceptuales.
@@xAlpha96 Hola, ¿cuáles son los errores? Yo hice casi casi hice el mismo programa para entender este tema. Estoy de aprendiz.
diseña un programa que solicite el día, mes, y año del usuario. En base a estos datos, el programa deberá calcular el día de la semana en el que se nació, y tendrá que revisar todos los años desde el año de nacimiento hasta el año actual, para comprobar dónde se vuelve a repetir dicho día de la semana, generando un impresión por pantalla desde el año de inicio del nacimiento
Un crack
En el paso de parámetros por referencia, en el código del procedimiento se realiza el cálculo y el resultado se lleva directamente a la dirección de memoria respectiva gracias a la indirección, ¿verdad?. Esto debido a que los lugares donde se encuentran las operaciones (coc y res en este caso) no tienen espacio para almacenar ese valor debido a que están ocupados por las direcciones de memoria inicialmente obtenidas (aunque si chanco estos valores con los resultados ¿hubiera algún problema?). Esto debido a que se devuelven más de un resultado a diferencia de las funciones que al devolver un solo resultado se puede retornar ese único valor. Si me confirma esto, creo que habré entendido lo básico de este concepto. Me pregunto también si sería posible retornar varios valores en un solo procedimiento y trabajar todo por paso de parámetros por valor.
Es exactamente como lo dijiste. No se puede devolver mas de un valor en una función ya que el concepto de función es el de devolver un solo valor, podrías armar una estructura con varios campos y devolver eso pero a nivel conceptual seguirías devolviendo un único valor que seria el valor de la estructura. Si queres devolver varios valores por separados no te queda otra que hacerlo procedimiento y con parámetros por referencia, en otros lenguajes si se permite hacer esto pero C no.
@@facudarfe Muchas gracias x la aclaración
sería más fácil de entender... si le pones nombres distintos a los parámetros formales con respecto a las variables dentro del main... solo digo...
No existe el video del 24 al 26 no?
No, hay videos que fueron sacados de youtube. El curso completo está ahora en Udemy.
@@facudarfe Muchas gracias por los video pa, estoy aprendiendo C ahora el sabado tengo parcial y me ayudaron una banda
Buena explicación. Por qué mencionas que C no pasa parámetros por referencia sino que hay que engañar al C para hacerlo. Entonces cómo sería un paso de parámetros por referencia normal si no se hiciera como se explica en el video. Gracias
Lo que sucede es que para hacer referencia a una variable en C hay que crear otra variable que tiene todos los atributos de una variable común, y lo que se hace es copiar el valor de la dirección de memoria de la variable a la cual se quiere hacer referencia a la nueva variable, por eso digo que es una manera de "engañar" al lenguaje porque es una copia de un valor a una variable nueva, donde ese valor es una direccion de memoria. Hay lenguajes en los cual se hace una verdadera referencia porque se crea como un "alias" a la variable a la cual se quiera hacer referencia, no se crea una variable nueva sino que es como tener diferentes maneras de nombrar a un mismo espacio de memoria.
@@facudarfe muchas gracias