Está en la página 1de 15

INTRODUCCION

En 1970 nace un programa conocido como B, diseado en 1970 por Ken Thompson (AT&T), n inspirado en el programa BCP L. En 1972 es Dennis Ritchie disea nalmente C a partir del n modelo aportado por el programa B, la novedad que ofrec C era la ecacia superior gracias a a su diseo basado en tipos y estructuras de datos. n Este nuevo programa nos permite realizar con mayor ecacia una programacin estructurada o 1 , debido a la variedad de (divisin del programa en funciones independientes que se unican) o opciones que nos ofrece, esto sin tener en cuenta la optimizacin de los recursos del ordenador, o lo cual nos ofrece programas mas veloces. La principal ventaja de C es su versatilidad, ya que no es un programa diseado con orientacin hacia algn area en especico. n o u En 1980 surge C++2 de la mano de Bjarne Stroustrup (AT&T), este nuevo lenguaje es una extensin de C, ya que dota de nuevas caracter o sticas entre las que destacan la gran cantidad de funciones y expresiones, adems de la oportunidad de declarar variables en cualquier lugar a del programa. Entre las ventajas mas destacadas por los programadores de este nuevo lenguaje es la mejora en el concepto de herencia, lo cual permite llevar la programacin al nivel de la o programacin orientada a objetos (POO)3 , de esta forma se conquista el terreno de la simulacin o o de eventos. El xito de C++ fue tal que el concepto de prototipos de funciones fue incluido en los diseos e n posteriores de C. No obstante, muchas compa a travs de los aos buscaron disear su propia nas e n n versin de C, lo cual dicult el intercambio de informacin debido a las discrepancias que o o o pudieron surgir entre cada versin; esto llevo a la intervencin de la ANSI (American National o o Standars Institute) en 1983 para crear una estandarizacin del lenguaje C. o En el ao 2000, Microsoft presenta .NET con el lanzamiento de una nueva extensin C#4 n o creado por Anders Hejlsberg, que servir de lenguaje principal de la plataforma .NET. Este a nuevo programa resulta de combinar aspectos de C++ con Java, lo cual le permite llevar la programacin orientada a objetos a un nivel muy superior, ya que facilita la manipulacin de o o 5. clases permitiendo que el programa en s sea parte de una clase
Este es el tipo de programacin que se maneja en el curso o El nombre es debido a que la linea C++ en cdigo denota un incremento en el valor asignado a la variable C o 3 Este tema no es abarcado en el curso 4 C# es una extensin de C + +, de all su nombre que es una abreviacin de C++++ o o 5 Este tema ser tratado en el curso, veremos que una clase es un caso particular de los objetos a
2 1

CAP ITULO

Generalidades

I.1.

Como creo un programa?

Para poder crear un programa en cdigo C, debemos pensar primero en donde lo guardaremos. o Debido a que el sistema operativo que estamos trabajando es Ubuntu, tendremos algunas molestiasrespecto a lo que acostumbramos en Windows, no obstante es solo cuestin de costumbre, o ya que son mas las ventajas que las dicultades que nos ofrece Ubuntu. Enumeraremos los pasos a seguir para evitar confusiones. 1. Lo primero es crear una carpeta en la cual guardar los programas, por ello crearemos la carpeta programas, de este modo no tendremos problemas si no trabajamos todo el tiempo en el mismo ordenador. Para crear la carpeta iremos a la terminal (AplicacionesAccesoriosTerminal), donde escribimos: mkdir programas De este modo hemos creado la carpeta programas en la carpeta personal(ubicada en la seccin Lugares). o 2. Ahora nos dirigimos a la carpeta programas (lugarescarpeta personalprogramas), una vez en ella creamos un nuevo documento de texto. 3. En el documento de texto, escribimos las l neas de cdigo pertinentes y guardamos el o documento con el nombre deseado (sin espacios) y la extensin .c, por ejemplo, si nuestro o programa se llama prog1 la forma correcta de guardarlo es prog1.c. La extensin .c le dice o al sistema operativo que las l neas de texto estn escritas en el lenguaje C. Por ejemplo a escribiremos el siguiente programa1 .
1

