Created by ALEXIS MONTAÑO CALLEJAS
over 7 years ago
|
||
Question | Answer |
Image:
Tcdepur2 (image/png)
|
Las razones de haber escogido el lenguaje C para comenzar a programar son varias: es un lenguaje muy potente, se puede aprender rápidamente. Este es sin duda el objetivo de éste curso. No pretende ser un completo manual de la programación, sino una base útil para que cualquiera pueda introducirse en este apasionante mundo |
Image:
7 (image/jpeg)
|
El lenguaje C es uno de los más rápidos y potentes que hay hoy en día. el sistema operativo Linux está desarrollado en C en su práctica totalidad. Así que creo que no sólo no perdemos nada aprendiéndolo sino que ganamos mucho. Para empezar nos servirá como base para aprender C++ e introducirnos en el mundo de la programación de Windows |
Image:
3 (image/png)
|
No debemos confundir C con C++, que no son lo mismo. Se podría decir que C++ es una extensión de C. Para empezar en C++ conviene tener una sólida base de C. Existen otros lenguajes como Visual Basic que son muy sencillos de aprender y de utilizar; nos dan casi todo hecho. Pero cuando queremos hacer algo complicado o que sea rápido debemos recurrir a otros lenguajes (c++, delphi,...). |
Generalmente se diferencian dos tipos de lenguajes, los de alto nivel y los de bajo nivel. Lenguajes de alto nivel: Son los que están más cerca del usuario, esto es, que es más fácil de comprender para el hombre. En este grupo tenemos lenguajes como el Pascal, Basic, Cobol, Modula-2, Ada, etc... Lenguajes de bajo nivel: Estos lenguajes están más cerca de la máquina y son más complicados para el hombre. En este grupo tenemos el ensamblador y el código máquina (para programar con este último se haría directamente con 1's y 0's). | |
Este bucle debería ejecutarse 10 veces, desde j = 0 hasta j = 9, sin embargo la utilización de la sentencia break, rompe la iteración del bucle, de tal manera que tras la primera ejecución el bucle acaba habiéndose ejecutado una sola vez. Resulta útil la utilización de condiciones para la ruptura del bucle, de tal manera que un código como el anterior indicado no sirve para nada. Recurrimos para ejemplificarlo al ejemplo anterior de contar dígitos). Pero en este caso queremos que cuente los dígitos de un número pero solamente hasta llegar a 5 dígitos, en caso de que tenga más dejaremos de contarlos: | |
Un menú es un conjunto de opciones para que el usuario seleccione, y al activar una de estas opciones realiza un procedimiento específico. Si una de las opciones manda activar otro conjunto de opciones, entonces estamos implementando el manejo de submenús. | |
Image:
Craps (image/png)
|
La implementación de un menú se realiza con la aplicación de un ciclo selectivo SWITCH utilizando como opción seleccionada un caracter, el cual puede ser letra o dígito. La terminación del ciclo dependerá de un ciclo repetitivo WHILE el cual terminará al seleccionar una de las opciones como opción de salida. En el caso de los submenús se utilizan los mismos ciclos, mas cabe hacer notar que no debe ciclarse la lógica entre ellos, con las opciones de terminación debe lograrse el acceso y salida de los submenús anidados. |
Los arrays, arreglos o vectores forman parte de la amplia variedad de estructuras de datos que nos ofrece C++, siendo además una de las principales y más útiles estructuras que podremos tener como herramienta de programación. Los arrays, arreglos o vectores (como los quieras llamar), son utilizados para almacenar múltiples valores en una única variable. En un aspecto más profundo, los arrays, permiten almacenar muchos valores en posiciones de memoria continuas, lo cual permite acceder a un valor u otro de manera rápida y sencilla. Estos valores pueden ser números, letras o cualquier tipo de variable que deseemos incluso tipos de datos propios. | |
En múltiples ocasiones es necesario almacenar gran cantidad de información en una variable y a menudo sucede que no conocemos con exactitud la cantidad de datos que debemos almacenar, pero sabemos que sí sería más de uno, como por ejemplo almacenar las identificaciones de las personas ingresadas al sistema. Los arrays, arreglos o vectores son una estructura que nos permite solucionar este tipo de problemas. Para explicar mejor de lo que hablo, pongamos un ejemplo: | |
Imaginemos que queremos crear un programa con el cual podamos de algún modo almacenar los títulos y los autores de diferentes libros. El usuario es el encargado de suministrar la información de cada libro, así entonces, dado que es el usuario quien lo hace, nosotros no tenemos manera alguna de saber cuántos libros va querer él ingresar por medio de nuestro programa. | |
El caso principal es que queremos almacenar en la memoria el titulo y el autor de TODOS y cada uno de los libros. Entonces ¿cómo crees que podrías hacer esto? Con lo que sabemos hasta hora, se nos podrían ocurrir un par de cosas. Veamos: | |
Podríamos pensar primero, "listo, está bien, es fácil, declaro una variable llamada titulo y otra autor, ambas de tipo string y se las pido al usuario", pues bien, esta solución digamos que nos permite almacenar la información del primer libro que el usuario ingrese, pero en cuanto desee ingresar otro libro ¿qué vamos a hacer?, si lo hacemos así, cuando el usuario ingrese la información para un nuevo libro, va a sobrescribir los valores anteriores y habremos perdido la información del primero, de manera que esta solución no es válida. | |
Image:
Bucle While2 (image/png)
|
Veamos nuestro primer ciclo: WHILE. Un ciclo se utiliza para ejecutar una seria de instrucciones (o una sola) mientras se cumpla una condición, cuando se deje de cumplir la condición, estas instrucciones se dejarán de ejecutar. En el código siguiente, se escribe un útil programa que pregunta cuanto es 1 + 1, mientras el usuario no escriba 2 (porque 1 + 1 es igual a 2), el programa no saldrá del ciclo y seguirá preguntando. |
Image:
Dowhiletu6 (image/jpeg)
|
El <bloque_de_instrucciones> de un bucle while puede ejecutarse cero o más veces (iteraciones). Si el <bloque_de_instrucciones> se ejecuta al menos una vez, seguirá ejecutándose repetidamente, mientras que, la condición sea verdadera. Pero, hay que tener cuidado de que el bucle no sea infinito. Cuando la condición de un bucle while se evalúa siempre a verdadera, se dice que se ha producido un bucle infinito, ya que, el programa nunca termina. Un bucle infinito es un error lógico. |
Image:
Ciclo While (image/jpeg)
|
En esta línea está prácticamente todo lo esencial de un ciclo while. La sintaxis es bastante simple. Tenemos al interior de los paréntesis una condición cualquiera, es decir por ejemplo "==. >, <, >=, <=, !=" o algunas mas que se nos puedan ocurrir, esta condición que especifiquemos allí, es la que permitirá que el ciclo se siga ejecutando hasta que en algún momento esta misma condición deje de cumplirse, de esta forma si por ejemplo estamos verificando que un numero_cualquiera == 50, el ciclo se ejecutara solo cuando numero_cualquiera sea igual a 50, en cuanto su valor cambie a cualquier otro el ciclo while finalizara y continuara con el resto de la ejecución del programa. De esta forma, es evidente que la condición que allí ingresemos siempre deberá tomar un valor booleano (true o false). |
Image:
Gambasm 017 (image/png)
|
En la línea 2 tenemos una llave abriendo "{" lo cual como sabemos indica que allí comienza un bloque de instrucciones que se ejecutaran cada vez que el ciclo de un "giro". Esta llave no es del todo obligatoria, sin embargo si no la ponemos solo se ejecutara dentro de nuestro ciclo while la primera línea inmediatamente posterior a la declaración del ciclo, de modo que si deseamos que se ejecuten varias líneas dentro de nuestro ciclo, debemos usar las llaves |
Image:
Cu00155 A 1 (image/png)
|
En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de manera iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de líneas necesarias incluso, como veremos más adelante dentro de estas podría haber uno o más ciclos, así que podrías tener todo un programa dentro de un ciclo |
Image:
Ciclo Do (image/jpeg)
|
n esta última línea hacemos uso de la llave cerrando "}", una vez más como seguramente ya debemos saber esta nos indica que allí termina el bloque del ciclo while y se dará por terminada la ejecución de este para continuar ejecutando el resto del algoritmo. No te preocupes si no comprendiste muy bien lo que acabo de escribir, estoy seguro que con un par de ejemplos que veremos a continuación, te va a quedar todo claro |
Image:
Image025 (image/jpeg)
|
Para solucionar esto, debemos tener clara cuál va a ser la condición que se debe cumplir para que el ciclo este pidiendo el numero contantemente, el ciclo se va a detener solo cuando el numero ingresado sea mayor que 100, así que la condición para que se siga ejecutando es que el numero sea menor a 100, ¿Comprender la lógica?, es simple si para que se detenga el numero debe ser mayor a 100, entonces para seguirse ejecutando el numero debe ser menor o igual a 100, veámoslo entonces |
Image:
Cu00161 A 1 (image/png)
|
En efecto los ciclos while, son bastante útiles, sin embargo desde el punto de vista de la eficiencia al igual que con los ciclos for, es recomendable evitarlos en la medida de lo posible, siempre que vayas a usar un ciclo while o cualquier tipo de ciclo en realidad, deberías preguntarte primero si es totalmente necesario o si existe una manera más efectiva de hacerlo. Evidentemente habrá situaciones en las que será casi que imprescindible usar el ciclo, pues por algo existen, esta entonces en nuestra habilidad determinar cuándo usarlos y mejor aun como usarlos de manera efectiva |
Escribo este post porque según las estadísticas, en los últimos días he recibido bastantes visitas a través de buscadores intentando encontrar una explicación al uso de la función main en C/C++ (seguro que no es la única sorpresa que me da haber escogido este nombre para el blog…). Qué menos que agradar a mi escaso público y ganarme unos cuantos lectores, así que voy a escribir algo útil de una vez y explicaré todo lo profundamente posible esta función | |
Image:
Tcatcc.Win.Main (image/gif)
|
En primer lugar, la función nunca debe ser declarada como void. Ésta es una mala práctica que se suele cometer, sobre todo al comenzar la andadura con la programación (lo admito, ¡yo también lo hacía al principio!); si bien algunos compiladores lo aceptan, los más estrictos se quejarán en forma de warning o error. Así que hay que usar int para declarar el tipo, o incluso también se puede obviar, porque el compilador le asignará este tipo por defecto |
Bien, ahora atacaremos los valores de retorno. Esto es muy sencillo; como hemos declarado la función del tipo int, al llegar al final de su ejecución tendremos que devolver un valor. Normalmente se devuelve 0 para indicar que el programa ha finalizado correctamente, y cualquier otro valor para indicar una ejecución anormal. Pero, si queremos ser completamente estrictos (en algunas plataformas el significado de los valores se invierte, y 0 puede significar que ha ocurrido un fallo de ejecución), emplearemos las macros EXIT_FAILURE y EXIT_SUCCESS. Como su nombre bien indica, la primera devuelve una ejecución errónea, y la segunda indica al proceso padre que todo ha ido como debería. Sus definiciones se encuentran en stdlib.h para el lenguaje C y cstdlib.h para C++ | |
Image:
Input Main Cpp (image/png)
|
Y por último, hablaremos de los parámetros de la función. Hasta ahora, la hemos definido sin ningún tipo de parámetros, porque según el estándar esto puede hacerse perfectamente; sin embargo, main acepta dos parámetros que se explicarán a continuación (hay que recordar que siempre es o cero o dos parámetros, en caso de emplear cualquier otro número el compilador dará warning o error, dependiendo de lo quisquilloso que sea): Primer parámetro: tipo int. Por costumbre se le llama argc, diminutivo de argument count, pero se le puede llamar como se desee. Como su propio nombre indica, contiene el número de argumentos que se le pasan al programa. Hay que tener en cuenta que el primer argumento de un programa siempre será el nombre de este, de tal manera que si hacemos la siguiente ejecución |
Como se ha indicado anteriormente, el nombre más común para llamar a este parámetro es argv, contracción de argument vector, y al principio puede resultar un poco lioso lidiar con él, más aún si no se han usado punteros nunca. Así que simplemente hay que recordar que estamos trabajando con un vector de cadenas, y que cada posición (recordad, su extensión va desde 0 hasta argc-1) guarda uno de los argumentos empleados al llamar a nuestro programa. Para la ejecución de ejemplo del punto anterior, esta sería la traza de nuestros parámetros | |
Image:
2055q1f (image/png)
|
Usted puede haber notado que no todas las líneas de este programa realizan acciones cuando se ejecuta el código. Hay una línea que contiene un comentario (a partir de //). Hay una línea con una directiva para el preprocesador (a partir de #). Hay una línea que define una función (en este caso, la mainfunción). Y, por último, una línea con las declaraciones que terminan con un punto y coma (la inserción en cout), que fue dentro del bloque delimitado por las llaves ( { }) de la mainfunción. |
Image:
O Zjmb (image/jpeg)
|
Nos trasladaremos a los años 80,s cuando una conocida compañía de software como lo es Borland. Fue fundada en 1983, en la actualidad, ya no es tal empresa, ya que fue vendida a una empresa llamada CodeGear(que sigue dando soporte y desarrollo a nuevos productos) que después fue vendida a otra empresa llamada Micro Focus, actualmente dicha empresa no es muy popular, esta dedicada al software empresarial.Borland desarrollo varios compiladores para lenguajes como |
Image:
Textcolor (image/png)
|
Prolog, Pascal, Cobol, entre muchos otros, pero el mas popular para C y C++ fue el tan conocido Turbo C++.En la programación existen estándares. Pueden haber miles de compiladores para un lenguaje pero claro todos los compiladores deben seguir el estándar del lenguaje. A que voy con esto, que a la compañía Borland le dio igual seguir un estándar y en sus compiladores desarrollo librerías no estándares, es decir que esas librerías solo se utilizan en los compiladores que desarrollo dicha empresa, como la tan conocida librería conio |
Image:
Textcolor (image/png)
|
Esta librería contiene los prototipos de las funciones, macros, y constantes para preparar y manipular la consola en modo texto en el entorno de MS-DOS, dicho mas simple esta nos permite dar un “mejor formato” al texto en la terminal de MS-DOS, ya sea dandole color al texto o color al fondo, por mencionar un ejemplo simple. Algunos de los comandos mas conocidos son: getch(), clrscr(), gotoxy(), textcolor(), y textbackground() Aun así nosotros podemos sustituir estas funciones de la librería conio.h con otras funciones estándares |
Para sustituir clrscr(), solo necesitamos escribir system(“cls”); la cual está en iostream (es sin .h, se definiría así: #include iostream). Gotoxy() es algo vago de usar pudiendo utilizar n (espacio hacia abajo) y t (espacio hacia la derecha) dentro de un printf(); 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(); También podemos utilizar getchar(); que se encuentra en stdio.h Y para ser honestos, cualquiera te agradecerá que no le pongas fondo rosa y letras amarillas a tus programas | |
Las variables enteras almacenan números enteros dentro de los límites de cada uno de sus tamaños. A su vez, esos tamaños dependen de la plataforma, del compilador, y del número de bits que use por palabra de memoria: 8, 16, 32... No hay reglas fijas para saber el tamaño, y por lo tanto, el mayor número que podemos almacenar en cada tipo entero: short int, int o long int; depende en gran medida del compilador y del sistema operativo. Sólo podemos estar seguros de que el tamaño de un short int es menor o igual que el de un int, y éste a su vez es menor o igual que el de un long int. Veremos cómo averiguar estos valores cuando estudiemos los operadores | |
Una de las características recientes que se ha añadido al estándar de C++ es la existencia de "strings" (cadenas de texto) como parte del lenguaje, con un manejo tan sencillo como lo es en otros lenguajes como Pascal o Basic. En general, los compiladores del año 2000 o posteriores deberían permitir el manejo de cadenas, y la mayoría de los anteriores no lo harán. Eso sí, es posible que algún otro incluya alguna clase "string" no totalmente estándar, como las "AnsiString" de Borland C++ Builder | |
Image:
Image Thumb (image/png)
|
Una cadena en C++ es un conjunto de caracteres, o valores de tipo char, terminados con el carácter nulo, es decir el valor numérico 0. Internamente, en el ordenador, se almacenan en posiciones consecutivas de memoria. Este tipo de estructuras recibe un tratamiento muy especial, ya que es de gran utilidad y su uso es continuo. La manera de definir una cadena es la siguiente |
Conceptualmente, desde el punto de vista de un programador, una variable es una entidad cuyo valor puede cambiar a lo largo de la ejecución de un programa. En el nivel más bajo, una variable se almacena en la memoria del ordenador. Esa memoria puede ser un conjunto de semiconductores dentro de un circuito integrado, ciertos campos magnéticos sobre una superficie de un disco, ciertas polarizaciones en una memoria de ferrita, o cualquier cosa que aún no se haya inventado. Afortunadamente, no deberemos preocuparnos por esos detalles | |
Las variables son altamente imprescindibles al momento de programar, de hecho sería imposible conseguir una aplicación con una funcionalidad básica sin usar variables; por esta misma razón es necesario aprender a usarlas bien y lo tenemos muy fácil, pues su uso es bastante sencillo e intuitivo, tanto para declararlas como para asignarles valores |
Want to create your own Flashcards for free with GoConqr? Learn more.