|
fulapol
|
 |
« Respuesta #2 en: 30 de Mayo de 2008, 04:56:58 » |
|
Haslo mientras debas
Otra condicion muy buena es el while, esta lo que hace es verificar una sentencia y dependiendo del resultado se ejecuta o no. Podemos definir todo dentro de { y } y lo que esta dentro del while podria ser visto como un gran if que se repite todo el tiempo. Algo para comprobar el while seria esto:
#include <stdio.h> #include <stdlib.h>
int main() { int numero; printf("Escriba un numero\n"); scanf("%i",&numero); while(numero!=20) { printf("%i",numero); numero=20; } system ("pause"); return 0; }
Y si lo comprobamos esto nos imprimira el numero hasta que sea igual a 20, por que la condicion del while es que numero sea diferente a 20 entonces cuando numero sea 20 acaba. La comprobacion es meter 20 para observar lo que sucede. Otra variacion del while es el do...while y lo que hace es ejecutar el bloque de codigo y verificar el while para saber si debe regresar al do o no. En este caso nosotros meteremos nuestro do...while para mejorar otra ves la calculadora.
#include <stdio.h> #include <stdlib.h>
int calcula(int numero1, int numero2, int opcion); int main() { int numero; int numero2; char opcion; do{ system ("cls"); printf("Soy una calculadora basica que suma, resta, multiplica y divide\nEscriba un numero\n"); scanf("%i",&numero); printf("¿que numero desea sumarle, restarle, multiplicarle y dividirle?\n",numero); scanf("%i",&numero2); printf("Numeros sumados valen %i \n",calcula(numero, numero2, 1)); printf("Numeros restados valen %i \n",calcula(numero, numero2, 2)); printf("Numeros multiplicados valen %i \n",calcula(numero, numero2, 3)); printf("Numeros divididos valen %i \n",calcula(numero, numero2, 4)); printf("Y el residuo es %i \n",calcula(numero, numero2, 5)); printf("Desea repetir(y/n):"); scanf("%c",&opcion); }while(opcion=='Y'||opcion=='y'); return 0; }
/********************************************************* * * * Nuestra funcion clacula pide dos numeros que son los * * que utilizara para trabajar y uno mas para saber que * * operacion realizar. * * Las opciones son: 1 = suma, 2 = resta, 3 = mult., * * 4 = division y 5 = residuo * * * **********************************************************/
int calcula(int numero1, int numero2, int opcion) { switch (opcion){ case 1: //Nuestro if para opcion = 1 return numero1+numero2; case 2: //Nuestro if para opcion = 2 return numero1-numero2; case 3: //Nuestro if para opcion = 3 return numero1*numero2; case 4: //Nuestro if para opcion = 4 return numero1/numero2; case 5: //Nuestro if para opcion = 5 return numero1%numero2; default: //Nuestro else return 0; } }
Podran notar que en este caso usamos el scanf para obtener una letra, en caso de que sea Y o y del ingles Yes el programa regresara al do. Ahora deben notar una cosa, los char siempre nesecitan usar comillas simples para poner o comparar un valor.
Las variables, mas que nombres
Ahora tenemos que regresar a las variables y analizarlas mas profundamente. Una variable es la forma en la que el programa sabe en que punto de la memoria estan los datos pero podemos hacer muchas cosas con las variables y dos formas que veremos son los punteros y los arrays o vectores o arreglos. Las variables son algo asi como etiquetas que tienen el punto de la memoria donde estan los datos y los tipos son para saber la cantidad de memoria que ocupan. Ahora podemos crear punteros o arrays. Empezaremos con los array o arreglos. Los arrays son un grupo de variables que estan escritas todas juntas, se guarda un espacio continuo. Para que quede mas claro podemos pensar en las variables como folios, cada que creamos una el folio avanza, pero a veces nesecitamos tener el folio 1, 2, 4, simplemente no nos importa el orden en el que esten, pero a veces queremos tener de 15 al 17, todos de corrido, para eso sirve el array. Obviamente el array trae mas ventajas que esa pero pasemos a trabajar con ellos. Un array se declara como tipo nombre[tamaño]. Una ves declarado el array tenemos que usar el indice o posicion o como lo quieran llamar. Cada array empieza del 0 al tamaño - 1. Y se le puede dar el valor al declararlo o individualmente.
#include <stdio.h> #include <stdlib.h>
int main() {
//Declaramos un array de 10 elementos, para darles valor //Nesecitamos escribir los valores entre { y } y //Separarlos con ,
int numeros[10]={65,2,3,56,1,7,3,5,9,8};
//Declaramos 10 elementos char
char letras[10];
//Ahora les damos valor individualmente
letras[0] = 'v'; letras[1] = 'a'; letras[2] = 'e'; letras[3] = 'r'; letras[4] = 'y'; letras[5] = 'b'; letras[6] = 'f'; letras[7] = 'd'; letras[8] = 'f'; letras[9] = 'g';
//Imprimimos las variable, recordar la posicion en el array
printf("Elemento 1 de los numero %i\n",numeros[0]); printf("Elemento 10 de los numero %i\n",numeros[9]); printf("Elemento 1 de las letras %c\n",letras[0]); printf("Elemento 10 de las letras %c\n",letras[9]); system ("pause"); return 0; }
Ahora esto nos puede servir para manejar datos cuando no queremos crear dato, dato1, dato2, etc. Y para otro uso que veremos despues.
Ya que tenemos a los arrays debemos conocer a los punteros. Un puntero apunta a una direccion, esto quiere decir que como sabemos una variable tiene el contenido de una posicion en la memoria mientras que un puntero tiene la direccion en la memoria de una variable. Para declarar un puntero se hace tipo* variable, aunque algunas personas hacen tipo *variable. Si notamos el * es para indicar puntero. Los punteros no tienen gran importancia por el momento pero despues veremos como aprovecharlos.
#include <stdio.h> #include <stdlib.h>
int main() {
//Esta es tambien una forma de inicializar punteros
int numero, *puntero;
//Inicializamos el numero y el puntero //Como el puntero apunta a la memoria utilizamos & para indicar //Un lugar de la memoria donde esta la variable
numero = 10; puntero= №
//Imprimimos las variable, recordar que & indica la posicion //De la variable, juguemos unpoco con esto
printf("Numero %i\n",numero); printf("Puntero %i\n",puntero); printf("Direccion de numero %i\n",&numero); printf("Que hay en lo que apunta el puntero %i\n",*puntero); system ("pause"); return 0; }
Y asi se manejan los puntero y los arrays y todas estas cosas tan raras que se pueden hacer con las variables. Solo para terminar bien los arrays usan [] y los puntero usan *, ahora cuando usamos un puntero y el puntero tiene * eso significa que nos de el valor de lo que esta apuntando.
Cadenas
Antes de empezar tenemos que definir que es una cadena. En ingles es string y se utiliza como una cadena de letras, en una definicion en español serian palabras y las palabras son un monton de letras unidas. En C existen 2 formas (existen mas) para manejar strings, los punteros y los arrays, por comodidad usaremos los arrays. La razon por la cual se usan los arrays es para tener una cadena de letras, en este caso char, y que esten juntas en la memoria. Todas las cadenas deben terminar en 0 y deben ser lo suficientemente grandes como para almacenar todo el texto, en el caso de las funciones printf y scanf utilizaremos %s para expresar una string, un array de char terminado en 0.
#include <stdio.h> #include <stdlib.h>
int main() {
char hola[5]= "Hola";
//Hola vale la palabra mas el 0, entonces es 4 +1 = 5 //Por eso el tamaño del array
//Imprimimos la cadena, no nesecitamos especificar un indice
printf("Numero %s\n",hola); system ("pause"); return 0; }
A partir de ahora utilizaremos otra cabecera mas llamada string.h y les explicare algunas funciones.
#include <stdio.h> #include <stdlib.h> #include <string.h>
int main() { char cadena[5] = "Hola";
//Imprimimos la variable
printf( "cadena es %s\n", cadena);
//Funcion strlen, para obtener el tamaño de un cadena
printf( "Tamaño de la cadena es %i\n", strlen(cadena));
//Ahora veremos la funcion strcmp, que compara cadenas //Notar que la unica diferencia es la h minuscula
char cadena2[5] = "hola"; if (strcmp(cadena,cadena2) < 0) printf("%s es menor que %s\n",cadena, cadena2); else printf("%s es igual o mayor que %s\n",cadena, cadena2);
//Con la funcion strcat podemos concatenar o unir strings //La afectada es la primera y solo puede unir texto estatico
char cadena3[20] = "Hola"; printf("cadena 3 es %s\n",cadena3); strcat(cadena3," mundo!"); printf("Ahora cadena 3 es %s\n",cadena3);
//Ahora la funcion strcpy para copiar cadenas
char cadena4[5]; strcpy(cadena4,cadena); printf("cadena es %s y cadena4 es %s\n",cadena,cadena4);
//Con la funcion strchr podemos buscar una letra en la cadena //Nos devolvera la cadena desde la letra, en este caso la
char letra = 'l'; printf("Desde la l %s\n",strchr(cadena,letra));
system("pause"); return 0; }
Has para
Bueno me pregunto que falta, que falta y pues si me acorde de algo importante, el for. For es una sentencia para hacer un bucle que no habia tocado porque no tenia nesecidad de usarla pero ahora que sabemos que es un array podemos utilizar for como una buena herramienta y hace necesario su uso. Para poner un ejemplo muy simple de for vamos a hacer las tablas de multiplicar del 9. For utiliza tres parametros, uno es el de condicion inicial, el segundo es condicion final y el tercero es tipo lo que haremos para llegar a la condicion.
#include <stdio.h> #include <stdlib.h>
int main() { int numero,i=9; //i nos va a servir de apoyo, los dos a 9
for(i=0;i<=;i++) //Aqui decimos que i empieza como 0 hasta 10, i++ aumenta en 1 a i printf("Tenemos que %i por %i es %i\n",numero,i,numero*i);
int numeros[10]={0,1,2,3,4,5,6,7,8,9}; //Array de numeros para la multiplicacion
for(i=0;i<10;i++) //El for, otra ves i empieza como 0 printf("Tenemos que %i por %i es %i\n",numero,numeros,numero*numeros);
//Como podemos notar i puede funcionar como indice en el array
system ("pause"); return 0; }
El codigo oculto
Una parte de el lenguaje C que podria parecer solo para los expertos es el preprocesador del compilador. El preprocesador de C es una parte importante del compilador con el cual podemos darle instruccion mediante directivas, estas directivas empiezan con # y oficialmente son 12 aunque dependiendo del compilador puede haber mas. La mas comun es #include con el cual podemos agregar codigo a el archivo y el nobre del archivo cuando va entre <> es buscado con las cabeceras y si esta entre "" se busca en el lugar donde esta el archivo y comunmente se usa para incluir las cabeceras pero podemos usarla donde sea. Otra directiva importante es #define que nos permite definir una constante, por ejemplo #define PI 3.1416 define a PI con el valor de 3.1416 en todo el programa pero esto es curioso porque pensaran que eso es como declarar una variable y pues el uso de #define es definir pero ademas hace el cambio en tiempo real, esto quiere decir que puedo hacer un codigo tan bizarro como quiera:
int main(){ #include <stdio.h> //Podemos hacer el include donde sea
#define escribe printf //ahora escribe es printf
//El compilador cambia todos los escribe por printf escribe("Comando escribe"); }
Una parte esencial de #define es crear macros, la definicion de macro no me la se pero bueno ahora veremos esto. Una macro es un #define donde el nombre de lo que definimos tiene () y todo lo que esta en parentesis son los parametros. Definamos una macro
int main(){ #include <stdio.h>
#define escribe printf #define mult(x,y) (x)*(y) //Parametros x, y son multiplicados //el parentesis es por si en ves de pasar un numero pasamos una sentencia //Como mult(4+5,5) entonces se traduciria como 4+5 * 5 y claro primero multiplica //y luego suma, mientras que nosotros queremos lo contrario y debe ser (4+5)*(5) //donde primero suma y luego multiplica
//El compilador cambia todos los escribe por printf escribe("%i",mult(7,8-2)); }
Las macros deben ser de una linea o se debe poner \ al final de cada linea, sin dejar espacios. Una parte curiosas es que tambien podemos quitar todo lo que definimos con la directiva #undef y asi borramos constantes y macros del codigo. Otras directivas son los if's #if , #else , #elif , #endif , #ifdef y #efndef y cada uno es muy simple, funcionan como cualquier if normal con la diferencia que estos buscan el valor de una constante y no de una variable, #if se debe cerrar con un #endif, #else lo que se realizara si no se cumple el #if y #elif es un else/if el cual tambien busca una condicion pero solo se ejecuta si el #if no se cumple. La condicion #ifdef busca que la condicion este definida mientras que #ifndef es verdadero cuando no esta definido y los dos actuan como cualquier if normal.
#define valor 100 #define C int main(){ #if valor>50 printf("Compilando con valor > 50); #else printf("Compilando con valor <= 50); #endif #ifdef C printf("Se programo con C"); #endif }
Creo que solo veremos 1 directiva mas. Esta directiva es #pragma y depende totalmente del compilador para funcionar pues esta le pasa intrucciones al compilador. En muchos ficheros .h veran que para evitar definir y evitar crear todo dos veces hacen esto:
/* Este es un fichero fichero.h */ #ifndef _FICHERO_H_ //si no existe #define _FICHERO_H_ /* Aqui el código */ #endif
|