Ms adelante analizaremos concretamente cada l a nea del programa

PROGRAMACION Y METODOS NUMERICOS 2

#include <stdio.h> int main() { printf(" hola "); return 0; }

4. Una vez guardado el programa podemos compilarlo2 desde la terminal. Si en la terminal vemos que la parte inicial del texto no muestra la carpeta programas, debemos ingresar a ella, por ello introducimos cd programas Esto nos permite ingresar a la carpeta programas, de este modo podemos trabajar sobre los documentos en ella guardados. Para compilar introducimos alguna de las siguiente l neas. g++ prog1.c -o prog1 g++ -o prog1 -Wall prog1.c Esto si nuestro programa se llama prog1.c, ntese que despus de la instruccin -o.el o e o nombre del programa es colocado sin la extension (.c), esto es porque -o es la parte del compilador encargada de nombrar el archivo ejecutable de nuestro programa; despus de e compilar correctamente prog1.c en nuestra carpeta de archivos es creado el ejecutable prog1, este ejecutable realizar las operaciones indicadas en el programa. a La primer palabra de la linea del compilado es g++, indicando el compilador que estamos usando3 ; se escogi el compilador g++ por su compatibilidad con varias funciones de las o librer bsicas. as a 5. Despus de compilado, debemos ejecutar el programa, de este modo el usuario podr ver e a la tarea que realiza el programa, recordemos que en Ubuntu lo ejecutables no se ejecutan directamente, para ello en la terminal escribimos. ./prog1 Nota Si modicamos el cdigo del programa, debemos guardar los cambios en el documento, o luego ir a la terminal para compilar el programa, de este modo el sistema operativo modica el archivo ejecutable, y despus ejecutamos el programa. e
Entindase por compilar, el proceso que realiza el ordenador para revisar si las l e neas de cdigo introducidas o son correctas en el lenguaje que estamos trabajando 3 Existen diversos compiladores, por ejemplo gcc.
2

PROGRAMACION Y METODOS NUMERICOS 3

I.2.

Como escribo un programa?

Como se prometio en la seccin anterior, analizaremos el programa o #include <stdio.h> int main() { printf(" hola "); return 0; }

La primera l nea es quizs la mas rara de todas, pero no debemos preocuparnos es solo la a declaracin de una librer en clase se hizo una analog entre una librer del programa con o a, a a un cajn de un tocador, por ejemplo si necesitamos una peinilla, debemos abrir el cajn que o o la contiene para poder usarla. En particular la librer stdio.h, nos permite utilizar el comando a printf. Despus vemos la aparicin de int main(), formalmente es la declaracin de una funcin de e o o o naturaleza entero, pero eso sera revisado con mas detalle a medida que avance el curso. Por lo pronto la funcin main es el cuerpo del programa, es decir, se har todo lo que se encuentre en o a su interior (desde {, hasta }). Los s mbolos {} muestran la apertura y cierre de alguna estructura especial, en este caso es la apertura y cierre de la funcin main(). o printf es un comando especial que nos permite emitir mensajes en la pantalla del programa. Debido a la naturaleza de la funcin int main() debemos regresarle algn numero entero, en o u particular le regresamos 0, por ello aparece la l nea return 0;

I.3.
I.3.1.

Algunos comandos importantes


//

Este comando permite escribir un comentario de una l nea, los comentarios son ignorados por el compilador, pero estn a la vista en el cdigo del programa, son utiles si queremos colocar a o nuestro nombre en cada programa, o para recordar la utilidad de las variables, etc. Ejemplo 1 Veamos el programa prog1.c

#include <stdio.h> // Declaracin de la librera o int main() // Declaracin de la funcin main o o { // Apertura de la funcin main o

PROGRAMACION Y METODOS NUMERICOS 4

printf(" hola ");// Letrero de saludo al usuario return 0; // Regreso de un entero a la funcin main o } // Cierre de la funcin main o

I.3.2.

/* */

Los comandos /* , */ hacen que todo lo que se encuentre en su interior sea un comentario, de este modo podemos ignorar un conjunto de l neas completa, su uso mas comn es para que el u programador introduzca una explicacin detallada acerca del funcionamiento del programa. o Ejemplo 2 Como usar comentarios largos en un segmento de programa #include<stdio.h> #include<math.h> /* Esta linea de comandos nos permite hallar el area y la longitud de una circunferencia, el usuario debe digitar el radio para que el programa trabaje. Cabe destacar que pi es una constante que el programa C reconoce */ int main() { double l,a,r; printf("Digite el valor del radio de la circunferencia "); scanf("%lf",&r); l=2*pi*r; // calcula la longitud de la circunferencia a=pi*(r*r); printf("\n La longitud de la circunferencia es: %lf \n",l); printf(" El area de la circunferencia es: %lf \n \n",a); return 0; }

I.3.3.

Tabla de cdigos utiles o


COMANDO ++ +,-,*,/ = a% b && || == <=,>= != UTILIDAD Incrementa el valor numrico asignado a una variable e Disminuye el valor numrico asignado a una variable e Operaciones arimticas usuales e Operador de asignacin igual o Denota el residuo de la division a/b Operador lgico Y, permite hacer conjuncin o o Operador lgico O, permite hacer disyuncin o o Relacin de igualdad o Relacin menor igual y mayor igual, respectivamente o Relacin de no ser igual o

PROGRAMACION Y METODOS NUMERICOS 5

I.3.4.

Extensiones de las variables numricas e


TIPO DE DATO ENTERO PEQUENO ENTERO ENTERO GRANDE REAL PEQUENO REAL REAL GRANDE NOMBRE short int int long int oat double long double MAXIMO 128 32767 2.147.483.647 2126 21023 21023 (puede variar) ASIGNACION % hd %d % ld %f % lf % Lf

Para declarar una variable utilizamos el nombre del tipo de dato deseado. Por ejemplo: int a,b; double c; float z; Ntese que podemos declarar varias variables del mismo tipo en la misma l o nea.

I.3.5.

printf

Este comando de la librer stdio.h es quizs el mas usado junto a su compaero scanf. La a a n semntica de este comando es: a printf(LO QUE ESTA ENTRE COMILLAS ES VISTO POR EL USUARIO); El comando printf nos permite publicar el valor asignado a alguna variable, esto se hace usando la siguiente linea de cdigo. o Ejemplo 3 Publicando un valor al usuario printf(El valor de la variable a es: %d,a); En este caso la variable a es entero, si fuese double debemos cambiar la asignacin por % lf. o Debemos tener muy en cuenta las asignaciones para int y double, ya que son las que mas trabajaremos a lo largo del curso. Podemos publicar varias variables en el mismo printf. Ejemplo 4 Publicando varios valores de distinto tipo al usuario printf( El radio de la circunferencia es r= %d, su area es A= %lf %d,r,A); Cabe destacar que el primer cdigo de asignacin que aparece corresponde a la primera variable o o en aparecer despus de las comillas, y as sucesivamente. En este caso % d corresponde a la e variable r por tanto el radio es entero, mientras %lf corresponde al area representado por la variable A, de donde se concluye que el area es un numero real.

PROGRAMACION Y METODOS NUMERICOS 6

Comandos especiales en el printf CODIGO \n \t \v \ \a FUNCION cambio de interlinea Tabulacin horizontal o Tabulacin vertical o comilla Alerta de error

I.3.6.

scanf

Este comando de la librer stdio.h permite reconocer variables y asignarle un valor en especico, a por ejemplo, si le pedimos al usuario digitar un numero, scanf lo identicara y asignara este numero a una variable, para as poder ser trabajado en el programa, la semntica es: a scanf(Tipo de Variable,&Variable); Un ejemplo ser a: scanf( %d,&a); En la primera parte, entre las comillas vemos el cdigo de asignacin % d, esto permite que o o de antemano sepamos que la variable es tipo entero, sin embargo vemos que el nombre de la variable es acompaado del signo &; esto se conoce como paso por referencia, en pocas palabras, n el compilador asigna el valor numrico a la variable, en este caso a. e Ejemplo 5 Como le digo al usuario que digite un numero entero para que este sea usado en el programa? int a; printf("Digite un numero entero"); scanf("%d",&a);

Esta l nea hace que al usuario en pantalla le aparezca el letrero digite un numero , el programa se detiene hasta que el usuario introduzca un numero y luego pulse Enter. Si pedimos dos numeros al usuario, tendremos que escribir dos veces el scanf asignndolo a a variables distintas, claro esta solo por buena presentacin del programa. o Nota En el ejemplo anterior se le dijo al usuario que digite un numero entero, sin embargo nada garantiza que el nos digite un numero de otra naturaleza, mas adelante veremos como evitar problemas de este tipo.

PROGRAMACION Y METODOS NUMERICOS 7

Ejemplo 6 Como le digo al usuario que digite un numero entero para que este sea usado en el programa, y adems mostrarle al usuario cual fue el numero que el nos dio para vericarlo? a int a; printf("Digite un numero entero"); scanf("%d",&a); printf("El numero digitado fue %d",a); Nota No sobra destacar que en el printf la variable no va acompaada de &, ya que estamos n publicando su valor pero no lo estamos modicando

Ejemplo 7 Como le digo al usuario que digite dos numeros enteros para que estos sean usados en el programa, y adems mostrarle al usuario los numeros que el nos digito para vericarlos? a Para este n tenemos dos opciones: OPCION 1 int a,b; printf("Digite dos numeros enteros"); scanf("%d%d",&a,&b); printf("Los numeros digitados fueron. %d \t %d",a,b);

OPCION 2 int a,b; printf("Digite el primer numero"); scanf("%d",&a); printf("Digite el segundo numero"); scanf("%d",&a); printf("Los numeros digitados fueron. %d \t %d",a,b);

Los dos programas realizan la misma labor, e incluso muestran el mismo resultado al usuario. La diferencia radica en las necesidades del programador. Si el programador desea escribir lo menos posible usar la opcin 1, sin embargo si el programador desea trabajar de manera mas a o ordenada y estructurada utilizar la opcin 2. a o Nota Personalmente, considero mejor la opcion 2 ya que es mucho ms clara, adems permite a a reutilizar el cdigo como ser visto ms adelante. o a a

CAP ITULO

II

ESTRUCTURAS DE CONTROL

Las sentencias de un programa en C se ejecutan secuencialmente, es decir, cada una a continuacin de la anterior empezando por la primera en aparecer. Para poder modicar un poco el o orden para satisfacer nuestras necesidades contamos con las estructuras de control. Las primeras son las condicionales que analizaremos son aquellas que permiten el cumplimiento de ciertas condiciones previas, las segundas son los bucles o ciclos los cuales permiten trabajar un grupo de instrucciones un numero dado de ocasiones mientras se tiene la posibilidad de modicar algunos valores.

II.1.
II.1.1.

CONDICIONAL
if

Las sentencias del tipo condicional son las mismas que se han analizado en los cursos preliminares, como el de fundamentos. Por ejemplo si llueve no saldr de casa; esta sentencia tiene como e condicin la aparacin de la lluvia, la consecuencia ser la no salida de casa. o o a Nota Cabe destacar que en la frase del ejemplo, si no salgo de la casa no implica que este lloviendo. Este tipo de sentencias se manejan con el operador condicional if. la semntica de este operador a es: if (condicin) o { sentencia 1; sentencia 2; . . . sentencia n; }

PROGRAMACION Y METODOS NUMERICOS 9

