C1T1 FundamentosProgramación 2021

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 18

FUNDAMENTOS DE

PROGRAMACIÓN

Karim Guevara Puente de la Vega


Agenda

q Datos
q Instrucciones Elementales y Compuestas
q Programas Iterativos
q Diagramas de Estados
Datos

q Los programas representan información: Valores – «constantes»,


almacenan – «variables»
q Variables int k; public class PyDatos {
float x; final static int One=1;
double prom; final static int Two=2;
boolean condicion; public static void main(String [] args) {
char c; int Three = One + Two;
String nombre; System.out.println(Three) ;
boolean a = true ;

q Constantes boolean b = false ;


boolean expr1 = a||b;
3 // int System.out.print("a || b = ");
4.50 // float System.out.println(expr1);
1e-6 // float }
'a' // char }
"hola" // String
Instrucciones elementales y compuestas
q Elementales
§ Asignación k = 0;
k = k+1;
k += 1;
++k;
k++;

§ Salida System.out.println("¡Hola!");

q Compuestas
§ Se forman agrupando a otras instrucciones: elementales y/o compuestas, usando las
reglas de:
ü Secuencia
ü Alternación (if)
ü Iteración (while)
Instrucciones compuestas - secuencia

q P.e. ingreso de datos y calculos simples


public class PySecuencia {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Por favor ingrese su nombre");
String nombre = sc.nextLine();
System.out.println("Bienvenido " + nombre + ". \nPor favor ingrese su edad");
int edad = sc.nextInt();
System.out.println("Gracias " + nombre + " en 10 años usted tendrá " + (edad + 10) + " años.");
}
}
Instrucciones compuestas - alternación

q P.e. Algoritmo que halle el máximo entre un conjunto de


variables. //Solución 1 en Java
public class PySecuencia {
public static void main(String[] args) {
// versión 1 //Solución 1 Scanner sc = new Scanner(System.in);
if ( a > b ) { int a = sc.nextInt();
// m = max(a,b,c) int b = sc.nextInt();
if ( a > c )
if ( a > b ) int c = sc.nextInt();
m = a; int rpta = max(a,b,c);
else m = max(a,c);
System.out.println ("El mayor es: "+ rpta);
m = c; else }
} m = max(b,c); public static int max(int a, int b, int c){
else { if ( a > b )
if ( b > c ) return max (a,c);
m = b; else
else return max (b,c);
}
m = c; public static int max(int a, int b){
} if ( a > b)
return a;
return b;
}
}
Instrucciones compuestas - alternación

q Ejercicio 1: Algoritmo que halle el máximo entre un conjunto de


variables.
// versión 2 //Solución 2
m = a;
// m = max(a,b,c)
if ( b > m )
m = b; m = a;
if ( c > m ) m = max(m,b);
m = c; m = max(m,c);
Operador ternario: ?

Condicion ? A : B

double x1 = Math.PI;
double x2 = Math.E;
double min = (x1 > x2 ) ? x2 : x1 ; // min value
double diff = (x1 > x2) ? x1−x2 : x2−x1; // absolute value
System.out.println(min +" difference with max = ” + diff);
Programas iterativos con invariante
while (condición)
instrucción;

q El programa se encuentra en un estado l – “invariante” del ciclo.


q Invariante: alguna(s) condición(es) que describe(n) lo que un ciclo
hace.
q Al escribir un ciclo:
§ Establecer validez inicial del invariante: inicialización
§ En cada iteración, preservar la validez del invariante.
§ El objetivo del ciclo es llegar a un estado final F.
Programas iterativos con invariante

q P.e. encontrar el máximo de un número variable de datos,


almacenados en un arreglo a[1], ..., a[n]

// m = max(a[1],...,a[n]);
k = 1;
m = a[1];
// m == max(a[1])
// De esta manera trivial se incializa el siguiente invariante:
// Invariante: k<=n && m == max(a[1],...,a[k])
while( k<n ) {
++k; // k<=n && m == max(a[1],...,a[k-1])
if( a[k]>m )
m = a[k];
// k<=n && m == max(a[1],...,a[k])
}
// m = max(a[1],...,a[n])
Programas iterativos con invariante
q P.e. poner los elementos de un arreglo a[0],...,a[n-1] en orden
ascendente.

q Inserción
§ Invariante:

ü a[i] < a[i+1] para i = 0 hasta k-2.


ü a[k] hasta a[n-1] están desordenados.

§ En palabras: "Los elementos desde 0 hasta k-1 ya están ordenados y los


siguientes desordenados".
Programas iterativos con invariante

q Inserción
// Ordenar a[0],...,a[k-1] por inserción
k = 0; // inicialmente no hay elementos ordenados

while( k<n ) {
Insertar a[k] entre a[0],...,a[k-1];
++k;
}

Insertar a[k] entre a[0],...,a[k-1] =>


for( j=k; j>0 && a[j-1]>a[j]; --j ) {
// intercambiar a[j-1] con a[j]
t = a[j];
a[j] = a[j-1];
a[j-1] = t;
}
Programas iterativos con invariante

q Inserción
// Ordenar a[0],...,a[k-1] por inserción
k = 0; // inicialmente no hay elementos ordenados

while( k<n ) {
// Ordenar a[0],...,a[k-1] por inserción
Insertar a[k] entre a[0],...,a[k-1];
++k; k = 0; // inicialmente no hay elementos ordenados
} while( k<n ) { //Insertar a[k] entre a[0],...,a[k-1]
t = a[k];
for( j=k; j>0 && a[j-1]>t; --j )
Insertar a[k] entre a[0],...,a[k-1] => a[j] = a[j-1];
for( j=k; j>0 && a[j-1]>a[j]; --j ) { a[j] = t;
// intercambiar a[j-1] con a[j]
t = a[j]; ++k;
a[j] = a[j-1]; }
a[j-1] = t;
}
Diagramas de estados

q Visualiza los diferentes estados de un programa.


q Transiciones entre estados
§ Condición / incondicionalmente
§ Acción

q P.e. contar las palabras de una frase

String s = “Este es un ejemplo.”


Diagramas de estados
String s = “Este es un ejemplo.”

==‘ ‘ { ++k;}

!=‘ ‘ && !=‘.‘ !=‘ ‘ && !=‘.‘


{ ++np; ++k;} { ++k;}

{k=0; np=0}

==‘ ‘ {++k;}

==‘.‘
==‘.‘
Diagramas de estados
//versión 1
np = 0;
estado = FUERA;
for (k=0, (c=s.charAt(k)) != '.'; k++){
if (estado == FUERA){
if (c != ' '){
++np;
estado = DENTRO;
}
}
else //estado == DENTRO
if (c == ' ')
estado = FUERA;
}
Problema

q Reordenar los elementos de a[0], …, a[n] dejando a la izquierda los


<0 y a la derecha los >=0.
§ Solución 1: <0 >= 0
i j

{a[i] <-> a[j]; ++i; --j}


Solución 1

//version 1
i = 0; j = n;
while( i<j ) {
if( a[i]<0 )
++i;
else if( a[j]>=0 )
--j;
else {
a[i] <-> a[j];
++i;
--j;
}
}

También podría gustarte