Sunteți pe pagina 1din 23

Informtica I

Clase N 10: 20/05/2013


20130520
Tema D:
Control de flujo en C. Construcciones algortmicas. Sentencias.
Sentencias if. Construccin else. Bucle while. Bucle for. Bucle
do...while. Control de bucles: break y continue. Construccin switch.
(2da clase de dos)


1
Estructura SI - Codificacin
if (Exp. Log.){
[Accin 1a];
[Accin 2a];
...
[Accin n];
}
else {
[Accin 1b];
[Accin 2b];
...
[Accin m];
}
Exp.
Log.
Accin 1a
V F
... ...
Accin 2a
Accin n
Accin 1b
Accin 2b
Accin m
2
Estructura Segn -Codificacin
switch (Selector){
case 1:
case 3:
[accin 1a];
[accin 2a];

[accin m];
break;
case 2:
[accin 1b];
[accin 2b]; [accin n];
break;
case A:
[accin 1c];
[accin 2c]; [accin o];
break;
default:
[accin 1d];
[accin 2d]; [accin p];
break;
}

1,3 2 A Otro
Selector

Accin 1a Accin 1b Accin 1c Accin 1d
Accin 2a Accin 2b Accin 2c Accin 2d
Accin m Accin n Accin o Accin p

3
Lxico
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
65 %
4
Iterativa con control al inicio
Exp.
Log.
A
V
F
MIENTRAS Exp.Log.
HACER

A;

FINMIENTRAS
while (Exp.Log. )
A;
while (Exp.Log. ) {
A;
B;
} 5
Iterativas con control al final
Exp.
Log.
A
0

REPETIR
A;
HASTAQUE Exp.Log.
SEAF
do
A;
while (Exp.Log. );
do {
A;
B; }
while (Exp.Log. );
6
Estructura iterativa controlada
por contador
Inicializacin; Condicin ;
Modificacin
for (Inicializacin; Condicin ;
Modificacin) {

}
7
Problema
O Como las vacas solucionan el problema
de tomar agua cuando tienen sed?

O Ayuda: Las vacas tienen muy mala visin
(vista)

8
Mtodo de aproximaciones
sucesivas o de punto fijo
O Calcular en forma aproximada la raz de
la ecuacin f(x) = 0
O O calcular los ceros de la funcin f(x)

9
Solucin
O Posible solucin:
1. Despeje mediante transformaciones de
equivalencia la ecuacin f(x)=0 en la forma x =
g(x)
2. Tome un valor particular de x=x
1
que usted
considere es una solucin particular de la
ecuacin, utilice dicho valor en la formula g(x) a
fin de obtener una mejor aproximacin del
valor buscado (x
2
)
3. Proceda en forma similar para obtener x
3
, x
4
, etc.
X
3
= g(x
2
); x
4
= g (x
3
); . ; x
N
= g(x
N-1
)
Hasta que no se gane tanto por realizar otra
aproximacin
10
Ejemplo
O Calcular la raz de la ecuacin:
Ecuacin Polinmica de grado 4
Teorema de Abel
11
Ecuacin Polinmica de grado 5 o superior
Existe formula de
resolvente
Programa para
separar races
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[ ] ) {
float x, y;
printf ("Tabla de valores\n"
" X | Y \n"
"========|==========\n");
for (x=-10;x<=10;x=x+0.5){
y = ((4*x-2)*x+5)*x-2;
printf("%7.2f | %8.2f\n",x,y);
}
system("PAUSE");
return 0;
}
12
Programa calculo de aprox. de races por el
mtodo de punto fijo
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv [ ] ) {
float x1, x2;
int i;
unsigned char flag;
printf("Ingrese aproximacion inicial:
");
scanf ("%f",&x1);
i=1;
flag = 1;
while ((i<50) && flag) {
x2=(((-4*x1+2)*x1+0)*x1+2) /5;
printf ("%.7f\n", x2);
if (fabs(x2-x1)<0.0000001)
flag =0;
x1=x2;
i++;
}
if (flag == 0)
printf("La raiz aproximada es: %12.7f\n", x1);
else
printf("No se obtuvo la raz buscada\n");
system("PAUSE");
return 0;
}
13
Salidas
14
Casos especiales:
Definicin del cero: El cero se representara con valores 0 en el exponente y en el
mantisa. Ejemplo:
0 00000000 00000000000000000000000 = +0
1 00000000 00000000000000000000000 = -0

Infinitos: se ha convenido que cuando todos los bits del exponente estn a 1 y
todos los del mantisa a 0, el valor es +/- infinito (segn el valor del signo). Ejemplo:
0 11111111 00000000000000000000000 = +Infinito
1 11111111 00000000000000000000000 = -Infinito
Valores no-normalizados (denominados tambin "subnormales"). Se identifican
porque todos los bits del exponente son 0 pero el significado presenta un valor
distinto de cero (en caso contrario se tratara de un cero). Ejemplo:
1 00000000 00100010001001010101010

Valores no-numricos: Denominados NaN ("Not-a-number"). Se identifican por un
exponente con todos sus valores a 1, y una mantisa distinta de cero. Ejemplo:

0 11111111 10000100000000000000000
1 11111111 00100010001001010101010
15
16
Esquema inicial
17
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
unsigned char x;
unsigned char signo;
int i;
unsigned char exp;
unsigned long mant;
double parcial, total;
printf ("Ingrese cada uno de los bits ledos"
" de izquierda a derecha (0 o 1):\n");
printf ("\nIngrese el signo(0 o 1):\n");
do
scanf("%ud",&signo);
while ((signo!=0) && (signo!=1));
if (signo == 0)
printf ("positivo\n");
else
printf ("negativo\n");

printf ("\nIngrese el exponente(0 o 1):\n");
exp = 0;
for (i=1; i <=8; i++){
printf("%d: ",i);
do
scanf("%ud",&x);
while ((x!=0) && (x!=1));
exp = exp*2+x;
}
printf ("\nIngrese la Mantisa(0 o 1):\n");
mant = 0;
for (i=1; i <=23; i++){
printf("%d: ",i);
do
scanf("%ud",&x);
while (x!=0 && x!=1);
mant = mant*2 + x;
}

18
if (exp == 255){
if (mant == 0) {
if (signo ==0)
printf ("+ Infinito\n");
else
printf ("- Infinito\n");
}
else
printf ("No Numerico\n");}
else
if (exp == 0){
if (mant==0)
if (signo == 0)
printf ("+0\n");
else
printf ("-0\n");
else {
/*Procesar subnormal*/
parcial = 0;
for (i=1;i<=23;i++){
parcial = parcial*0.5+ (mant -mant/2*2);
mant = mant/2;}
total = parcial*pow(2,-127);

if (signo == 1)
total = -1*total;
printf ("\n%.7le\n",total);}
}
else {
/*Procesar Normal*/
parcial = 0;
for (i=1;i<=23;i++){
parcial = parcial*0.5 + (mant -
mant/2*2);
mant = mant/2;}
parcial = parcial*0.5+ 1;
total = parcial * pow(2,exp-127);
if (signo == 1)
total = -1*total;
printf ("%.7le\n",total);}

system("PAUSE");
return 0;
}

19
Pginas a consultar
O http://www.h-schmidt.net/FloatApplet/IEEE754.html

O http://babbage.cs.qc.edu/IEEE-754/Decimal.html

O http://www.etsimo.uniovi.es/~antonio/uned/ieee754/ejemplos.html

O Revista Mercado Electrnico N 172: Matemtica de punto
flotante
20
break y continue
Los enunciados break y continue son utilizados para modificar el flujo de
control dentro de un programa.
El break utilizado dentro de las estructuras de control causa la inmediata
salida de dicha estructura (ver estructura switch).
El enunciado continue, dentro de las estructuras de repeticin, al ser
ejecutado salta las instrucciones que siguen en el bloque y ejecuta la
siguiente repeticin en el ciclo.
21
int num;
num = 1;
while (num <= 10){
if (num == 5) {
break;
};
printf(%d - , num);
num = num + 1;
};
El cdigo anterior imprime:
1 2 3 4
int num;
num = 0;
while (num <= 7){
num = num + 1;
if (num == 5) {
continue;
};
printf(%d - , num);
};
El cdigo anterior imprime:
1 2 3 4 6 7 - 8
Consultas
22
Tarea
1. Modificar la funcin g(x) y proba con ingresando el extremo
superior o el inferior del intervalo de existencia de la raz.
Nota: la funcin g(x) para una ecuacin dada en general no
es nica
2. Tome otra ecuacin cualquiera, modifique el programa de
separacin de races y el de punto fijo para obtener las races
mencionadas.
3. Modifique el ltimo programa para que tambin muestre en
hexadecimal el contenido almacenado en los 4 bytes
4. Implemente un programa que ingrese en hexadecimal los 4
bytes de datos y muestre el valor equivalente en decimal
representado
23

S-ar putea să vă placă și