Noticias:

Moisés abandona Egipto con su pueblo. A partir de ahora a los judíos todo les irá chachi.

Menú Principal

Curso de iniciación en programación C

Iniciado por Thylzos, 23 de Junio de 2008, 09:26

0 Miembros y 1 Visitante están viendo este tema.

Blanquito

Vale, ahora sale todo, pero abres el .exe y la ventana no dura nada prácticamente y no se ve si lo he hecho mal o bien.

Thylzos

Cita de: Thylzos en 23 de Junio de 2008, 23:23
CitarSi nos da un fogonazo de MS-DOS al ejecutar el programa, simplemente ve al cmd y ejecutarlo desde allí para ver la salida.

Ahí tienes la solución. Abres la terminal (ejecutar -> cmd), tecleas:

Citarcd Directorio-donde-este-el-programa

Y escribes el nombre que le hayas puesto al programa. Otra alternativa es agregar esto al código:

getchar();

Justo antes del return 0. Pasa eso porque el programa muestra el contenido y cierra. No espera. Pero con esta última línea haces que hasta que presiones una tecla.

Te lo había explicado antes :P.

Gracias freyi *.*


Cita de: Gambit en 26 de Enero de 2010, 10:25
Follar cansa. Comprad una xbox 360, nunca le duele la cabeza, no discute, no hay que entenderla, la puedes compartir con tus amigos...

Blanquito


Thylzos

Cita de: Blanquito en 24 de Junio de 2008, 21:17
Vale, mierda, sorry, ya sale.

Entonces, si no tienen más dudas, ¿les parece que meta el siguiente capítulo?

Gracias freyi *.*


Cita de: Gambit en 26 de Enero de 2010, 10:25
Follar cansa. Comprad una xbox 360, nunca le duele la cabeza, no discute, no hay que entenderla, la puedes compartir con tus amigos...


Faerindel

Mételo.

PD: ¿Han hecho ejercicio de modificar el código? Ese es una pajada, pero para entender las cosas luego será mejor que los hagan.

Thylzos

#26
3 -Variables y constantes

3.1 -Definiciones:
-Variable: Valor utilizado en un programa que puede cambiar durante su ejecución.
-Constante: Valor utilizado en un programa que no puede cambiar durante su ejecución.
-Identificador: Nombre que recibe una variable, una constante o cualquier otro elemento que pueda contener valor para poder trabajar con él.

3.2 -Identificadores
Como vimos con "nombres" que les damos a los valores que vayamos a utilizar en un programa. Para verlo más claro. Pensemos en PI, este número es siempre 3,1416..., entonces es una constante con el identificador "PI". Ahora pasemos a la clásica x, esta puede tomar cualquier valor, con lo que es una variable de identificador 'x'. Espero que lo hayan entendido.

En el lenguaje C no se puede poner cualquier identificador, sólo se pueden usar letras mayúsculas, minúsculas, los números y el guión bajo; no se pueden usar ni la ñ o la Ñ, ni espacios, ni tildes. Además, un identificador no puede empezar nunca por un número ni puede ser igual a cualquiera de las palabras reservadas de C. A la hora de poner identificadores recuerden que C es un lenguaje Case sensitive, es decir, distingue minúsculas y mayúsculas.

Estas son las palabras reservadas:


·auto·double·int·struct
·break·else·long·switch
·case·enum·register·typedef
·char·extern·return·union
·const·float·short·unsigned
·continue·for·signed·void
·default·goto·sizeof·volatile
·do·if·static·while

Ejemplos de identificadores correctos:

Edad
Coche
mi_edad
Top10
PI
Yo
Tu

Ejemplos de identificadores incorrectos:

10Top
código
niño
el contador
auto
#yo
litros-agua

Bien recordemos que al utilizar un lenguaje Case Sensitive, coche y Coche no serán la misma variable, cada vez que programéis tenedlo en cuenta. En cuanto a la longitud, por si alguien se lo estaba preguntando, en C no hay un límite máximo de caracteres (no por eso vayáis a hacer una de 100 palabra).

Bien, pero ¿cómo sabemos qué identificador usar? Lo lógico es darle a la variable o constante (o lo que sea) una que nos permita reconocer qué vamos a almacenar. Es decir, no le pongan "su_edad" de identificador a una constante que tendrá el número áureo, un poco de criterio, tengan en cuenta que muchas veces ese código lo verá también otra persona (especialmente si os dedicáis a esto) y tiene que entenderlo. Por último, es tradición entre los programadores de C ponerle a las constantes identificadores en mayúsculas y a las variables en minúsculas.

3.3 -Tipos de datos
Cuando declaremos en un programa que vamos a usar una variable o constante, debemos especificar qué tipo de valor va a contener ésta (un entero, un carácter, etc.) a continuación veremos los tipos de datos de C.

Citar


TIPO     TAMAÑO     RANGO DE VALORES
char1 bytede -128 a 127
int2 bytesde -32768 a 32767
float4 bytesde 3'4 E-38 a 3'4 E+38
double8 bytesde 1'7 E-308 a 1'7 E+308


3.3.1 -Tipo int
Este tipo indica que usaremos un entero, es decir, un número "sin coma". Podemos escribirlo en decimal (nomenclatura normal), octal (con un 0 delante: 037, 02, 014) o un hexadecimal (anteponiendo 0x: 0x1AB, 0xA23, 0x13).

3.3.2 -Tipos float y double
Estos tipos "tienen coma", es decir, números con parte fraccionaria. Para darles un valor, lo hacemos así: primero podemos poner un signo (+ o -, el primero se obvia si no se pone), segundo los dígitos enteros, luego un punto (.) para separarlo de la parte fraccionaria y, al final, la parte fraccionaria. Además, podemos agregar un exponente poniendo e o E, el signo del exponente y éste mismo. Tengan en cuenta que no puede empezar por un exponente. No se asusten, no es tan difícil como parece, veamos ejemplo: -3.14, 8.01, 4.78e-3, 7.377E4.

3.3.3 -Tipo char
Los valores de tipo char son caracteres escritos entre comillas simples (' y '). Estos pueden ser cualquiera de los que haya en el código ASCII y van desde letras minúsculas y mayúsculas hasta números y signos de puntuación. Como supongo, espero, que sepan, a cada carácter de este código le corresponde un número, así 65 corresponde a 'A' y 'A' se corresponde a 65. Por eso no debemos intentar sumar el carácter '2' al carácter '6', ya que esto no nos dará el carácter '8', porque estos son símbolos y no valores, el valor es su número en el juego de caracteres ASCII.

Hay algunos caracteres que están formados por dos símbolos:

Citar


CÓDIGO ASCII     CARÁCTER     SIGNIFICADO
7\aAlarma (Beep)
8\bRetroceso (BS)
9\tTabulador Horizontal (HT)
10\nNueva Línea (LF)
11\vTabulador Vertical (VT)
12\fNueva Página (FF)
13\rRetorno
34\"Comillas Dobles
39\'Comillas Simples
92\\Barra Invertida



3.3.4 -Tipo void
Void significa sin valor, es decir, nada. Ya sé que puede sonar raro en un principio, pero más adelante lo usaremos seguido.

3.3.5 -Modificadores long y short.
Cuando declaremos un int podemos decirle, antes de apuntar el tipo, que sea "long" o "short", si tenemos un long int, éste nos da más posibles números, si en cambio tenemos un short int, entonces le daremos menos rango de números. Además, podemos agregar un long al tipo double (double float).

3.3.6 -Modificadores signed y unsigned
Con unsigned le damos a los tipos de datos que tengan valores numéricas la cualidad de no aceptar negativos y con signed, que viene por defecto así que no debemos ocuparnos en ponerlo por lo general, lo decimos que vamos a usar valores que pueden ser negativos o positivos.

3.4 -Variables y Constantes

3.4.1 -Declaración de variables
Para usar una variable debemos avisarle al programa que vamos a usarla, es decir, declararla. Para eso debemos escribir su tipo de dato, su identificador y punto y coma ; .Por ejemplo:
int numero_manzanas

Y ahora en una función main:
int main (void){
int numero_manzanas;
char letra;
float recorrido;
}


Si, por ejemplo, queremos declarar tres variables del mismo tipos, en vez de:
int main (void){
int numero_manzanas;
int numero_peras;
int numero_platanos;
}


Podemos hacer:
int main (void){
int numero_manzanas, numero_peras, numero_platanos;
}


Mientras te encargues de escribir código claro, cualquiera de estos métodos da igual.

3.4.2 -Declaración de constantes
Podemos hacerlo o bien con la palabra reservada const o con la directiva #define. Aso sí, recuerda que se suelen escribir los identificadores de las constantes con todas mayúsculas.

3.4.2.1- Const
Para declararlas utilizando const, usaremos un método similar al de las variables. Escribimos const, el tipo de dato, su identificador, un igual y su valor (no olvidarse del punto y coma). Les damos un valor al declararlas ya que éste será siempre el mismo durante todo el código y deben inicializarse con uno, veamos ejemplo:
int main (void){
const float PI = 3,1416;
const int LADOS = 10;
const char PRIMERA_CONSONANTE = 'b';
}


