06_Ciclos_for_anidados_Arreglos_Redondeo_06

Anuncio
Ciclos 'for' anidados; Arreglos; operador
#define
 Algoritmos:
o
Ciclos anidados tipo 'for': Ejercicio: sumar valores de una función de dos
variables para todos pares de argumentos en un rectángulo o un triángulo. Analice
el siguiente ejemplo:
int suma=0, i, j, Xmax=20, Ymax=15;
/* Para función f(x, y)=x+y, el siguiente fragmento de código calcula la suma de
todos sus valores en una reja formada por argumentos enteros y al rectángulo
[0; Xmax] x [0; Ymax] */
for(suma=0, i=0; i<=Xmax; i++)
for(j=0;j<=Ymax; j++)
suma+=i+j;
/* El siguiente fragmento de código calcula la suma de valores de la misma función pero
adentro de otra figura geométrica. Analice como la forma de esta figura depende de
variación de Xmax y Ymax */
for(suma=0, i=0; i<=Ymax; i++)
for(j=i;j<=Xmax; j++)
suma+=i+j;
o
Redondeo. Ejemplos del código:
 Variante 1, a través de cálculo de 'parte fraccionaria:
float a, fa /* para representar parte fraccionaria de a */;
int k, a_redondeado;
printf(" dame un flotante para redondear\n");
scanf("%f",&a);
if(a>=0.f) //redondeo de los positivos difiere de los negativos
{
k=a;
//k será 'a' sin parte fraccionaria
fa=a-k; //fa es parte fraccionaria de 'a'
if(fa>=0.5f) //construir a_redondeado mediante k pero
// en dependencia de 'fa'
a_redondeado=k+1;
else
a_redondeado=k;
}
else //redondeo de los negativos
{
k=a;
fa=k-a;//fa parte fraccionaria de a
if(fa>=0.5f)
a_redondeado=k-1;
else
a_redondeado=k;
}
printf(" valor redondeado es %d\n", a_redondeado);

Variante 2, Mucho más compacto:
float a;
….//aquí debe ser inicialización de a
int a_redondeado;
if(a>=0.f) a_redondeado=a+0.5f;
else
a_redondeado=a - 0.5f;
 Lenguaje
o Operador de ciclo 'for' (Explicaciones detalladas de sintaxis solo en salón,
aprovechen libros de texto u otras fuentes de información)
o Comparaciones == (igual) y != (no igual), por ejemplo:
if(a==b){…} //si a y b sean iguales ejecutar cuerpo de llaves
o
Operadores lógicos && y || ("Y" y "O").
Por ejemplo, el uso de && vea en el último código antemencionado.
o Operador de preprocesador #define
o Arreglos unidimensionales. Analicen el código del ejemplo:
#define N 10 //sustituir en el código todas occurencias de N con 10
int main()
{
int i=10;
float a,
x[N]={-1.f, 0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,10.f}; //declaración de arreglo
//flotante 'x' de 10 elementos y su inicialización.
/*imprimir contenido de 'x'*/
for(i=0; i<N; i++)
printf(" x[%d] = %f \n", i, x[i]);
a=x[3]+3.45f; //ejemplo de acceso a un elemento del arreglo 'x'
x[0]=-1.f; ; //otro ejemplo de acceso a un elemento del arreglo
return 0;
}
o Uso de diferentes tipos en misma expresión aritmética; jerarquía de tipos:
int<float<double mientras expresiones con tipos mixtas los elementos de tipos
menores se transforman a los mayores; transformación forzosa de un tipo a otro
En el código
double a=1.9;
float b=-0.9;
int i=4, j=5, k;
k=i+j+a*b;
primeramente se suman i+j como enteros, y resultado espera un buffer, luego b se
transforma a tipo doble y se multiplica con a, luego i+j desde buffer se transforma
a doble y se suma con a*b, luego del resultado se quita la parte fraccional y se
mete en k
o Asignación de flotante o doble a un entero -> se quita parte fraccional, por
ejemplo, después de:
double a=1.9, b=-0.9;
int ia=a, ib=b;
los valores de ia y ib serán 1 y 0, respectivamente;
o El dominio de validez de declaración de una variable.
Para el código
{int i=3;
}
printf("%d", i);
el sistema va a registrar un error, porque no reconocerá i en printf: su dominio de
validez es acotado por lo llaves
Para el código
int i=5;
{int i=3;
}
printf("%d", i);
resultado de impression será 5
 Tarea N°3
Escribir programa que calcula valor de la siguiente función:
k
k n x
expn(x)= k 0
k!
El programa pide de operador n y x, y luego imprima expn(x).
Nota. Cabe mencionar que expn(x) representa una aproximación a exp(x) mediante serie de
Taylor
Entrega: grupo LMV -> viernes 29/05; grupo MaJu -> domingo 31/05
Aviso: tengo un curso en las semanas 3 y 4. Por ello Lu-Mi-Vi en dichas semanas estaré poco
disponible para asesorías entre 10:00 y 13:00. Gracias por comprensión.
Descargar