lunes, 31 de marzo de 2008

Capítulo 2

.
Operadores Aritméticos

A continuación veremos ejemplos en los que se utilizan algunos operadores aritméticos como ser el operador módulo, la división entera, el operador de incremento, el acumulador, etc.

Problema 2.1
Leer un valor numérico e indicar si es par o impar.
   1:
2:#include<stdio.h>
3:
4:int main()
5:{
6: int v, resto;
7: printf("Ingrese un valor: ");
8: scanf("%d",&v);
9:
10: // el operador % retorna el resto en la division
11: resto = v%2;
12:
13: if( resto == 0 )
14: {
15: printf("Es par\n");
16: }
17: else
18: {
19: printf("Es impar\n");
20: }
21:}
22:

Un número es par si el resto en la división por 2 es cero. Para calcular el resto utilizamos el operador # (módulo) que realiza la división y retorna el resto (línea 11).


Problema 2.2
Se ingresa por teclado una fecha expresada como un número entero de 8 dígitos con el siguiente formato: ddmmaaaa (donde los primeros dos dígitos corresponden al día, los dos siguientes corresponden al mes y los cuatro últimos corresponden al año).

Se pide mostrar un mensaje indicando: “La fecha que Ud. ingresó tiene día=dd, mes=mm y año=aaaa”.
   1:
2:#include<stdio.h>
3:
4:int main()
5:{
6: long fec;
7: int dia, mes, anio;
8:
9: printf("Ingrese una fecha (ddmmaaaa): ");
10: scanf("%d",&fec);
11:
12: // el operador / se utiliza para division entera
13: // y para division flotante. Si los dos operandos
14: // son enteros entonces se considera div entera
15: dia = fec / 1000000;
16: mes = (fec-dia*1000000) / 10000;
17: anio = fec - (dia*1000000+mes*10000);
18:
19: printf("dia=%d mes=%d anio=%d\n",dia,mes,anio);
20:}
21:

En este ejemplo vemos como utilizamos el operador " / " para obtener la división entera entre dos valores. Como los dos operandos son enteros entonces el resultado será entero pero si al menos uno de los operadores fuese flotante entonces el resultado será flotante como muestra el siguiente ejemplo.

testDiv.c
   1:
2:#include<stdio.h>
3:
4:int main()
5:{
6: int a=3, b=2;
7: float f;
8:
9: // el resultado sera 1.00000
10: f = a/b;
11: printf("f = %f\n",f);
12:
13: // el resultado sera 1.50000
14: f = (float)a/b;
15: printf("f = %f\n",f);
16:}
17:

En este ejemplo estamos "casteando a float" (línea 14). Esto significa que estamos conviertiendo el valor de a a float. Con esto logramos que la división sea considerada flotante.


Problema 2.3
Ingresar un valor n, calcular la sumatoria de los primeros n números naturales.
   1:
2:#include<stdio.h>
3:
4:int main()
5:{
6: int n,i,suma=0;
7:
8: printf("Ingrese un valor: ");
9: scanf("%d",&n);
10:
11: for( i=1; i<=n; i++ )
12: {
13: suma+=i; // esto es igual a hacer: suma=suma+i
14: }
15: printf("La suma de los primeros %d ", n);
16: printf("numeros naturales es: %d\n", suma);
17:}
18:

En este ejemplo utilizamos el operador " += " (línea 13) para acumular el valor de i en la variable suma.

Sean las variables a y b entonces:

a += b; // es equivalente a hacer a = a + b
a -= b; // es equivalente a hacer a = a - b
a *= b; // es equivalente a hacer a = a * b

No hay ningún motivo en especial para utilizar este tipo de operadores. Solo es una cuestion de comodidad.


Problema 2.4
Dado un valor calcular su factorial.
   1:
2:#include<stdio.h>
3:
4:int main()
5:{
6: int n,i=1;
7: long fact=1;
8:
9: printf("Ingrese un valor: ");
10: scanf("%d",&n);
11:
12: while( i<=n )
13: {
14: fact*=i; // fact = fact * i
15: i++; // i = i + 1
16: }
17:
18: printf("El factorial de %d es: %d\n",n,fact);
19:}
20:


Problema 2.5
Leer un conjunto de números que finaliza con un valor 0. Indicar cual es el mayor (máximo).
a - Considerar que todos los números son positivos.
b - Considerar que pueden venir números positivos

problema2.5b.c
   1:
2:#include<stdio.h>
3:
4:int main()
5:{
6: int max, v;
7:
8: // leo un numero
9: printf("Ingrese Numero: ");
10: scanf("%d", &v);
11:
12: max = v; // asigno el valor de v a max
13:
14: // mientras v sea distinto de cero
15: while( v != 0 )
16: {
17: if( v>max )
18: {
19: max=v;
20: }
21:
22: // leo el siguiente numero
23: printf("Ingrese Numero: ");
24: scanf("%d", &v);
25: }
26:
27: printf("Maximo: %d\n", max);
28:}
29:


Problema 2.6
Leer un conjunto de números que finaliza con un valor 0. Indicar cual es el menor (mínimo).
a - Considerar que todos los números son menores que 1000.
b - Considerar que puede venir cualquier número positivo o negativo.

problema2.6b.c
   1:
2:#include<stdio.h>
3:
4:int main()
5:{
6: int min, v;
7:
8: // leo un numero
9: printf("Ingrese Numero: ");
10: scanf("%d", &v);
11:
12: min = v;
13:
14: while( v != 0 )
15: {
16: if( v < min )
17: {
18: min=v;
19: }
20:
21: // leo el siguiente numero
22: printf("Ingrese Numero: ");
23: scanf("%d", &v);
24: }
25:
26: printf("Minimo: %d\n", min);
27:}
28:







.

No hay comentarios: