1 / 20

SECUENCIAS 2.1 Introducción Secuencia: Sucesión de valores de un tipo determinado (caracteres, enteros, reales, bool

SECUENCIAS 2.1 Introducción Secuencia: Sucesión de valores de un tipo determinado (caracteres, enteros, reales, booleanos, ...). Utilización: Permite manipular una sucesión de datos. Ejemplo: Se puede sumar una secuencia de enteros 4, 3, 6, 5, 6, 8, 6, 4, 8, 2 ®

redford
Download Presentation

SECUENCIAS 2.1 Introducción Secuencia: Sucesión de valores de un tipo determinado (caracteres, enteros, reales, bool

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SECUENCIAS • 2.1 Introducción • Secuencia: Sucesión de valores de un tipo determinado (caracteres, enteros, • reales, booleanos, ...). • Utilización: Permite manipular una sucesión de datos. • Ejemplo: Se puede sumar una secuencia de enteros • 4, 3, 6, 5, 6, 8, 6, 4, 8, 2 ® • 4+3+6+5+6+8+6+4+8+2 = 52 • Acceso secuencial. Sólo se puede acceder una vez de izquierda a derecha a los • elementos de una secuencia (no se puede volver a acceder a ellos en el futuro). • A medida que se leen los elementos de una secuencia hay que tratarlos, ya que en • el futuro no se puede volver a acceder a ellos.

  2. 2.2 Estado de una secuencia en un instante dado 8 2 9 9 3 6 4 9 8 1 3 6 4 2 7 7 7 8 8 5 -1 Parte Derecha Parte Izquierda Elementoactual Centinela Parte Izquierda: Parte Leída/Tratada Elemento actual (enmarcado): Único elemento accesible de la secuencia en el instante actual Part Derecha: Parte por Leer/Tratar Centinela: Indicador del fin de la secuencia

  3. 2.3 Terminación de una secuencia • El centinela debe ser un elemento del mismo tipo que el de los • datos queforman la secuencia. Por ejemplo, • Un ’.’ o un ’\n’ (salto de línea) en el caso de caracteres; • Un 0 o un -1 en caso de enteros o reales; • El centinela no debe ser tratado por el algoritmo que procesa la • Secuencia. Sólo sirve para detectar el fin de los datos. • Si no hay más elementos que el centinela, la secuencia se • considera vacía. c n t e c . e u a e s s s n a E o i u

  4. 2.4 Esquemas de recorrido y búsqueda • Esquema de recorrido:Necesariamente hay que tratar todos los elementos de la • secuencia uno detrás del otro. • Ejemplos de recorrido: calcular la suma, la media o el producto de los elementos • de una secuencia; contar los elementos de una secuencia; calcular el máximo o el • mínimo de los elementos de una secuencia. • Esquema de búsqueda: Hay que examinar los elementos de la secuencia hasta • encontrar uno determinado. • Ejemplos de búsqueda: encontrar el primer par en una secuencia de enteros, deter- • minar si una secuencia contiene algún número primo, encontrar el primer máximo • local en una secuencia de reales.

  5. Esquema general de recorrido Hay que examinar todos los elementos de la secuencia y tratarlos. • declaración de variables • acceder al primer_elemento • inicializar tratamiento • while (elemento_actual != centinela) { • tratar elemento • acceder siguiente_elemento • } • tratamiento final

  6. Ejemplo 1 Calcular la media de una secuencia de números acabada en 0. #include <iostream> using namespace std; #define Centinela 0 int main(void) { int n = 0; double numero_actual, suma = 0.0; cout << "Introduzca el primer numero real (para terminar de " << "introducir los numeros de la secuencia escriba 0.0): "; cin >> numero_actual; cout << endl << endl; while ( numero_actual != Centinela ) { suma+=numero_actual; n++; cout << "Introduzca el siguiente numero real (para terminar " << "de introducir los numeros de la secuencia escriba 0.0): "; cin >> numero_actual; cout << endl << endl; }

  7. if ( n != 0 ) • cout << "La media de los numeros introducidos es " << suma/n << endl; • else • cout << "La secuencia no contiene ningun numero." << endl; • system("pause"); • }

  8. Ejemplo 2Contar las palabras de una secuencia de caracteres acabada en punto. #include <iostream> using namespace std; #define centinela '.' int cuenta_pal(void); int main(void) { int num_palabras; cout << "Introduzca una frase acabada en punto." << endl << endl; num_palabras = cuenta_pal(); cout << "El numero de palabras de la frase es " << num_palabras << endl; system("pause"); }

  9. int cuenta_pal(void) { char c1 = ' ', c2; int n=0; c2=getchar(); while (c2!=centinela) { if (c1==' ' && c2!=' ') n++; c1=c2; c2=getchar(); } return n; }

  10. Ejemplo 3 Determinar el número de primos de una secuencia de enteros acabada en 0 y escribir los primos en la pantalla. #include <iostream> using namespace std; #define centinela 0 bool es_primo (int n) ; int main(void) { int n, n_primos=0; cout << endl << "Introduzca un entero: "; cin >> n; while (n!=centinela) { if (es_primo(n)) { n_primos++; cout << n << endl; } cout << endl << "Introduzca un entero: "; cin >> n; } cout << "El numero de primos encontrados es " << n_primos << endl; system("pause"); }

  11. bool es_primo (int n) { bool primo; int d; if (n==1 || (n%2==0 && n!=2)) primo=false; else { d=3; primo=true; while (!primo && d*d<=n) if (n%d==0) primo=false; else d+=2; } return primo; }

  12. Ejemplo 4 Encontrar el máximo de una secuencia de enteros acabada en 0. • #include <iostream> • using namespace std; • #define centinela 0 • int main(void) { • int n, maximo, lon=0; • cout << endl << "Introduzca un entero: "; • cin >> n; maximo=n; • while (n!=centinela) { • lon++; if (n>maximo) maximo=n; • cout << endl << "Introduzca un entero: "; cin >> n; • } • if (lon!=0) • cout << "El maximo es " << maximo << endl; • else • cout << "Secuencia vacia" << endl; • system("pause"); • }

  13. Esquema general de búsqueda Si se encuentra el elemento deseado en la secuencia no hay que continuar la búsqueda, sólo hay que llegar al final si no se encuentra dicho elemento. • declaración de variables • acceder al primer_elemento • inicializar tratamiento • while (elemento_actual != Centinela && elemento_actual != elemento_buscado) { • tratar elemento • acceder siguiente_elemento • } • tratamiento final

  14. Ejemplo 5 Encontrar la posición del primer 7 en una secuencia de enteros acabada en 0.

  15. #include <iostream> using namespace std; #define centinela 0 #define buscado 7 int main(void) { int n, posicion=1; cout << endl << "Introduzca un entero: "; cin >> n; while (n!=centinela && n!=buscado) { cout << endl << "Introduzca un entero: "; cin >> n; posicion++; } if (n==buscado) cout << "La posición del primer 7 es " << posicion << endl; else cout << "No se ha encontrado ningun 7" << endl; system("pause"); }

  16. Ejemplo 6Encontrar el primer par de números consecutivos iguales de una secuencia de enteros acabada en 0. #include <iostream> using namespace std; #define centinela 0 int main(void) { int n1, n2; cout << endl << "Introduzca un entero: "; cin >> n1; if (n1!=centinela) { cout << endl << "Introduzca un entero: "; cin >> n2; while (n2!=centinela && n1!=n2) { n1=n2; cout << endl << "Introduzca un entero: "; cin >> n2; } if (n1==n2) { cout << "El primer par de numeros iguales consecutivos es " << n1 << " y " << n2 << endl; } else { cout << "No se ha encontrado ningun par de numeros iguales " << "consecutivos." << endl; }

  17. } else { cout << "Secuencia vacia" << endl; } system("pause"); }

  18. Ejemplo 7 Encontrar el primer mínimo local estricto de una secuencia de enteros acabada en 0, i.e., el primer número tal que su antecesor y sucesor son mayores que él.

  19. #include <iostream> using namespace std; bool minimo_local(int n1, int n2, int n3); int main(void) { int n1, n2, n3, min; bool encontrado=false; cout << endl << "Introduzca un entero: "; cin >> n1; if (n1!=centinela) { cout << endl << "Introduzca un entero: "; cin >> n2; if (n2!=centinela) { cout << endl << "Introduzca un entero: "; cin >> n3; while (n3!=centinela && !encontrado) { if (minimo_local(n1,n2,n3)) { min=n2; encontrado=true; } else { n1=n2; n2=n3; cout << endl << "Introduzca un entero: "; cin >> n3; } } }

  20. if (encontrado) { cout << "El minimo local es " << min << endl; } else { cout << "No se ha encontrado ningun minimo local." << endl; } } else { cout << "Secuencia vacia" << endl; } system("pause"); } bool minimo_local(int n1, int n2, int n3) { return (n1>n2 && n2<n3); }

More Related