análisis numérico y programación - ifuap.buap.mxlilia/numerico/estructuras_programacion_1.pdf ·...
TRANSCRIPT
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