3.4.2.2 -#define
Mediante #define también podemos declarar constantes, a las que llamaremos macros. Para hacerlo, sólo debemos poner: #define, su identificador y su valor. No hace falta usar ni el signo igual, ni declarar el tipo de dato ni poner punto y coma. ¿Pero cuándo hace falta poner punto y coma?, cuando declaremos una sentencia, es simple ¿verdad? Veamos un ejemplo:
#define MENSAJE "Hola"
#define PI 3,1416
#define PRIMERA:VOCAL 'b'

int main (void){
}


Como podemos ver, así podemos incluir cadenas de caracteres (van entre " y "). Tengan en cuenta que así no estamos diciendo al programa: "Guarda memoria para esta constante y ponle su valor", sino que le decimos AL COMPILADOR: "Cada vez que veas este identificador cámbialo por su valor".

3.5 -Inicialización
Cuando declaremos una variable, ésta no tiene un valor inicial. Por eso, si queremos operar con ella, debemos darle uno, sino nuestro programa podría devolver errores. Para evitarlo, es posible darles un valor en el momento en que la declaremos, pero esto no es obligatorio (al contrario que con las constantes). Veamos ejemplo, que es muy simple, sólo se pone = y es valor que le queremos dar:
int main (void){
int numero_manzanas = 3;
char letra = 'g';
float recorrido = 4,76;
}


Ahora ya podemos operar con variables libremente (cuando aprendamos a hacerlo) :].

EJERCICIOS

1- Verdadero o Falso
a) Una constante puede cambiar de valor a lo largo del programa.
b) El tipo int permite sistema octal.
c) Double tiene más precisión de decimales que float.
d) El tipo void es para carateres.
e) Declarando constantes con #define, estás reservando memoria para ellas.
f) Depués de declarar un variable siempre se pone punto y coma.

2- Di qué identificadores son incorrectos.

a) _pulsacion
b) año
c) auto
d) Tuyo
e) YaYo
f) num_camiones
g) #numero
h) mi_edad
i)  19registro
j)  cod soft

EL RETO

No se me ocurría qué poner, así que me decidí porque le hechen una mano a Juanito.

CitarHistoria de Juanito
Juanito está aprendiendo a programar en C. Para eso sigue el curso de un usuario de ogame con graves desequilibrios psicológicos llamado Thylzos. En estos momentos está estancado en el sexto capítulo ("Control de flujo") y ha hecho uno de los ejercicios que propone en el que le pedían que haga un programa. Él lo hizo, pero su compilador le marcó un error y no lo linkeó, lo revisó y no encontró ningún error, así que le preguntó a un amigo suyo que es Ingeniero en Informática, y que le dije que era un problema de edad. Juanito se iluminó y, entendiendo su problema, decidió esperar unos años, hasta ser mayor y poder usar el programa. Pero pasaron cuatro años y saguía sin poder usar el progrma. Pero esta vez algo cambió, encontró un error, lo solucionó y compiló (¡Por fin!), sin embargo el programa no hacía lo que él quería. Finalmente, desesperado, recurrió a mí.

Y yo recurro a vosotros. Miren, acá les dejo el código fuente del programa después de que Juanito corrija el error:
#include <stdio.h>
#define MAYORIA_EDAD 18;

int main (void){
int Edad_Juanito, Edad_Novia_Juanito;
char opc;
printf ("¿Cuántos años tiene Juanito?");
scanf ("%d", &Edad_Juanito);
printf ("¿Y su novia?");
scanf ("%d", &Edad_Novia_Juanito);

if (Edad_Juanito >= MAYORIA_EDAD){
printf("Juanito es mayor de edad");}

While ("mundo" == "mundo"){
printf ("¿Ha pasado un año? (S/N)");
scanf ("%c", &opc);

if (opc == 'S'){
int edad_Juanito ++;
Edad_Novia_Juanito ++;
}
}
}


Esto es lo que deben hacer:

a) Explica cómo funciona y qué hace (no hace falta que expliquen sentencia por sentencia, hay muchas cosas que no vimos).
b) Encuentra un error que no vio Juanito.
c) Encuentra el error que sí vio Juanito, explica en qué se equivocó en la correción (poruqe se equivocó) y cómo solucionarías tú el error.

Gracias freyi *.*


Cita de: Gambit en 26 de Enero de 2010, 10:25
Follar cansa. Comprad una xbox 360, nunca le duele la cabeza, no discute, no hay que entenderla, la puedes compartir con tus amigos...

Ray

Vale, resulta que tenía el programa mal instalado, ahora con el nuevo ya tarda un poco más en abrir, se abrió una ventana de configuración y aparece otra mientras se compila... Hasta ahora todo bien.

Sorry but you are not allowed to view spoiler contents.


Sorry but you are not allowed to view spoiler contents.

Qué tal? :wiiiiii:


Thylzos

#28
Compruébalo tú mismo:

Citar1- Verdadero o Falso

a) Una constante puede cambiar de valor a lo largo del programa. F, esas son las variables.
b) El tipo int permite sistema octal. V, y en hexadecimal y en decimal...
c) Double tiene más precisión de decimales que float. V, podemos comprobarlo en la tabla.
d) El tipo void es para carateres. F, es tipo nulo, para caracteres está char.
e) Declarando constantes con #define, estás reservando memoria para ellas.  F, eso es con la palabra const.
f) Depués de declarar un variable siempre se pone punto y coma. V, es una sentencia así que no hay más que hablar.

Citar2- Di qué identificadores son incorrectos.

a) _pulsacion Correcto
b) año Incorrecto, no puede llevar ñ.
c) auto Incorrecto, es una palabra reservada
d) Tuyo Correcto
e) YaYo Correcto
f) num_camiones Correcto
g) #numero Incorrecto, el signo # no se permite
h) mi_edad Correcto
i) 19registro Incorrecto, no se puede comenzar con números.
j) cod soft Incorrecto, no se permiten espacios.

Ahora pasemos a lo interesante, El reto. Este tipo de ejercicios son de los que más me gustan, sobre todo porque te hacen pensar y razonar un poco cómo penso y razonó otro, algo muy importante cuando querramos entender el código de otra persona. Veamos el programa de Juanito:

#include <stdio.h>
#define MAYORIA_EDAD 18;

int main (void){
int Edad_Juanito, Edad_Novia_Juanito;
char opc;
printf ("¿Cuántos años tiene Juanito?");
scanf ("%d", &Edad_Juanito);
printf ("¿Y su novia?");
scanf ("%d", &Edad_Novia_Juanito);

if (Edad_Juanito >= MAYORIA_EDAD){
printf("Juanito es mayor de edad");}

While ("mundo" == "mundo"){
printf ("¿Ha pasado un año? (S/N)");
scanf ("%c", &opc);

if (opc == 'S'){
int edad_Juanito ++;
Edad_Novia_Juanito ++;
}
}
}


Qué hace el programa es fácil de saber, pide la edad de Juanito y la de su novia, te dice si Juanito es mayor de edad y después te va preguntando si pasó un año para saber si estas edad aumentan.

Errores que no vio Juanito, el primero y más fácil,

Citar#define MAYORIA_EDAD 18;

Termina en punto y coma, no creo que haya más que comentar. Pero hay uno más que no tendrían por qué saberlo, y es que se crea un bucle infinito, si cada vez que nos pregunta si paso un año decimos que sí, podemos seguir y Juanito llegará a los 380 años, esto es un error lógico en la forma de plantear el programa, hay que evitar los bucles infitos, todo programa tiene un principio y un final.

Por último, qué error corrigió Juanito. eso se puede deducir con una linea muy llamativa:

Citarint edad_Juanito ++;

Si la analisamos, nos encontramos con que inicializa una nueva variable (¿para qué?) y le suma uno. Si vemos un poco más su identificador, notaremos que es casi igual que esta variable ya inicializada:

Citarint Edad_Juanito,

Sólo se diferencia en una mayúscula, así que podemos suponer que en un principio había puesto únicamente:

Citaredad_Juanito ++;

Lo había intentado compilar y su compilador le dijo que había una variable no inicializada, el la encontró y en vez de ponerle el nombre de la anterior, declaró una nueva, "engañando" así a su compilador , pero generando un error lógico en el programa.

Todo esto puede parecer muy difícil de deducir, pero no lo es. El único truco para resolver este tipo de problemas (y ya de paso encontrar errores nuestros programas y los de otros) es compilar y probar con todas las posibles aplicaciones del programa, modifcar el código, compilar de vuelta, y así hasta encontrar todos los errores, no hay que ser tan vagos como Juanito ;).

Gracias freyi *.*


Cita de: Gambit en 26 de Enero de 2010, 10:25
Follar cansa. Comprad una xbox 360, nunca le duele la cabeza, no discute, no hay que entenderla, la puedes compartir con tus amigos...

Ray


Últimos mensajes

Marvel Cinematic Universe de M.Rajoy
[Hoy a las 10:02]


Mafia, conceptos básicos e hilo de dudas de M.Rajoy
[Hoy a las 09:05]


Adivina la película de raul_isl
[Hoy a las 02:36]


Fotogramas de Mskina
[Ayer a las 20:02]


Gran Guía de los Usuarios de 106 de Orestes
[Ayer a las 00:03]