




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Introducció als Computadors, Profesor: , Carrera: Enginyeria de Sistemes de Telecomunicació, Universidad: UPC
Tipo: Apuntes
1 / 327
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































Este texto es una introducción a la programación de ordenadores, usando el lenguaje C#.
Está organizado de una forma ligeramente distinta a los libros de texto "convencionales", procurando incluir ejercicios prácticos lo antes posible, para evitar que un exceso de teoría en los primeros temas haga el texto pesado de seguir.
Este texto ha sido escrito por Nacho Cabanes. Si quiere conseguir la última versión, estará en mi página web:
www.nachocabanes.com
Este texto es de libre distribución ("gratis"). Se puede distribuir a otras personas libremente, siempre y cuando no se modifique. Si le gustan los formalismos, esto sale a equivaler a una licencia Creative Commons BY-NC-ND: reconocimiento del autor, no se puede hacer uso comercial (no se puede "vender" este curso), no se puede crear obras derivadas.
Este texto se distribuye "tal cual", sin garantía de ningún tipo, implícita ni explícita. Aun así, mi intención es que resulte útil, así que le rogaría que me comunique cualquier error que encuentre.
Para cualquier sugerencia, no dude en contactar conmigo a través de mi web.
Revisión actual: 0.
Un programa es un conjunto de órdenes para un ordenador.
Estas órdenes se le deben dar en un cierto lenguaje, que el ordenador sea capaz de comprender. El problema es que los lenguajes que realmente entienden los ordenadores resultan difíciles para nosotros, porque son muy distintos de los que nosotros empleamos habitualmente para hablar. Escribir programas en el lenguaje que utiliza internamente el ordenador (llamado " lenguaje máquina " o "código máquina") es un trabajo duro, tanto a la hora de crear el programa como (especialmente) en el momento de corregir algún fallo o mejorar lo que se hizo.
Por ejemplo, un programa que simplemente guardara un valor "2" en la posición de memoria 1 de un ordenador sencillo, con una arquitectura propia de los años 80, basada en el procesador Z80 de 8 bits, sería así en código máquina:
Prácticamente ilegible. Por eso, en la práctica se emplean lenguajes más parecidos al lenguaje humano, llamados "lenguajes de alto nivel ". Normalmente, estos son muy parecidos al idioma inglés, aunque siguen unas reglas mucho más estrictas.
Vamos a ver en primer lugar algún ejemplo de lenguaje de alto nivel, para después comparar con lenguajes de bajo nivel, que son los más cercanos al ordenador.
Uno de los lenguajes de alto nivel más sencillos es el lenguaje BASIC. En este lenguaje, escribir el texto Hola en pantalla, sería tan sencillo como usar la orden
PRINT "Hola"
Otros lenguajes, como Pascal , nos obligan a ser algo más estrictos, pero a cambio hacen más fácil descubrir errores (ya veremos por qué):
program Saludo;
begin write('Hola'); end.
El equivalente en lenguaje C resulta algo más difícil de leer:
#include <stdio.h>
int main() { printf("Hola");
}
En C# hay que dar todavía más pasos para conseguir lo mismo:
public class Ejemplo { public static void Main() { System.Console.WriteLine("Hola"); } }
Como se puede observar, a medida que los lenguajes evolucionan, son capaces de ayudar al programador en más tareas, pero a la vez, los programas sencillos se vuelven más complicados. Afortunadamente, no todos los lenguajes siguen esta regla, y algunos se han diseñado de forma que las tareas sencillas sean sencillas de programar (de nuevo). Por ejemplo, para escribir algo en pantalla usando el lenguaje Python haríamos:
print("Hello")
Por el contrario, los lenguajes de bajo nivel son más cercanos al ordenador que a los lenguajes humanos. Eso hace que sean más difíciles de aprender y también que los fallos sean más difíciles de descubrir y corregir, a cambio de que podemos optimizar al máximo la velocidad (si sabemos cómo), e incluso llegar a un nivel de control del ordenador que a veces no se puede alcanzar con otros lenguajes. Por ejemplo, escribir Hola en lenguaje ensamblador de un ordenador equipado con el sistema operativo MsDos y con un procesador de la familia Intel x86 sería algo como
dosseg .model small .stack 100h
.data hello_message db 'Hola',0dh,0ah,'$'
.code main proc mov ax,@data mov ds,ax mov ah, mov dx,offset hello_message int 21h
mov ax,4C00h int 21h main endp end main
Resulta bastante más difícil de seguir. Pero eso todavía no es lo que el ordenador entiende, aunque tiene una equivalencia casi directa. Lo que el ordenador realmente es capaz de comprender son secuencias de ceros y unos. Por ejemplo, las órdenes "mov ds, ax" y "mov ah, 9" (en cuyo significado no vamos a entrar) se convertirían a lo siguiente:
operativos). Esta misma idea se sigue en el lenguaje C#, que se apoya en una máquina virtual llamada "Dot Net Framework" (algo así como "armazón punto net").
A pesar de que los lenguajes de alto nivel se acercan al lenguaje natural, que nosotros empleamos, es habitual no usar ningún lenguaje de programación concreto cuando queremos plantear los pasos necesarios para resolver un problema, sino emplear un lenguaje de programación ficticio, no tan estricto, muchas veces escrito incluso en español. Este lenguaje recibe el nombre de pseudocódigo.
Esa secuencia de pasos para resolver un problema es lo que se conoce como algoritmo (realmente hay alguna condición más, por ejemplo, debe ser un número finito de pasos). Por tanto, un programa de ordenador es un algoritmo expresado en un lenguaje de programación.
Por ejemplo, un algoritmo que controlase los pagos que se realizan en una tienda con tarjeta de crédito, escrito en pseudocódigo, podría ser:
Leer banda magnética de la tarjeta Conectar con central de cobros Si hay conexión y la tarjeta es correcta: Pedir código PIN Si el PIN es correcto Comprobar saldo_existente Si saldo_existente >= importe_compra Aceptar la venta Descontar importe del saldo. Fin Si Fin Si Fin Si
Ejercicios propuestos
C# es un lenguaje de programación de ordenadores. Se trata de un lenguaje moderno, evolucionado a partir de C y C++, y con una sintaxis muy similar a la de Java. Los programas creados con C# no suelen ser tan rápidos como los creados con C, pero a cambio la productividad del programador es mucho mayor.
Se trata de un lenguaje creado por Microsoft para crear programas para su plataforma .NET, pero estandarizado posteriormente por ECMA y por ISO, y del que existe una implementación alternativa de "código abierto", el "proyecto Mono", que está disponible para Windows, Linux, Mac OS X y otros sistemas operativos.
Nosotros comenzaremos por usar Mono como plataforma de desarrollo durante los primeros temas. Cuando los conceptos básicos estén asentados, pasaremos a emplear Visual C#, de Microsoft, que requiere un ordenador más potente pero a cambio incluye un entorno de desarrollo muy avanzado, y está disponible también en una versión gratuita (Visual Studio Express Edition).
Los pasos que seguiremos para crear un programa en C# serán:
La mayoría de los compiladores actuales permiten dar todos estos pasos desde un único entorno , en el que escribimos nuestros programas, los compilamos, y los depuramos en caso de que exista algún fallo.
En el siguiente apartado veremos un ejemplo de uno de estos entornos, dónde localizarlo y cómo instalarlo.
Vamos con un primer ejemplo de programa en C#, posiblemente el más sencillo de los que "hacen algo útil". Se trata de escribir un texto en pantalla. La apariencia de este programa la vimos en el tema anterior. Vamos a verlo ahora con más detalle:
public class Ejemplo { public static void Main() { System.Console.WriteLine("Hola"); } }
Esto escribe "Hola" en la pantalla. Pero hay mucho alrededor de ese "Hola", y vamos a comentarlo antes de proseguir, aunque muchos de los detalles se irán aclarando más adelante. En este primer análisis, iremos de dentro hacia fuera:
public static void Main(){ System.Console.WriteLine("Hola"); } }
(esta es la forma que yo emplearé preferentemente en este texto cuando estemos trabajando con fuentes de mayor tamaño, para que ocupe un poco menos de espacio).
La gran mayoría de las órdenes que encontraremos en el lenguaje C# son palabras en inglés o abreviaturas de éstas. Pero hay que tener en cuenta que C# distingue entre mayúsculas y minúsculas, por lo que "WriteLine" es una palabra reconocida, pero "writeLine", "WRITELINE" o "Writeline" no lo son.
Como ya hemos comentado, usaremos Mono como plataforma de desarrollo para nuestros primeros programas. Por eso, vamos a comenzar por ver dónde encontrar esta herramienta, cómo instalarla y cómo utilizarla.
Podemos descargar Mono desde su página oficial:
http://www.mono-project.com/
En la parte superior derecha aparece el enlace para descargar ("download now"), que nos lleva a una nueva página en la que debemos elegir la plataforma para la que queremos nuestro Mono. Nosotros descargaremos la versión más reciente para Windows (la 2.10.5 en el momento de escribir este texto).
Se trata de un fichero de cerca de 90 Mb. Cuando termina la descarga, haremos doble clic en el fichero recibido, aceptaremos el aviso de seguridad que posiblemente nos mostrará Windows, y comenzará la instalación, en la que primero se nos muestra el mensaje de bienvenida:
El siguiente paso será aceptar el acuerdo de licencia:
El siguiente paso es elegir qué componentes queremos instalar (Mono, Gtk#, XSP):
Nuevamente, soy partidario de no instalar todo. Mono es imprescindible. La creación de interfaces de usuario con Gtk# queda fuera del alcance que se pretende con este texto, pero aun así puede ser interesante para quien quiera profundizar. El servidor web XSP es algo claramente innecesario por ahora, y que además instalaría un "listener" que ralentizaría ligeramente el ordenador, así que puede ser razonable no instalarlo por ahora:
El siguiente paso es indicar en qué carpeta del menú de Inicio queremos que quede accesible:
A continuación se nos muestra el resumen de lo que se va a instalar. Si confirmamos que todo nos parece correcto, comienza la copia de ficheros:
Quizá se nos lleve a una carpeta que esté dentro de "Documents and settings" o quizá incluso a alguna en la que no tengamos permiso para escribir, como "Windows\System32". Si queremos cambiar la carpeta de arranque de Mono, lo podemos hacer pulsando el botón derecho sobre la opción "Mono-x.x.x Command Prompt" del menú de inicio y escogiendo "Propiedades".
Para crear un programa, el primero paso será teclear el "fuente". Para ello podemos usar cualquier editor de texto. En este primer fuente, usaremos simplemente el "Bloc de notas" de Windows. Para ello tecleamos:
notepad ejemplo01.cs
Aparecerá la pantalla del "Bloc de notas", junto con un aviso que nos indica que no existe ese fichero, y que nos pregunta si deseamos crearlo. Respondemos que sí y podemos empezar a teclear el ejemplo que habíamos visto anteriormente:
Guardamos los cambios, salimos del "Bloc de notas" y nos volvemos a encontrar en la pantalla negra del símbolo del sistema. Nuestro fuente ya está escrito. El siguiente paso es compilarlo. Para eso, tecleamos
gmcs ejemplo01.cs
Si no se nos responde nada, quiere decir que no ha habido errores. Si todo va bien, se acaba de crear un fichero "ejemplo01.exe". En ese caso, podríamos lanzar el programa tecleando
mono ejemplo01.exe
y el mensaje "Hola" debería aparecer en pantalla.
Si en nuestro ordenador está instalado el "Dot Net Framework" (algo que debería ser cierto en las últimas versiones de Windows, y que no ocurrirá en Linux ni Mac OsX), no debería hacer falta decir que queremos que sea Mono quien lance nuestro programa, y podremos ejecutarlo directamente con su nombre:
ejemplo
Si quieres un editor más potente que el Bloc de notas de Windows, puedes probar Notepad++, que es gratuito (realmente más que eso: es de "código abierto") y podrás localizar fácilmente en Internet. Geany también es un alternativa muy interesante, disponible para muchos sistemas operativos.
Si prefieres un entorno desde el que puedas teclear, compilar y probar tus programas, incluso los de gran tamaño que estén formados por varios ficheros, en el apartado 6.13 hablaremos de SharpDevelop (para Windows), y de MonoDevelop (para Windows, Linux y Mac). Si quieres saber cosas sobre el entorno "oficial" de desarrollo, llamado Visual Studio, lo tienes en el Apartado 6.8.
Hay un posible problema que se debe tener en cuenta: algunos de estos entornos de desarrollo muestran el resultado de nuestro programa y luego regresan al editor tan rápido que no da tiempo a ver los resultados. Una solución provisional puede ser añadir "System.Console.ReadLine()" al final del programa, de modo que se quede parado hasta que pulsemos Intro: