La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Chapter 6 Looping Dale/Weems/Headington. 2 Chapter 6 Topics l While Statement Syntax l Count-Controlled Loops l Event-Controlled Loops l Using the End-of-File.

Presentaciones similares


Presentación del tema: "Chapter 6 Looping Dale/Weems/Headington. 2 Chapter 6 Topics l While Statement Syntax l Count-Controlled Loops l Event-Controlled Loops l Using the End-of-File."— Transcripción de la presentación:

1 Chapter 6 Looping Dale/Weems/Headington

2 2 Chapter 6 Topics l While Statement Syntax l Count-Controlled Loops l Event-Controlled Loops l Using the End-of-File Condition to Control Input Data l Using a While Statement for Summing and Counting l Nested While Loops l Loop Testing and Debugging

3 3 l Un “loop” es una estructura de control de repetición l Esto causa que un solo “statement” o bloque se ejecute varias veces. ¿Qué es un loop (ciclo)?

4 4 Dos Tipos de Loops(ciclos) count controlled loops (FOR) repite los “statements”una cantidad determinadad de ocurrencias (veces). event-controlled loops Existe una condición dentro del cuerpo del ciclo que causa que se termine la repetición de los “statements”.

5 5 While Statement SYNTAX while ( Expression ) {.. // loop body. } NOTA: El “Loop body” puede ser un solo “statement”, un “statement” nulo o un bloque.

6 6 Cuando se prueba la expresión y se determina que es falsa, se sale del ciclo y el control pasa al “statement”que sigue despues del “loop body”. WHILE LOOP FALSE TRUE body statement Expression

7 7 Una inicialisación de la variable que controla el ciclo una expresión que pruebe la continuidad del ciclo una actualización de la variable que controla el ciclo el cual se ejecuta en cada interación del cuerpo (“body”) del ciclo. “ Count-controlled loop” contiene

8 8 int count ; count = 4; // initialize loop variable while (count > 0) // test expression { cout << count << endl ; // repeated action count -- ; // update loop variable } cout << “Done” << endl ; Count-controlled Loop (Ciclo)

9 9 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT count

10 10 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT count 4

11 11 Count-controlled Loop int count ; count = 4; while (count > 0) TRUE { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT count 4

12 12 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 count 4

13 13 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 count 3

14 14 Count-controlled Loop int count ; count = 4; while (count > 0) TRUE { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 count 3

15 15 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 count 3

16 16 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 count 2

17 17 Count-controlled Loop int count ; count = 4; while (count > 0) TRUE { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 count 2

18 18 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 2 count 2

19 19 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 2 count 1

20 20 Count-controlled Loop int count ; count = 4; while (count > 0) TRUE { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 2 count 1

21 21 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 2 1 count 1

22 22 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 2 1 count 0

23 23 Count-controlled Loop int count ; count = 4; while (count > 0) FALSE { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 2 1 count 0

24 24 Count-controlled Loop int count ; count = 4; while (count > 0) { cout << count << endl ; count -- ; } cout << “Done” << endl ; OUTPUT 4 3 2 1 Done count 0

25 25 myInfile contiene 100 muestras de presión sangínea Utilize un ciclo while para leer las 100 muestras de presión sanguínea y busque la suma total Ejemplo de “Count-Controlled Loop”

26 26 ifstream myInfile ; int thisBP ; int total ; int count ; count = 0 ; // initialize while ( count < 100 ) // test expression { myInfile >> thisBP ; total = total + thisBP ; count++ ; // update } cout << “The total = “ << total << endl ; 26

27 27 Ciclos “Event-controlled” l Sentinel controlled Mantiene procesando data hasta que un valor especial, que no es un valor común, se entra para indicar que el procesamiento debe terminar. l End-of-file controlled Mantiene procesando data mientras encuentre datos en el archivo para leer. l Flag controlled Mantiene procesando data hasta que el valor de un flag cambia en el cuerpo del ciclo. 27

28 28 Ejemplo de los tipos de ciclos Count controlled loop Lee exáctamente 100 muestras de presión sanguínea de un archivo. End-of-file controlled loop Lee todas las muestras de presión sanguínea de un archivo sin importan cuantos hay. 28

29 29 Ejemplo de los tipos de ciclos Sentinel controlled loop Lee las muestras de presión sanguínea hasta que un valor especial (EJ. -1) seleccionado por el usuario, es leído. Flag controlled loop Lee las muestras de presión sanguínea hasta que se lee un valor peligrosamente alto (200 o más). 29

30 30 Un ciclo “Sentinel-controlled” l Requiere un “priming read” l “priming read” significa que debes leer un conjunto de datos antes de ejecutar el while.

31 31 // Sentinel controlled loop total = 0; cout << “Enter a blood pressure (-1 to stop ) ”; cin >> thisBP; while (thisBP != -1)// while not sentinel { total = total + thisBP; cout << “Enter a blood pressure (-1 to stop ) ”; cin >> thisBP; } cout << total;

32 32 Ciclo “End-of-File” l Depende del hecho de que el archivo caiga en un “fail state” al tratar de leer otro dato cuando se llega al final del archivo.

33 33 total = 0; myInfile >> thisBP; // priming read while (myInfile) // while last read successful { total = total + thisBP; myInfile >> thisBP; // read another } cout << total; // End-of-file controlled loop

34 34 //End-of-file at keyboard total = 0; cout << “Enter blood pressure (Ctrl-Z to stop)”; cin >> thisBP; // priming read while (cin) // while last read successful { total = total + thisBP; cout << “Enter blood pressure”; cin >> thisBP; // read another } cout << total;

35 35 Ciclos controlados por “Flags” l Inicializas un flag (true o false) l Usas un nombre significativo para el flag l Una condición en el cuerpo del ciclo cambia el valor del “flag” l Probar el “flag” en la expresión que prueba el ciclo.

36 36 countGoodReadings = 0; isSafe = true; // initialize Boolean flag while (isSafe) { cin >> thisBP; if ( thisBP >= 200 ) isSafe = false; // change flag value else countGoodReadings++; } cout << countGoodReadings << endl;

37 37 Los ciclos se utilizan con frecuencia para… l Contar todos los valores de un dato l Contar valores especiales l Sumar (acumular) los valores de los datos l Mantener un seguimiento de valores previos y actuales

38 38 Valores anteriores y actuales l Escribir un programa que cuenta el número de los operadores != en un programa. l Lee un caracter en el archivo a la vez. l Mantener un seguimiento de los caracteres previos y actuales.

39 39 Mantener seguimiento de los valores (x != 3) { cout << endl; } FILE CONTENTS previous current count ( x 0 ! = 1 = ‘ ‘ 1 x ‘ ‘ 0 3 ) 1 ‘ ‘ 3 1 ‘ ‘ ! 0 39

40 40 int count; char previous; char current; count = 0 ; inFile.get (previous); // priming reads inFile.get(current); while (inFile) { if ( (current == ‘=‘) && (previous == ‘!’) ) count++; previous = current;// update inFile.get(current); // read another }

41 41 initialize outer loop while ( outer loop condition ) {... initialize inner loop while ( inner loop condition ) { inner loop processing and update }... } Patrones de un “Nested Loop” 41

42 42 Datos de Pacientes Este archivo contiene datos de presión sanguinea de diferentes pacientes. Cada linea tiene un ID, el número de lecturas para ese paciente, seguido de las distintas lecturas. ID howManyReadings 4567 5180 140 150 170 120 23182170 210 52323150 151 151

43 43 4567152 2318190 5232151.. There were 432 patients in file. Lee los datos y muestra los resultados Patient ID BP Average

44 44 Algoritmo usado para los “Nested Loops” l inicializar patientCount a 0 l Lee el primer ID y el howMany del archivo l while not end-of-file n incrementa patientCount n display ID n usar un “count-controlled loop”para leer y sumar la cantidad de lecturas del paciente n calcula y muestra el promedio del paciente n Lee next ID y howMany del archivo l display patientCount

45 45 Para diseñar un “nested loop” l Comenzar con el “outer loop” l Cuando se sabe donde va el “inner loop”, se hace un módulo por separado

46 46 #include #include using namespace std; int main ( ) { int patientCount; // declarations int thisID; int howMany; int thisBP; int totalForPatient; int count; float average; ifstream myInfile; 46

47 47 myInfile.open(“A:\\BP.dat”); if (!myInfile ) // opening failed { cout > thisID >> howMany; // priming read 47

48 48 while ( myInfile ) // last read successful { patientCount++; cout << thisID; totalForPatient = 0; // initialize inner loop count = 0; while ( count < howMany) { myInfile >> thisBP; count ++; totalForPatient = totalForPatient + thisBP; } average = totalForPatient / float(howMany); cout << int (average +.5) << endl; // round myInfile >> thisID >> howMany; // another read } 48

49 49 cout << “There were “ << patientCount << “patients on file.” << endl; cout << “Program terminated.\n”; return 0; }

50 50 Información Sobre 20 Libros en un Archivo en Disco “A:\\myIn.dat” 3.98 P 7.41 H 8.79 P. Precio del Libro “Hardback” o “Paperback”? ESCRIBA UN PROGRAMA QUE SUME TODOS LOS PRECIOS DE LOS LIBROS

51 51 #include // for cout #include // for file I/O using namespace std; int main (void) { float price ; // declarations char kind ; ifstream myInfile ; float total = 0.0 ; int count = 1; Programa que lee sobre 20 Libros en un Archivo en Disco

52 52 Resto del Programa myInfile.open(“A:\\myIn.dat”) ; // count-controlled processing loop while ( count <= 20 ) { myInfile >> price >> kind ; total = total + price ; count ++ ; } cout << “Total is: “ << total << endl ; myInfile.close( ) ; return 0 ; } 52

53 53 Seguimiento de las Variables del Programa count price kind total 0.0 1 3.98 ‘P’ 3.98 2 7.41 ‘H’ 11.39 3 8.79 ‘P’ 20.18 4 etc. 20 21 so loop terminates

54 54 Complejidad Es una medida de la cantidad de trabajo envuelta al ejecutar un algoritmo relativo al tamaño del problema.

55 55 Polynomial Times N N 0 N 1 N 2 N 3 constant linear quadratic cubic 11 1 1 1 101 10 100 1,000 1001 100 10,000 1,000,000 1,0001 1,000 1,000,000 1,000,000,000 10,0001 10,000 100,000,000 1,000,000,000,000

56 56 Prueba y “Debugging”del “Loop” (ciclo) La data de prueba debe cubrir todas las secciones (módulos) del programa l Cuidado con los ciclos infinitos – el programa no se detiene l Verifica la condición de cotejo del ciclo y cotejar el problema de que se quede corto por uno l Usar la función “get” para los “loops” controlados para detectar el caracter ‘\n’ l Usar el algoritmo “walk-through” para verificar pre y post condiciones l Seguimiento a la ejecución del código de un ciclo a mano usando el “walk-through“ l Usar el “debugger” para correr programas en “slow motion” o utilizar “statements” que facilitan el “debug”


Descargar ppt "Chapter 6 Looping Dale/Weems/Headington. 2 Chapter 6 Topics l While Statement Syntax l Count-Controlled Loops l Event-Controlled Loops l Using the End-of-File."

Presentaciones similares


Anuncios Google