Funciona de la siguiente manera, si la condicin se satisface (es decir, es verdadera) se ingresa o en el if y se siguen las sentencias que en l se encuentran. e En caso de que la condicin no se satisfaga, el compilador salta hasta la l o nea de cierre del operador condicional (es decir, el compilador pasa a la l nea siguiente al } correspondiente al if). Ejemplo 8 Como funciona el operador if #include <stdio.h> int main() { int a; a=0; if(a<0) { printf("a es negativo"); } if(a>0) { printf("a es positivo"); } return 0; }

Debido a que en el programa a = 0, las condiciones a < 0 y a > 0 no se satisfacen, por esta razn el compilador pasa automticamente a la l o a nea return 0;. if else Es util en ocasiones contar con una ejecucin en caso de que la condicin inicial no se satisfaga. o o La semntica es la siguiente a if (condicin) o { sentencia 1; . . . sentencia n; } else { sentencia n + 1; . . .

PROGRAMACION Y METODOS NUMERICOS 10

sentencia n + m; } Si la condicin propuesta en el if es cierta, se ejecutan las n sentencias propuestas, y se ignora o lo relacionado al else, es decir, pasa a la l nea siguiente a la sentencia n + m. Si la condicin del if es falsa, se ingresa a las sentencias propuestas en el else, en este caso se o ejecutar las sentencias n + 1, , n + m an if anidados Las sentencias if pueden incluir otros if dentro de sus sentencias, por esta razn se les conoce o como anidados. Un ejemplo concreto ser las l an neas

if (a >= b) { if (b != 0) c = a/b; } Vemos que la primer condicin dice a b, para poder efectuar una division de tal modo que el o resultado sea mayor que 1, sin embargo para poder dividir se requiere que el denominador sea distinto de cero, es decir b = 0. Nota Si una estructura de control cuenta con una sola sentencia en su interior no es necesario colocar los corchetes { , } ya que el compilador ejecutara unicamente la l nea inmediatamente siguiente a la aparicin de la estructura de control. o Claramente esta linea de comandos se puede escribir mucho mas fcilmente como: a if (a >= b && b!=0) c = a/b; Podemos tambin decir que avise al usuario cuando b sea nulo, para ello colocamos e if (b==0) printf("b es negativo, por ello no se puede efectuar la division"); Nota Ntese que en la condicin del if anterior aparece b == 0, en lugar de b = 0. porque? o o

PROGRAMACION Y METODOS NUMERICOS 11

II.1.2.

Switch

