Análisis Numérico y Programación - ifuap.buap.mxlilia/numerico/Estructuras_programacion_1.pdf ·...

Post on 13-Oct-2018

252 views 0 download

Transcript of Análisis Numérico y Programación - ifuap.buap.mxlilia/numerico/Estructuras_programacion_1.pdf ·...

1

AnAnáálisislisis NumNumééricoricoy y

ProgramaciProgramacióónnFacultad de Ingeniería Química

Primavera 2009

Dra. Lilia Meza Montes – Instituto de Física

2

Conceptos Básicos

1. Varios2. Estructuras de programación3. Lenguaje Fortran

LMM

3

Notas importantes para el curso• Buenos hábitos

a) Estudiarb) Aprender las instruccionesc) Respaldar (y borrar si es posible) los archivosantes de apagar la computadorad) Preguntar lo que no se entiendee) Hacer sus propios programas (no copiarlos)f) Escribir pseudocódigo

LMM

4

1. Varios

Se presentan conceptosrelacionados con programación y

Fortran

5

Programación• Programa: conjunto de instrucciones para que

la computadora realice una tarea• Algoritmo: procedimiento para obtener una

solución aproximada.• Estructuras de un algoritmo

a) secuenciab) selecciónc) repetición

Convención: mayúsculas para instruccionesdefinidas por la computadora

LMM

6

Fortran• Formula Translation Fortran (traducción de

fórmulas)• Proceso para correr un programa:

Edición: las instrucciones se guardan en archivos (con extensión for: nombre.for)

Compilación: se revisan las instrucciones, si hay errores, genera mensajes indicando tipo de error y línea donde ocurre. Si no hay errores, genera archivo en lenguaje de máquina.

• Liga y ejecución: Si instrucciones en variosarchivos, los liga y genera un archivo ejecutable, el cual al ser llamado ejecutará las instrucciones.

7

Formato de un programaprincipal en Fortran

PROGRAMPROGRAM nombrenombreC C DeclaracionDeclaracion de variablesde variables

REALREALINTEGERINTEGERCHARACTERCHARACTER

**C C InstruccionesInstrucciones del del programaprograma**C Fin del C Fin del programaprograma

STOPSTOPENDEND

NotasNotas: En Fortran 77 se : En Fortran 77 se escribenescriben instruccionesinstrucciones a a partirpartir de 7a de 7a columnacolumna y y hastahasta la 72a.la 72a.C,* C,* parapara comentarioscomentarios (se (se escribenescriben en 1a en 1a columnacolumna))! ! ComentariosComentarios, se , se ignoraignora lo lo escritoescrito despuésdespués de de esteeste signosigno LMM

8

Instrucciones en un programa• Representación de información sencilla (declaración de

constantes, variables y sus tipos)

• Representación de información más compleja (estructuras de datos, arreglos y registros)

• Fórmulas matemáticas (asignación , reglas de prioridad y funciones intrínsecas)

• Entrada/Salida (de informació)

• Representación lógica (secuencias, selección y repetición)

• Programación modular (funciones y subrutinas)

LMM

9

Convención en Pseudocódigo

Asignación de valorvariable=valor

Para entrada: INPUT variable

Para salida:DISPLAY variable

variable=valor

READ(*,*)variable

WRITE(*,*)variableDispositivoDispositivo de de salidasalida: :

monitormonitorFormatoFormato librelibre en en salidasalida

LMM

DispositivoDispositivo de de entradaentrada: : tecladoteclado

FormatoFormato librelibre en en entradaentrada

Instruccionesen Fortran

10

Variables

EnterasEnteras: : empiezanempiezan con con laslas letrasletras I,J,K, L, M, NI,J,K, L, M, NRealesReales EmpiezanEmpiezan con con laslas letrasletras AA--H, OH, O--ZZCaracteresCaracteres:: La La cadenacadena de de caracterescaracteres entreentre comillascomillas

PrecisiónPrecisión asignadaasignada: : SIMPLESIMPLE: : realesreales (real*4 con 6 (real*4 con 6 cifrascifras significativassignificativas, 16 bits), 16 bits)EnteroEntero: integer*4 : integer*4 CaracteresCaracteres 1 1 caractercaracter

Localidad de almacenamiento de datos que puede ser modificada durantela ejecución del programa.

Cada variable tiene un nombre que la identifica. Características de los nombres:

•Debe comenzar con un caracter del alfabeto•No puede contener un punto o caracter de tipo de declaración (!, =, etc.) •Debe ser única en el contexto. •No debe tener más de 255 characters.

TIPOS DE VARIABLES

LMM

valorvalor

AA

11

Ejemplo de programaPROGRAM PROGRAM Ejemplo_variablesEjemplo_variables

C C DeclaracionDeclaracion de variablesde variablesinteger ninteger nreal a1real a1character*3 character*3 var_carvar_car

C C AsignacionAsignacion de de valoresvaloresn=2n=2a1= 1.4ea1= 1.4e--44var_carvar_car=‘=‘abcabc’’write(*,*)n,a1,var_carwrite(*,*)n,a1,var_carn=3n=3write(*,*)’n’=,nwrite(*,*)’n’=,nSTOPSTOPENDEND

NotasNotas::nombrenombre de de programaprogramacomentariocomentario

variable variable enteraenteravariable realvariable realcadenacadena con 3 con 3 caracterescaracteres

comentariocomentarion n tienetiene valor 2valor 2real en real en notaciónnotación científicacientíficatrestres caracterescaracteresescribeescribe valoresvalores de variablesde variablesmodificamodifica nnescribeescribe cadenacadena de de caracterescaracteres y y valor de nvalor de n

terminatermina programaprogramafinalizafinaliza

12

Arreglos (=arrays)•• EscalaresEscalares

Solo tienen un valor, se asigna con nombre=valor•• VectoresVectores

tienen n componentes, n es la dimensiónEjemplo Si n=3, un vector A=(a1,a2,a3) tiene componentes a1, a2, a3.

Varias formas de Declaración, ejemplos (alguna de las dos):REAL A(3)DIMENSION A(3)

Asignación de valores:A(1) = valor1A(2) = valor2A(3) = valor3

Notas: Indices y dimensiones son enterosPuede irse incrementando dimensión, se declaran en forma diferente; pero en nuestro caso será fija.

A (1)A (1)

A A

A (2)A (2) A (3)A (3)

13

Arreglos (=arrays)•• MatricesMatrices

Una matriz de tamaño m x n (m renglones, n columnas)

Elemento aij renglón i, columna j

Declaración (3 x 2), alguna de las dos:

REAL A(3,2)DIMENSION A(3,2)

Asignación de valoresA(1,1 )= valor11A(2,2) = valor22A(3,2) = valor32

Nota: Puede irse incrementando dimensión, se declaran en forma diferente; pero en nuestrocaso ésta será fija.

⎟⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜⎜

=

mnmmm

n

n

aaaa

aaaaaaaa

A

.........

...

321

2232221

1131211

Un Arreglo en general, puedetener varios índicesEjemplo tamaño 3x2x4Declaración

REAL A(3,2,4)Asignación de valores

A(1,1,1)=valor111A(3,2,4)=valor324

14

Ejemplo

PSEUDOCÓDIGOInput nDO i=1,n

A(i)=iENDDO

Input jDISPLAY A(j)

FIN

PLANTEAMIENTOPLANTEAMIENTOHacerHacer un un programaprograma queque1.1. Declare un Declare un arregloarreglo ((enteroentero) de un ) de un

ciertocierto nnúúmeromero de de elementoselementos((dimensidimensióónn) )

2.2. Lea n Lea n ≤≤dimension del dimension del arregloarreglo3.3. GenereGenere arregloarreglo taltal queque la la ii--éésimasima

componentecomponente sea sea igualigual al al ííndicendice de de la la componentecomponente..

4.4. Lea Lea enteroentero jj5.5. EscribaEscriba el valor de la el valor de la componentecomponente

j del j del arregloarreglo

TAREA: 2.9, 2.17,2.18 de TAREA: 2.9, 2.17,2.18 de ChapraChapra

15

2. 2. EstructurasEstructurasdede

programaciprogramacióónn

LMM

16

Diagrama de flujo• Representación visual o gráfica de un algoritmo• Utiles para planear, aclarar o comunicar la lógica

del programa

Flujo de la lógica.Arco indica queno hay conexión

entre flechas

Líneas de flujo

Inicio o final de programa

Terminal

FunciónNombreSímbolo

17

Comparación, pregunta o decisión

que derterminacaminos alternativos

Decisión

De datos o información

Entrada-salida

Confluencia de líneas de flujo

Unión

Cálculos o manipulación de

datos

ProcesoFunciónNombreSímbolo

18

Ciclo: Repeticiónpredeterminada de

iteraciones

Ciclo de cuenta

controlada

Continúa en otrapágina

Conexiónde fin de página

FunciónNombreSímbolo

PseudocódigoPseudocódigo••ExpresionesExpresiones semejantessemejantes a a laslas del del códigocódigo de la de la computadoracomputadora en en lugarlugar de de símbolossímbolos gráficosgráficos

19

a) Estructura secuencial: instrucción tras instrucción

Instrucción1

Instrucción2

Instrucción3

Instrucción 1

Instrucción 2

Instrucción 3

Diagrama de flujo Pseudocódigo

LMM

20

Operaciones aritméticas• Pseudocódigo+ Suma- Resta* Multiplicación/ DivisiónPotencia: ab

• Sintaxis en Fortran+-*/** a**b= ab

// Concatenación de caracteres

EjecutaEjecuta primeroprimero laslas operacionesoperacionesde mayor de mayor prioridadprioridadmayor mayor prioridadprioridad PotenciaPotenciasiguientesiguiente *, /*, /siguientesiguiente +,+,--

LMM

‘‘a’//’a’//’b’b’ ‘ab‘ab’’

21

EjemplosSintaxisSintaxis en Fortranen Fortran

a+ba+b*c*c

a*c**2a*c**2

(a*c)**2(a*c)**2

A+b/cA+b/c

((A+b)/cA+b)/c

A/(b*c)A/(b*c)

a/b*ca/b*c

EcuaciónEcuación

a+bca+bc

A*cA*c22

(ac)(ac)22

A+ (A+ (b/cb/c))

((A+b)/cA+b)/c

A/(A/(bcbc))

(A/(A/b)/cb)/c

ObservacionesObservaciones

TieneTiene * mayor * mayor prioridadprioridad queque ++

PrimeroPrimero elevaeleva c al c al cuadradocuadrado

PrimeroPrimero multiplicamultiplica, , resultadoresultado al al cuadradocuadradoPrimeroPrimero divide divide b/cb/c y le y le sumasuma AA

PrimeroPrimero sumasuma ((A+bA+b) y lo divide) y lo divide

PrimeroPrimero multiplicamultiplica bcbc y y luegoluegodividedividePrimeroPrimero divide A y b, divide A y b, luegoluego dividedivide

Si hay Si hay dudaduda, , particularmenteparticularmente en en operadoresoperadores de de mismamisma prioridadprioridad, , usarusar ()()LMM

22

Ejercicios

• Hacer un programa que:1. Lea dos números2. Realice dos operaciones aritméticas con

ellos3. Escriba los dos resultados especificando

el tipo de operación realizada, por ejemplo‘Suma=‘ ó ‘ab**2’.

23

b) Estructuras de selección

División del flujo del programa considerandoel resultado de una condición lógica

Condición lógica: igualdad, desigualdad, criterio.

LMM

24

IF/THEN una alternativa[ IF=si (condicional); THEN=entonces]

Condición?

Bloque Verdadero

Verdadero

IF condición THENBloque Verdadero

ENDIF

DiagramaDiagrama de de flujoflujo PseudocPseudocóódigodigo

••Se Se analizaanaliza la la condicicondicióónn••Si Si eses VerdaderaVerdadera

se se ejecutanejecutan instruccionesinstruccionesdel del BloqueBloque VerdaderoVerdadero

••Si no Si no eses VerdaderaVerdadera se se ignoraignoraBloqueBloque VerdaderoVerdadero y y contincontinúúaaejecuciejecucióónn despudespuééss de ENDIFde ENDIF

EjemploEjemploLMM

25

Expresión Matemática Sintaxis en Fortran

(A.ne.B)ne=not equal to

A≠B

(A.eq.B)eq=equal to (igual a)

A=B

(A.ge.B)ge=greater or equal to

A≥B

(A.gt.B)gt=greater than (mayor que)

A>B

(A.le.B)le=less than or equal to

A≤B

(A.lt.B)lt=less than (menor que)

A<B

LMM

26

EjemploEjemplo

LMM

27

IF/THEN/ELSE dos alternativas[ ELSE=de otro modo, de lo contrario]

Condición?

Bloque Verdadero

Verdadero

IF condición THENBloque Verdadero

ELSEBloque Falso

ENDIF

Bloque Falso

Falso

DiagramaDiagrama de de FlujoFlujoPseudocPseudocóódigodigo

••Se Se analizaanaliza la la condicicondicióónn••Si Si eses VerdaderaVerdadera

se se ejecutaejecuta BloqueBloqueVerdaderoVerdadero••Si Si eses FalsaFalsa se se ejecutaejecutaBloqueBloque FalsoFalso••ELSE divide los ELSE divide los bloquesbloques••ENDIF fin de ENDIF fin de estructuraestructura

EjemploEjemplo LMM

28

EjemploEjemplo

LMM

29

IF/THEN/ELSEIF múltiples alternativas[ ELSEIF “palabra” creada para computación]

Condición1?

Bloque 1

V IF condición1 THENBloque 1

ELSEIF condición2Bloque 2

ELSEIF condición3Bloque3

ELSEBloque4

ENDIF

F

Condición3?

Condición2?

Bloque 4

Bloque 2

Bloque 3

F

FV

V

DiagramaDiagrama de de FlujoFlujo

PseudocPseudocóódigodigo

••SemejanteSemejante a ELSEa ELSE••VariasVarias condicionescondiciones••ÚÚltimaltima se se indicaindica con con ELSEELSE

LMM

30

CASE [ case=caso]

ExpresiónDe

prueba

Bloque 4

PseudocódigoSELECT CASE Expresión de prueba

CASE Valor1Bloque1

CASE Valor2Bloque2

CASE Valor3Bloque3

CASE ELSEBloque4

END SELECT

Bloque 1 Bloque 3Bloque 2

Tantas como sea necesario

Valor1

Otro

DiagramaDiagrama de de FlujoFlujo

LMM

Valor2

31

Sintaxis en FortranSelect Case (expresión de prueba)

[Case (valor n de la lista)[Bloque n]] . . .

[Case Default si el valor no esta en la lista[Bloque else-n]]

End Select ]

•El contenido entre [] es opcional•expresión de prueba puede ser número (real o entero) o cadena de caracteres

Su evaluación da un valor valor llamado índice del caso. •Se ejecuta el Bloque n correspondiente al valor n de la expresión de prueba•Bloque: secuencia de cero o más instrucciones o construcciones

EjemploEjemplo LMM

32

EjemploEjemplo

LMM

33

c) c) EstructuraEstructura de de repeticirepeticióónn

•Ejecución repetida de instrucciones en un ciclo o loop(Loop= rizo, lazo)•Se clasifican según la forma en que terminan

LMM

34

Loop de decisióntermina con decisión lógica

Condición?

Bloque 2

V

DOBloque 1

IF condición EXITBloque 2

ENDDO

Bloque 1

F

LMM

PseudocPseudocóódigodigo

35

Sintaxis en Fortran

DO [etiqueta[, ] ] WHILE (expresión)Bloque1

IF (condición) EXITBloque2

[etiqueta] END DO

Etiqueta: número para especificar una instrucción ejecutable

Expresión: es una expresión escalar (un solo valor) lógica(puede ser Falsa o Verdadera).

ProblemaProblema 2.12.1

LMM

36

Loop controlado por contador o loop DOFOR número determinado de repeticiones o iteraciones

[DO=hacer]

i>fin?

Bloque

i=inicio DO FOR i=inicio, fin, incrementoBloque

ENDDO

F

i=i+incremento

V

Si Si incrementoincremento <0<0terminatermina cuandocuando i<fini<fin

PseudocPseudocóódigodigo

••IndiceIndice I I tomartomaráá valoresvalores desdedesde incioinciohastahasta fin fin aumentandoaumentando segsegúúnnincrementoincremento••Para Para cadacada valor de i, valor de i, mientrasmientras ii≤≤finfin, , ejecutaejecuta BloqueBloque••Al Al llegarllegar a ENDDO, se a ENDDO, se incrementaincrementa el el valor de ivalor de i••TerminaTermina cuandocuando i>fini>fin

LMM

37

Loop controlado por contador o loop DOFOR

Número determinado de repeticiones o iteraciones

••IndiceIndice ii: variable con valor : variable con valor inicialinicial inicialinicial y valor final y valor final finfin•• SE PRUEBA SI SE PRUEBA SI ii ≤≤ finfin

sisi lo lo eses ejecutaejecuta BloqueBloque y y vuelvevuelve al al inicioinicio del del lazolazo

en ENDDO: se en ENDDO: se incrementaincrementa i i porpor valor valor definidodefinido porporusuariousuario (default 1)(default 1)

•• Si Si i i > > finfin sale del loopsale del loop

LMM

38

Sintaxis en Fortran[[ NombreNombre::]] DODO [[etiquetaetiqueta, ] ] , ] ] ííndicendice==inicioinicio,,finalfinal, , incrementoincremento

BloqueBloque[[etiquetaetiqueta]] finalizacionfinalizacion [[NombreNombre]]

NombreNombre ((OpcionalOpcional): ): nombrenombre de la de la construcciconstruccióónn DODO. . etiquetaetiqueta ((OpcionalOpcional en END DO): en END DO): nnúúmeromero parapara identificaridentificar la la llííneanea de de finalizacifinalizacióónn, se , se escribeescribe en en laslas primerasprimeras 5 5 columnascolumnasÍÍndicendice: : variable variable enteraentera queque tomatoma el valor el valor inicialinicial inicioinicio, , aumentaaumenta porpor la la cantidadcantidad incrementoincremento (default 1)(default 1) mientrasmientras sea sea menormenor o o igualigual queque finalfinalBloqueBloque: : secuenciasecuencia de cero o de cero o mmááss instruccionesinstrucciones o o construccionesconstrucciones. . FinalizaciFinalizacióónn:: llííneanea parapara indicarindicar final del DO. final del DO. PuedePuede ser END DO, ser END DO, CONTINUE o CONTINUE o unauna instrucciinstruccióónn..

NOTA: NOTA: PuedePuede haberhaber un DO un DO dentrodentro de de otrootro ((anidadoanidado), ), puedenpueden tenertenermismamisma etiquetaetiqueta

EjemplosEjemplos enddoenddo continuecontinue instrucciinstruccióónnLMM

39

Ejemplo con finalización END DO

LMM

40

Ejemplo con finalizaciónCONTINUE

Notar la etiqueta de continuación 10 en las primeras 5 columnas

LMM

41

Ejemplo final con instrucciónNotar la etiqueta de continuación 10 en las primeras 5 columnas de la

instrucción write

EjemploEjemplo: : sumasuma de de primerosprimeros n n naturalesnaturalesLMM