Concurso de fotografía AM

Temática: «Una panorámica de tu acuario».
Ya esta abierto el plazo para presentar fotografías.

Más info
image01

¿Aún no conoces AMA?

Hazte socio de Acuariofilia Madrid Asociación.
CERRADO EL PLAZO DE INSCRIPCIÓN

Más info
image01

Atlas de peces de AM

¡Hemos alcanzado las 800 fichas! Visita nuestro atlas de peces actualizado.

Más info
image01

Cardúmenes y sociabilidad

Nueva actualización de la tabla con una extensa relación de peces, donde podrás conocer qué entorno necesita cada especie, su sociabilidad y si convive o no en cardumen. ¡Pasa a descubrirla!

Mas info
image01
Programación C desde Cero.
Respuestas: 135    Visitas: 47889
#1
Más vale tarde que nunca.

Debimos sacar antes los temas de programación de los hilos 'Aula Arduino para principiantes' y 'Diseño de un programador básico de acuario con arduino'.

Las URLs que acabo de poner redirigen a los puntos donde empiezan a tratarse los temas relativos a a aprender programación en lenguaje C desde cero para que, a facta de una solución mejor, los que quieran seguir el hilo desde el principio, puedan averiguar de donde viene todo esto. Lo siento.

Resumiendo los más importante de lo tratado hasta ahora, se plantearon cuatro ejercicios de los cuales los dos primeros ya han sido tratados y quedan los otros dos.

Para los que están estudiando programación les propongo cuatro ejercicios facilones:

1) Intercambiar el valor de dos variables (con ayuda de una tercera auxiliar)

2) Calcular el valor absoluto de un número y hacerlo de dos formas diferentes.

3) Calcular el valor promedio de cuatro números.

4) A partir de dia del mes y més de nacimiento obtener signo zodiacal.
#2
(30-12-2015, 04:08 PM)Antonio Castro escribió: Para los que están estudiando programación les propongo cuatro ejercicios facilones:

1) Intercambiar el valor de dos variables (con ayuda de una tercera auxiliar)

2) Calcular el valor absoluto de un número y hacerlo de dos formas diferentes.

3) Calcular el valor promedio de cuatro números.

4) A partir de dia del mes y més de nacimiento obtener signo zodiacal.

madre mia!!!!!.....no entiendo ni las preguntas.

las preguntas. ¿no serán para los que llevan mas de seis meses estudiando programación?

saludos
#3
Te doy una pista para la primera.

Resuélvela como sea. Las trampas están permitidas y ... Google es tu amigo. Tic, tac, tic, tac,...
#4
jajajajajaja vamos a ver señores universitarios y programadores avezados
no nos anticipemos.
que todavía estoy . viendo como se enciende un led con el pin 13
y no te creas que lo tengo muy claro -nosweat.gif -nosweat.gif -nosweat.gif -nosweat.gif

ahora en serio. estoy leyendo todo lo que pillo.
para empezar a comprender como funciona,tanto arduino como la programación.
y sin olvidarnos a los componentes electrónicos.

vamos que tengo un jaleo muy considerable.
#5
Lo siento Don Antonio -sorry.gif pero llevo mas de una hora intentando entender tus preguntas e intentando resolverlas con todas las trampas posibles, y no he sido capaz.

Me sigue costando entender el lenguaje.tengo que estar continuamente buscando en la chuleta que me hice y aun así.

No termino de entender el sentido que tiene sumar y restar multiplicar si no esta dentro de un bucle, de echo no entiendo casi nada de lo que pongo en los programas quitando lo de tipo de entrada tipo de salida un poco de la estructura básica y poco masUndecided
De echo me siento mal con el esfuerzo que hacéis intentado haceros entenderConfused
#6
Pedro no te lies con la informatica, piensa en la vida real

Tienes un bol amarillo con una fresa, tienes un bol rojo con un platano, y un bol gris

solo puedes coger una fruta con una mano, a la vez, y puedes cambiarla de bol, como haces para poner la fresa en el bol rojo y el platano en el bol amarillo

int a, b, c
//empezamos definiendo el valor almacenado en la variable:
a = 5
b = 33

c = a // pasamos la fresa de "a" a "c"
a = b // pasamos el platano a "a"
b = c // pasamos la fresa a "b"

// acaba siendo a=33 y b =5

PD: como me es normal me he comido todos los ;

Y sobre sumas y restas

int a = 0;

a = a + 4; //ahora a vale 4 (0+4)
a = a - 1; //ahora a vale 3 (4-1)
a= 33 + 2*a; //ahora a vale 39 (33 + (2 x 3))

Pistas:
Qué pasa si multiplicas un número por si mismo y luego lo deshaces. Y que funcionalidad llevan en los frenos los coches.
Que la cosa flote que se nos trunca
Y le van a dar a An. tas pasao, haber pedido el nombre del mes que ya es...
#7
jajaja que bueno, entonces si no tuviéramos esa tercera variable se podria hacer algo así?
o me he paso de frenaaaaaaaaaaaaada?


Código:
int a,b;

int a=2;
int b=3;


a=a+b;// a=2+3   (por lo que a pasaría a tener un valor de 5)

b=a-b;//b=5-3  (b ahora valdría  2)

a=a-b;// a=5-2  (a tendría un valor de 3)
    
// con lo que a y b han intercambiado el valor.

supongo que esto solo es lógica matemática, y no tiene nada que ver con programación -pardon.gif
#8
Mu bueno Pedro, si se puede, ya que la variable a la izquierda no toma el nuevo valor hasta haber evaluado la expresión de la derecha donde el valor aun es el antiguo.

Y ya ves los microprocesadores son tontos, muy tontos, no hacen nada que no se les diga que hagan (pero son muy rápidos haciéndolo los jodios), y programar no es mas que aplicar a una idea, proceder o algoritmo de la cabeza, expresándolo en un lenguaje que entiendan y sujeto a una puñetera sintaxis que hay que respetar.
#9
y se hizo la luz

(31-12-2015, 01:57 AM)ArturoS escribió: Mu bueno Pedro, si se puede, ya que la variable a la izquierda no toma el nuevo valor hasta haber evaluado la expresión de la derecha donde el valor aun es el antiguo.

por mas vueltas que le daba no entendía nada
y lo peor es que encontré esto

Utilizando aritmética básica.
El código es el siguiente:
x = x + y;
y = x - y;
x = x - y;


"aritmética básica" y no tenia narices a entenderlo
#10
Buscando en Google "Intercambiar el valor de dos variables"

Aparece en lugar destacado la siguiente página:

http://programacionbizarra.blogspot.com....e-dos.html

Veo que hay gente que dió con el link. Cuando me compré mi primer ordenador no existía Internet, era un Video Genie de 8 bits y el manual venía en Ingles y yo no entendía nada de nada.

El mejor sistema para aprender programación es el estudio seguido de prueba y error y de copiar ejemplos. Hay que empezar por cosas sencillas e ir haciendo pequeñas variaciones sobre lo que ya has conseguido que funcione.

Los niños pequeños empiezan a hablar repitiendo los sonidos sin sentido que escuchan, prueban todo y se equivocan de forma incansable hasta acertar. No conocen el desánimo. Por eso aprenden tan rápido.

Tenéis que tomaros esto como un juego.

Me vuelvo a la cama.
#11
mira que soy torpe ni buscar en la red se me da bien...
Yo me he liado a hacer cálculos y copiando de arturo y dándole vueltas hasta que me salia humo para llegar a esta posible conclusión cosa que me llevo mas de una hora Blush

Código:
ARTURO
Tienes un bol amarillo con una fresa, tienes un bol rojo con un platano, y un bol gris
solo puedes coger una fruta con una mano, a la vez, y puedes cambiarla de bol, como haces para poner la fresa en el bol rojo y el platano en el bol amarillo

int a, b, c
//empezamos definiendo el valor almacenado en la variable:
a = 5
b = 33

c = a // pasamos la fresa de "a" a "c"
a = b // pasamos el platano a "a"
b = c // pasamos la fresa a "b"

// acaba siendo a=33 y b =5

PD: como me es normal me he comido todos los ;
Y sobre sumas y restas

int a = 0;

a = a + 4; //ahora a vale 4 (0+4)
a = a - 1; //ahora a vale 3 (4-1)
a= 33 + 2*a; //ahora a vale 39 (33 + (2 x 3))
Pistas:
Qué pasa si multiplicas un número por si mismo y luego lo deshaces. Y que funcionalidad llevan en los frenos los coches.
Que la cosa flote que se nos trunca
Y le van a dar a An. tas pasao, haber pedido el nombre del mes que ya es...
DON ANTONIO.
1) Intercambiar el valor de dos variables (con ayuda de una tercera auxiliar)

2) Calcular el valor absoluto de un número y hacerlo de dos formas diferentes.

3) Calcular el valor promedio de cuatro números.

4) A partir de dia del mes y més de nacimiento obtener signo zodiacal.

entonces el primer ejercicio que comenta Don Antonio...
seria este ?
int a, b, c
//empezamos definiendo el valor almacenado en la variable:
a = 5
b = 33

c = a // pasamos la fresa de "a" a "c"
a = b // pasamos el platano a "a"
b = c // pasamos la fresa a "b"

// acaba siendo a=33 y b =5

y si no esistiera esa tercera variable podria hacerse así?
sabiendo el valor de a y b.
primera opción:
a=2
b=3
a+b=5
a-b=-1
b=(a+b)-b =2
a=(a+b)-a= 3
segunda opción:
a=(a+b)
a=5
b=(a-b)
b=2
a=(a-b)
       6.   a=3
a=3
b=2
calculo:
a=325
b=212
a=325+212
a=537
b=212
b=537-212
b=325
a=537-325
a=212
b=325
1º programa:

int a,b;
int a=2;
int b=3;
a=a+b;// a=2+3 (5)
b=a-b;//b=5-3(2)
a=a-b;// a=5-2(3)
2º programa:????
int a,b;
int a=2
int a=3
int a=(a+b)-a //(2+3)-2=3
int b=(2+b)-b//(2+3)-3=2  ??????

O pensabais que lo adivine en un momentoBig Grin
aun así no vale si lo meto en el programa arduino me da errorConfused
(No se todavía meter en el programa lo que tengo en mi pequeña neurona)
#12
El error está aquí
Cita:int a,b;
int a=2;
int b=3;

No puedes declarar dos veces la misma variable

o así
Cita:int a=2;
int b=3;

o así
Cita:int a,b;
a=2;
b=3;


Aquí otro error, aunque procede de la misma causa de doble declaración int a=(a+b)-a Pero además si no se hubiera declarado previamente, si estas definiendo con int la variable, no puedes poner en su asignación de valor, a la derecha, la variable ya que no tiene valor definido



luego en a=(a+b)-a no hace falta que pongas el paréntesis a=a+b-a (aunque si es por verlo mejor no importa que estén). Hay un concepto que es la prelación o preferencia de los operadores, es decir, en una expresión compleja que operaciones se operan antes y cuales después, ejemplos:

a+b*2 es a+(b*2) y no (a+b)*2

a+b/c+2/c es a+(b/c)+(2/c); Y si quieres forzar unas operaciones antes que otras usas los paréntesis (((a+b)/c)+2)/c


los temas de dudas generales de programación sigamoslas en el tema del "Aula arduino para principiantes" que estamos liando el tema del programador básico
#13
(31-12-2015, 11:48 AM)pedmar escribió: mira que soy torpe ni buscar en la red se me da bien...
Yo me he liado a hacer cálculos y copiando de arturo y dándole vueltas hasta que me salia humo para llegar a esta posible conclusión cosa que me llevo mas de una hora Blush

O pensabais que lo adivine en un momentoBig Grin
aun así no vale si lo meto en el programa arduino me da errorConfused
(No se todavía meter en el programa lo que tengo en mi pequeña neurona)
Ni eres torpe ni has tirado el tiempo. Al principio las cosas más triviales son incomprensibles porque se trata de algo totalmente nuevo.

Los errores son muy útiles. Sin ellos no se puede aprender nada. No basta probar. Es necesario probar y equivocarse. Forma parte del proceso.

Hay empresas que pagarían una fortuna para poder garantizar la ausencia de errores en sus programas. Eso es una utopía. El ordenador siempre hace lo que tú le indicas, el juego consiste en hacer que eso coincida con lo que tú deseas que haga.

http://www.javiergarzas.com/2013/05/top-...ticos.html

El arte de corregir errores se llama depurar programas. Se usa por similitud con debug, que en ingles significa desinsectar.

Uno de los errores más sonados de los principios de la informática (1940 en un Mark II) En aquel entónces no solo no se usaban las válvulas de vacío. Para conmutar se usaban Relés que eran lógicamente mucho más lentos.

El fallo al que me refiero fue en realidad un fallo de hardware. Una polilla entro en el ordenador y sus alas quedaron entre los contactos de un relé imposibilitando su acción. Desde entonces se ha mantenido el gracioso término debug.

[Imagen: File:H96566k.jpg]

Poco después (en 1946) surgió el ENIAC. Ocupaba todo un sótano en la universidad y la temperatura subía a 50ºC. Llevaba 18.000 tubos de vacío. Alguna válvula se fundía casi todos los días, dejando al ENIAC parado un promedio de media hora al día.
[Imagen: File:Eniac.jpg]

¿Fallos? ¿Errores? ¿Caos? Estas cosas hacen que cuando algo hecho por ti funciona la recompensa sea mayor.

En programación hay dos tipos de fallos y cada uno requiere de un método diferente para depurarlo.

1) Errores en tiempo de compilación:
La compilación se hace en varias pasadas pero ya hablaremos de eso.
Si el programador pone algo que no cumple con la gramática del lenguaje y cambia un punto y coma por una coma, olvida cerrar un paréntesis, olvida declarar una variable, etc. El compilador no tendrá forma de saber que se pretende hacer.
Si el programador pretende usar un tipo inadecuado de variable en una sentencia, el ordenador avisará de que se intenta hacer algo no permitido.

2) Errores en tiempo de ejecución:
Si el programa ha compilado correctamente y ha generado un ejecutable, puede ocurrir que durante la ejecución del programa alguna operación imprevista provoque un error. Podría darse el caso de que el programa funcionara correctamente hasta que alguien se le ocurra introducir un dato problemático y no previsto en el programa. Por ejemplo si por culpa de los datos introducidos el programa intenta dividir por cero, el programa fallará. Estos errores suelen llamarse errores de lógica.

En el primer caso, el compilador suele ayudar bastante indicando la línea del programa que presuntamente provocó el o los problemas. El primer error mostrado es el más importante. Un error corregido puede hacer que desaparezcan varios errores de los que se muestran a continuación.
Si la cosa no queda clara, se puede comentar la parte sospechosa mediante /* ...parte sospechosa...*/
Con ello se logra que el compilador compile el programa sin la parte comentada y si todo va bien sabemos que dentro de la parte comentada hay un problema.

En el segundo caso, para poder seguir los cálculos que está haciendo el compilador interesa poner trazas. Es decir, instrucciones que muestren los valores de las variables y que detecten pos puntos del programa que se van ejecutando en cada momento, pero ya iremos viendo todo eso.

Para terminar, rogaría que todos los que obtenéis errores de compilación los compartierais aquí. Inicialmente es muy complicado interpretarlos correctamente.
#14
ahora estoy estudiando matemáticas para entender que era el valor absoluto de un numero.Sad

yo que deje de estudiar en EGB por que me parecía un rollo y ahora me vienen recuerdos estoy entrenando la neurona -close_tema.gif

ahora intentaré ver que utilidad puede tener en la vida real y en programación, por que yo necesito ese dato para entender las cosas.

Ya he averiguado que para conseguir el valor absoluto se utiliza la función abs...
y que ¿sera?

int x=-4
int x= abs (x)

no tengo nada claro ya estoy como ayer con la neurona haciendo flexiones.
voy a hacer un receso para fumar y limpiar un poco el acuario que eso me relaja (y eso que no fumo)
#15
(31-12-2015, 01:10 PM)pedmar escribió: int x=-4
int x= abs (x)

Has declarado dos veces la variable x y el compilador te informará amablemente que tienes un error en la segunda declaración.

Explicación corta:
Solo hay que poner int la primera vez para que conste el tipo de variable que tendrá x y que en este caso será una variable de tipo entero. En realidad, te bastaría saber eso, pero todo tiene un por qué.

Explicación larga:
Te explico en qué consiste una declaración y en qué consiste una asignación, añádelo a tu glosario.

Las variables en algunos lenguajes no hace falta declararlas, pero muchos otros como el C sí que es necesario hacerl antes de intentar usarla por primera vez y se ha de hacer solo una vez.

Al declarar una variable el compilador toma nota de ese nombre y lo guarda asociado a tipo de dato.

int x; // declara la variable x

Si se vuelve a declarar, el compilador la va a localizar como si ya estuviera previamente dada de alta.

Una vez declarada la variable ya podemos usar la variable. Por ejemplo podemos meter en la variable el valor 5.

x= 5;

En este caso el compilador comprueba que la variable x ya está declarada, como variable entera y que el valor que queremos introducir en ella es compatible con ese valor y no protestará. Si hubieramos intentado meter un dato con decimales. Se denominan datos en coma flotante pero ese detalle no importa ahora. Solo importa que es un dato que ocupa más espacio y no cabe en esa variable.

Al asignar un valor a una variable el compilador consulta en una tabla ese identificador y se da cuenta de que ya fue declarada como variable de tipo entero y reservó para ella espacio suficiente en una determinada dirección de la memoria.

Ocurre que se puede hacer simultaneamente una declaración de una variable dándola un valor incial que viene a ser una asignación inmediata a la declaracion.

El ejemplo sería:

int x=5;

Para declarar varias variables se puede hacer de dos formas.

int x;
int y;
int z;

o la forma equivalente abreviada.

int x, y, z;

Cuando se está aprendiendo un lenguaje basta dominar unas pocas formas de hacer las cosas. El lenguaje ofrece varias posibilidades para hacer lo mismo y conocerlas todas permite leer un programa realizado por otra persona. Ese no es un objetivo para un principiante.

Para no morir en el intento hay que conformarse con aprender unas pocas cosas para poder ir practicando jugando con ellas.

Usuarios navegando en este tema: 12 invitado(s)


Salto de foro: