Sei sulla pagina 1di 67

#include<stdio.

h> int main() { printf ("Hola Mundo"); return 0; }


En C++

1 #include<iostream> 2 3 using namespace std; 4 5 int main() 6{ 7 cout << "Hola mundo"; 8 return 0; 9}
Para el tipo de programas que se estarn mostrando en este blog la diferencia ms importante es la entrada y salida de datos. As que veamos un ejemplo de entrada y salida de datos de cada programa: En C

1 #include<stdio.h> 2 3 int main() 4 { 5 int radio; 6 float area, perimetro; 7 8 // SALIDA: mensaje un pantalla 9 printf("Introduce el radio del circulo: "); 10 11 //ENTRADA: recibir dato desde teclado 12 scanf("%d", &radio); 13 14 // calculos 15 area = 3.1416 * radio * radio; 16 perimetro = 3.1416 * radio * 2; 17 18 //SALIDA: resultado en pantalla 19 printf("El area es %.2f y el perimetro %.2f", area, perimetro); 20 getch(); 21 22 return 0; 23 }
En C++

1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int radio; 7 float area, perimetro; 8 9 // SALIDA: mensaje un pantalla 10 cout << "Introduce el radio del circulo: "; 11 12 //ENTRADA: recibir dato desde teclado

13 14 15 16 17 18 19 20 21 22 23 24 }

cin >> radio; // calculos area = 3.1416 * radio * radio; perimetro = 3.1416 * radio * 2; //SALIDA: resultado en pantalla cout << "El area es " << area << " y el perimetro " << perimetro; cin.get();cin.get(); return 0;

Lo que not al hacer estos dos programitas es que pedir un dato en C++ es mucho mucho ms simple que en C. Sin embargo, el asunto de los << y >> puede llegar a asustar a los recin iniciados en la programacin. Pedir un dato en C

scanf("modificador", &nombre de la variable);


Pedir un dato en C++

cin >> nombre de la variable;


Mostrar un dato en C

printf("Dato: modificador", nombre de la variable);


Mostrar un dato en C++

cout << "Dato: " << nombre de la variable;


Los modificadores son los siguientes: %d para int, %f para float, %s para string, %c para char.

Libreras en C++
Por simple convencin las libreras en C terminan en .h (punto hache). Todas las libreras de C sirven para C++, sin embargo, tambin por convencin, se elimina la terminacin .h y mejor se agrega c al principio. Libreria en C math.h string.h time.h etcetera. Librera en C++ cmath cstring ctime

El namespace
C como lenguaje tiene un conjunto de palabras reservadas, como por ejemplo: if, for, while, int, float, C++ es una ampliacin, por lo tanto tiene que agregar nuevas palabras reservadas. stas palabras reservadas estn en un namespace (espacio de nombres). En especfico cout y cin estn el namespace std (standard). Si no declararamos que vamos a usar el namespace std (using namespace std;), cada vez que quisieramos usar cout, tendramos que escribir std::cout. Espero que a partir de ahora pueden identificar si un programa est en C o en C++. Tambin espero estar publicando mis programas en ambos lenguajes a partir de ahora.
7 Comentarios

#define en C++, cmo s y cmo no


Guardado en: Curso el 28 de agosto del 2011 Etiquetas: bsico, define

El mayor objetivo de este post es darles a conocer una de las cosas que C++ permite hacer pero que nadie en su sano juicio debera de hacer. Y para que se los enseo entonces? Pues para que si algn da lo ven en un cdigo ajeno sepan qu pinch_ est pasando. Bueno, antes que nada, #define sirve para dos cosas: definir una constante o crear un macro. Los macros pueden llegar a ser algo difcil de entender, ahora slo veremos el asunto de las constantes. El asunto aqu es que si yo pongo (fuera del main) una lnea as:

#define PI 3.14159265
significa que cada vez que escribamos PI en nuestro programa, C++ lo interpretar como 3.14159265. Es una simple sustitucin.

#define <aqu va el nombre> <despus de un espacio va el valor>


Pero el asunto es que se puedes hacer algunas cosas bastantes feas con esta propiedad. Vean este programa:

1 #include<iostream> 2 using namespace std; 3 4 #define PI 3.14159265 5 #define NOF_CHAR 50 6 #define pause cin.get();cin.get(); 7 #define ct cout 8 #define cn cin 9 #define false true 10 11 int main() 12 { 13 char name[NOF_CHAR] = {0}; 14 ct << "Enter your name: "; 15 cn >> name; 16 ct << "Bye " << name << "." << endl; 17 if(false) 18 ct << "P.S. Pi = " << PI; 19 pause 20 }
Tenemos 6 definiciones, ordenadas en su nivel de aceptabilidad:

#define PI 3.14159265 y #define NOF_CHAR 50, stos ejemplifican el uso primario de #define: guardan un valor que es constante durante toda la ejecucin del programa. #define pause cin.get();cin.get();, sta ya empieza a ser no aceptable pero podemos darla por buena porque nos ayuda a leer mejor nuestro cdigo. Ya sabemos que al escribir cin.get();cin.get(); nuestro programa se pausa al igual que con un getch(), pero al usar este #define escribiremos en lugar de eso simplemente pause. #define ct cout y #define cn cin, totalmente inaceptables. Algunas personas usan este tipo de #defines para escribir menos, pero de verdad que (en la gran mayora de los casos) no vale la pena el ahorro de caracteres, slo estamos haciendo nuestro cdigo menos entendible para otras personas. #define false true, este es mas bien como una broma (y es increble que funcione en verdad), pero si se usa en serio es como una rayada de madre. Si ejecutan el cdigo vern que s se muestra la lnea donde se imprime PI an que est dentro de un if al que nunca se debera de entrar y porqu s entra? porque false es true.

As que ya saben cmo s y cmo no usar un #define en C++, y ya no estn indefensos ante programadores con malos hbitos.
8 Comentarios

Nuevo: Curso de C++


Guardado en: Blog el 18 de agosto del 2011

Segn Google Analytics estn regresando las visitas, que raro que coincida con el inicio de clases verdad? :D pero bueno, afortunadamente yo s me preocupe por este blog en vacaciones. Como ya repet dos veces, esto es un blog, lo que significa que los posts mas recientes son los que aparecen al principio. Adems, cuando inici este blog mi propsito era ir avanzando en dificultad conforme al tiempo, no lo he cumplido mucho pero an as los posts sobre los temas ms bsicos estn enterrados debajo de los ms recientes. As que me tom un tiempo para echarme un clavado de panza en el Codex de WordPress y crear una forma diferente de navegar en el blog.

Entonces as es como inauguro (siendo las 19:30 del dia ah no verdad?) el Curso de C++. Todo lo que tienen que hacer es ir a este ndice y comenzar a leer: Curso de C++, ndice. Luego pueden simplemente dar clic en el link Siguiente que aparecer en la barra lateral (->). As que espero que les sea de utilidad, si les gusta presmanlo, si tienen un amigo que siempre les anda preguntando pues mndenlo aqu y lbrense de l.
6 Comentarios

Code::Blocks, un IDE moderno para C++


Guardado en: Blog el 12 de julio del 2011 Etiquetas: ide

Yo hace un buen rato que no uso Dev-C++ para programar, y sin embargo vi que aqu en la barra lateral an est el link hacia el post donde se los recomiendo. As que ahora les voy a recomendar el IDE que uso actualmente Code::Blocks.

Code::Blocks tiene bastante ventajas respecto a otros IDES:

Aspecto moderno. A quin le gusta programar a pantalla completa en consola con fuente amarilla sobre fondo azul hoy en da? Multiplataforma. Windows XP/Vista/7, Mac OS X, Linux. Rpido. Est escrito en C++. Open Source. Eso significa muchas cosas, pero lo importante es que es gratis. Pestaas. Puedes tener muchos archivos abiertos. Lo pueden descargar aqu: Download Code::Blocks. Asegrense de descargar la versin que trae el compilador incluido, el que dice mingw. Si de plano nunca han manejado este tipo de software, tal vez les sean tiles estos consejos:

Para hacer un programa pequeo (lo que sea que no necesite mas de dos archivos) no se compliquen creando proyectos. Simplemente vayan a: File/New/Empy File. Luego guarden el archivo con extensin .cpp, preferentemente antes de empezar a programar (si no lo guardan no tendrn diferentes colores en su cdigo (Sintax Highlighting)). Hay tres botones relacionados con correr el programa: Build, Run y Build and Run. El primero solo construye el programa pero no lo corre, el segundo solo lo corre y el tercero los construye y los corre. As que cuando queramos probar nuestro programa el botn indicado es Build and Run, pero si no hemos hecho ningn cambio y queremos volver a probarlo es ms rpido Run.
11 Comentarios

Aprender ingls, en C++!?


Guardado en: Programas el 20 de mayo del 2011 Etiquetas: matrices, rand

Me cont SetRoot a travs de un comentario que se le ocurri hacer un programa en C++ que nos ayudar a aprender palabras en ingls, en sus propias palabras:
Se me ocurrio hacer un programa para aprender ingles y creo que los tiros tambien van por ahi corrgeme: 1 llenar 1000 palabras 2 agruparlas por alguna relacion como emociones articulos y otros(para esto quisiera usar una matriz para acceder a ella mas facil aunque 2 matrices tambien creo q me van :s con punteros y eso ,s) 3 ejecucion: con un par de cases hacer un menu que me permita lanzar 20 palabras al azar(con sran o ran acierto valga creo algo para + ganar time) puntos y asi con involucrar a los su amigos y significado familiares y despues que me permita hacer un tipo de examen o test con esas mismas palabras desordenadas que cada

Me gust la idea de hacer un pequeo bosquejo de su idea porque precisamente se necesita usar el cdigo de mi ltimo post: Nmeros aleatorios sin repetir en C++. As que mi algoritmo es algo as: 1. 2. 3. 4. 5. 6. Crear una matriz tipo string de N filas y 2 columnas, la primera columna son las palabras en ingls; la segunda, en espaol. Pedir el nmero de palabras que el usuario quiera memorizar. Obtener ese nmero de palabras aleatoriamente y mostrarlas. Borrar las palabras y empezar a preguntar el significado de cada una. Comparar la respuesta del usuario con la respuesta correcta. Calcular su calificacin y mostrarla.

El cdigo es este:

1 2 3 4 5 6 7

#include<cstdlib> #include<ctime> #include<iostream> using namespace std; int nofw; #define N 8 // numero de pares de palabras en la matriz

8 9 bool checkrep(int n, int num[]) 10 { 11 for(int i=0; i<nofw; i++) 12 if(n == num[i]) 13 return true; 14 return false; 15 } 16 17 int main() 18 { 19 srand(time(NULL)); 20 string ans, words[N][2] = {{"hi", "hola"}, {"house", "casa"}, 21 {"water", "agua"}, 22 {"roof", "techo"}, {"chair", "silla"}, {"loudspeaker", "bocina"}, 23 {"screen", "pantalla"}, {"money", "dinero"}}; 24 int n, correct=0, wrong=0; 25 cout << "Numero de palabras?: "; cin >> nofw; 26 // obtener 'nofw' palabras aleatoriamente de nuestra matriz 27 int num[nofw]; 28 for(int i=0; i<nofw; i++) 29 { 30 do 31 n = rand() % N; 32 while(checkrep(n, num)); 33 num[i] = n; 34 cout << words[n][0] << " -> " << words[n][1] << endl; 35 } 36 cin.get(); cin.get(); 37 system("cls"); 38 // preguntar el significado de cada palabra 39 for(int i=0; i<nofw; i++) 40 { 41 cout << words[num[i]][0] << " = "; cin >> ans; 42 if(ans == words[num[i]][1]) 43 { 44 correct++; cout << ">> Bien :)\n\n"; 45 46 } 47 else 48 { 49 wrong++; cout << ">> Mal :(\n\n"; 50 51 } 52 } 53 cout << "Tuviste un " << (float)correct / (float)nofw * 100 << 54 "% de respuestas correctas."; 55 cin.get(); cin.get(); }
Como dije antes, es slo un bosquejo, pero tal vez sea el punto de partida para un buen proyecto. Para optimizarlo creo que se deberan agregar algunas cosas:

Obtener los pares de palabras desde una base de datos Ordenarlas por categoras Que no importe si la respuesta est en maysculas o minsculas Mejorar la interaccin con el usuario
12 Comentarios

Nmeros aleatorios sin repetir en C++


Guardado en: Programas el 1 de abril del 2011 Etiquetas: bool, rand, while

Ya hemos visto cmo obtener nmero aleatorios en c++, pero tarde o temprano surge la necesidad de generar nmeros aleatorios pero sin que se repitan. Podra ser til para varias cosas como por ejemplo, ordenar de manera aleatoria elementos de una lista, formas grupos aleatorios, barajear cartas, etc. As que en algoritmo quedara algo as: 1. 2. 3. Crear una matriz y dejarla vaca. Obtener un nmero aleatorio. Checar si ese nmero existe en la matriz. Si si, regresar al paso 2. Si no, guardar el numero en la matriz.

As que el programa es este:

1 #include<cstdlib> 2 #include<ctime> 3 #include<iostream> 4 using namespace std; 5 6 bool checkrep(int n, int num[]) 7 { 8 for(int i=0; i<10; i++) 9 if(n == num[i]) 10 return true; 11 return false; 12 } 13 14 int main() 15 { 16 srand(time(NULL)); 17 int n, num[10]; 18 for(int i=0; i<10; i++) 19 { 20 do 21 n = 1 + rand() % 10; 22 while(checkrep(n, num)); 23 num[i] = n; 24 cout << num[i] << " "; 25 } 26 }
Primero que nada, <cstdlib> es la forma correcta de incluir la librera <stdlib.h> en c++, igual con <ctime>. Como ven, usamos una funcin bool (que retorna falso o verdadero) para checar si el nmero aleatorio ya existe en nuestra matriz. Si cualquiera de los nmeros es igual a nuestro nmero aleatorio n, la funcin retorna true, por lo que el ciclo do-while desde el cual llamamos la funcin tendr que repetirse una vez ms y hasta que la funcin retorne false. Cuando se logra salir del ciclo do-while, guardamos nuestra n en el lugar de la matriz que corresponda, lo mostramos en pantalla y continumos con la siguiente posicin de la matriz. Otra cosa. Para decirnos si un nmero est repetido en la matriz, la funcin checkrep() necesita obviamente dos cosas, el nmero aleatorio y la matriz. As que le envimos como parmetros nuestra matriz y nuestro nmero aleatorio.
5 Comentarios

Devolver cambio en C++


Guardado en: Programas el 10 de febrero del 2011 Etiquetas: if else, while

Han pagado algn recibo en una mquina automtica y se han preguntado cmo ser el programa que les devuelve el cambio? Lo ms seguro es que no, pero pues resulta que el profesor de Miguel ngel le encarg un programa que simulara eso, en sus propias palabras: Supn que una maquina de monedas de 10,5,2,1 y 50 centavos. Debes escribir un programa que decida cuantas monedas dar de cambio, dando prioridad las de mayor denominacin. Debe recibir como entrada la cantidad de dar a cambio. Ejemplo: para $40.50 ser 4 de 10, 0 de 5, 0 de 2, 0 de 1 y 1 de 50 centavos.

As que el primer problema se presenta con la entrada cmo hacer que el usuario introduzca slo cantidades como $50 o $43.50 y no cantidades como $23.45 o $9.70? Lo que se me ocurri es pedir la cantidad en una variable float (cambio), en otra variable convertir esa cantidad a tipo int (cambioint). En ese proceso se perder la parte decimal del nmero, as que si la resta cambio cambioint es igual a 0 o igual a 0.50, la cantidad que introdujo el usuario es correcta. La otra parte es sencilla, slo se necesita ver si la variable cambio es mayor que 10. Si si, se le restan 10 a la variable y se aumenta un contador. Luego se hace lo mismo con las dems monedas. Pero bueno, el programa es este:

1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 float cambio; int cambioint, m10=0, m5=0, m2=0, m1=0, m50c=0; 7 do 8 { 9 cout << "Cambio?: "; cin >> cambio; 10 cambioint = (int)cambio; 11 }while((cambio - cambioint) != 0 && (cambio - cambioint) != 0.50); 12 while(cambio != 0) 13 { 14 if(cambio>=10) 15 { 16 m10++; 17 cambio-=10; 18 } 19 else if(cambio>=5) 20 { 21 m5++; 22 cambio-=5; 23 }

24 else if(cambio>=2) 25 { 26 m2++; 27 cambio-=2; 28 } 29 else if(cambio>=1) 30 { 31 m1++; 32 cambio-=1; 33 } 34 else if(cambio>=0.5) 35 { 36 m50c++; 37 cambio-=0.5; 38 } 39 } 40 cout << m10 << ", " << m5 << ", " << m2 << ", " << m1 << ", " << 41 m50c; }
Solo le faltara darle un poco de formato a la salida, pero pues ya es cuestin de gustos y ya saben, cualquier duda aqu estn los comentarios abajo.
14 Comentarios

Cuando inicializar las variables en cero y cuando no


Guardado en: Curso el 14 de enero del 2011 Etiquetas: variables

Cuando empec a aprender a programar en c++ (creo que uno nunca acaba) me ensearon que siempre hay que inicializar en cero o en algn otro valor las variables, porque si no, pueden tomar valores raros que podran arruinar nuestro programa. Vamos a ver si la leyenda es cierta:

1 #include<iostream> 2 using namespace std; 3 4 int main() 5{ 6 int var1; 7 cout << var1; 8}
Pues con mi compilador s lo es, una variable sin inicializar toma valores raros. Pero si se han fijado en mis programas, yo no siempre inicializo mis variables, por qu? Pues porque no siempre es necesario. La regla es bastante simple: Si la primera instruccin en la que usamos nuestra variable es de asignacin, no es necesario inicializarla. Por ejemplo:

cin >> var1; // no es necesario inicializarla var2 = 14; // no es necesario inicializarla cout << var3; // es necesario inicializarla var4 = cos(45); // no es necesario inicializarla var5++; // es necesario inicializarla if(var6 != 7) // es necesario inicializarla cin.getline(var7); // no es necesario inicializarla
Podemos seguir inicializando todas las variables que usemos, pero si nicamente inicializamos las necesarias vamos a dar la impresin de que sabemos lo que estamos haciendo XD

20 Comentarios

Pginas: 1 2 3 4 5 6

Una progress bar es la barrita, generalmente verde, que aparece en sistemas operativos e infinidad de programas cuando algo se est cargando. Hoy no nos vamos a meter en asuntos de cargar archivos o algo, nicamente vamos a ver el principio bsico sobre el que operan estas barras. Nuestro programa slo pedir una cantidad en segundos, que ser el tiempo que durar en llenarse nuestra progress bar. A la ventana donde se ejecutan nuestros programas le caben 80 caracteres de largo, as que vamos a decir que nuestra progress bar tiene una resolucin de 80. El nico problema es saber cunto durar cada unidad de esas 80 para que en total se acumule el tiempo indicado.

La funcin delay() o Sleep()


Si en su IDE pueden usar la librera conio.h, entonces van a usar la funcin delay(). Si no, vamos a tener que agregar la librera windows.h y usar la funcin Sleep() (as con mayscula). Ambas funciones hacen exactamente lo mismo: paran el programa durante una cierta cantidad de tiempo en milisegundos. Por ejemplo:
cout Sleep(2000); cout << "Hace dos segundos te salud!"; << "Hola" << endl;

Se muestra 'Hola', se pausa 2 segundos y se muestra 'Hace dos segundos te salud!' Para los que usan conio.h, sera
printf("Hola\n"); delay(2000); printf("Hace dos segundos te salud!");

algo

as:

Ahora s, para saber cuanto tiempo durar cada unidad de nuestra barra tenemos primero que convertir los segundos a milisegundos (s*1000), luego dividirlos entre la resolucin de la barra (s*1000/80). As que nuestro programa queda as:

1 #include<windows.h> 2 #include<iostream> 3 using namespace std; 4 5 int main() 6 { 7 int s; 8 cout << "Segundos?: "; cin >> s; 9 for(int i=0; i<=79; i++) 10 cout << "_"; 11 for(int i=0; i<=79; i++) 12 { 13 cout << "="; 14 Sleep(s*1000/80); 15 } 16 }
El primer ciclo es solo por esttica, para ver hasta donde va a llenar la barra. El segundo es el que imprime la barra con sus respectivas pausas.
10 Comentarios

Saber si es palndromo o no, de forma recursiva 2da parte

Guardado en: Programas el 10 de enero del 2011 Etiquetas: cadenas, string.h

Pues la idea que se me ocurri en el otro post result ser ms sencilla de lo que me imagin, y ahora s la funcin recursiva se ve mucho mejor, ya es mucho ms que un ciclo disfrazado. Coment extensivamente el cdigo, as que aqu est:

1 2 string chk4palindrosity(string thestr) 3 { 4 if(thestr[0] == thestr[thestr.length() - 1]) // comparar primer 5 caracter con ultimo 6 { 7 n++; 8 if(n == len / 2) // si el numero de veces que la comparacin ha 9 sido cierta es... 10 return "Si es palindromo!"; // igual a la mitad de los 11 caracters, es palindromo 12 thestr.erase(0, 1); // borramos primer caracter 13 thestr.erase(thestr.length() - 1, 1); // borramos ultimo 14 return chk4palindrosity(thestr); // llamamos a la funcin con el 15 string recortado 16 } 17 else // si una de las comparaciones no es cierta, no es palndromo 18 return "No es palindromo"; 19 } 20 21 int main() 22 { 23 char inputf[50]={0}, input[50], *parte; 24 cout<<"Introduce un palindromo: "; cin.getline(input, '\n'); 25 26 parte = strtok(input, " "); // 27 strcat(inputf, parte); // 28 while((parte = strtok(NULL, " ")) != NULL) // 29 strcat(inputf, parte); // quitar espacios del 30 array 31 32 string thestr(inputf); // convertir array en string para facilitar 33 operaciones 34 len = thestr.length(); // obtener longuitud del string 35 if(len == 1) 36 cout << "Si es palindromo!"; 37 else 38 cout << chk4palindrosity(thestr); // llamar a la funcion e imprimir lo que retorne cin.get(); }
Lo que hace la funcin recursiva es comparar el primer caracter con el ltimo, si son iguales recortarlos y llamarse; si no, no es palndromo. Cualquier duda ya saben que los comentarios estn abiertos.
1 Comentario

#include<string.h> #include<iostream> using namespace std; int len, n=0;

Saber si es palndromo o no, de forma recursiva

Guardado en: Programas el 8 de enero del 2011 Etiquetas: cadenas, string.h

Hace unos das me pidieron por correo un programa que nos dijera si un string es palndromo o no, pero usando una funcin recursiva. Me pareci interesante aunque raro que pidieran hacerlo de forma recursiva. Tal vez recuerden que ya haba publicado aqu una forma de saber si un string es palndromo o no, el cual he descubierto (ahora que hice este otro) que no es muy eficiente. Bueno pues el cdigo es este:

#include<string.h> 1 #include<iostream> 2 using namespace std; 3 char cadenaf[50]={0}; int len, n=0; 4 5 string chk4palindrosity(int c) 6 { 7 if(cadenaf[c] == cadenaf[len-1-c]) 8 { 9 n++; 10 if(n == len/2) 11 return "Si es palindromo!"; 12 return chk4palindrosity(c+1); 13 } 14 else 15 return "No es palindromo"; 16 } 17 18 int main() 19 { 20 char cadena[50],*parte; 21 cout<<"Introduce un palindromo: "; cin.getline(cadena,50,'\n'); 22 23 parte = strtok(cadena," "); // 24 strcat(cadenaf,parte); // 25 while((parte = strtok(NULL," ")) != NULL) // 26 strcat(cadenaf,parte); // quitar espacios del 27 string 28 29 len = strlen(cadenaf); 30 cout << chk4palindrosity(0); 31 cin.get(); 32 }
La verdad es que es la funcin es recursiva de puro milagro. Lo que hice fue transformar el ciclo que checaba que los caracteres fueran iguales en una funcin en la que se aumenta una variable cada vez que se llama a s misma. El cdigo ahora es ms eficiente por dos simples razones: 1. 2. Se detiene y da el resultado a la primera comparacin de caracteres que no sean iguales. Si el primer y el ltimo caracter no son iguales, no es palndromo y ya no sigue analizando los dems. Slo checa la mitad de los caracteres. Si la mitad de los caracteres corresponden a la configuracin de un palndromo, ya no hay porqu seguir analizando la otra mitad.

Tal vez una mejor manera de hacerlo sera con una funcin que recibiera el string a analizar, comparar el primer y ltimo caracter: si no, no es; si si, eliminar el primer y ltimo caracter y volver a llamar a la funcin. Esto hasta que el numero de comparaciones ciertas sea igual a la mitad de la longitud inicial del string. Alguien se anima a hacerlo?
3 Comentarios

Imprimir determinados nmeros primos


Guardado en: Programas el 19 de diciembre del 2010 Etiquetas: primos

Sobre nmeros primos he escrito bastantes programas y me he dado cuenta de que los profesores de programacin tienen cierta fijacin con ellos. Pero bueno, el programa de hoy imprime la cantidad de nmeros primos que el usuario quiera y es interesante porque es un buen ejemplo de la utilidad de los ciclos infinitos, que ya habamos visto antes. Ok, el cdigo es este:

1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int cnt,i=0,ii,res,nc=0,np=0; 7 cout << "Introduce la cantidad de numeros: "; cin >> cnt; 8 for(;;) 9 { 10 i++; 11 for(ii=1;ii<=i;ii++) 12 { 13 res=i%ii; 14 if(res==0) 15 nc=nc+1; 16 } 17 if(nc==2) 18 { 19 cout << i << " "; 20 np++; 21 } 22 nc=0; 23 if(np==cnt) 24 break; 25 } 26 }
Si tienen problemas para entender cmo obtuvimos los nmeros primos, deberan darle una revisada a estos posts: Saber si es primo o no y Primos en un rango. Lo que hicimos es que todo el programa estuviera dentro de un ciclo infinito que se detendr cuando nuestra variable que se aumenta cada vez que obtenemos un numero primo np sea igual a la variable con la cantidad deseada de nmeros primos cnt. Pero recuerden que donde podemos usar un ciclo infinito, queda mucho mejor un ciclo while:

1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int cnt,i=0,ii,res,nc=0,np=0; 7 cout << "Introduce la cantidad de numeros: "; cin >> cnt; 8 while(np!=cnt) 9 { 10 i++; 11 for(ii=1;ii<=i;ii++) 12 { 13 res=i%ii; 14 if(res==0) 15 nc=nc+1;

16 17 18 19 20 21 22 23 24 }

} if(nc==2) { cout << i << " "; np++; } nc=0; }

nicamente ponemos la palabra while en lugar de for, copiamos la condicin que condicionaba (s, lo se) el break y la pegamos dentro de los parntesis del while pero de manera contraria (de == a != o de < a >).
6 Comentarios

No se hacen proyectos finales


Guardado en: Blog el 15 de diciembre del 2010 Etiquetas: comentarios

Bueno pues lo dej muy claro en el ttulo no? pero lo repito, no se hacen proyectos finales. Cuando cree este blog lo hice pensando en ayudar a todos los estudiantes de programacin en c++ que necesitan algn empujn para lograr hacer sus propios programas. Tengo pruebas para decir que casi nunca me niego a hacer programas pequeos que me piden por correo o por comentarios, pero cuando me llegan correos pidiendo que les haga un programa que lleve el control del inventario de un almacn registrando cada entrada y salida de producto pidiendo tipo, cantidad, numero de control, precio imprimiendo al final del da el reporte.. y que adems haga los clculos para. en formato de y con 7 mens con con un apartado de ayuda. para maana por favor pues ni les respondo. La verdad es que no se vale. Durante todo el ao estuvieron haciendo programas sencillos con los que era totalmente vlido pedir ayuda, pero no, piden ayuda hasta el final del semestre cuando les encargan un proyecto final. Recuerden que yo tambin soy un estudiante y en estos das tambin estuve ocupadsimo con tareas y trabajos. Por eso no haba publicado nada. Pero ya estoy de vacaciones!, as que ya voy a tener un poco ms de tiempo para atender mis blogs :)
29 Comentarios

Clasificar nmeros en C++


Guardado en: Programas el 26 de noviembre del 2010 Etiquetas: matrices, rand

Por medio de un comentario Gaby me pidi un programa que: Genere 10 nmeros aleatorios del 0 al 50 y los clasifique en 2 rangos: menores que 10 y mayores que 10 pero menores que 20. A nosotros nos sirve para practicar el uso de nmeros random, de matrices y de ciclos. El programa es este:

1 2 3 4 5 6 7 8

#include<stdlib.h> #include<ctime> #include<iostream> using namespace std; int main() { int numrnd[10], cls1[10]={0}, cls2[10]={0}, ct1=0, ct2=0; srand(time(NULL));

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 }

cout << "Los numeros: "; for(int i=0; i<=9; i++) { numrnd[i] = rand() % 51; cout << numrnd[i] << ", "; if(numrnd[i] < 10) { cls1[ct1] = numrnd[i]; ct1++; } if(numrnd[i] > 10 && numrnd[i] < 20) { cls2[ct2] = numrnd[i]; ct2++; } } cout << endl << "Menores que 10: "; for(int i=0; i<ct1; i++) cout << cls1[i] << ", "; cout << endl << "Mayores que 10 y menores que 20: "; for(int i=0; i<ct2; i++) cout << cls2[i] << ", ";

Para dudas respecto a la generacin de nmeros random est este post: Obtener nmeros aleatorios en C++. Para dudas respecto a la declaracin y uso de matrices est este otro post: Ah nunca he escrito sobre matrices!, voy a tener que ponerme a ello. Para dudas con respecto a los ciclos for, s tengo un post: Ciclos for en C++. Tenemos 3 matrices, en la primera guardamos nuestros 10 nmeros aleatorios, en la segunda los nmeros que queden en la primera clasificacin (menores que 10) y en la tercera los que queden en la segunda clasificacin. As que lo que hacemos es ir traspasando los valores de la primera matriz a las otras dos segn su valor. Para esto tenemos que llevar en el mismo ciclo 3 cuentas diferentes, una para cada matriz. Las variable ct1 y ct2 se encargan de ir cambiando los ndices de las matrices cls1 y cls2 respectivamente, por lo que slo deben aumentar cuando en realidad sea necesario. Despus lo nico necesario es mostrar nuestras dos matrices. Como cada matriz puede tener un nmero de elementos diferentes cada vez, tenemos que hacer dos ciclos, uno para cada matriz con ct1 o ct2 como lmite. Como ltima aclaracin slo digo que, tal como dice el problema, el nmero 10 nunca va a quedar clasificado en algn rango porque el 10 no es menor que 1o y tampoco es mayor que 10.
11 Comentarios

Convertir segundos a horas, minutos y segundos


Guardado en: Programas el 23 de noviembre del 2010 Etiquetas: operadores

Como les promet en el post anterior, en este post vamos a hablar sobre un programa que usa los operadores compuestos de manera muy til: convierte los segundos en horas minutos y segundos. El programa es este:

#include <iostream>

using namespace std; int main() { int sec, hr, min; cout << "Introduce los segundos: "; cin >> sec; cout << sec << " segundos son "; hr = sec / (60*60); sec %= 60*60; min = sec / 60; sec %= 60; cout << hr << " horas " << min << " minutos y " << sec << " segundos" << endl; }
Primero dividimos los segundos sec entre 60*60 (3600) para obtener los horas y lo guardamos en hr. Noten que la variable sec no cambia. Luego obtenemos el residuo de dividir sec / 60*60 (es lo que el operador % hace) y lo guardamos en la misma variable. En este paso s modificamos la variable sec, ahora contiene los segundos iniciales menos las horas que ya obtuvimos en el paso anterior. Ahora dividimos nuevamente la variable sec / 60 para obtener los minutos y lo guardamos en hr. La variable sec no cambia. Luego obtenemos el residuo de dividir sec / 60 (es lo que el operador % hace) y lo guardamos en la misma variable. En este paso s modificamos la variable sec, ahora contiene los segundos iniciales menos las horas menos los minutos. Ya slo mostramos las tres variable y listo. Ahora, si somos de los que nos preocupamos por el lenguaje, veremos que a veces hay errores de ortografa como 1 minutos. Para solucionar eso slo necesitamos unos cuantos ifs:

#include <iostream> using namespace std; int main() { int sec, hr, min; cout << "Introduce los segundos: "; cin >> sec; cout << sec << " segundos son "; hr = sec / (60*60); sec %= 60*60; min = sec / 60; sec %= 60; cout << hr << " hora"; if(hr != 1) cout << "s"; cout << " " << min << " minuto"; if(min != 1) cout << "s"; cout << " y " << sec << " segundo"; if(sec != 1) cout << "s"; }
21 Comentarios

Operadores compuestos en C++


Guardado en: Curso el 20 de noviembre del 2010 Etiquetas: operadores, sencillos

Los operadores (en cualquier lenguaje de programacin) son los smbolos que permiten hacerle una operacin a una o ms variables. Los ms conocidos son los operadores aritmticos:

+ Suma - Resta * Multiplicacin / Divisin % Mdulo (residuo de la divisin) Otros son los lgicos (&&, ||), los relacionales (<, >, !=, ==), etc. Pero en este post, como dice el ttulo, vamos a ver los operadores compuestos en c++. Cmo haramos para sumarle a una variable int, por ejemplo, 3 unidades? Alguien que nunca hubiera programado escribira algo as:
mivar + 3;

Sabemos que eso no es vlido porque una suma retorna un valor (el resultado) y ese valor tiene que ser almacenado en una variable. En el cdigo anterior ese valor no se almacena en ninguna variable, por lo tanto ERROR. Sabiendo esto ltimo podemos escribir esto:
mivar = mivar + 3;

En la variable mivar, guardamos el contenido de esa misma variable ms tres. Todo bien no? eso es perfectamente vlido y normal, sin embargo los operadores compuestos nos permiten hacer lo mismo con menos cdigo:
mivar += 3;

Como ven est inspirado en hacer que lo-primero-que-se-nos-ocurre sea posible. As tenemos que:
mivar mivar mivar = = = mivar mivar mivar + * 3; 3; 3; es es es lo lo lo mismo mismo mismo que que que mivar mivar mivar += -= *= 3; 3; 3;

mivar = mivar / 3; es lo mismo que mivar /= 3;

Bueno, para ver un poco de la utilidad de estos operadores y hacindole un favor a un tal Victor, vamos a ver un programa que imprima los mltiplos de un cierto nmero (introducido por el usuario) que haya desde 1 hasta otro cierto nmero (introducido por el usuario):

#include<iostream> using namespace std; int main() { int num, lims, m=0; cout << "Numero?: "; cin >> num; cout << "Limite superior?: "; cin >> lims; while(lims >= (m+=num)) { cout << m << ", "; } }
Primero pedimos el nmero del cual queremos obtener mltiplos (num), luego el lmite superior (lims). m obtendr el valor de los mltiplos y lo tenemos que igualar a 0 al inicio. Luego tenemos un ciclo while. En espaol dice: Me mantendr ejecutando mientras el lims sea mayor o igual a m ms num. Dentro del ciclo mostramos la variable m. Si,
m m+=num; m+=num; -----> -----> m= m= m m + + num; num;

por

ejemplo,

num

3,

entonces
=

la

instruccin
= = 0 3

n+=num
+ + 3; 3;

se

desarrolla
= =

as:
0; 3; 6;

-----> m -----> m

-----> m -----> m

m+=num; etc, etc.

----->

m=

num;

-----> m

3;

----->

9;

Aqu podra poner un otro programa an ms til para usar los operadores compuestos, pero mejor lo dejo para el siguiente post. Ah y si t eres Victor, entonces tal vez te interese este post: Cmo contar el nmero de veces que sucede algo.
1 Comentario

Pginas: Anterior

Los tipos de funciones en c++ son 4, aunque en realidad son las combinaciones de las 2 cosas que una funcin puede hacer. Si andan perdidos en cuanto a funciones les recomiendo leer mi post anterior: Funciones en C++. Una funcin, como les deca, puede hacer (o no) dos cosas: 1 Recibir datos y 2 Retornar datos. De esto surgen los cuatro tipos de funciones: 1. 2. 3. 4. No reciben ni retornan Reciben y no retornan No reciben y retornan Reciben y retornan

Vamos a hacer un programa que sume dos nmeros, usando los cuatro tipos de funciones:

No reciben ni retornan
Las ms sencillas. Para usarlas slo tenemos que saber cmo crearlas y cmo llamarlas. Una funcin se crea de esta forma general:
tipo nombre(){}

El tipo se refiere al tipo de dato (int, float, void, char) y en las funciones que no retornan siempre es void. El nombre es el nombre de la funcin: cualquiera que empiece con una letra, que sea significativo y que no sea una palabra reservada. Para llamarlas slo hay que escribir el nombre de la funcin seguido de sus parntesis y un punto y coma (;).
nombre();

As nuestro programa sera:

#include<iostream> using namespace std; void sumar() { int num1, num2, r; cout << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> num2; r = num1 + num2; cout << "La suma es " << r; } int main() { sumar(); }
Como ven, todo lo que habramos puesto en nuestro main mejor los pusimos en una funcin y desde el main la llamamos. Una funcin siempre, siempre, siempre tiene que ir antes del main.

Una funcin de este tipo que hemos usado muchas veces es getch();

Reciben y No Retornan
Cmo haramos para pedir los dos nmeros en el main y que la funcin haga la suma? Para eso tenemos que hacer una funcin capaz de recibir datos, entonces la sintaxis cambia un poco:
tipo nombre(tipo_var1 nombre_var1, tipo_var2 nombre_var2){}

tipo y nombre se refieren a lo mismo y como no retorna el tipo siempre es void. Dentro del parntesis tenemos otros aspectos: tipo_var1 se refiere al tipo de la variable que nuestra funcin va a recibir. nombre_var1 se refiere al nombre de esa variable. Si queremos recibir una variable hasta ah es suficiente, si queremos otra variable ponemos una coma (,) y declaramos la siguiente variable. Para llamar la funcin hay que poner la variables que vamos a enviar dentro del parntesis en el mismo orden en que las declaramos en la funcin:
nombre(var1, var2);

Nuestro programa quedara as:

#include<iostream> using namespace std; void sumar(int num1, int num2) { int r; r = num1 + num2; cout << "La suma es " << r; } int main() { int num1, num2; cout << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> num2; sumar(num1, num2); }
Pedimos los dos nmeros en el main, los enviamos a la funcin, sta los suma y los muestra. Una funcin de este tipo que hemos usado muchas veces es el odiado por muchos, amados por otros, gotoxy(x,y);

Retornan y No Reciben
Y si ahora queremos lo contrario? Pedir los nmeros en la funcin, pero mostrar el resultado en el main. Para eso necesitamos una funcin que retorne. Recibir es enviar datos del main a la funcin. Retornar es enviar datos de la funcin al main. Para retornar datos hay que hacer dos cosas: no usar void como tipo y usar return. De
tipo nombre() {

forma
return var;

general:
}

El tipo tiene que ser del tipo de variable que queremos retornar, si nuestra variable retorna una variable int, pues el tipo de la funcin es int. Para indicar qu variable estamos retornando usaremos la palabra return seguido de la variable. Usualmente esto va al final de la funcin.

Para llamar a la funcin hay que preparar un colchn en donde caiga la variable que est retornando.
var = nombre();

La variable que est retornando nuestra funcin se va a almacenar en la variable var. Este es un buen momento para recordarles que las variables declaradas entre dos llaves {} nicamente existen entre esas dos llaves. O sea que la variable var de la funcin no es la misma que la variable var de la funcin; sin embargo la var del main est adquiriendo el valor de la var del main. Un poco confuso lo se, no se preocupen. Nuestro programa quedara as:

#include<iostream> using namespace std; int sumar() { int num1, num2, r; cout << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> num2; r = num1 + num2; return r; } int main() { int r; r = sumar(); cout << "La suma es " << r; }
A alguien se le ocurre una funcin conocida de este tipo?

Reciben y Retornan
Ahora queremos que nuestra funcin nicamente sume, el main se va a encargar de pedir los nmeros y sumar los resultados. Para eso necesitamos que nuestra funcin reciba las variables y adems retorne el resultado. Wow! Es acaso eso posible? Claro que s. Es slo cuestin de combinar las funciones que reciben y no retornan con las que retornan y no reciben. Nuestro programa quedara as:

#include<iostream> using namespace std; int sumar(int num1, int num2) { int r; r = num1 + num2; return r; } int main() { int num1, num2, r; cout << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> num2; r = sumar(num1, num2); cout << "La suma es " << r; }

Las funciones de la librera math.h son en su mayora de este tipo. sqrt(); pow(); sin(); En principio puede parecer que las funciones sirven nicamente para organizar el cdigo, lo cual es cierto, pero no slo eso. Se imaginan si tuviramos que escribir todo el cdigo detrs de un simple gotoxy();? Ah verdad Bueno, no me iba a quedar tranquilo si no les mostraba la versin optimizada de la ltima funcin:

#include<iostream> using namespace std; int sumar(int num1, int num2) { return num1 + num2; } int main() { int num1, num2; cout << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> num2; cout << "La suma es " << sumar(num1, num2); }
:D
11 Comentarios

Funciones en C++
Guardado en: Curso el 6 de noviembre del 2010 Etiquetas: funciones

Supongo que ya es hora de retomar el blog y ponerme a hablar de funciones en c++. Una funcin es un pedazo de cdigo fuera del main, con un nombre y que puede ser llamado desde otra parte de nuestro programa. Imagnense que estn entrenando a su perro a hacerse el muertito. Cada vez que ustedes dicen muertito, el perro se tira de espaldas en el suelo, cierra los ojos y saca la lengua. En programacin, el contenido de la funcin sera tirarse de espaldas, cerrar los ojos y sacar la lengua; el nombre de la funcin sera muertito; y cada vez que nosotros decimos muertito estamos llamando a la funcin. Nuestra funcin sera algo as:

void muertito() { Perro.Tirarse(posicion='espalda'); Perro[OjoDer].Cerrar(); Perro[OjoIzq].Cerrar(); Perro[Lengua].Sacar(); }


Jajaja, bueno, bueno. Ya en serio vamos a hacer un clsico Hola Mundo pero usando una funcin:

#include<iostream> using namespace std; void hola() { cout << "Hola Mundo!"; } int main() {

hola(); }
Como ven, esta funcin es muy estpida. No nos beneficia en nada y nos hace escribir ms cdigo del necesario, pero nos sirve para ver cmo acta una funcin: al momento de llamar a la funcin, el compilador se brinca a la funcin, la ejecuta y cuando termina, vuelve al punto desde donde brinc. Si pudieran leerle la mente a un compilador, este dira: Linea 1. Incluir la librera iostream. OK Linea 2. Usar el namespace estndar. OK Linea 3. Oh! una funcin llamada hola, la recordar. Linea 4. Llave. Parte de la funcin. Ignorar Linea 5. Imprimir Hola Mundo!. Parte de la funcin. Ignorar Linea 6. Llave. Parte de la funcin. Ignorar Linea 7. Por fin el main! Linea 8. Llave. Entrar Linea 9. Esta funcin se me hace conocida oh s ya recuerdo. Ejecutar lineas 4, 5 y 6 Linea 10. Llave. Salir Ahora veamos una funcin que s nos es til:

#include<iostream> using namespace std; void hola(char nombre[50]) { cout << "Hola " << nombre << "!"; } int main() { char nombre[50]; cout << "Cual es tu nombre?: "; cin.getline(nombre, 50, '\n'); hola(nombre); }
Primero pedimos un nombre, lo guardamos en una variable y se le mandamos a la funcin para que lo muestre. No se preocupen, si nunca haban visto una funcin tal vez no entiendan la sintaxis, pero el objetivo de este post es que sepan qu es una funcin y para qu se puede usar. En el siguiente post voy a explicar la sintaxis de los cuatro tipos de funciones en c++.
7 Comentarios

Cmo pasar una matriz o arreglo como parmetro a una funcin


Guardado en: Programas el 28 de octubre del 2010 Etiquetas: arreglos, funciones

Bueno, casi creo que nunca he hablado de matrices, parmetros o funciones en este blog, pero este post es una peticin de Rodrigo que me dijo por email que tena problemas con su tarea porque no sabe cmo pasar una matriz como parmetro a una funcin en c++. Es algo sencillo, pero difcil de deducir. Veamos. Si
int

tu la forma

arreglo de declarar

es la

de funcin

una es la

dimensin
matriz[4];

siguiente:

void

fx(int

m[4])

...cdigo...

Y
fx(matriz);

la el

forma arreglo pues


fx(int

de es es
m[4][3])

llamar de

la dos lo
{

funcin

sera: dimensiones
matriz[4][3];

Si
int

void

mismo:
...cdigo... }

Y
fx(matriz);

la la

forma

de funcin se

llamar retorna declara

la

funcin una

sera: matriz
matriz[4];

Si
int

void fx(int

normal:
matriz[4]; }

m[4])

return

la

forma

de

llamar

la

funcin

sera:

matriz[4] = fx(matriz);

Este programa pide tres nmeros, los almacena en una matriz, le suma 1 a cada elemento y los muestra, usando para cada accin una funcin. As que tenemos funciones que reciben matrices y que retornan matrices. Chquenlo.

#include<iostream> using namespace std; void pedir(int matriz[3], int len) { for(int i=0; i<=len; i++) { cout << "Numero " << i+1 << ":? "; cin >> matriz[i]; } } int sumar(int matriz[3], int len) { for(int i=0; i<=len; i++) matriz[i]++; return matriz[3]; } void mostrar(int matriz[3], int len) { for(int i=0; i<=len; i++) cout << matriz[i] << " "; } int main() { int matriz[3]={0}, len = sizeof(matriz)/sizeof(int); pedir(matriz, len-1); matriz[3] = sumar(matriz, len-1); mostrar(matriz, len-1); return 0; }
9 Comentarios

Grfica de Seno y Coseno en C++


Guardado en: Programas el 4 de octubre del 2010 Etiquetas: gotoxy, math, seno coseno

Juand a travs de un comentario me pidi ayuda con un programa que grafique utilizando gotoxy las grficas de seno y coseno en c++. El programa me pareci interesante y, aunque tuve que desempolvar el Borland C++ que usaba en la prepa, lo hice feo, pero lo hice. A mi parecer, para graficar por ejemplo la funcin seno, hacen falta 3 pasos: 1. Hacer un ciclo de 0 a 360 (con aumentos de 5 queda muy bien) con for, algo muy normal. 2. Calcular, obviamente, el seno de cada valor. Para esto la librera math.h nos regala la funcin sin(). Su uso es el obvio, pero el asunto es que todas las funciones trigonomtricas que usa c++ trabajan en radianes. Es decir que primero tendremos que convertir nuestro ngulo en radianes y luego ya sacar el seno. Si la variable i contiene el ngulo y tenemos ya definida la constante PI, la funcin quedara as:
sin(i/180*PI)

3. Luego viene la parte ms rara, convertir ese valor en un entero que pueda meter como coordenada en un gotoxy. Si tenemos una variable int y y la igualamos a nuestra funcin anterior podra quedar bien si multiplicamos por 10:
int x, y; y = sin(i/180*PI)*10; gotoxy(x,y);

Nos quedara nuestra grfica en una escala 1:10, pero al correr el programa veremos que hay muchos valores de seno que son 10 (por el redondeo) y por lo tanto la grfica se ve achatada. Para mejorar un poco eso (de todos modos queda un poco fea) podemos usar la funcin ceil() incluida tambin en la librera math.h que nos redondea los decimales. Y esta vez multiplicamos por 20, redondeamos, dividimos entre 2 y convertimos a int. Nos vuelve a quedar escala 1:10 (o 10:1 ? no se) pero ya no hay tantas cantidades amontonadas en el 10 y -10. El programa ya listo para graficar seno est aqu abajo, obviamente para graficar coseno slo hay que cambiar la funcin sin por cos, y copiar, pegar y hacer un men no debe ser difcil.

#include<stdio.h> #include<conio.h> #include<math.h> #define PI 3.14159265 int main() { int x=2, y; for(float i=0; i<=360; i+=5) { y = ceil(sin(i/180*PI)*20)/2; gotoxy(x, 12-y);printf("o"); x++; } getch(); return 0; }

24 Comentarios

Calcular ngulos de un tringulo en C++


Guardado en: Programas el 3 de octubre del 2010 Etiquetas: math, tringulos

En el post anterior vimos cmo saber si un tringulo es rectngulo, acutngulo u obtusngulo en C++, y les anticip que hara una nueva versin del mismo programa pero que nos calculara adems los ngulos del tringulo. El programa es este.

#include<math.h> #include<iostream> using namespace std; #define PI 3.14159265 // nuNcA cAmbieZz we!! int main() { float a, b, c, A, B, C; cout << "Introduce lado a: "; cin >> a; cout << "Introduce lado b: "; cin >> b; cout << "Introduce lado c: "; cin >> c; A = acos((b*b+c*c-a*a)/(2*b*c))*180/PI; B = acos((a*a+c*c-b*b)/(2*a*c))*180/PI; C = acos((a*a+b*b-c*c)/(2*a*b))*180/PI; if(A == 90 || B == 90 || C == 90) cout << "El triangulo es rectangulo. "; if(A < 90 && B < 90 && C < 90) cout << "El triangulo es acutangulo. "; if(A > 90 || B > 90 || C > 90) cout << "El triangulo es obtusangulo. "; cout << "\nY sus angulos son: A:" << A << " , B:" << B << " y C:" << C; cin.get();cin.get(); }

Para calcular los ngulos utilizamos la ley de cosenos, de hecho en el anterior tambin lo utilizamos pero no completamente (la ley de cosenos es una ampliacin del teorema de pitgoras). La ley de cosenos la vemos comnmente como:
a2 = b2 + c2 -2(b*c)*cos(A)

Si
cos(A)

la
=

despejamos
(b2 +

en
c2

cos(A),
a2)

nos
/ /

queda:
2(b*c)

Si
A

despejamos
= arccos(b2

(o
+

sea
c2 -

el

ngulo),
a2

obtenemos:
2(b*c))

Que es lo que utilizamos calcular los ngulos, lamentablemente la funcin que nos da C++ en su librera math.h, acos() nos devuelve el resultado en radianes. Para convertirlo a grados solo tenemos que multiplicar el resultado por 180/PI. Ahora que ya tenemos los tres ngulos de nuestro tringulo, es facilsimo saber cuando es cada tipo de tringulo. La funcin acos() est en la librera math.h y sirve para encontrar el arco coseno. En esta librera hay muchas funciones muy tiles: math.h Otro detalle sencillo pero que no habamos visto es el asunto de PI. Al principio del programa nos encontramos con:
#define PI 3.14159265

Esto significa que estamos declarando una constante con el nombre PI y con un valor de 3.14159265. Una constante, como su nombre lo indica, nunca cambia a lo largo del programa. Bueno, pues fue un programa bastante entretenido, me gust hacerlo :)
6 Comentarios

Saber si un tringulo es rectngulo, acutngulo u obtusngulo en C++


Guardado en: Programas el 3 de octubre del 2010 Etiquetas: tringulos

Emanuel por medio de un comentario me pidi ayuda para hacer un programa en c++ que nos dijera si un tringulo es rectngulo, acutngulo u obtusngulo pidiendo solamente los lados. El programa me pareci interesante de hacer y pues lo hice :) El programa resulta bastante sencillo, pero para deducir cmo hacerlo est un poco complicado. Veamos la siguiente imgen:

El tringulo 1 es un clsico tringulo rectngulo. Si aumentramos el lado c de 5 a 6 obviamente el ngulo aumentara y por lo tanto sera un tringulo obtusngulo (2). Si por el contrario, disminuyramos el lado de c 5 a 4, el ngulo disminuira y por lo tanto sera un tringulo acutngulo (3). Sabiendo esto veamos cmo se comporta Pitgoras en cada caso (o sea no l, su teorema): Si despejamos su famoso teorema obtenemos que a2 + b2 c2 = 0. Veamos
32

como
+

se

comporta
42

este
-

teorema

en
52

nuestro
=

tringulo

1:
0

Listo!, ya sabemos que el tringulo es rectngulo, porque el teorema de Pitgoras slo sirve para tringulos rectngulos. Ahora con el tringulo 2 (obtusngulo):
32 + 42 62 = -11

Un nmero negativo! Con los tringulos obtusngulos el teorema de Pitgoras da nmeros negativos. Y
32

por
+

ltimo
42

el
-

tringulo
42

3
=

(acutngulo):
9

Un nmero positivo! Con los tringulos acutngulos el teorema de Pitgoras da nmeros positivos. Ahora que ya sabemos cmo identificar cada tringulo nos surge otro problema: El usuario slo va a introducir tres lados cualquiera, cmo saber cual es a, cual es b y cual es c? Pues no hay forma de saberlo, hay que hacer cada paso tres veces tomando el teorema como a 2 + b2 c2, luego a2 + c2 b2 y al final b2 + c2 a2. Ahora si, veamos el programa:

#include<iostream> using namespace std; int main()

{ int a, b, c, A, B, C; cout << "Introduce lado 1: "; cin >> a; cout << "Introduce lado 2: "; cin >> b; cout << "Introduce lado 3: "; cin >> c; A = (b*b+c*c-a*a); B = (a*a+c*c-b*b); C = (a*a+b*b-c*c); if(A == 0 || B == 0 || C == 0) cout << "El triangulo es rectangulo. "; if(A > 0 && B > 0 && C > 0) cout << "El triangulo es acutangulo. "; if(A < 0 || B < 0 || C < 0) cout << "El triangulo es obtusangulo. "; }
La nica parte no explicada es la de las condiciones. Si en cualquiera de los tres formas de tomar el teorema nos resulta 0 es rectngulo, por lo tanto se usa ||. Para ser acutngulo, las tres formas del teorema deben ser mayores a 0, se usa &&. Con una sola forma del teorema que resulte menor a 0 es obtusngulo, se usa ||. Para mayor informacin de esos operadores leer esto: Operadores lgicos es C++. Cmo ven el programita? Est sencillo no? Tal vez despus haga una modificacin para que adems te calcule los ngulos del tringulo.
6 Comentarios

Cmo contar el nmero de veces que sucede algo


Guardado en: Prctica el 27 de septiembre del 2010 Etiquetas: primos, variables

Bueno, en esta ocasin vamos a ayudarle a un comentarista de este blog con sus problemas, el me ha pedido un programa que cuente la cantidad de nmeros primos que hay en un rango, no se ha conformado con saber si un nmero es primo o no o con saber cmo mostrar los nmeros primos en un rango, as que le vamos a ayudar con la nica parte de su programa que le falta: saber cmo contar el nmero de veces que sucede algo. Para esto vamos a usar una variable tipo int (entero) que va a ir aumentando una unidad cada vez que ocurra ese algo que queremos contar. Veamos como funcionara un contador dentro de un ciclo:

#include<iostream> using namespace std; int main() { int contador=0; for(int i=0; i<10; i++) contador++; cout << contador; } Obviamente esto muestra un 10 en pantalla. Porque la variable contador aumenta una unidad cada vez que el ciclo da una vuelta.
contador++; es lo mismo que contador = contador + 1;

Ahora veamos como funciona si agregamos una condicin:

#include<iostream>

using namespace std; int main() { int contador=0; for(int i=0; i<10; i++) { if(i==5) contador++; } cout << contador; }
Esto obviamente muestra en pantalla un 1, porque solo una vez i vale 5. Ahora con una condicin ms complicada:

#include<iostream> using namespace std; int main() { int contador=0; for(int i=0; i<10; i++) { if(i%2==0) contador++; } cout << contador; }
Con el operador % se obtiene el residuo de la divisin de los dos nmeros entre los que est. Si la condicin es que i/2 tenga residuo un de 0, significa que estamos dejando pasar slo los nmeros pares, por lo que deber mostrarse en pantalla un 5. Qu fcil no?, ahora nuestro amigo ya tiene todo lo necesario para armar su programa.
2 Comentarios

Funcin delay() en C++


Guardado en: Programas el 24 de septiembre del 2010 Etiquetas: funciones, time

Una funcin a veces til a veces no mucho es el delay(), sirve para hacer una pausa de n segundos. En algunos compiladores Borland esta funcin se incluye en la librera conio.h pero como aqu estamos del lado del software libre vamos a hacer nosotros mismos esta funcin. Primero veamos cmo se usa:
delay(variable_tipo_int);

es
int delay(secs);

decir:
secs=10;

o
delay(numero_entero);

es
delay(12);

decir: claro,
i = (time(NULL)

Y
void for(int }

la
delay(int + secs);

funcin
secs) time(NULL) !=

es
i;

esta:
{ time(NULL));

1.

La funcin time(NULL) nos devuelve el segundo exacto en que estamos.

2. 3. 4.

Si le sumamos cierta cantidad de segundos obtenemos una fecha en el futuro. En cada vuelta del ciclo se checa si esa fecha en el futuro es diferente a la fecha actual. En cuanto las dos fechas son iguales el ciclo acaba y el programa contina.

Veamos como se usa en un programa en c++:

#include<time.h> #include<iostream> using namespace std; void delay(int secs) { for(int i = (time(NULL) + secs); time(NULL) != i; time(NULL)); } int main() { int sec; cout << "Segundos a pausar?: "; cin >> sec; delay(sec); }
Para poder usar la funcin delay de esta forma es necesario ponerla en todos los programas en donde necesitemos usarla (ahora me doy cuenta que no he escrito mucho sobre funciones) e incluir siempre la librera #include<time.h> o #include<ctime>.
8 Comentarios

Pginas: Anterior 1 2

No s, es algo que se me ocurri y que es muy fcil de hacer. Lo nico que tenemos que hacer es ver a un string no como una frase, sino como un conjunto de caracteres; y adems ver a los caracteres no como letras, sino nmeros del cdigo ASCII. Teniendo esto claro, es muy fcil generar un nmeros aleatorios (que representas letras) para llenar cada elemento del arreglo que es nuestro string. Veamos:
#include<stdlib.h> #include<time.h> #include<iostream> using namespace std; int main() { char strrnd[10]; srand(time(NULL)); for(int i=0; i <= 9; i++) strrnd[i] = 33 + rand() % (126 - 33); cout << strrnd; cin.get(); }

1. 2. 3. 4.

Primero declaramos un string de nombre strrnd. Luego inicializamos nuestro random. Con un ciclo recorremos cada elemento del string. Y cada elemento lo llenamos con un nmero aleatorio entre 33 y 126, que en el cdigo ASCII representan todos las smbolos letras y nmeros normales. 5. Y listo, ya hemos creado un string aleatorio en c++.

Si tienen duda con los nmeros aleatorios pueden checar este post: Obtener nmero aleatorios en c++. Aqu pueden ver el cdigo ASCII. Si quieren que muestre, por ejemplo, solo letras minsculas, tendran que modificar la frmula del random para que generara nmeros entre el 97 y 122.
4 Comentarios

Cada tres das


Guardado en: Blog el 18 de septiembre del 2010

No creo que nadie se haya fijado, pero desde el regreso de este blog, las entradas han estado apareciendo cada tres das. Y este post es para hacrselos notar. Porqu tres das? Bueno pues porque en los blogs de este tipo es muy bueno tener regularidad con respecto a la frecuencia de los posts; comprometerme a publicar todos los das sera demasiado, dos das estara bien, pero tres das me queda mucho ms adecuado. As que ya saben, si no quieren desperdiciar tiempo, slo chequen el blog cada tres das o suscrbanse por mail o por feed (all en la sidebar estn los links, soy un flojo).
9 Comentarios

Como usar cin.getline en C++


Guardado en: Curso el 15 de septiembre del 2010 Etiquetas: bsico, cadenas, string.h

Bueno, siguiendo con la lnea de los posts sobre la librera string.h les traigo esta funcin que no est en esa librera pero que es muy til al trabajar con strings. Ya dijimos que un/una string es una variable que puede contener 0, uno o ms caracteres. Ya vimos en nuestra introduccin a string.h cmo declarar un string, hacerle algunas modificaciones y cmo mostrarlo. Ahora veremos como pedir un string (que el usuario la introduzca por medio del teclado). Esto es muy sencillo si usamos la funcin cin.getline(); Esta funcin necesita tres datos o parmetros: 1. Nombre. El nombre de la variable que va a contener el string 2. Longitud. La cantidad de caracteres que queremos que se puedan introducir (nunca mayor que la longitud del string). 3. Caracter de fin. El caracter que el usuario va usar como final de la cadena. Por lo general es el enter que se representa como \n (diagonal n). Por ejemplo, supongamos que tenemos un arreglo char de 500 elementos llamado str (nuestra string) y queremos pedirle al usuario que la llene, la funcin cin.getline quedara as:
cin.getline(str, 500, '\n');

Como ven, los parmetros van separados por comas (,), y el caracter de fin est entre comillas simples (). Pero bueno, dejemos de suponer y empecemos a programar.
#include<iostream> using namespace std;

int main() { char str[500]; cout << "Introduce una frase: "; cin.getline(str, 500, '\n'); cout << "Tu frase es: " << str; cin.get(); }

Mas sencillo no podra ser.


10 Comentarios

Tringulo de Pascal en C++


Guardado en: Programas el 12 de septiembre del 2010 Etiquetas: pascal, tringulos

Han escuchado eso de que en el tringulo de pascal cada nmero es la suma de los dos que estn sobre l? PUES LES HAN MENTIDO!, eso no es ms que una coincidencia y la forma mas fcil de escribirlo en el pizarrn. En realidad el tringulo de pascal es una matriz donde cada elemento es el coeficiente binomial o combinacin de sus coordenadas. Las pruebas. El caso es que para obtener el tringulo de pascal en c++ hay muchas formas, pero la que est a continuacin yo la considero especial porque est basada en su propia definicin.
#include<iostream> using namespace std; int factorial(int n) { if(n<2) return 1; else return n * factorial(n-1); } int combinacion(int n, int r) { if(r==1) return n; else { if(n==r) return 1; else return factorial(n) / (factorial(r) * factorial(n - r)); } } int main() { for(int i=0; i<=6; i++) {

for(int ii=0; ii<=i; ii++) cout << combinacion(i, ii) << " cout << endl; } return 0; }

";

Vamos analizndolo: 1. La primera funcin es para obtener el factorial de forma recursiva. 2. La segunda es para obtener el coeficiente binomial o combinacin de dos nmeros, es en esencia esta frmula:
C(n,r) = n! / r!(n-r)!

Mas informacin sobre coeficientes binomiales. 3. En el main hay dos ciclos que se encargan de armar una matriz para obtener el coeficiente binomial de cada uno de ellos.

La primera pareja de numeros es (0,0) y su combinacin es 1. Nuestro primer numero del triangulo de pascal. La siguiente es (1,0) y luego (1,1) cuyas combinaciones son 1 y 1. Segunda lnea. Luego tenemos (2,0) (2,1) y (2,2) cuyas combinaciones son 1, 2 y 1. Tercera linea Y as seguimos obteniendo nuestras lneas. Y pues as es, el que me diga que no tiene forma de tringulo est ciego, porque si es tringulo, lo que pasa es que no es issceles.
3 Comentarios

Primo o no SIN CICLOS! en C++


Guardado en: Programas el 9 de septiembre del 2010 Etiquetas: if else, primos

Me preguntaban en los comentarios de este post: Primo o no, que si habra alguna forma de hacer ese mismo programa pero sin ciclos. Mmmm Pues mi primera respuesta es no. Pero hay una forma muy burda de aproximarse a l. El siguiente programa es para calcular si un nmero es primo o no sin ciclos y es infalible hasta el 168, a partir de ah puede que le atine o puede que no.
#include<iostream> using namespace std; int main() { int n; cout << "Introduce un numero: "; cin >> n; if(n!=2 & n%2==0) cout << "No es primo"; else { if(n!=3 & n%3==0) cout << "No es primo";

else { if(n!=5 & n%5==0) cout << "No es primo"; else { if(n!=7 & n%7==0) cout << "No es primo"; else { if(n!=11 & n%11==0) cout << "No es primo"; else { cout << "Es primo"; } } } } } }

Como vemos, primeramente checa si n es igual a 2; si no, checa si el residuo de n/2 es cero. Si si, no es primo; si no, sigue. Luego checa si n es igual a 3; si no, checa si el residuo de n/3 es cero. Si si, no es primo; si no, sigue. Lo mismo con el 5, el 7 y el 11. Con eso obtenemos un buen nmero de nmeros en los que estamos seguros que no fallaremos. Si agregamos el 13, agrandamos esa cantidad; y an mas con el 17, el 19, como en esta versin optimizada, que tiene su primer error con el 1681 (que no es primo)
#include<iostream> using namespace std; int main() { int n; cout << "Introduce un numero: "; cin >> n; if((n!=2 & n%2==0)||(n!=3 & n%3==0)||(n!=5 & n%5==0)||(n!=7 & n%7==0)|| (n!=11 & n%11==0)||(n!=13 & n%13==0)||(n!=17 & n%17==0)||(n!=19 & n%19==0)|| (n!=23 & n%23==0)||(n!=29 & n%29==0)||(n!=31 & n%31==0)||(n!=37 & n%37==0)) cout << "No es primo"; else cout << "Es primo"; }

Pero pues de eso no se trata, los ciclos son para evitar las cantidades interminables de ifs, as que usmoslos.

Ah y recuerden que si corren un programa y su compilador no se pausa solo, tienen que agregar cin.get();cin.get(); al final del programa, antes de la llave de cierre del main. Si llegaste aqu buscando un programa para saber si un nmero es primo o no, sigue el link que est al principio del post.
5 Comentarios

Introduccin a string.h
Guardado en: Curso el 7 de septiembre del 2010 Etiquetas: bsico, cadenas, string.h

string.h es una librera de c++ que contiene funciones que nos facilitan la vida al trabajar con cadenas o strings. Una cadena es un conjunto de caracteres almacenados en una variable. Deberamos saber que char es un tipo de dato que almacena un caracter, por lo tanto un arreglo lineal de caracteres es una cadena:
char str[100];

Ahora podemos llenar nuestra cadena..


str ="Soy una cadena";

y mostrarla
cout << str;

Pero recuerden que no podemos hacer nada de esto si no tenemos incluida la librera string.h. Vamos a ver un programa de ejemplo:
#include<string.h> #include<iostream> using namespace std; int main() { char esunacadena[100] = "Soy una cadena", esunacopia[100]; strcpy(esunacopia, esunacadena); strcat(esunacopia, " - copia"); cout << esunacadena << endl << esunacopia; cin.get(); return 0; }

1. Primero declaramos dos cadenas (esunacadena y esunacopia) que pueden tener hasta 100 caracteres, esunacadena la llenamos con el texto Soy una cadena. 2. Luego con la funcin strcpy copiamos el contenido de esunacadena a esunacopia. Ahora las dos cadenas tienen el mismo texto. 3. Ahora con la funcin strcat agregamos el texto - copia al final deesunacopia. 4. Al final solo mostramos las dos cadenas. Bastante fcil no? En los prximos das voy a postear otros programas muy sencillos para seguir checando las funciones mas comunes para trabajar con cadenas.
5 Comentarios

Centrar texto automticamente sin gotoxy


Guardado en: Programas el 4 de septiembre del 2010 Etiquetas: cadenas, string.h

Pues si, en este post vamos a hacer un programa en c++ que lee una frase y luego la muestra centrada en la pantalla, todo eso sin usar gotoxy! wow. Bueno, usando gotoxy sera mas fcil, pero este blog promueve el no uso de la librera conio.h (Cmo dejar de usar conio.h) as que lo vamos a hacer como les dije.
#include<iostream> #include<string.h> using namespace std; int main() { char str[100]; cout << "Una frase: "; cin.getline(str, 100, '\n'); int numofch = strlen(str); for(int i=1; i<(40-(numofch/2)); i++) cout << " "; cout << str; cin.get(); return 0; }

A la consola le caben 80 caracteres a lo largo, su mitad son 40; enseguida tenemos que averiguar el numero de caracteres que tiene la frase que se acaba de introducir y dividirlo entre dos. Supongamos que la frase es hola: 1. Hola tiene 4 caracteres. 2. La mitad de la consola es 40. 3. Si a los 40 le restamos la mitad de los caracteres de la frase, obtenemos el punto en donde debe comenzar la frase para quedar centrada. 40 (4/2) = 38 4. Ahora con un ciclo damos 38 espacios y luego imprimimos la frase. Si quieren utilizar gotoxy, el proceso es el mismo hasta el ltimo paso, donde guardaran el valor obtenido en una variable y luego lo pondran en el lugar adecuado de la funcin. La funcin strlen est en la librera string.h y nos devuelve el nmero de caracteres que tiene una cadena, viene de string length. A propsito me he dado cuenta que no he hablado casi nada de la librera string.h, voy a ver si hago unos cuantos posts sobre ella.
1 Comentario

Declarar variable dentro de un ciclo for


Guardado en: Prctica el 1 de septiembre del 2010 Etiquetas: for, variables

En el programa anterior use la tcnica de declarar una variable dentro de un ciclo for y luego de publicarla me di cuenta de que algunas personas podran encontrar eso algo confuso.

Es
int for(i=0;

casi

exactamente

lo
i<=10;

mismo

escribir

esto:
i=0; i++) i);

{ printf("%i", }

que
for(int { printf("%i", } i=0; i<=10;

esto:
i++) i);

La nica diferencia es que en el primero i es una variable como cualquier otra y en el segundo i solo sirve dentro del ciclo for. Esto mas que ser una desventaja es una ventaja, ya que te permite usar la misma variable en todos lo ciclos que quieras en el mismo programa. Yo en lo personal siempre uso i como la variable que controla cualquier ciclo, si llegara a haber un ciclo dentro de otro, uso ii
Ya vimos como calcular el factorial de un nmero c++ en forma recursiva, sin embargo hay una forma mucho mas fcil de entender y de aplicar (pero menos eficiente). Vamos viendo: Si el factorial de un nmero es la multiplicacin de cada nmero desde 1 hasta ese nmero (por ejemplo factorial de 4 = 1*2*3*4 = 24), entonces es muy sencillo crear un ciclo de 1 hasta el nmero pedido en c++ para hacer el clculo.

#include<iostream> using namespace std; int main() { int num,fact=1; cout << "::FACTORIAL::" << endl; cout << "Introduce un numero: "; cin >> num; for(int i=2; i<=num; i++) { fact = fact * i; } cout << "Su factorial es: " << fact; cin.get();cin.get(); return 0; }
Entonces porqu el ciclo empieza en 2? Si comenzara en 1, el proceso para el numero 3 (por poner un ejemplo) sera as:

fact = fact * i -> fact = 1 * 1 -> fact = 1 fact = fact * i -> fact = 1 * 2 -> fact = 2 fact = fact * i -> fact = 2 * 3 -> fact = 6 Como ven, el primer paso es totalmente innecesario.
12 Comentarios

Recursividad aplicada: Torres de Hanoi


Guardado en: Programas el 23 de agosto del 2010 Etiquetas: hanoi, recursividad

Este juego matemtico es clsico de los problemas de programacin. Hoy vamos a ver cmo calcular el nmero de movimientos necesarios para resolver el juego segn el nmero de discos, de forma recursiva en C++.

#include<stdio.h> int hanoi(int n) { if(n==1) return 1; else return 2 * hanoi(n-1) + 1; } int main() { int disc, mov; printf("::TORRES DE HANOI::\n"); printf("Numero de discos: ");scanf("%i",&disc); printf("\tMovimientos necesarios: %i\n", hanoi(disc)); return 0; }
Otro algoritmo raro. Lo que sabemos es que si tenemos 1 disco el nmero de movimientos es 1 y que ese es nuestro caso base (si n==1 retorna 1), a partir de ah el nmero de movimientos se puede calcular si multiplicamos por dos el nmero de movimientos para n-1 y le sumamos 1, o sea: 2 + hanoi(n-1) + 1

Si son 2 discos, entonces 2 * hanoi(1) + 1 = 2 * 1 + 1 = 3 Si son 3 discos, entonces 2 * hanoi(2) + 1 = 2 * 3 + 1 = 7 etc


3 Comentarios

Recursividad aplicada: Mximo Comn Divisor


Guardado en: Programas el 20 de agosto del 2010 Etiquetas: recursividad

Ooootro post sobre recursividad, pero no se preocupen ya solo queda este y otro. Esta vez vamos a calcular el mximo comn divisor de dos nmeros de forma recursiva en c++.

#include<stdio.h> int MCD(int x, int y) { if(y==0) return x; else return MCD(y, x%y); } int main() { int num1=0,num2=0; printf("::MAXIMO COMUN DIVISOR::\n"); printf("Introduce el primer numero: ");scanf("%i",&num1); printf("Introduce el segundo numero: ");scanf("%i",&num2); printf("\tEl resultado es: %i\n", MCD(num1, num2)); return 0; }

Este es uno de esos algoritmos recursivos raros o, mejor dicho, difciles de comprender, mi cerebro estuvo un buen rato echando humo tratando de comprender la lgica con que lo armaron y mi conclusin es que funciona de pura rana. Bueno, al final si supe como funciona pero no porque.
12 Comentarios

Recursividad aplicada: Serie de Fibonacci


Guardado en: Programas el 17 de agosto del 2010 Etiquetas: fibonacci, recursividad

0, 1, 1, 2, 3, 5, 8, 13, 21, , la serie de Fibonacci es bastante interesante e incluso aparece en la naturaleza. Comienza con un 0, luego un 1 y a partir de ah cada nmero es la suma de los dos siguientes. Eso ltimo nos indica recursividad. Veamos como mostrar n nmeros de la serie de Fibonacci de forma recursiva en C++.

#include<stdio.h> int fibonacci(int n) { if (n<2) return n; else return fibonacci(n-1) + fibonacci(n-2); } int main() { int num=0,res=0; printf("::NUMEROS DE FIBONACCI::\n"); printf("Introduce el numero de numeros: ");scanf("%i",&num); printf("\t"); for(int i=0;i<=num-1;i++) { res = fibonacci(i); printf("%i ", res); } printf("\n"); return 0; }
Es la primera vez que vemos un la llamada a la funcin dentro de un ciclo. Eso es porque la funcin calcula el n-simo nmero de la serie, y para mostrarlos todos tenemos que hacer un ciclo que repita la funcin tantas veces como sea necesario.
18 Comentarios

Recursividad aplicada: Convertir Decimal a Binario


Guardado en: Programas el 14 de agosto del 2010 Etiquetas: binario, recursividad

Siguiendo con esto de la recursividad hoy les traigo un nuevo programn, Convertir Decimal a Binario de forma recursiva.

#include<stdio.h> void binario(int n) { if (n!=0) { binario(n/2);

printf("%i",n%2); } } int main() { int num=0; printf("::CONVERTIR DECIMAL A BINARIO::\n"); printf("Introduce un numero: ");scanf("%i",&num); //Pedir variable num printf("\t");binario(num);printf("\n"); //Llamar la funcin return 0; }
Est basado en el mtodo que usamos para convertir un nmero decimal a binario a mano: dividir el nmero entre dos hasta que quede 0 y apuntar los residuos del ltimo al primero.
4 Comentarios

Recursividad aplicada: Factorial


Guardado en: Programas el 11 de agosto del 2010 Etiquetas: factorial, recursividad

Hola de nuevo, cunto tiempo pas? mmm no s pero bueno lo importante es que ya estoy de vuelta y ahora s me voy a dar el tiempo de actualizar este blog ms seguido, pero basta de cosas personales. No me quiero meter en rollos de explicar lo que es la recursividad (googleen y divirtanse leyendo), lo que quiero es mostrarles algunos ejemplos muy sencillos de dnde podemos aplicar la recursividad. Hoy toca calcular el factorial de un numero de forma recursiva. Es el cdigo recursivo ms fcil que se pueden encontrar:

#include<stdio.h> int factorial(int n) { if(n<2) return 1; else return n * factorial(n-1); } int main() { int num=0; printf("::CALCULAR FACTORIAL::\n"); printf("Introduce un numero: ");scanf("%i",&num); //Pedir variable num printf("\tEl resultado es: %i\n", factorial(num)); //Llama la funcion e imprime resultado return 0; }

Explicacin
El caso base es que cuando n valga 1 o 0 retorna un 1, de lo contrario retorna la multiplicacin de n * el factorial del numero anterior n-1. Supongamos que introducimos el nmero 3, cuyo factorial es 6 (3*2*1 = 6). 1. 2. 3. n=3 No entra al caso base. Guardamos para despus la operacin 3 * factorial(2) n=2 No entra al caso base. Guardamos para despus la operacin 2 * factorial(1) n=1 Entra al caso base. Retorna 1, por lo tanto factorial(1) = 1

4. 5. 6.

Hacemos la ltima operacin que guardamos 2 * factorial(1) = 2 * 1 = 2, por lo tanto factorial(2) =2 Hacemos la siguiente operacin que guardamos 3 * factorial(2) = 3 * 2 = 6 El factorial es 6

Uh que fcil!
16 Comentarios

Obtener numeros aleatorios en C++ (rand, srand)


Guardado en: Teora el 25 de noviembre del 2009 Etiquetas: rand

Es algo muy frecuente, cuando ya dominas todo eso de pedir y almacenar datos, ahora tu profesor te pedir que tus programas generen nmeros aleatorios para automatizar el proceso de llenar arreglos y todo eso. As Luego que lo primero que los tenemos nmeros que hacer aleatorios es incluir la librera: esto:

#include<stdlib.h>

inicializar

incluyendo

srand(time(NULL));

*Actualizacin: No se porqu con algunos IDEs tira error con la funcin time. Solo hay que utilizar adems la librera time.h:
#include<time.h>

Luego
num=rand();

guardar

el

nmero

aleatorio

en

alguna

parte:

Eso es bsicamente. Para ajustar el rango de nmero aleatorios podemos hacer varias cosas. Nmero
num=rand()%51;

aleatorios aleatorios aleatorios

entre entre entre

0 1 250

y y y

50: 100: 420:

Nmero
num=1+rand()%(101-1);

Nmero

num=250+rand()%(421-250);

De

forma

general

es:

variable = limite_inferior + rand() % (limite_superior +1 - limite_inferior) ;

As que un programa que muestre 10 nmeros aleatorios entre 1 y 10 quedara as:

#include<stdlib.h> #include<iostream> using namespace std; int main() { int num,c; srand(time(NULL)); for(c=1;c<=10;c++) { num=1+rand()%(11-1); cout<<num<<" "; } cin.get(); }

70 Comentarios

Histograma con nmeros aleatorios y asteriscos


Guardado en: Programas el 23 de noviembre del 2009 Etiquetas: arreglos, rand

Bueno, tal vez el ttulo qued muy poco descriptivo, pero la idea es pedir un nmero de personas, luego se le pedira a cada persona su peso pero nosotros solo vamos a generar un nmero aleatorio en determinado rango. Luego se clasificara a esas personas en rangos de peso y al final mostrar una tabla que muestre la frecuencia de cada rango con asteriscos, as:
51-60 61-70 71-80 80-91 91-mas ***** *** ** *** *

El cdigo en C++ sera as:

#include<stdlib.h> #include<iostream> using namespace std; int main() { int n,c,c2,peso[500],cat[5]={0},lim; // n -> numero de personas // c y c2 para ciclos // peso[500] arreglo para guardar el peso de las personas // cat[5] arreglo para guardar el nmero de personas en cada categoria de peso srand(time(NULL)); // Inicializa los nmeros aleatorios cout<<"Introduce el nmero de personas: ";cin>>n; for(c=0;c<=n-1;c++) { peso[c]=51+rand()%(120-51); //guarda un nmero aleatorio del 51 al 120 en cada elemento del arreglo // segn su valor se aumenta un elemento de nuestro otro arreglo if(peso[c]>50 && peso[c]<=60) cat[0]++; if(peso[c]>60 && peso[c]<=70) cat[1]++; if(peso[c]>70 && peso[c]<=80) cat[2]++; if(peso[c]>80 && peso[c]<=90) cat[3]++; if(peso[c]>90) cat[4]++; } cout<<"\n"; for(c=0;c<=4;c++) { switch(c) { // segun cada caso imprime algo diferente case 0:

cout<<"51-60\t"; break; case 1: cout<<"61-70\t"; break; case 2: cout<<"71-80\t"; break; case 3: cout<<"81-90\t"; break; case 4: cout<<"90- \t"; break; } lim=cat[c]; // no podemos usar un arreglo como limite del ciclo (la verdad // no se porque), entonces lo pasamos a una variable normal for(c2=1;c2<=lim;c2++) cout<<"*"; cout<<"\n\n"; } cin.get();cin.get(); getch();) } // detiene la ejecucin al final (es como

A propsito, este programa fue una peticin especial de un usuario.


3 Comentarios

Lo primero que tendramos que hacer sera quitar los espacios de nuestra cadena. Luego ir comparando, el primer caracter con el ltimo, el segundo con el penltimo, etc. Si todos los caracteres coinciden, es palndromo, si no, pues no.

#include<string.h> #include<iostream> using namespace std; int main() { char cadena[50],cadenaf[50]={0},*parte; int c,len,pal=0; cout<<"Introduce un palndromo: "; cin.getline(cadena,50,'\n'); parte=strtok(cadena," "); strcat(cadenaf,parte); 'cadena' y while((parte=strtok(NULL," 'cadenaf' strcat(cadenaf,parte); len=strlen(cadenaf); for(c=0;c<=len-1;c++) { // // ")) != NULL) // //

quita guarda

los el

espacios resultado

de en

if(cadenaf[len-1-c]==cadenaf[c]) // comparacin del primer caracter con el pal++; // ltimo, el segundo con el penltimo, etc } if(pal==len) // si todos las caracteres coinciden, s es palndromo cout<<"S es palndromo!"; else cout<<"No es palndromo"; cin.get(); } /*Creado por THEbatzuk*/
9 Comentarios

Ordenar arreglo de manera ascendente o descendente (burbuja)


Guardado en: Programas el 19 de noviembre del 2009 Etiquetas: arreglos, burbuja, funciones

Programa que lee un arreglo de 10 nmeros y los ordena con el mtodo de la burbuja de manera ascendente o descendente segn se elija. Para esto utiliza una funcin que recibe el arreglo y la varible ord (1=asc, 2=desc), luego utiliza otra funcin para imprimirlo.

#include<iostream> using namespace std; int ordenar(int[],int); int imprimir(int[]); int main() { int c,lista[9],ord; for(c=0;c<=9;c++) { cout<<"Numero "<<c+1<<": "; cin>>lista[c]; } cout<<"\nAscendente 1\nDescendente 2\n--> Opcin: "; cin>>ord; if(ord==1 || ord==2) { ordenar(lista,ord); imprimir(lista); } } int ordenar(int lista[],int ord) { int c1,c2,aux; for(c1=0;c1<=9;c1++) { for(c2=0;c2<9;c2++) { if(ord==1) { if(lista[c2]>lista[c2+1]) { aux=lista[c2];

lista[c2]=lista[c2+1]; lista[c2+1]=aux; } } else { if(lista[c2]<lista[c2+1]) { aux=lista[c2]; lista[c2]=lista[c2+1]; lista[c2+1]=aux; } } } } return 0; } int imprimir(int lista[]) { int c; for(c=0;c<=9;c++) cout<<lista[c]<<" "; cin.get();cin.get(); } /*Creado por THEbatzuk*/
7 Comentarios

Nmero de letras y espacios que tiene una frase


Guardado en: Programas el 18 de noviembre del 2009 Etiquetas: cadenas, medio, punteros, string.h

Este programa lee una frase por medio de cin.getline y con la funcin strtrok le quita los espacios. Cada vez que corta la cadena, un contador se aumenta. Al final se obtiene la longitud de la cadena sin espacios con la funcin strlen.

/*Programa para contabilizar el nmero de letras y de espacios que tiene una frase */ #include<iostream> #include<string.h> using namespace std; int main() { char frase[100], *parte, frasef[100]={0}; int lng,spc=0; cout<<"Introduce una frase: "; cin.getline(frase, 100, '\n'); parte=strtok(frase," "); strcat(frasef,parte); while((parte=strtok(NULL," ")) != NULL) { strcat(frasef,parte); spc++; } lng=strlen(frasef);

cout<<"Tu frase tiene "<<lng<<" letras y "<<spc<<" espacios"; cin.get();cin.get(); return 0; } /*Creado por THEbatzuk*/
3 Comentarios

Saber si un nmero es primo o no


Guardado en: Programas el 13 de noviembre del 2009 Etiquetas: primos, while

Anteriormente vimos como imprimir los nmeros primos en un rango determinado por el usuario, ahora la idea es pedirle al usuario un nmero y decirle si es primo o no es primo.

#include<iostream> using namespace std; int main() { int num,c,res,nc=0; cout<<"Introduce un nmero: "; cin>>num; for(c=1;c<=num;c++) { res=num%c; if(res==0) nc++; if(nc>2) break; } if(nc==2) cout<<"Es primo"; else cout<<"No es primo"; cin.get();cin.get(); }
En s, es lo mismo que el anterior. Para darle mas presentacin podemos hacer que no se salga a la primera, sino hasta que se introduzca, por ejemplo, un cero. Esto se hace con un ciclo do while.

#include<iostream> using namespace std; int main() { int num=1,c,res,nc=0,rep=0; while(num!=0) { cout<<"Introduce un nmero: "; if(rep==1) { cout<<" --> Para salir oprime cero: "; } rep++; cin>>num; for(c=1;c<=num;c++) { res=num%c; if(res==0)

nc++; } if(nc==2) cout<<"Es primo\n\n"; else cout<<"No es primo\n\n"; nc=0; } }


Alguien sabe porqu la variable num empieza en 1 en este caso?
27 Comentarios

Nmeros primos en un rango


Guardado en: Programas el 12 de noviembre del 2009 Etiquetas: ciclos, for, primos

La idea es imprimir en pantalla los nmeros primos entre 1 y un dato introducido por el usuario. Creo que es la primera vez que usamos un ciclo dentro de otro ciclo en este blog. Pero en realidad es muy sencillo:

#include<iostream> using namespace std; int main() { int n=0,c=0,c2=0,res=0,nc=0; cout<<"Introduce el limite de numeros: "; cin>>n; for(c=1;c<=n;c++) { for(c2=1;c2<=c;c2++) { res=c%c2; if(res==0) { nc=nc+1; } } if(nc==2) { cout<<" "<<c; } nc=0; } } El operador % obtiene el residuo de la divisin de dos
10 % 3

nmeros.
=

Por

ejemplo:
1

Porque el 3 cabe 3 veces en el 10 y le sobra 1.

Explicacin:
1. 2. 3. 4. El primer ciclo lleva la cuenta de los nmeros de 1 a n de uno por uno en la variable c Luego se inicia un ciclo de 1 a c en la variable c2. Este ciclo se har n veces porque est dentro de el primer ciclo En la variable res se guarda el residuo de dividir c / c2 Si el residuo es cero, se incremento al contador nc

5.

Si al terminarse el segundo ciclo el contador nc es igual a 2, significa que el nmero es primo y lo imprime

Recuerden que los nmeros primos son los que nicamente se dividen (sin dejar residuo) entre 1 y entre si mismos
54 Comentarios

Encontrar el nmero mayor de un conjunto


Guardado en: Programas el 27 de octubre del 2009 Etiquetas: ciclos, iostream, sencillos

Es en realidad muy simple, se trata de pedir un conjunto de nmeros e ir comparandalos para obtener el mayor. Un problema es que no sabemos la cantidad de nmeros que se van a pedir, por lo que al principio del programa tenemos que pedir este valor.

#include<iostream> using namespace std; int main() { int n_num=0,num=0,elmayor=0,c=0; cout <<"Introduce el numero de numeros: "; cin >> n_num; for(c=1;c<=n_num;c++) { cout <<"\nIntroduce el numero " << c <<": "; cin >> num; if(num>elmayor) { elmayor=num; } } cout <<"\n\tEl numero mayor fue el " << elmayor; cin.get();cin.get(); return 0; } Una parte
for(c=1;c<=n_num;c++)

importante

es

la

estructura

del

ciclo:

Significa que el ciclo va de 1 hasta lo-que-nos-diga-el-usuario. Otra cosa es que usamos iostream y no usamos conio.h.
14 Comentarios

Cmo empezar a usar iostream


Guardado en: Curso el 23 de octubre del 2009 Etiquetas: bsico, iostream

Programar es como pensar, cada quien lo hace diferente, y el mismo lenguaje c++ nos facilita diversas formas de hacer las mismas cosas. Por ejemplo, el programa Hola Mundo que hicimos al principio podemos hacerlo utilizando la librera <iostream> en lugar de <stdio.h>:

#include<iostream> using namespace std;

// Esta lnea es necesaria cuando // utilizamos la librera iostream

int main() {

cout << "Hola Mundo!"; cin.get(); del programa. return 0; termin

//cout es el equivalente de printf, //si se fijan la sintxis es muy parecida. // cin.get es el equivalente de getch, detiene la ejecucin

// No es necesaria para que el programa funcione, // pero es una buena costumbre indicar que nuestro programa // sin errores.

} La
cout

sintxis
<<

de
"mensaje"

cout

es:
;

Mostrando
cout << "El promedio

una
es:" << prom

variable:
;

El

siguiente

mensaje

aparecer

en

una

lnea

nueva:

cout << "mensaje" << endl;

Y cmo leo datos (scanf)?


Para
cin

sustituir

scanf()

usamos
>>

cin,

por

ejemplo:
edad;

Lee los caracteres introducidos y los guarda en la variable edad.

Un programita muy simple:

#include<iostream> using namespace std; int main() { int edad; cout<<"Cual es tu edad?: "; cin >> edad; cout<<"\n\tTu edad es " << edad; cin.get();cin.get(); return 0; }
En este caso necesitamos usar dos cin.get para detener el programa. Esto se debe al uso de cin.
1 Comentario

Cmo dejar de usar conio.h


Guardado en: Teora el 22 de octubre del 2009 Etiquetas: bsico, borland, conio.h

La librera <conio.h>, es propiedad de Borland y slo sus compiladores pueden usarla. Por lo tanto significa que conio.h, no es una librera estandar. La librera conio se utiliza ms que nada por sus comandos: getch(), clrscr(), gotoxy(), textcolor(), y textbackground(), los cuales usamos para darle mejor presentacin a nuestros programas. Pero pensandolo bien, en verdad necesitamos que los programas en consola se vean bien? La verdad es que no, lo que importa es que funcionen. An as, algunas funciones de la librera conio.h se pueden sustituir con funciones estndares, por ejemplo.

Para sustituir getch(), solo necesitamos: cin.get(); la cual est en <stdio.h>. Si no funciona entonces tendremos que ponerla dos veces: cin.get();cin.get();, la cuestin es algo complicada de explicar. Para sustituir clrscr(), solo necesitamos escribir system(cls); la cual est en <iostream> (es sin .h, se definira as: #include<iostream>). Gotoxy() es algo vanal, y adems se puede sustituir usando \n (espacio hacia abajo) y \t (espacio hacia la derecha) dentro de un printf(); Y la verdad es que cualquiera te agradecer que no le pongas fondo rosa y letras amarillas a tus programas. Ya dijimos en el post anterior que los ciclos infinitos for son muy parecidos a los ciclos while, pero qued en duda cmo es un ciclo while. While significa mientras, as que nuestro ciclo while se repetira mientras una cierta condicin siga siendo verdadera.El ejemplo del post anterior quedara as:

#include<stdio.h> #include<conio.h> int main() { char end=0; while(end!='y') { gotoxy(5,5);printf("Ya quieres salir? (y/n): ");scanf("%c",&end); clrscr(); } }
En espaol el programa dice: Mientras end sea diferente de y voy a seguir preguntando si quieres salir. Mas adelante veremos ms programas que utilicen ciclos while.
15 Comentarios

El break y el ciclo infinito


Guardado en: Curso el 11 de octubre del 2009 Etiquetas: bsico, ciclos, for, infinito

Ya vimos hace poco el ciclo for, y vimos que su estructura era as: for ( inicio ; fin ; aumento ) Qu pasa si no ponemos ni inicio ni fin? Pues obtenemos un ciclo infinito, as: for(;;) Y cmo se detiene? Pues con un break, as: for(;;) { break; } Y esto de que me sirve? Pues la idea es repetir las instrucciones hasta que el usuario quiera, es decir:

#include<stdio.h> #include<conio.h> int main() { char end=0; for(;;)

{ gotoxy(5,5);printf("Ya quieres salir? (y/n): ");scanf("%c",&end); if(end=='y') break; clrscr(); } }


Creo que no les haba mencionado que si dentro de una condicin if slo va una instruccin no es necesario poner llaves, y tambin aplica con los ciclos. Si el usuario no introduce una y, el programa nunca se detendr. Luego vamos a ver que las propiedades de un ciclo for infinito son muy parecidas a las del ciclo while que veremos ms adelante.
14 Comentarios

Programa: Porcentaje de Hombres y Mujeres


Guardado en: Programas el 8 de octubre del 2009 Etiquetas: ciclos, goto, if else, porcentajes, sencillos

Supongamos que nos preguntan qu porcentaje de hombres y qu porcentaje de mujeres hay un saln de clases. Lo primero que tenemos que hacer es preguntar el total de personas que hay, luego hacer un ciclo que en cada iteracin pregunte el sexo de cada alumno. En base a esos datos se calculan los porcentajes. El programa en c++ sera as:

#include<stdio.h> #include<conio.h> int main() { float total=0,ciclo=0,conta_h=0,conta_m=0,porc_h=0,porc_m=0; char mof; gotoxy(5,5);printf("Cuantos alumnos hay en este ");scanf("%f",&total); for(ciclo=1;ciclo<=total;ciclo++) { clrscr(); PREG: gotoxy(10,6);printf("Sexo de alumno %.f? (M ",ciclo);scanf("%c",&mof); if(mof=='m' || mof=='M') conta_h++; else if(mof=='f' || mof=='F') conta_m++; else goto PREG; } //Calculos porc_h=conta_h/total*100; porc_m=conta_m/total*100; // gotoxy(5,5);printf("El porcentaje de hombres es %.1f %.f)",porc_h,conta_h,total); gotoxy(5,6);printf("El porcentaje de mujeres es %.1f %.f)",porc_m,conta_m,total); getch(); }
3 Comentarios

grupo?:

F):

(%.f (%.f

de de

Cmo usar goto en C++


Guardado en: Teora el 7 de octubre del 2009 Etiquetas: bsico, goto

Goto significa ir a y en c++ nos sirve para que mandar al compilador a alguna parte arbitrariamente, es decir nada ms porque s. No se suele usar mucho pero nos puede sacar de algunos apuros. Su uso es ms o menos as:

codigo codigo LUGAR: codigo mas codigo codigo goto LUGAR; codigo
Primero tenemos que definir un marcador, en este caso yo us LUGAR (recuerden que LUGAR no es lo mismo que lugar) e inmediatamente despus poner dos puntos (:). Cuando sea necesario escribiremos goto seguido de nuestro identificador y punto y como (;). Para qu nos podra servir? Pues en el siguiente post veremos un programa que usa goto.
6 Comentarios

if else anidados en c++


Guardado en: Curso el 5 de octubre del 2009 Etiquetas: bsico, condiciones, if else

Ya haba escritos varios posts sobre las condiciones if else en c++, pero algo que hace falta saber es que dentro de una estructura if puede haber otra estructura if tantos veces como sea necesario. Es decir:

if ( condicion ) { instrucciones if ( condicion ) { instrucciones } } else { if ( condicion ) { instrucciones } else { instrucciones } instrucciones }
Y como para qu? Pues hay algunas situaciones que as lo requieren. Por ejemplo: Si un alumno tiene un promedio mayor o igual a 9 se le hara un 20% de descuento en la colegiatura, si tiene un promedio mayor o igual a 8 pero menor que 9 el descuento ser del 10%, si su promedio es

menor que 8 pero mayor o igual a 7 el descuento ser del 5% y si promedia con 7 o menos no tendr descuento. La solucin de este problema en c++ sera as: Seguir leyendo
22 Comentarios

Programa: Recuadros en C++


Guardado en: Programas el 23 de septiembre del 2009 Etiquetas: ciclos, gotoxy, recuadros

Ya que sabemos usar los ciclos for y el gotoxy, vamos a hacer un programa que muchos profesores encargan: un recuadro en c++, es decir, un margen o contorno para darle mas presentacin a un programa. En realidad es muy sencillo:

#include<stdio.h> #include<conio.h> int main() { int x=0; for(x=1;x<=80;x++) { gotoxy(x,1);printf("."); gotoxy(x,22);printf("."); gotoxy(4,23);printf("Nombre: gotoxy(x,24);printf("."); if(x<=24) { gotoxy(1,x);printf("."); gotoxy(80,x);printf("."); } } getch(); }

Programa:

Numero:

");

Modifquenlo, chenle imaginacin. Yo use puntos (.), pero ustedes pueden usar cualquier otro caracter.
8 Comentarios

Programa: Tabla ASCII en C++ (sencillo)


Guardado en: Programas el 18 de septiembre del 2009 Etiquetas: ascii, ciclos, sencillos

Bien, ahora que ya vimos algo de teora y prctica sobre ciclos en c++, vamos a hacer un programa que nos muestre el cdigo ASCII del 1 al 256. Por si no los saben, las computadoras solo entienden nmeros, as que cada letra y cada caracter es en realidad un nmero; eso es el cdigo ASCII. As que el programa sera as:

#include<stdio.h> #include<conio.h> int main() { int ascii=0,col=1,ren=1; for(ascii=1;ascii<=256;ascii++) {

gotoxy(col,ren);printf("%i: %c ",ascii,ascii); if(ren==24) { ren=0; col+=12; } if(col>=80) { getch(); clrscr(); ren=0; col=1; } ren++; } getch(); }
Variables:

ascii -> Controla el ciclo desde 1 hasta 256 ren -> Controla los renglones col -> Controla las columnas Cuando ren==24, los renglones comienzan en cero de nuevo y se empieza en una nueva columna; cuando col>=80, se detiene el transcurso del ciclo, luego se limpia la pantalla y se reinician los renglones y las columnas.
11 Comentarios

Cmo usar Gotoxy en C++


Guardado en: Teora el 17 de septiembre del 2009 Etiquetas: bsico, gotoxy

Gotoxy significa go to (x, y), es decir ir a (x, y), donde (x, y) es una coordenada de nuestra pantalla. Se suele usar antes de un printf, para poner el texto en una cierta parte de la pantalla. La pantalla de C++, tiene 24 renglones y 80 columnas, por lo que los valores que le pongamos a nuestro gotoxy no debern pasar de esos valores.

Cmo usar gotoxy()?


Su sintxis es la siguiente: gotoxy ( columna , rengln ) ; As, si queremos que un mensaje salga en la parte inferior de la pantalla, nuestro programa sera el siguiente:

#include<stdio.h> #include<conio.h>

int main() { gotoxy(5,24);printf("Hola mundo"); getch(); }


Qu fcil! no?
113 Comentarios

Bien, ya que entendimos un poco la teora de los ciclos en c++, ahora vamos a practicar sobre como usar el ciclo for.

Cmo hacer un ciclo en C++?


#include<stdio.h> #include<conio.h> int main() { int x=0; for(x=0;x<=5;x++) { printf("%d ",x); } getch(); } //Este programa mostrar en pantalla 0 1 2 3 4 5
Como ven, necesitamos una variable exclusiva para el ciclo (en este caso x) y ste empieza con la palabra for, su sintxis es la siguiente: for ( variable = inicio-del-ciclo ; condicin-que-indica-el-final ; aumento de x ) Por partes:

x=0 -> Indica el inicio del ciclo. Puede ser cualquier variable y cualquier valor de inicio. x<=5 ->Indica el fin del ciclo. Cuando la condicin deja de cumplirse el ciclo termina. Cuando el ciclo no es menor o igual a 5 el ciclo termina. x++ -> Indica que la variable x aumenta de uno en uno. Para aumentar de dos en dos: x+=2, de tres: x+=3. Otro ejemplo, la tabla de multiplicar del 2 en C++:

#include<stdio.h> #include<conio.h> int main() { int c=0; for(c=1;c<=10;c++) { printf("2 x %d = %d\n",c,2*c); } getch(); }
67 Comentarios

Entendiendo los ciclos en c++


Guardado en: Curso el 14 de septiembre del 2009 Etiquetas: bsico, ciclos

Como les dije en el programa anterior (Aprob o no aprob?), los ciclos son algo que un buen programador debe tener muy bien dominado. Pero

Qu es un ciclo?
Un ciclo, aqu y en China, es algo que se repite constantemente. Por ejemplo:

Si vamos a la papelera y sacamos 5 copias de una hoja, cada vez que se imprime una hoja se completa un ciclo y se repite hasta completar las cinco repeticiones Si saben algo de guitarra, abran odo del crculo de sol; son cuatro acordes que se repiten constantemente a lo largo de una cancin, cada vez que tocas los cuatro acordes se completa un ciclo Si ponen un CD de msica en un reproductor, cada vez que suenen todas las canciones del disco se completa un ciclo

Cmo seran los programas de esos ejemplos?


Para sacar copias Desde { imprimir } Para tocar el circulo de Sol x=1 hasta 5

Desde { tocar tocar tocar tocar } Para tocar CD Desde { tocar }

x=1

hasta

fin

de

la

cancin Sol menor menor 7

Mi La Re

x=1

hasta

nmero cancin

de

canciones x

Los primeros dos estn muy fciles de entender: las acciones dentro de las llaves {} se repiten determinado nmero de veces y ese valor puede ser constante (como las copias) o variable (como el fin de la cancin). El tercer ejemplo tiene algo complicado, pero que es la escencia de los ciclos. Supongamos que ese disco tiene 5 canciones, podramos programarlo as: tocar tocar tocar tocar tocar cancin 5 O as: Desde { tocar } x=1 cancin hasta 5 x cancin cancin cancin cancin 1 2 3 4

Esta es la verdadera utilidad de los ciclos, ahorrar cdigo.


2 Comentarios

Programa: Aprob o no aprob?


Guardado en: Programas el 10 de septiembre del 2009 Etiquetas: if else, promedios, sencillos

Tambin es muy comn entre los profesores, encargar este tipo de programas una vez que se ven las condiciones. De lo que se trata es de pedir, por ejemplo, 3 calificaciones, sacar el promedio y mostrar un mensaje si el alumno aprob o no aprob. Como el promedio puede ser una valor con decimales, tenemos que declarar las variables como tipo float.

#include<stdio.h> #include<conio.h> int main() { float calif_1=0,calif_2=0,calif_3=0,promedio=0; printf("\nIntroduce tu primera calificacion: ");scanf("%f",&calif_1); printf("\nIntroduce tu segunda calificacion: ");scanf("%f",&calif_2); printf("\nIntroduce tu tercera calificacion: ");scanf("%f",&calif_3); promedio=(calif_1+calif_2+calif_3)/3;

if(promedio<6) { printf("\n\tLo siento, tu promedio de %.2f no es aprobatorio",promedio); } else { printf("\n\tFelicidades, pasaste con un %.2f",promedio); } getch(); }
Aqu estamos asumiendo que la calificacin mnima aprobatoria es de 6, pero y si quiero que este dato tambin sea variable? Entonces el programa quedara as: Seguir leyendo
15 Comentarios

Programa: Qu tipo de tringulo es?


Guardado en: Programas el 7 de septiembre del 2009 Etiquetas: condiciones, if else, sencillos, tringulos

Ok, hasta hoy ya hemos visto las herramientas necesarias para hacer nuestro primer programa un poco ms en serio. Este programa nos pide la medida de los tres lados de un tringulo y nos devuelve el tipo de triangulo que es (equiltero, issceles o escaleno). Para esto vamos a usar condiciones en C++ para comparar los lados de nuestro tringulo. Un trangulo equiltero tiene sus tres lados iguales, por tanto, la condicin quedara as: si el lado 1 es igual al lado 2 y el lado 2 es igual al lado 3, entonces es equiltero Un trangulo issceles tiene solo dos lados iguales, por tanto, la condicin quedara as: si el lado 1 es igual al lado 2 y el lado 2 es diferente al lado el lado 2 es igual al lado 3 y el lado 3 es diferente al lado el lado 3 es igual al lado 1 y el lado 1 es diferente al lado 2 entonces es issceles Un trangulo escaleno tiene sus tres lados diferentes, por tanto, la condicin quedara as: si el lado 1 es diferente al lado 2 y el lado 2 es diferente al lado 3 y el lado 3 es diferente al lado 1, entonces es escaleno Pero vamos a lo bueno. El programa completo en C++, sera as: 3, 1, o o

#include<stdio.h> #include<conio.h> int main() { //Declaracion de variables int lado1=0,lado2=0,lado3=0; //Pedir los datos printf("TIPOS DE TRIANGULOS"); printf("\nIntroduce el lado 1: ");scanf("%i",&lado1); printf("\nIntroduce el lado 2: ");scanf("%i",&lado2); printf("\nIntroduce el lado 3: ");scanf("%i",&lado3); //Hacer comparaciones if(lado1==lado2 && lado2==lado3) { printf("\n\tEs equilatero"); }

if(lado1==lado2 && lado2!=lado3 || lado2==lado3 lado3==lado1 && lado1!=lado2) { printf("\n\tEs isosceles"); } if(lado1!=lado2 && lado2!=lado3 && lado3!=lado1) { printf("\n\tEs escaleno"); } //Pausa getch(); }

&&

lado3!=lado1

||

Aprovecho para explicarles un detalle ms. \n (alt+92 n) dentro de un printf(); indica un salto de lnea, y \t (alt+92 t) indica una sangra o tabulado o algo de espacio.
12 Comentarios

Bajar Dev-C++ gratis (compilador para C++)


Guardado en: Artculos el 2 de septiembre del 2009 Etiquetas: compiladores, descargas, dev c++

Ya les proporcion antes un enlace para bajar Borland C++ 6.0, pero no hay nada como lo legal, y Bloodshed Dev C++ lo puedes descargar de forma totalmente gratuita (y legal) desde su propia pgina, o para ahorrarles clics, desde SourceForge: Dev-C++. Es un software excelente, muy actual, con una buena interfaz y funciona a la perfeccin. El nico problema es que no podremos usar la librera <conio.h> (porque es propiedad de Borland) a menos que sigamos las siguientes instrucciones: conio en Dev-C++. Ya por ltimo les pongo la captura de pantalla de Dev-C++ con lo bsico que debran de saber:

23 Comentarios

Condiciones (decisiones) en C++ if, else


Guardado en: Curso el 1 de septiembre del 2009 Etiquetas: bsico, condiciones, if else

Cmo haran para saber si alguien es mayor o menor de edad? Creo que los pasos seran: 1. 2. 3. Preguntarle su edad Si tiene 18 o ms entonces es mayor de edad Si no, es menor de edad

Metiendonos al lenguaje de C++, quedara algo as: 1. 2. 3. scanf(%d, &edad); if(edad>=18) { printf(Es mayor de edad); } else { printf(Es menor de edad); }

if significa si y else significa si no

edad>=18 es una comparacin. Si la variable edad es mayor o igual a 18, se hacen las instrucciones que estn entre las llaves {} del if; si no es as, se realizan las instrucciones que estn entre las llaves del else. El programa en s quedara de la siguiente forma:

#include<stdio.h> #include<conio.h> int main() { int edad=0; printf("Cual es tu edad?: "); scanf("%d",&edad); if(edad>=18) { printf("Eres mayor de edad"); } else { printf("Eres menor de edad"); } getch(); }
Un if no tiene que tener un else a fuerzas, es opcional. Es muy importante que se fijen muy bien en las llaves, cada if tiene su llave de apertura y de cierre, al igual que el else.
14 Comentarios

Pedir datos en C++ scanf()


Guardado en: Curso el 31 de agosto del 2009 Etiquetas: bsico, tipos de datos, variables

Hasta ahora, todo los ejemplos que hemos visto usan datos que nosotros mismos le ponemos la programa, pero qu hacer si necesito que el usuario sea quien introduzca los datos de entrada? Al igual que printf() muestra datos, scanf() los guarda. Ejemplo:

#include<stdio.h> #include<conio.h> int main() { int edad=0; printf("Cual es tu edad? ");scanf("%d",&edad); printf("Tu tienes %d anios", edad); getch(); }
El scanf() guarda en la variable indicada todo lo que introduzcas desde el teclado hasta que oprimas enter. Su sintxis tiene que ser exacta: scanf ( scanf ( %d , & edad ) ; tipo-de-dato , & variable ) ;

scanf() es sin duda una de las instrucciones que ms estaremos usando, ya que la interaccin con el usuario es fundamental en el desarrollo de programas.
10 Comentarios

Operadores lgicos en C++

Guardado en: Curso el 28 de agosto del 2009 Etiquetas: bsico, condiciones, operadores

Con operadores de relacin nos referimos a los ya conocidos:

< (menor que) <= (menor o igual que) > (mayor que) >= (mayor o igual que) == (igual) != (diferente) Bueno, talvz los operadores de igual (==) y diferente (!=) no los hayan visto escritos as, pero en C++ as se representan. Una expresin con operadores de relacin (por ejemplo: a<b, a!=b) nicamente nos dice si la evaluacin es verdadera (true) o falsa (false). Tambin estn estos otros:

and, que significa y y se representa con && or, que significa o y se representa con || (alt+124 dos veces) Sirven para relacionar dos o ms operaciones lgicas. Al usar && (y), las dos operaciones tienen que ser verdaderas para que arroje un resultado verdadero, si no, es falso. Al usar || (o), las dos operaciones tienen que ser falsas para que arroje un resultado falso, si no, es verdadero.

Ejemplos
Si a=4 y b=5 entonces,

a==b es false a>b es false a!=b es true a==b && a<b es false a==b || a<b es true
10 Comentarios

Bien, ya sabemos declarar y mostrar variables, ahora solo falta saber cmo hacer operaciones matemticas con ellas. Una suma sera as:

#include<stdio.h> #include<conio.h> int main() { int num1=5, num2=10, resultado=0; resultado=num1+num2; printf("El resultado es: %i", resultado); //Esto mostrar en pantalla: El resultado es: 15 getch(); }
Como ven, siempre hay que tener una variable para guardar el resultado de cualquier operacin. En algunos casos se puede usar la misma variable:

#include<stdio.h> #include<conio.h> int main() {

int num1=5; num1=num1+6; printf("El resultado es: %i", num1); //Esto mostrar en pantalla: El resultado es: 11 getch(); }
Entonces, los signos de operacin en C++ y la mayora de los lenguajes de programacin son:

+ para suma - para resta * para multiplicacin / para divisin () tambin indican multiplicacin
5 Comentarios

Variables en C++ 2 Mostrar variables


Guardado en: Curso el 26 de agosto del 2009 Etiquetas: bsico, tipos de datos, variables

Ya sabemos como agregar variables a nuestros programas, pero cmo se usan? Para mostrar el valor de una variable en pantalla con printf() se usan los caracteres de sustitucin. Vean este programa:

#include<stdio.h> #include<conio.h> int main() //Esta es la funcin main, va en todos los programas { int numero=7; //A la variable numrica 'numero' le asignamos un valor de 7 printf("El numero es %i", numero); //Esto mostrar en pantalla: El nmero es 7 getch(); //Hace una pausa }
Como ven, el valor de la variable aparece en lugar de %i, cada tipo de dato tiene su propio caracter de sustitucin.

Para int se usa %i o %d Para float se usa %f Para char se usa %c Otros ejemplos:

#include<stdio.h> #include<conio.h> int main() { int edad=17; float altura=1.67; printf("Edad: %i aos, altura: %f metros", edad, altura); //Esto mostrar en pantalla: Edad: 17 aos, altura: 1.670000 metros getch(); }
Para mostrar datos float, podemos usar este truco:

%f mostrar 0.000000 %.2f mostrar 0.00 %.1f mostrar 0.0 %.f mostrar 0
2 Comentarios

Variables en C++ 1 Lo bsico


Guardado en: Curso el 25 de agosto del 2009 Etiquetas: bsico, tipos de datos, variables

Parte fundamental de cualquier lenguaje de programacin son las variables. Si sabes algo de lgebra, por variable te imaginars una letra que puede tener varios valores. En programacin sto no cambia mucho, solo que una variable puede tener un nombre completo, no solo una letra.

Ejemplos de nombres variables



x contador primer_nombre num_primo Una variable no puede tener espacios, caracteres especiales (acentos, signos), tiene que empezar con una letra.

Ejemplos de valores variables



x=12 contador=0 primer_nombre=Juanito Gmez num_primo=7 Las variables se usan para almacenar valores que cambian dinmicamente en el transcurso del programa.

Como declarar una variable en C++


C++ maneja varios tipos de variables: numricas, de caracteres y boolean (cierto o falso) esencialmente. Para declarar una variable numrica llamada altura que inicie con un valor de 0, escribimos esto:

int altura=0;
Para declarar una variable numrica llamada distancia que inicie con un valor de 2.67, escribimos esto:

float distancia=2.67;
Para declarar una variable de caracter llamada inicial, con un valor de R, escribimos esto:

char inicial='R';
Para declarar una variable boolean llamada terminado, que empiece como falso, escribimos esto:

bool terminado=false;
En resumen:

Para variables numricas sin decimales se usa: int Para variables numricas con decimales se usa: float

Para variables de un solo caracter se usa: char Para variables boolean se usa: bool

Como declarar varias variables en C++


Solo se pone el tipo de dato (int, float, char, bool) y separamos las variables con comas.

int num=0, personas=16, lugares=10;


Siempre va un punto y coma (;) al final de la declaracin de variables. Algo de teora para hoy, despus vendr la prctica.
9 Comentarios

Comentarios en C++
Guardado en: Curso el 24 de agosto del 2009 Etiquetas: bsico, comentarios

Un comentario es una nota que puedes poner en cualquier parte de tu programa y que ser totlamente ignorada a la hora de correr el programa. Son bastante tiles para que otras personas, o t mismo despus de algn tiempo, sepan qu hace alguna parte de tu cdigo. Un comentario en C++ se puede hacer de dos formas:

Para comentarios de una sola lnea: // El comentario Para comentarios de varias lneas: /* El comentario */ Por ejemplo:

/* Autor: Ral Rivas Fecha: Agosto de 2009 */ #include<stdio.h> #include<conio.h> int main() { //Aqu declaro mis variables int numero1=10; printf("%i",numero1); //esto mostrar: 10 getch(); }
Facil no?
3 Comentarios

Hola Mundo, en C++


Guardado en: Curso el 24 de agosto del 2009 Etiquetas: bsico, sencillos

Es como un rito de iniciacin empezar con un programa que sencillamente muestre el mensaje: Hola Mundo en pantalla, hoy lo vamos a hacer en c++.

#include<stdio.h> #include<conio.h> int main() { printf("Hola Mundo"); getch(); }

La primera y segunda lneas son libreras. Una librera es el lugar en dnde estn definidas cientos de funciones que utilizaremos continuamente. stdio.h y conio.h son las libreras que vamos a estar usando continuamente. main() es la funcin principal, todo el programa se desarollar a partir de ella. Esta funcin est seguida de una llave de apertura ({), y al final hay una de cierre (}). Esto significa que todo lo que est entre las llaves pertenece a main(). printf(); es una funcin para imprimir (mostrar) datos en pantalla. Entre comillas escribimos lo que queremos mostrar. Est definida en stdio.h getch(); es una funcin definida en conio.h que detiene la ejecucin del programa para que el usuario pueda apreciar los resultados. C++ busca automticamente la funcin main(), y si esta no se encuentra, sencillamente no funcionar el programa. Hay que tener muy presente que las funciones menores siempre terminan con punto y coma (;). Este smbolo marca el final de toda sentencia.
14 Comentarios

Curso de C++
Guardado en: Curso el 20 de agosto del 2009

Bienvenidos a mi curso de C++!, en realidad esto es slo una seccin del blog donde pueden consultar una serie de posts que ya haba hecho anteriormente, pero de un forma ordenada, empezamos desde lo ms bsico y vamos avanzando poco a poco. Yo se que es muy fcil darle clic a Siguiente, pero si de verdad quieren aprender no lo hagan hasta que hayan comprendido el post y hayan hecho alguna prctica sobre ello. Recuerden que en el curso no estn todos los posts del blog, si alguna entrada les pareci interesante pueden checar los posts relacionados (abajo de cada post) para leer otros posts del mismo tema. Y creo que no estn ordenados muy muy bien, pero creo que eso ayuda un poco a hacer menos montono el aprendizaje :) As que aqu abajo est el ndice, o pueden dar clic en siguiente (aqu en la barra lateral ->) para comenzar desde el primero; ir agregando ms temas de vez en cuando.
21 Comentarios

Porqu programar en C++?


Guardado en: Artculos el 16 de agosto del 2009

De seguro mas uno te ha dicho: C++?, eso ya est obsoleto, pero la realidad es muy distinta. Imagnense que programar es como escribir. En un lenguaje de alto nivel (visual) tienes todas las palabras del mundo pre-escritas, listas para que las agarres y las uses. En un lenguaje de nivel medio (como c++), tienes todas las letras del alfabeto listas para que formes la palabra que quieras. En un lenguaje de bajo nivel (ensamblador) tendras tu mismo que hacer cada letra. Cada uno tiene sus ventajas, pero la verdad es que para empezar a aprender a programar, C++ es perfecto. Y si todava tienes dudas, acurdate que sistemas operativos como Linux, Unix e incluso Windows (anteriormente), se escriben casi por completo en C.
28 Comentarios

Hola programadores en C++!


Guardado en: Blog el 16 de agosto del 2009

Codigo C++ es un blog en el que voy a intentar ayudar a todos quienes tengan en su escuela, bachillerato, preparatoria, tecnolgico o universidad clase de programacin y estn empezando a programar con C++. Cada post tendr un programa en C++ explicado lo ms detallado posible y adems varias formas de hacerlo. Posibles problemas y errores sern tomados en cuenta y los comentarios estarn siempre abiertos para que cada quien exprese sus dudas

Potrebbero piacerti anche