martes, 30 de agosto de 2011

BUCLE DO/WHILE - WHILE


Ejercicios con While y Do While.



Objetivos. Al finalizar la práctica los estudiantes serán capaces de:
• Resolver Problemas usando estructuras While Y Do While
• Aplicar el concepto de centinelas y banderas con estructuras While y Do While.

Estructura Mientras (While)
Al igual que el bucle for, el bucle While es un bucle de precondición. Esto significa que el programa evalúa la condición antes de entrar en la instrucción o instrucciones del cuerpo del bucle. Como consecuencia de esto, los bucles de precondición se pueden ejecutar desde cero hasta varias veces.
La sentencia while se utiliza para generar bucles repetidamente, hasta que la condición deje de ser verdadera.
Sintaxis:
while ( [condición] ) {
Sentencias;
}

Como en todas las estructuras que hemos visto, si se cuenta con una sola sentencia de repetición, no es necesario escribir las llaves.
Estructura Repetir (Do While)
La sentencia do – while se utiliza para especificar un bucle condicional que se ejecuta al menos una vez. Esta situación se suele dar en algunas circunstancias en las que se ha de tener la seguridad de que una determinada acción se ejecutará una o varias veces, pero al menos una vez.
Cuando se construye un bucle usando while, la evaluación de la condición para la continuación del bucle se realiza al comienzo de cada pasada. Sin embargo, a veces es deseable disponer de un bucle en el que se realice el examen al final de cada pasada.
Con esta sentencia se controla la condición al final del bucle. Si ésta se cumple, el programa vuelve a ejecutar las sentencias del bucle.
La única diferencia entre las sentencias while y do...while es que con la segunda el cuerpo del bucle se ejecutará por lo menos una vez.
Sintaxis:
do {
sentencia1;.......
sentenciaN;
} while ([evaluación]);

Ejemplo 1
Elabore un programa en lenguaje C para calcular el promedio de una lista de x números.
Solucion en WHILE:

#include stdio.h>
#include stdlib.h>
main ( )
{
int n , contar=1;
float x , promedio , suma=0;
printf ("Cuantos números desea leer?: ");
scanf ("%d",&n);
while (contar <= n) {
printf ("x= ");
scanf ("%f",&x);
suma +=x;
++contar;
}
promedio=suma/n;
printf ("\nEl promedio es: %.2f\n",promedio);

system(“pause”);
return 0;
}

Solucion en DO-WHILE
#include stdio.h>
#include stdlib.h>
main ( )
{
int n, contar = 1;
float x, promedio, suma = 0;
printf ("Cuantos numeros?: ");
scanf ("%d",&n);
do {
printf("x= ");
scanf ("%f", &x);
suma +=x;
++contar;
} while (contar <= n);
promedio = suma/n;
printf ("\nEl promedio es: %.2f\n",promedio);
system(“pause”);
return 0;
}


Ejemplo 3 : Uso de centinelas
En el ejemplo se introducen notas mientras que ésta sea distinta de centinela, al final imprime cuántas notas se ingresaron, su suma y un mensaje de final. Nota se ha declarado de tipo entero.
#include stdio.h>
#include stdlib.h>
main()
{
const int centinela = -1;
int nota,suma=0;
int cuenta =0;
printf("Introduzca primera nota:\n");
scanf("%d",¬a);
while (nota != centinela)
{
cuenta++;
suma+= nota;
printf("Introduzca la siguiente nota:\n");
scanf("%d",¬a);
}
printf("la suma es: %d\n",suma);
printf("la cuenta fue: %d\n", cuenta);
puts("final");
system(“pause”);
return 0;
}
Ejemplo 4: Uso de centinelas.
Elabore un programa para solicitar el nombre, apellido, edad y la nota promedio de 5 estudiantes de un curso de computación, el programa debe realizar la petición de los datos hasta que se hallan completado los datos.
Solución:
#include stdio.h>
#include conio.h>
#include stdlib.h>
main()
{
int op,edad;
float nota;
char nombre[20], apellido[20];
op=1;
while (op<=5)
{
system("cls");
if(op==5)
{
printf("\n\n\t");
printf("ESTE ES EL ULTIMO ALUMNO");
}
printf("\n\n\t");
printf("REGISTRO DE ALUMNO # %d",op);
printf("\n\n\t\t");
printf ("Nombre: ");
scanf ("%s",nombre);
printf("\n\n\t\t");
printf ("Escriba su Apellido: ");
scanf ("%s",apellido);
printf("\n\n\t\t");
printf ("Escriba su Edad: ");
scanf ("%d",&edad);
printf("\n\n\t\t");
printf ("Escriba su Nota Promedio: ");
scanf ("%f",¬a);
++op;
}
system("cls");
printf("\n\n\n\t");
printf ("\nE L P R O G R A M A H A T E R M I N A D O\n");
system("pause");
return 0;
}
Nota: Este ejemplo aplica el uso de tabuladores para ordenar la información
Ejemplo 5: Uso de banderas.
El siguiente programa utiliza un juego de adivinación de un número, indicando las veces que se necesitan para encontrar el valor de 77. Note el uso de la instrucción continue que provoca que se ignoren todas las instrucciones que siguen a dicha instrucción.
La instrucción while (!iadivinado) indica que mientras sea verdadero que entre al bucle, esto es porque la variable iadivinado se inicializó a FALSO. Esta variable es la bandera del programa, en el momento en que el usuario digite el número 77, la bandera cambia a verdadero y la condición del bucle deja de ser verdadera y se sale.
Observa también que se definieron dos constantes para que la comparación sea numérica, ya que decimos que verdadero vale 1 y falso vale cero, al escribir por ejemplo, la palabra VERDADERO, en realidad, lo que toma la variable es el valor de 1.
#include
#include
#define VERDADERO 1
#define FALSO 0
int main()
{
int inumero_correcto,iadivinado;
int ivalor_introducido,inumero_intentos;
inumero_correcto=77;
iadivinado=FALSO;
inumero_intentos=0;
while (!iadivinado){
printf("por favor, introduzca el numero de la suerte:");
scanf("%d", &ivalor_introducido);
inumero_intentos++;
if(ivalor_introducido== inumero_correcto)
iadivinado=VERDADERO;
else
continue;
printf ("¡Usted ha necesitado %d intentos para adivinarlo!\n", inumero_intentos);
}
system("pause");
return 0;
}

EJERCICIOS:
Ejercicio 1:
Escriba un programa que calcule el resultado de todos los números del uno al cien (1+2+3+4......).
Ejercicio 2:
Escriba un programa que genere las tablas de multiplicar del 1 al 10.
Ejercicio 3:
Haga un programa que pida el número de alumnos de una clase y luego debe permitir ingresar los nombres de dichos alumnos.
Ejercicio 4:
Una compañía de seguros tiene contratados a n vendedores. Cada uno hace tres ventas a la semana. Su política de pagos es que un vendedor recibe un sueldo base y un 10% extra por comisiones de sus ventas.
El gerente de la compañía desea saber cuánto dinero obtendrá en la semana cada vendedor por concepto de comisiones y cuánto tomando en cuenta su sueldo base y sus comisiones
Ejercicio 5:
Haga un programa usando bucle do-While, que pida números y luego calcule la media de esos números. El usuario debe introducir los datos hasta que escriba –1 para finalizar la lectura.

Ejercicio 6:
Escriba un programa usando banderas para imprimir y sumar los términos de la serie 2,5,7,10,12,15....50. Nota que a la serie se le suma 2 y a veces 3. (Puedes auxiliarte del algoritmo visto en clase teórica)
Ejercicio 7:
Elabora el programa que escriba los números del 1 al 100 excepto el número 25. Utiliza la función continue.

EJERCICIO 7
Leer un numero de 3 digitos y sumarlos

TALLER PARA PRESENTARSE A EVALUACION MENSUAL ii TRIMESTRE

Ejercicios con Arreglos unidimensionales.



I. Objetivo. Al finalizar la práctica el estudiante será capaz de:
• Definir estructuras de datos y arreglos.
• Utilizar arreglos en una dimensión para resolver problemas.
II. Introducción Teórica.
Los Arreglos (Vectores o Array)
Un array (lista o tabla9 es una secuencia de datos del mismo tipo. Los datos se llaman elementos del array y se numeran consecutivamente 0, 1, 2, 3, ,, etc. Estos números se denominan valores índice o subíndice del array. El tipo de elementos almacenados en el array pueden ser cualquier tipo de dato de C, incluyendo estructuras definidas por el usuario.
Entonces, podemos entender los arrays (también conocidos como arreglos o formaciones) como variables que contienen diferentes tipos de datos homogéneos. Se puede acceder a cada elemento de datos individual de la variable mediante un subíndice, o índice. En los lenguajes C y C++, un array no se corresponde con un tipo de dato estándar; en su lugar, se trata de un tipo agregado que se obtiene a partir de otros tipos de datos. Es posible tener un array de cualquier cosa: caracteres, enteros, números en coma flotante, arrays, etc.
Un array se declara de modo similar a otros tipos de datos, excepto que se debe indicar al compilador el tamaño o longitud del array. Para indicar al compilador el tamaño o longitud del array se debe hacer seguir al nombre, el tamaño encerrado entre corchetes.
Los arrays tienen cuatro propiedades básicas:
• Los elementos individuales de datos de un array se denominan elementos.
• Todos los elementos deben ser del mismo tipo de dato.
• Todos los elementos se almacenan en posiciones contiguas de la memoria de la computadora y el subíndice (o índice) del primer elemento es cero.
• El nombre de un array es un valor constante que representa la dirección del primer elemento del array.
Para acceder a un elemento especifico del array, se utiliza el nombre de éste seguido por uno o más “índices” (donde cada uno representa una dimensión del arreglo o array) encerrado entre corchetes. Supongamos que tenemos un arreglo unidimensional llamado X con un tamaño de “n” elementos, su esquema grafico es el siguiente:



Como puede verse en el esquema, aunque el arreglo es de “n” elementos, en realidad tienen “n-1” elementos porque comienzan a enumerarse desde cero.
En términos generales para definir un array se especifica el tipo de almacenamiento (atributo opcional), el tipo de datos, el identificador y entre corchetes el tamaño del arreglo. Abajo se muestra algunos ejemplos de definición de arreglos:

a) int num[100]; (un array de 100 enteros)
b) char apellido[25]; (un array de 25 caracteres)
c) float prom[30]; (un array de 30 coma flotante)
d) char contrasena[16]; (un array de 16 caracteres)

