programacion con ejemplos en “lenguaje c” (ansi) · pdf file6.3 ejercicios 30 7....
TRANSCRIPT
1
Programacion con ejemplos
en “Lenguaje C”
(ANSI)
Elizabeth Fonseca Chavez
Mario Alfredo Ibarra Carrillo
Octubre 2012
2
INDICE
1. instalacion compilador 4
1.1 codeBlocks 4
1.2 gcc-UBUNTU 14
2. instalacion en Celulares Android: C4droid 15
3. Mi primer programa 16
4. Errores Comunes 17
5. Practica 0. Programa en Lenguaje C 21
6. Practica 1. Procesos Basicos: Secuencia 23
6.1 comando: printf 23
6.1.1 printf con datos 24
6.1.2 Errores en printf 26
6.2 comando: scanf 27
6.2.1 Errores en scanf 29
6.3 Ejercicios 30
7. Practica 2. Procesos Basicos: Seleccion 30
7.1 Bloque if simple 31
7.2 Bloque if doble 32
7.3 Bloque switch 33
7.3.1 Bloque switch con caracteres 35
7.4 Ejemplo Aplicado 36
7.5 Errores 37
7.6 Ejercicios 37
8. Practica 3. Procesos Basicos: Repeticion 38
8.1 Bloque for 39
8.1.1 Ejemplo1 39
8.1.2 Ejemplo2 40
8.1.3 Ejemplo3 41
8.1.4 Ejemplo4 42
8.1.5 Aplicacion con for 43
8.1.6.for infinito 43
8.1.6.1 ejemplo for infinito con menu 46
8.1.8 Errores 46
8.1.9. Ejercicios 46
8.2 Bloque while 47
8.3 Bloque do-while 48
8.4 Errores 48
8.5 Ejercicios 49
9.Practica 4. FUNCIONES: NIVEL BASICO 50
9.1 Ejemplo de Aplicación 51
9.2 Errores 53
9.3 Ejercicios 53
10. Practica 5 ARREGLOS 54
10.1 Ejemplo1 55
10.2 Una coordenada 55
10.2.1 basico1 56
10.2.2 basico2 56
3
10.2.3 potencial 57
10.3 dos coordenadas 59
10.4 Ejemplos Aplicativos 60
10.4.1. Aplicado 1. Imprimir matriz 61
10.4.2 Suma de matrices 63
10.5 Errores 64
10.6 Ejercicios 64
11. interrupciones 66
11.1 Ejemplo1 66
11.2 Ejemplo2 67
11.3 Ejemplo3 68
11.4 Ejemplo1 con Arduino 68
12. Bibliografia 69
Impreso en Mexico 2013
Editorial Cathedral IF
Autores:
Elizabeth Fonseca Chavez
Mario Ibarra Carrillo
Todos los derechos Reservados.
4
1. Instalar Compilador.
1.1 Instalacion de CodeBlocks.
En un buscador colocamos la palabra clave: codeblocks, y esnontramos que es la primera
direcion propuesta: www.codeblocks.org
En la pagina te proponen el software para un tipo de maquina que tengas, windows alguna
version, linux, mac. Escoge la suya propia. Verique que traiga el compilador ; para windows es
mingw.
Ya descargado, lo instalamos en nuestra Maquina.
A continuacion muestro como el instalador detecto en mimaquina que ya tenia el compilador
instalado. (yo instale antes DEVC++ tambien es un ambiente para correr el compilador pero ya
no lo actualizan)
5
Ya todo listo podemos comenzar.
Nos pregunta, le decimos que YES que se asocie su extensión con cualquier archivo de
extensión c o c++.
6
Finalmente, tenemos este ambiente de trabajo listo.
Todo programa en C, en DEVC++ o en CodeBlocks debe estar dentro de un proyecto. Así es
que creamos un nuevo proyecto.
7
El nuevo proyecto debe buscarse que sea en una “ Console Application” en lenguaje C.
Después solo oprimimos tecla NEXT
9
Colocamos un nombre de proyecto: SIN espacios, debe iniciar con letras; máximo 8
caracteres. (Ya no es una obligación pero es buena práctica). Colocarlo en el directorio por
default o escoger otro.
Por ejemplo yo le llame “prueba1”
10
EN esta ventana no me pregunto NADA solo aplico botón de finish. (Porque es conveniente
estas opciones)
Nos muestra esta ventana final
11
Observemos en la parte izquierda, tenemos los folder del espacio de trabajo (Workspace) y
abajo proyecto “prueba1”, y más abajo “Sources” con un signo más “ +”, darle click al más.
Aparece “main.c “ (nuestro programa fuente ) y doble click a éste. Aparecerá a la derecha la
plantilla de código inicial en lenguaje C
Y entonces se vería en general de esta manera:
12
La parte donde vamos a trabajar es en donde tenemos la ceja que dice “main.c “ ( a la derecha)
Antes de comenzar a escribir el nuevo código, se debe checar si se instaló bien y todo
funciona. 1. Compilaremos este programa (el software checa sintaxis: si está bien escrito, y
luego lo pasa a lenguaje de maquina: ceros y unos), 2. Después CORREMOS o ejecutamos las
ordenes contenidas del programa. En el menú “Build “Y submenú desplegable: “Buil an run”.
Otra forma es solamente apretando la tecla F9 .
13
La corrida aparece en una caja de dialogo NEGRA en este caso dice: HELLO WORLD!
Si todo funcionó como aquí continuemos. Si no, se debe desinstalar y checar que se instaló
con el compilador, búscarlo y volver a instalar. Si no; se puede instalar devc++ y realizar lo
mismo que en codeblocks, o después de DEVC intentar instalar otra vez codeblocks. Otros
compiladores antiguos TC.exe, Borlandc.exe que también se pueden bajar de la red.
14
1.2 gcc – UBUNTU
Aquí no hay nada que instalar, ya se tiene el compilador gcc. Solo abre una terminal.
Con “gedit” se escribe el programa en C, en la terminal se cambia al directorio donde está el
código fuente. Para compilar se escribe gcc nombre del programa pero se escribe después
guion con la letra “o”, de output, y al final el nombre que se desea para ejecución. En este
ejemplo, se llamo prueba.c y se desea que el ejecutable se llame prueba también
Entonces se escribe:
gcc prueba.c –o prueba
para correr el programa se escribe un punto , un a diagonal y el nombre del ejecutable:
./prueba
Y listo
15
2. Instalación en Celulares Android.
En los teléfonos celulares funciona muy bien el compilador C4droid, aquí solo se crea un
programa en C, no se requiere colocarlo dentro de un proyecto. Solo se escribe el código,
salvarlo, compilarlo y correrlo.
Todos los programas dentro de este libro siguen las reglas ANSI, por lo tanto se pueden correr
en cualquier celular que contenga el sistema operativo android. El programa se puede bajar
de google market o play store.
MAC tablet: CodeToGo, u otros.
16
3. Mi primer programa
En el comando printf(“Hello Word\n”);
Sustituyamos entre las comillas los datos “”, escriba “Hola mundo” Solamente.
Siempre antes de correr un programa es conveniente guardar nuestro programa. Tenemos un
icono que parece un disquete antiguo, este es para guardar. Después de escribir el programa,
siempre sálvalo.
El código debe quedar como a continuación.
Ahora solo correr el programa como ya lo habíamos visto, apretar nada más la tecla F9.
Si aparece la pantalla negra de la siguiente manera, está PERFECTO!!.
17
Debajo de las palabras “Hola Mundo” lo que diga es información del CODEBLOCKS, que no nos
importa por el momento.
4. Errores Comunes
Es importante valorar la parte de los errores, ya que así se aprende mejor un área. Veamos a
continuación los errores más comunes.
a) DESPUES DE CADA COMANDO DEBE TERMINAR CON UN PUNTO Y COMA.
Observe el programa que se muestra a continuación, en los mensajes abajo “Message”
Dice que se esperaba un ’ ; ’ antes de ‘return’
Si se olvida un punto y coma, así
avisa el compilador.
18
b) Los comandos en general están escritos en minúscula. Es diferente Printf, printfF,
prinTf, pRintf, PRINTF, etc. Dice referencia No definida, porque no se parece a printf
c) Las funciones main(), func() , main(void) donde todas las funciones básicas terminan
con paréntesis encontrados; debe colocarse sus comandos entre llaves: par de llaves
para Abrir y Cerrar . main() inicia con llave { y termina con llave }.
19
Si se olvida, el compilador te dice: se espera declaración o estado de terminación de esa
entrada.
d) No puedes correr una modificación a tu programa si no has cerrado la corrida anterior.
Si La opción de “build and run”: para correr el programa, no está iluminada: Debes
cerrar la pantalla negra de corrida anterior y se activan otra vez las opciones.
20
Corregidos los errores. Checar que YA no dan errores, se genera la pantalla negra, y no existe
algún aviso de ERROR o Peligro (Warning); significa que ya corre exitosamente.
21
5. Practica no. 0. Programa en lenguaje c ANSI C
(ANSI C es un estándar publicado por el Instituto Nacional Estadounidense de Estándares)
Debe contener un programa en lenguaje C esta estructura Básica:
• Cabeceras: donde se tienen funciones ya hechas que hacen algún
proceso. #include <cabecera.h> Aquí tenemos dos cabeceras:
stdio.h desglosando este std = estándar io es de i(input) y
o(output); .h significa header o cabecera. Por lo tanto es una
cabecera estándar de entradas y salidas. (NECESARIA para
empezar)
stdlib.h desglosando std= estándar lib= librería.=>librería
estándar (opcional)
• Programa principal: int main(void) { } (llaves de función main)
• Regreso de function cero: return 0; antes de cerrar la llave de
main.
• Dentro de las llaves se colocan todos los comandos: comando es
una orden que debe ejecutar el compilador terminado por un punto
y coma “;” Ejemplo: printf(“letrero”);
• El lenguaje C es sensible a las letras mayúsculas y minúsculas: el
comando que manda a imprimir letreros es printf(“letrero”); no
Printf(“letrero”); ni printF(“letrero”); Siempre minúsculas.
Un programa general contiene una función principal “int main(void) { }” y
varias funciones secundarias. A continuación se tiene un ejemplo con una
sola función secundaria. (El tema de funciones se explicara después)
23
6. Practica no. 1. Procesos Básicos: Secuencia
Los procesos de flujo básico en programación estructurada son: SECUENCIA, SELCCION Y
REPETICION.
Aquí se comenzara a trabajar solo con procesos en secuencia.
Un proceso en secuencia es donde el primer comando que aparece lo ejecuta, luego el
segundo que aparece, y así consecutivamente. Los comandos pueden repetirse n veces
conforme se requiera.
6.1 Comando: printf
El comando printf signfica print= imprimir f= formato, puede imprimir letreros, y variables
con algún formato especifico.
Aquí vemos el comando printf con un formato adicionado: \n
Este formato permite saltarse a la línea siguiente, puede ponerse en cualquier parte del letrero
tantas veces como sea necesario. Se le pide al alumno modificar su programa con estos
ejemplos y verificar si la corrida da igual a la mostrada a continuación.
A) B)
24
C) D)
Ejercicio: realiza un programa que aparezca así:
6.1.1 printf con datos
Se tienen datos o valores de tipo “constante” o tipo “variable” los más comunes a usar. Los
tipo constante son llamados así por que no cambian en un proceso dado, ejemplo pi 3.1415;
mientras que la mayor parte de las veces tenemos datos variables, es decir que van cambiando
su valor en los procesos; ejemplo x=0,1 2 3… n-1.
Podemos mandar a imprimir variables dentro del letrero de “printf”.
Los tipos de variables más comunes son enteros (int) ,reales (float),y carácter(char), el resto
de tipos de variables se verán después.
En Lenguaje C, debemos primero declarar las variables diciendo de qué tipo de dato es, luego
inicializarlas con un valor, y finalmente colocarlas dentro de un proceso donde su valor se
cambie.
Se tienen dos tipos de variables. Globales y locales. Estas trabajan como su nombre lo dice, las
globales en todo el programa, dentro de la función principal y sus funciones secundarias.
Mientras que las locales existen de manera restringida, solo dentro de la función donde fueron
declaradas.
Las variables globales son las que se declaran antes de iniciar el programa principal.
Así como las variables locales se declaran dentro de la función donde queremos que funcione.
25
Una consecuencia de esto es, si el programa es chico, con solo el programa principal (main), no
se notara diferencia alguna en resultado. Pero si el programa contiene la menos una función
secundaria y se declara la variable dentro del programa principal, y se UTILIZA en la función
secundaria, el compilador te diría que no está declarada (no existe un registro de memoria).
Para mayor entendimiento, en la parte de funciones se resolverá alguna duda, y se
profundizara el tema.
Continuamos en “printf”. Ya dijimos donde las podemos declarar y de qué tipo, es decir si
deseo utilizar una variable de tip o entero declaro int nombre; ejemplo int x; si lo que se
utilizara es de tipo real (o sea valores fraccionarios) declaro float x; o si el valor que entrará es
de algún carácter del alfabeto seria, char x;
Después debemos inicializarlas con algún valor dentro de la función de interés.
Para darles un valor inicial se les ASIGNA un valor, se utiliza el signo de igual “=”, que no es lo
mismo que en matemáticas, Aquí el valor de la derecha del signo “igual”(el valor deseado) se
guarda en el registro de memoria (con nombre de variable dado) que está a la izquierda del
signo “igual” de la línea. Es decir si k=7; el siete se guarda en un registro de memoria llamado
“k”.
Ejemplo
Note que al declarar el carácter debe colocarse entre apóstrofos.
Ya se declararon, ya se inicializaron, ya están listas para utilizarse.
Podemos en este momento imprimir los valores antes de procesarlos para que se ejecute un
cambio en su valor.
Para imprimir una dato dentro del letrero de printf se antecede de un % y luego se coloca una
letra que coincida con el tipo de dato con que fue creado. Por ejemplo si la variable se declaro
como entera se escribirá en el letrero %d, si es real %f o si es carácter %c. Veamos los tres
ejemplos completos, que ahora si se pueden copiar independientemente y correr.
26
Nota: no cometa el ERROR de escribir los tres programas dentro de un mismo proyecto;
Dentro de un proyecto solo puede haber un programa principal. Primero cree un nuevo
proyecto de consola y escriba el primer programa, corralo; después cierre el proyecto y
nuevamente cree otro de consola, escriba el segundo programa, corralo y al terminar cierre su
proyecto; y nuevamente cree otro proyecto para el tercer programa.
Ahora podemos empezar a realizar algún proceso de cambio con las variables y mandarlas a
imprimir.
Note que para el programa donde la variable es entera antes valía cero y después de sumarle 1
a esa misma variable ahora vale 1.
Note que para el programa donde la variable es real al inicio valía 1.3 y ahora multiplicada por
1 sigue valiendo 1.3.
Y finalmente note que para el programa con la variable carácter, antes era ‘a’ y ahora es ‘b’.
6.1.2 ERRORES en printf
Si no coincide el formato dentro del letrero con la declaración. Los resultados no son lo
esperado. Observemos las tres imágenes siguientes con resultados erroneos
27
6.2 scanf
El comando scanf , viene de scan que significa escanear, explorar y f de formato.
El comando scanf permite escanear y guardar el dato en un registro de memoria DADO DEL
USUARIO, para que después pueda utilizar esa variable.
El formato de trabajo es asi scanf(“%tipo de dato”,&nombre de variable);
¿Como se llena? El tipo de dato puede ser entero= int, real=float, carácter=char, etc. Y el
nombre de la variable es el puesto en la declaración de tipo.
Ejemplo: Se desea pedirle al USUARIO un dato de tipo entero, (debe haberse declarado antes
la variable de ese mismo tipo)
El amperson (i inglesa) junto al nombre de la variable es de vital importancia, si se olvida no se
guarda el valor del usuario en el registro de memoria, y no se podrá utilizar ese valor
Se muestra a continuación el ejemplo completo, primero declaramos la variable a utilizar,
luego la inicializamos, después note que se coloco un printf para avisar al usuario de que se
espera que escriba un valor de tipo entero, luego tenemos el comando scanf recuperando el
valor dado por el usuario y finalmente se manda a imprimir la variable con printf.
28
Veamos los ejemplos restantes para real y carácter.
Note que debe estar acorde la declaración de tipo de variable con el formato en scanf y printf.
29
6.2.1 Errores en scanf.
Si no hay compatibilidad de tipo de datos
Si se olvida el amperson. Es el más notorio, produce un error donde la máquina no sabe qué
hacer, si aparece esta ventana de error, solo debemos apretar no enviar y aumentar el
amperson.
30
6.2.2. Ejercicios.
1) Pedir un número entero al usuario y que se imprima en pantalla, después que el programa
pida una letra y se imprima en pantalla, finalmente pedir un número real al usuario y mandar
su resultado también en pantalla. Debe estar este código dentro de un solo main().
7. Practica no. 2. Procesos Básicos: Selección
Selección es el proceso que permite realizar restricciones al flujo de datos. Las restricciones se
ejecutan con condicionales que sea verdad. Es decir,
Continuará al proceso siguiente si la condición es verdadera.
La condición generalmente es de dos entes a comparar ejemplo: x es mayor que 3, x es menor
que y, x es igual a z, etc.
Para comparar si son iguales x==y
Son dos iguales que significa comparar igualdad. Recuerde: Un igual es para
asignar valores a las variables.
Los más comunes son: mayor que >, menor que <, diferente ¡=, menor igual que <=, mayor
igual que >=, AND &&, OR ||, etc.
Tenemos dentro de un proceso de selección una clasificación: bloque if simple, bloque if doble
y bloque de switch.
Veamos cada uno a continuación:
36
7.4 Ejemplo aplicado
Nota de este ejemplo aplicado:
1. se declararon variables para hacer la suma (resta) pedida “a” y “b”, se inicializaron con
un valor arbitrario.
2. Se declaró la variable “c”, para guardar la operación pedida.
3. Se colocaron llaves en cada caso (case) para más de un comando. Estos dos
comandos fueron 1) la operación suma 2) mandar a imprimir el resultado.
37
4. Se mando a imprimir varias variables en un solo printf,
El primer %d que aparece le corresponde a la variable a, el segundo %d a b y el tercero
a c., AL RECUPERAR LOS DATOS DE LOS REGISTROS DE MEMORIA QUEDARIA ASI
7.5 Errores
No olvidar escribir el break; al final de cada case.
Si el case es numero se escribe directamente y si el un carácter (NO grupo de palabras), es con
apóstrofos.
7.6 EJERCICIOS
1) realiza un programa utilizando switch para que solo aparezcan letreros “es mayor” o “es
menor”. Si oprimimos 1,2 o 3 imprime “es menor” y si se oprime 4 o 5, imprima “es mayor”.
(Solo debes resolver el problema dado lo que se vio exclusivamente aquí)
38
8. Practica no. 3. Procesos Básicos: REPETICION
Un proceso de repetición es aquel que se repite varias veces hasta que la condición sea FALSA.
Dentro pueden ir cambiando variables.
39
En un proceso en repetición tenemos los bloques siguientes:
- for
- while
- do-while
8.1 BLOQUE DE FOR
El bloque de for contiene tres órdenes separadas por puntos y comas.
La primera orden es inicialización de la variable a variar (ya debe haberse declarado)
Por ejemplo i=0; i=7; j=9 etc.
La segunda orden es la condición que DEBE SER VERDADERA PARA QUE SE SIGA REPITIENDO EL
CICLO.
Ejemplo i<5; j<9, etc.
Y finalmente la iteración i++ esto es igual a i=i+1, este forma es muy utilizada por que es un
ACUMULADOR. Si i=0, y se pasa a esta orden será i=0+1=1, y si se vuelve a reciclar esta orden
daría i=1+1=2 y luego i=2+1=3, después i=3+1=4.
Este acumulador da un conteo Ascendente. Si inicializa con i=0, daría 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
etc. Hasta que la condición se haga falsa.
Por supuesto podemos realizar conteos descendente si inicializamos en i=7 y aplicamos la
iteración i=i-1 (i++), daría 7, 6, 5, 4, 3, 2, 1, 0 etc. Hasta que su condición se haga falsa.
Veamos ejemplos.
8.1.1 Ejemplo1
POR EL MOMENTO, Se manda a imprimir la variable “i”, solamente para ver como se presenta
el conteo.
Si se inicializa con 0, y se repite el ciclo hasta que i<3, se incrementara la variable i=i+1 (i++).
El for dado seria for(i=0; i<3; i++) veamos cuatas veces se repite
Si i=0, 0<3=>verdadero. Por lo tanto ejecuta las ordenes (printf) después incrementa uno
(i++) es decir i=0+1=1
Si i=1, 1<3=>verdadero. Por lo tanto ejecuta las ordenes (printf) después incrementa uno
(i++) es decir i=1+1=2
Si i=2, 2<3=>verdadero. Por lo tanto ejecuta las ordenes (printf) después incrementa uno
(i++) es decir i=2+1=3
Si i=3, 3<3=>FALSO. Por lo tanto NO ejecuta las ordenes (printf) después NO incrementa uno
(i++) Y se sale del ciclo.
40
8.1.2 Ejemplo2. Realicemos otro ciclo. Se desea un conteo de 7-9
Inicializa en 7 y se repetirá mientras i<10 en incrementos de uno.
Este mismo ejemplo anterior podría realizarse con la condición de esta manera:
i<=9 cuando i menor o igual que 9
41
Ejemplos de decrementos
8.1.3 Ejemplo 3. Que presente este conteo 5 4 3 2
Inicializo con 5, hasta que i>1(nota que el signo es mayor no menor) y luego decremento i—
42
8.1.4 Ejemplo 4. Que presente este conteo 7,6
Recuerda de irlos escribiendo y corriendo en su compilador.
43
8.1.5 Aplicacion con for
8.1.6 for infinito
Ahora utilizaremos el for pero con los argumentos fuera
Se escribe for(; ;) es decir for paréntesis punto y coma, punto y coma cerrar paréntesis
(opcional ) Se debe colocar la inicialización afuera del bloque for.
(opcional ) Debe contener un if para salirse del ciclo (Esta condicional nótese que NO es para
mantenerse dentro del ciclo sino para salirse del ciclo)
(opcional) Debe contener una variable que ejecute un conteo ascendente o descendente
Veamos un ejemplo.
46
Errores:
El condicional equivocado for(i=0; i>4; i++)
La iteración inadecuada for(i=0 i<4;i--)
La inicialización no funcional for(i=5; i<4;i++)
La concordancia CORRECTA para este ejemplo es for(i=0;i<4;i++)
Que realizara un conteo de 0,1 2 y 3
Ejercicios:
1) Corre cada programa (falta completar el programa COMPLETO) de a continuación, cual
realiza un bloque infinito, cual no imprime nada, cual se salta el bloque (no cumple la
condición).
Sugerencia: arma el programa completo para cada for, correlos, observalos y anota.
1. for(i=0;i >5;i++)
2. for(i=7; i<4;i- -)
3. for(i=1; i<2; i++)
4. for(i=9; i>3;i++)
2) Realiza otros tres ejercicios que no funcionen y se diga porque.
3) Realiza tres ejercicios que SI funcionen, que cuenten de 0-3, 7-2 y 1 , todos utilizando
for.
48
8.3 BLOQUE DE do-while
8.4 Errores
Condición SIEMPRE falsa, Condición SIEMPRE verdadera, Variables cambiadas por ejemplo i
por j.
Si la condición se hace falsa. Es el más común de los errores en procesos de repetición.
49
8.5 Ejercicios. Realiza tres ejercicios , que cuenten de 0-3, 7-2 y 1 , todos utilizando
While y los mismos utilizando do-while..
50
9. Practica no. 4. FUNCIONES: NIVEL BASICO
Un programa modular está dividido en módulos estos pedazos de programación generalmente
están dentro de funciones. (Antes subrutinas)
Las funciones sirven para ORGANIZAR un programa. Trabajar con funciones, significa trabajar
organizadamente. Si hubiese un error dentro de una función, es más fácil detectarla.
Las funciones deben declararse como si fueran variables. Todas las funciones deben aparecer
dentro del main() con punto y comas para ser llamadas.
TODAS LAS FUNCIONES (ASI COMO EL MAIN() ) LLEVAN PARENTESIS ENCONTRADOS AL FINAL:
main(), fuinion1(), sumas()
(EN Forma general, adentro de los paréntesis, es posible llevar argumentos, para los datos de
entrada, y para regresar el resultado es con el comando return() escribiendo su salida dentro
del argumento: Este nivel no se verá en ese párrafo, sino en más avanzados, ya que no es
necesario aun.)
En nivel básico, las funciones solo irán con paréntesis encontrados y regresaran cero. Como la
función main().
Por ejemplo la función suma()
Veamos un programa completo donde se organiza que primero sume y luego reste; se tienen
dos funciones.
1) se declaran como enteras y como variables globales
2) se mandan a llamar dentro del main() con su nombre paréntesis encontradas punto y coma
3) la función SIEMPRE se escribe afuera DEL MAIN. (SOLO SE MANDA A LLAMAR ADENTRO)
52
9.1 Ejemplo de aplicación. Generalmente son muy utilizadas en menus, se
piden dentro del switch.
Checa resultados por casos.
53
Si se escoge opción 1: suma, si escoge opción 2: resta, si escoge opción 3 imprime un letrero.
9.2 Errores. Si declaramos las variables como locales en el main(void), no se ven en
suma() ni en resta()
9.3 Ejercicios. Realiza una función que calcule el cuadrado de un numero, y otra que
en encuentre el mayor de tres números, utilizar funciones, switch.
54
10. Practica no. 5 ARREGLOS
Arreglos significa trabajar con un arreglo o grupo de INDICES para guardar y recuperar los
datos más cómodamente. Este es un tipo de dato complejo.
Trabajar con arreglos nos hace economizar en el esfuerzo de escribir, ya que generalmente es
más compacto.
Tenemos tipos de datos simples y complejos.
Los simples son (UNA COORDENADA de) enteros, reales, carácter, etc y
Los complejos son los arreglos(X COORDENADAS ) de enteros, reales, caracteres, etc..
Un tipo de dato simple se crear en el espacio de memoria con una coordenada: el nombre de
la variable que se le dio. Un tipo de datos COMPLEJO, se le llama complejo solamente porque
requiere más de una coordenadas para guardar el dato en la ubicación deseada.
Hablemos de ubicación de casas dentro de un mapa y un taxi.
Si la casa está en un rancho, generalmente llegamos a la casa si solo le decimos al taxista “al
rancho X, por favor”.
Si estamos en la capital de un PAIS le decimos las coordenadas necesarias que son más de
una, las contenidas en el domicilio. En México: [delegación, colonia, numero]. A esto se le
llama un dato complejo porque para llegar a él, requerimos más de una coordenada.
Ejemplo a[3][2][1]=7; en la variable compleja a solo en las coordenadas 3,2,1 tenemos
guardado el dato 7.
55
10.1 Ejemplo1. Podemos realizar operaciones.
Nótese que cada coordenada SOLO corresponde a un valor guardado en ella.
Nota IMPORTANTE: En la declaración int a[80][80], es aparta la memoria que debemos
utilizar, si como ven estoy utilizando hasta a[3][3], se declararía int a[3][3]; sin embargo , por
error de programador inexperto, si utilizas a[4][0] se podría BORRAR alguna Zona
IMPORTANTE de memoria, que podría AFECTAR tu computadora. Se te recomienda declarar
un numero grande por si se comete una equivocación, y solo escribir los necesarios SOLO
cuando el programa YA ES MUY GRANDE y se tienen que CUIDAR el límite de la memoria.
10.2 Una coordenada,
Imaginemos una calle muy grande llamada “ALFA”, para ubicar la casa requerimos el numero
[3].
Esto quiere decir que podemos crear un dato complejo que se llame alfa [3] y guardar datos
aquí.
PERO, notemos que podemos guardar datos desde
alfa[0], alfa[1], alfa[2, alfa [3], etc hasta un dato LIMITE
NOTESE QUE TIENE UN NOMBRE GENERICO: alfa
Con esta modalidad podemos escribir programas muy compactos, con el nombre genérico y
el INDICE irlo cambiando con un for, para asi pedir datos e imprimirlos con poco código.
56
10.2.1 Ejemplo básico
Para utilizar for en los paréntesis cuadrados se escriben los índices que van a ir cambiando; por
ejemplo i, j, k, etc
10.2.2 basico2
Veamos el ejemplo:
57
Ahora encontremos el potencial de trabajar con arreglos con el siguiente ejemplo.
10.2.3 Ejemplo potencial
El potencial, si ustedes lo notan es, en este ejemplo, pedir 15 datos y mandarlos a imprimir,
con el mismo código, solo se modifico la condición al número deseado. Y además, cualquier
valor contenido se puede recuperar a[0]= 1, y a[14]=15 por ejemplo.
¿Qué debemos hacer si queremos pedir 1000 números?
58
Solo requerimos modificar el valor de la condición y ya, si antes fue 3, ahora 15 después N
pedido por usuario.
10.4 EJEMPLOS APLICATIVO
Es muy común usar arreglos en cálculos de arreglos de vectores o matrices.
Primero comprendamos, como se muestra una matriz
1) Esta matriz A esta constituida de sus 3 renglones X 3 columnas 3x3= 9 Elementos. Cada
elemento se puede diferenciar entre ellos por sus coordenadas dadas, de dos
dimensiones la primera es ubicación del renglón, la segunda ubicación de la columna.
(si comprendes poco este tema por favor, consulta antes libros de algebra lineal).
APLICATIVOS
Es muy común usar arreglos en cálculos de arreglos de vectores o matrices.
Primero comprendamos, como se muestra una matriz
Esta matriz A esta constituida de sus 3 renglones X 3 columnas 3x3= 9 Elementos. Cada
nto se puede diferenciar entre ellos por sus coordenadas dadas, de dos
dimensiones la primera es ubicación del renglón, la segunda ubicación de la columna.
(si comprendes poco este tema por favor, consulta antes libros de algebra lineal).
60
Esta matriz A esta constituida de sus 3 renglones X 3 columnas 3x3= 9 Elementos. Cada
nto se puede diferenciar entre ellos por sus coordenadas dadas, de dos
dimensiones la primera es ubicación del renglón, la segunda ubicación de la columna.
(si comprendes poco este tema por favor, consulta antes libros de algebra lineal).
61
10.4.1 Aplicado1. Imprimir la matriz A con los datos de sus
coeficientes de 3x3; primero comprendamos.
2) Declarar que se va a utilizar un arreglo BIDIMENSIONAL porque es una dimensión para
renglones, y otra dimensión para columnas: A [80][80], requerimos dos índices a ir
modificando será i,j . Después comenzaremos por pedir N para saber las
dimensiones de la matriz si es de 2x2, 3x3, 4x4, etc. (Notemos que solo estamos
trabajando con matrices cuadradas).
3) Ahora vamos a comenzar los coeficientes para la matriz A. Requerimos dos for con sus
índices respectivos i , j. Pedimos datos con esos índices y guardamos en a[i][j]
4) Ya guardados los coeficientes dados por el usuario; ahora nos resta mandar a imprimir
los datos pero con algún formato que parezcan matrices, para esto nos ayudaremos
de llaves, y un printf(“\n”);, gracias a esto se verán como matrices.
Veamos el ejemplo completo. Recuerda que se comienza con a[0][0]
10.4.2 Ejemplo de selemento de la matriz A con el mismo elemento de la matriz B , ambos deben coincidir con
sus mismos índices, es decir estar ubicados en las mismas coordenadas (renglón i, columna j)
Verifica que son los mismos índices de A con B
Entonces para sumar CUALQUIER MATRIZ
a) los dos for’s, porque es de 2 dimensiones (renglón i, columna j), irlos variando de cero
a N.
b) Pedir datos de A con los dos for’s
c) Pedir datos de B con los dos for’s
d) Realizar la operación A+B y guardarla en C=> C=
Ejemplo de suma de matrices. Solo es sumar el mismo
triz A con el mismo elemento de la matriz B , ambos deben coincidir con
sus mismos índices, es decir estar ubicados en las mismas coordenadas (renglón i, columna j)
Verifica que son los mismos índices de A con B
Entonces para sumar CUALQUIER MATRIZ A CON CUALQUIER MATRIZ B, solo necesito
los dos for’s, porque es de 2 dimensiones (renglón i, columna j), irlos variando de cero
Pedir datos de A con los dos for’s
Pedir datos de B con los dos for’s
Realizar la operación A+B y guardarla en C=> C= A+B. Todo en 2 dimensiones:
63
. Solo es sumar el mismo
triz A con el mismo elemento de la matriz B , ambos deben coincidir con
sus mismos índices, es decir estar ubicados en las mismas coordenadas (renglón i, columna j)
A CON CUALQUIER MATRIZ B, solo necesito
los dos for’s, porque es de 2 dimensiones (renglón i, columna j), irlos variando de cero
A+B. Todo en 2 dimensiones:
64
Errores: En los for confunden variables for(j=0;i<3;k++) que no sirve
Ejercicios: Resta dos matrices.
65
11. Interrupciones.
Una interrupción detiene (o interrumpe) un proceso x (este se pone en pausa), realiza el
proceso de “emergencia”, después continua con el proceso x en el punto detenido.
Se tienen interrupciones por Software y por Hardware. Por ejemplo cuando se realiza una
combinación de teclas para detener un programa con un proceso infinito, cuando se utiliza el
mouse y se sabe en qué parte de la pantalla está ubicado; cuando tenemos conectados a
nuestra computadora un sistema Externo y apretamos un push boton, para que realice algo.
Algún desborde de memoria que ejecute algo; ordenes de terminación del sistema operativo.
Se tienen programadas algunas funciones listas a ser “lanzadas” cuando se “cacha” algún error
o algo que no es conveniente. Solo se requiere solicitar utilizarlas, y otras que están esperando
a ser programadas, para que lance su proceso.
Imaginemos que nos encontramos realizando varias tareas desde tarea 1 hasta 10 tareas, pero
necesitaremos detener todo si se nos interrumpe con una tarea urgente, se hace la tarea
URGENTE y continuamos con las tareas pendientes.
Veamos entonces como funciona directamente una interrupción. A continuación, veremos un
ejemplo, una interrupción de software con signal.h
signal(un numero entero de señal , apuntador)
raise es un generador de onda raise(numero entero de señal)
Podemos decir que se atrapara la señal entera, si se atrapa el manejador dirá que hacer con
ella.
El manejador imprime un mensaje y puede pedirle al usuario alguna decisión, continuar o salir
de las tareas.
Esta misma programación la podemos utilizar para hacer algunos juegos donde
arbitrariamente entre alguna tarea intermedia.
Este primer ejemplo, activa la combinación de teclas control-c con “ SIGINT”.
66
11.1 Ejemplo1
Otro ejemplo. Aquí se genera un numero aleatorio, si el valor es 15 se cacha ese evento y se
hace una tarea urgente, se hace la tarea urgente y aparece “tarea hecha”, se te pregunta si
deseas continuar con las tareas que se dejo pendientes o se sale del programa.
68
11.3 Ejemplo3
11.4 Ejemplo1 arduino
Como ejemplo de interrupciones de Hardware, tenemos la conexión de computadoras con los
Microcontroladores (para algunos procesos específicos). En la tarjeta ARDUINO como ejemplo
es posible utilizar las interrupciones, con un comando sencillo.
attachInterrupt ( interrupción, función, modo); Necesitamos saber el número de interrupción (0 o 1), el nombre de la función en la que lo que cacho lo manipule. Y la función modo, con cuatro posibilidades: detección por ceros, por unos cambios 1 a 0, cambios 0 a 1. Este ejemplo de Arduino se comenta aquí porque se da una visión de la utilización de las interrupciones por hardware.
69
Un programa de ARDUINO, requiere programarse dos funciones setup() y loop() (NO CONTIENE main() visualmente) . Es programación en C. En la función setup() se declaran los números de pines de conexión a la tarjeta que se utilizaran, y se avisa que son de tipo entrada (INPUT) o de tipo salida(OUTPUT). (Pines digitales son el 2 al 13) Y en la función loop() se colocan datos sobre esos pines que se activen en 1(HIGH) o se desactiven (LOW), con alguna programación dada. Ahora, para activar las interrupciones requerimos una cabecera “interrupt” , después dentro del setup declaramos la utilización de la interrupción y dentro del loop colocamos la función “pinISR” que queremos que se ejecute si se cacha algo. Para este ejemplo especifico tenemos un pin 3 que es una entrada aquí se puede colocar un pushbotom, y el el pin 12 un led. Cada que apretemos el push botom, se lanza una excepción que interrupe lo que se hacia, en este caso prende el led.
71
12. Bibliografía. PROGRAMACIÓN BASICA Y RAPIDA DE “C”, “C++” y “JAVA” CON METODOS NUMERICOS, Elizabeth Fonseca Chávez, Mario Alfredo Ibarra Carrillo. 2007. Manual de Referencia Herbert Schildt. McGrawHill Como programar en C/C++ , Deitel. Segunda edición Prentice Hall Turbo C++ manual de Bolsillo. Joyanes. Mc GrawHill