La familia de las condicionales se extiende con la sentencia switch, ya que nos permite mltiples u ramicaciones manipuladas desde una unica estructura. La semntica de la sentencia switch es a la siguiente: switch (expresin) o { case 1: sentencia 1; . . . sentencia n; break; case 2: sentencia 12 ; . . . sentencia p2 ; break; case 3: . . . case m: sentencia 1m ; . . . sentencia rm ; break; } El funcionamiento es similar a las sentencias if else, se ingresa en la expresin del switch (noro malmente es una variable), se mira si toma los valores descritos en cada caso, si toma el valor asignado en algn caso entonces entra a realizar la familia de sentencias en el consignadas. u Nota El comando break hace que se salga del case, con lo cual la estructura condicional se cumple. Esto queda mucho mas claro en un ejemplo. Ejemplo 9 El usuario tiene un programa que le determina el numero de dias que tiene cada mes, para ello el programador le diseo un programa de tal modo que a cada mes le corresponde n un numero asignado por el orden de aparicin en el ao o n switch (mes) { case 1: //Enero No-dias=31; break;

PROGRAMACION Y METODOS NUMERICOS 12

case 2: //Febrero No-dias=28 //ao no bisiesto n break; . . . case 12: //Diciembre No-dias=31; break; default: printf(El ao tiene 12 meses en el calendario que manejamos); n break; } Nota El comando default considera todos los valores posibles no consignados en los valores constantes que toma cada case. Nota En ausencia del comando default, el programa funciona similar salvo que en caso de digitar un numero no correspondiente a algn mes, el programa continua en la l u nea siguiente al } que concluye el switch.

II.2.
II.2.1.

BUCLES O CICLOS
for

For es el reyde los bucles ya que es el ms fcil de trabajar, convirtindolo en el mas utilizado a a e en muchos de los lenguajes de programacin, en particular en C. Su semntica es: o a for (inicializacin; condicin de control; modicacin ) o o o Esto se explica mejor con un ejemplo.

int i; for(i=1; i<=5; i++) { printf("El valor de i es %d \n",i); } Esta l nea de comandos produce el resultado: El El El El El valor valor valor valor valor de de de de de i i i i i es es es es es 1 2 3 4 5

PROGRAMACION Y METODOS NUMERICOS 13

El bucle for funciona de la siguiente manera: La inicializacin marca el numero que toma el contador (en este caso i) al iniciar el ciclo. o La condicin de control marca el l o mite hasta el cual llega el contador La modicacin i + +, hace que el valor del contador var de este modo se da mayor control o e, sobre la cantidad de ingresos al ciclo que se va a realizar. Sin embargo, aun as es posible tener ciclos innitos. Ejemplo 10 Encabezado de un ciclo innito usando for: for (i = 1; i <= 0; i + +) Es fcil darnos cuenta que el ciclo ser innito ya que i toma los valores 1,2, . Lo cual a a har que i no sea menor o igual a 0. a

II.2.2.

while

Esta sentencia es muy verstil ya que permite ejecutar repetidamente un bloque de sentencias, a mientras se satisfaga una condicin denida en su encabezado. La semntica es la siguiente: o a while(condicin de control) o { sentencia 1; sentencia 2; . . . sentencia n; } Funciona de la siguiente manera: Si la condicin de control se satisface, entra en el ciclo y ejecuta las n sentencias, al culminar o llega al }, pero en lugar de continuar en la siguiente l nea, regresa a la condicin de control, si o esta se satisface vuelve a ejecutar las n sentencias, y as sucesivamente. Si en algn momento del ciclo la condicin de control ya no se satisface, el while termina las n u o sentencias, verica la sentencia de control, y dado que ya no se cumple, pasa a la l nea siguiente al } que cierra el ciclo. Si la condicin de control no se satisface, el compilador ignora todo el ciclo, es decir, pasa a la o l nea siguiente al } que cierra el ciclo. Este manejo de los ciclos es bastante util para construir menus, ya que si el usuario digita un numero que no corresponde al deseado, no es necesario sacarlo del programa para volverle a mostrar las instrucciones, es cuestin de colocar en la condicin los posibles numeros que o o tenemos, si el numero digitado no coincide con ellos debemos mostrar el menu. Sin embargo, se constituye en un arma de doble lo ya que si se coloca una expresin tautolgica o o en la condicin de control, el ciclo no para de ejecutarse, por ejemplo un encabezado con una o

PROGRAMACION Y METODOS NUMERICOS 14

condicin como while(1 < 2). Esto es debido a que 1 < 2 se cumple sin importar lo que o realicemos. Otro problema es cuando dejamos la condicin a cargo de una constante que no se modica. o Ejemplo 11 Un ciclo que jamas termina

int i=1; while(i<=3) { printf("El valor de i es %d \n",i); printf("Veamos que sucede \n"); } Es claro que i no modica su valor, por tanto el ciclo se ejecutara siempre ya que la condicin o de control ser verdadera todo el tiempo. La forma correcta ser escribir a a

int i=1; while(i<=3) { printf("El valor de i es %d \n",i); printf("Veamos que sucede \n"); i++ }

De este modo al mostrar los dos letreros al usuario el valor de i se incrementa, lo cual garantiza que en algn momento i deje de ser menor o igual a 3, por tanto la condicin de control ser falsa u o a despus de dos iteraciones. e Nota Los encabezados de las estructuras de control no llevan ; ya que son funciones especiales del programa que se ejecutan, mas no son sentencias a realizar.