Programacion con ejemplos en “Lenguaje C” (ANSI) · PDF file6.3 Ejercicios 30 7....

of 72 /72
1 Programacion con ejemplos en “Lenguaje C” (ANSI) Elizabeth Fonseca Chavez Mario Alfredo Ibarra Carrillo Octubre 2012

Transcript of Programacion con ejemplos en “Lenguaje C” (ANSI) · PDF file6.3 Ejercicios 30 7....

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

8

Escoger Lenguaje C.

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)

22

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:

31

7.1 Bloque if simple

32

7.2 Bloque if doble

33

7.3 Bloque switch

34

35

7.3.1 Bloque switch con caracteres

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.

44

45

8.1.6.1 .Ejemplo aplicado de un for infinito; un menú.

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.

47

8.2 BLOQUE DE while

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)

51

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.

59

10.3 Dos coordenadas,

Veamos un ejemplo similar

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]

62

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.

67

11.2 Ejemplo2

Otro ejemplo, similar.

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.

70

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

72

Programacion con ejemplos

en “Lenguaje C”

(ANSI)

Elizabeth Fonseca Chavez

Mario Alfredo Ibarra Carrillo

Octubre 2012