La necesidad de definir arrays en función de constantes
A veces es conveniente definir el tamaño de un array en términos de una constante, en lugar de estar especificando una cantidad entera fija. Esto se realiza por facilidad de mantenimiento. Por ejemplo, suponga que tenemos un programa (con 350 líneas de código) donde se halle un array de 20 items, y a lo largo del programa se hace referencia unas 12 veces al arreglo, y supongamos también que se necesita cambiar el tamaño del arreglo. Sin usar la constante se tendría que revisar todo el programa para localizar las líneas de código y efectuar el cambio al nuevo tamaño, en cambio con el uso de constantes sólo se le cambia el tamaño a la misma y el problema esta resuelto. La definición de un array a través de una constante se muestra en el siguiente ejemplo:
# include stdio.h>
# include stdlib.h>
/* Definición de la constante */
#define tamano 20
main()
{
/* Utilización de la constante para definir la dimensión del arreglo */
int promedios[tamano];
/* Leer valores utilizando la variable i como contador dentro del ciclo FOR y ++i como acumulador*/
for (i=0; i < tamano; ++i)
scanf(“%d”,&promedios[i]);
.....
.....
}
La utilización de constantes definidas garantiza que las siguientes referencias al array no sobrepasen el tamaño definido para el mismo.
C no comprueba que los índices del array están dentro del rango definido.

Inicialización de arreglos
En ciertas circunstancias puede ser necesario darle valores iniciales a los arreglos, para ello basta con colocar entre llaves el conjunto de valores deseados separados por comas y en el orden requerido. A continuación se muestran algunos ejemplos:
a) int cant[6]={12,-3,0,15,8};
b) double DesvTipica[8]={0.23, 3.1416, -0.5, 2.16789, -56.78, 25, 0.15, -14 };
c) char meses[12]={‘E’, ‘F’, ‘M’, ‘A’, ‘M’, ‘J’, ‘J’, ‘A’, ‘S’, ‘O’, ‘N’, ‘D’};

Para el caso del arreglo “cant” es como tener:
Cant[0]=12
Cant[1]= -3
Cant[2]=0
Cant[3]=15
Cant[4]=8

Cuando los elementos del arreglo no tienen asignados valores iniciales explícitos, éstos son puestos a cero, a continuación tenemos un ejemplo:
int edades[8]={25,13,18};

El resultado de la asignación seria el siguiente:
Edades[0]=25;
Edades[1]=13;
Edades[2]=18;
Edades[3]=0;
Edades[4]=0;
Edades[5]=0;
Edades[6]=0;
Edades[7]=0;

Este método de inicializar arrays mediante valores constantes después de su definición, es adecuado cuando el número de elementos del arreglo es pequeño.
Una nota interesante en cuanto a la inicialización de arreglos, es que el tamaño no necesita ser indicado explícitamente. Con los arrays numéricos el tamaño será fijado igual al número de valores incluidos. En cuanto a las cadenas, el tamaño se fijará igual al número de caracteres del string o cadena mas uno (el carácter nulo “\0”).
C puede dejar los corchetes vacíos, sólo cuando se asignan valores al array, tal como
int cuenta[ ] = { 15, 25, -45 , 0 , 50 };
char c[ ] = { ‘L’, ‘u’, ‘i’, ‘s’ }; /* declara un array de 4 elementos */
El compilador asigna automáticamente cinco elementos a cuenta.
Otros ejemplos:
a) Int porcent[ ]={8, 6, 10, -15, 23};
b) Char mes[ ]=”octubre”;
que vienen siendo equivalente a:

Porcent[0]=8;
porcent[1]=6;
porcent[2]=10;
porcent[3]= -15;
porcent[4]=23;

mes[0]=‘o’;
mes[1]=‘c’;
mes[2]=‘t’;
mes[3]=‘u’;
mes[4]=‘b’;
mes[5]=‘r’;
mes[6]=‘e’;
mes[7]=‘\0’

Ejemplo 1:
Elabore un programa que permita leer una lista de números en un arreglo, calcule la suma, promedio, cuadrado , cubo y desviación estándar de los mismos:
#include stdio.h>
#include stdlib.h>
#include conio.h>
#include math.h>
#define tam 4
/* programa para calcular la suma, promedio, cuadrado, cubo y desviación
estandar de una serie de números */
main ( )
{
double vector[tam],cuadrado, cubo;
float prom, desv,suma=0;
int i, j;

system("cls" );
printf ("PROGRAMA PARA CALCULAR \n");
printf(" PROMEDIO, SUMA, CUADRADO, CUBO Y DESV. EST.\n\n") ;
//Captura de valores y suma de los mismos
for(i = 0 ; i < tam ; ++i)
{
printf ("num [%d] = " , i) ;
scanf ("%lf" , &vector[i]) ;
suma+= vector[i] ;
}
prom = suma / tam ;
printf (" \n El promedio de los numeros es: %4.2f\n ", prom) ;
//Calculo e impresión de cuadrado, cubo y desviación estandar
printf(" \n \n NUMERO CUADRADO CUBO DESV. EST.\n");
for( i = 0 ; i < tam ; ++i )
{
cuadrado = vector[i] * vector[i] ;
cubo = pow (vector[i], 3) ;
desv = vector [i] - prom ;
printf ("%.2lf", vector[i] ) ;
printf (" \t%.2lf", cuadrado) ;
printf (" \t%.2lf", cubo) ;
printf (" \t%.2f\n", desv) ;
}
system("pause");
return(0);
}

Nota que los valores fueron declarados de tipo double no enteros, por el tamaño de los valores que se generan en los cálculos.

Ejemplo 2:
El siguiente programa lee 5 valores de teclado y los guarda en un arreglo a. Luego los escribe.

#include stdio.h>
#include stdlib.h>
main()
{
int a[5],i,num;
for(i=0; i<5;i++){
printf("Digite el numero:\n");
scanf("%d",&num);
a[i]=num;
}

printf("\nEscribiendo el arreglo con los datos leidos:\n\n");
for(i=0; i<5;i++){
printf("a[%d]= %d\n\n",i,a[i]);
}
system("pause");
return 0;
}

Ejemplo 3:
El siguiente programa, pide 5 numeros y calcula los cubos de ellos, los cuales son guardados en un arreglo y son desplegados.

#include stdio.h>
#include stdlib.h>
#include math.h>
main()
{
int i;
double a[5], num;
for (i=0; i<5; i++)
{
printf("\n Digite numero:");
scanf("%lf", &num);
a[i]=num;
}
printf("_________________________________________\n");
printf("Los cubos de los numeros leidos son:\n");
for (i=0; i<5; i++){
a[i]=pow(a[i],3);
printf("%.0lf\n",a[i]);
}
printf("\n");
system("pause");
return 0;
}



EJERCICIOS:

Ejercicio 1:
Digite, compile y ejecute el siguiente programa.
#include stdio.h>
#include stdlib.h>
main()
{
int a,b=0;
int c[10]={1,2,3,4,5,6,7,8,9,0};
for (a=0;a<10;++a)
if ((c[a]%2)==0) b+=c[a];
printf("%d\n",b);
system(“pause”);
return 0;
}

¿Qué hace el programa? __________________________________________
_______________________________________________________________
Cuál es la salida? _______

Ejercicio 2:
Digite, compile y ejecute el siguiente programa.
#include stdio.h>
#include stdlib.h>
main()
{
int a,b=0;
int c[10]={1,2,3,4,5,6,7,8,9,0};
for (a=0;a<10;++a)
if ((a%2)==0)b+=c[a];
printf("%d\n",b);
system(“pause”);
return 0;
}
¿Qué hace el programa? __________________________________________
_______________________________________________________________
Cuál es la salida? _______
¿En qué se diferencia del ejemplo anterior? ____________________________
_______________________________________________________________
Ejercicio 3
Elabore un programa que sume los primeros 25 números enteros guardados en un vector. Se desea imprimir la lista de números y al final la suma de los mismos.
Ejercicio 4
Generar e imprimir un vector de 10 números enteros y encontrar el mayor de ellos. Desplegar el resultado.
Ejercicio 5
Dadas dos listas A y B de igual número de elementos, se desea generar e imprimir una lista C conteniendo las sumas: A[i] + B[i] = C[i]