Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

 

Cap�tulo IV "Ciclos"

Introducci�n**

Es muy com�n encontrar en los programas operaciones
que se deben ejecutar un n�mero repetido de veces en per�odos
m�s o menos espaciados. Si bien las instrucciones son las mismas, los
datos sobre los que operan var�an. A nuestro alrededor, encontramos problemas
que presentan esas caracter�sticas, por ejemplo: el c�lculo de
la nota final de los estudiantes de Programaci�n I, se realizar�
tantas veces como alumnos hayan inscritos en dicha asignatura, el c�lculo
del salario de los empleados de una empresa, etc. En estos casos la soluci�n
que se dise�e para un solo grupo de datos se debe repetir tantas veces
como sea necesario (de acuerdo al n�mero de estudiantes y de empleados
para los ejemplos anteriores).

Los c�lculos simples o la manipulaci�n de peque�os
conjuntos de datos se pueden realizar f�cilmente a mano, pero las tareas
grandes o repetitivas son realizadas con mayor eficacia por una computadora,
ya que estas est�n especialmente preparadas para ello.

Para repetir varias veces un proceso determinado haremos uso
de los ciclos repetitivos, a los cuales se les conoce con el nombre de estructura
repetitiva, estructura iterativa, lazo o bucle.

(Tomado de Los guiones de clase de Introducci�n a la
Inform�tica. Universidad de El Salvador. A�o 2005)

En C, podemos encontrar tres tipos de ciclos:

  • Entrada Asegurada (while)
  • Ciclo Controlado Por Contador (for)
  • Hacer Mientras (do.. while)

Este ultimo, no est� l�gicamente estructurado,
por tanto no haremos mucho hincapi� en �l.

Conceptos Generales

Funcionamiento de Un Ciclo

Un ciclo, funciona de la siguiente manera: Eval�a una
condici�n de resultar cierta, realiza una acci�n o bloque de acciones,
luego vuelve a evaluar la condici�n y si nuevamente resulta cierta, realiza
la (s) acci�n (es). Cuando la condici�n de c�mo resultado
falso, se sale del ciclo y contin�a con la ejecuci�n normal del
programa.

Acumulador:

Es una variable, que , como su nombre lo indica se encarga
de acumular valores. Esto se vuelve muy �til, por ejemplo, cuando
queremos encontrar la suma de los n�meros del 0 al 9, en el acumulador,
vamos guardando los valores de dichas cifras. Puede ser tanto real como entera.
Su valor inicial, en la mayor�a de los casos es cero.

Contador:

Es una variable de tipo entero, que nos ayuda, en el programa
a contabilizar el n�mero de ejecuciones de una misma acci�n, de
un grupo de alumnos etc. Un acumulador tiene tres valores distintos:

  • Valor Inicial: es el valor con el cual iniciamos nuestro contador. Generalmente
    es cero. Esta asignaci�n puede hacerse cuando se declara la variable.
  • Valor Final: despu�s de la ejecuci�n del ciclo, el valor del
    contador, ser� distinto a su valor inicial, este puede ser mayo o menor
    que el mismo, todo depende si fue una cuenta creciente o decreciente.
  • Valor de Cambio: Es el valor Constante, en el cual se ir�
    incrementando nuestro contador, este puede ser positivo o negativo; es decir,
    si la cuanta se realiza de manera ascendente o descendente.

NOTA: el lector no debe confundirse entre las variables tipo
acumulador y tipo contador, estas se diferencian unas de otras en que: los contadores,
su valor de cambio es una constante, ya que aumenta y disminuyen en el mismo
valor, mientras que los acumuladores su valor de cambio no es constante. Un
acumulador necesariamente lo inicializamos con cero (o al menos en la mayor�a
de los casos). Un contador puede iniciar con cualquier valor.

Bandera:

Las variables tipo bandera son aquellas que s�lo admiten
dos valores: cierto o falso, true o false, hombre o mujer… etc

Ciclo de Entrada Asegurada

La sintaxis es la siguiente:

while(condici�n)

Acci�n;

Funciona de la siguiente manera: primero eval�a la condici�n,
si da como resultado cierta realiza la acci�n, luego vuelve a evaluar
la condici�n, si su resultado es falso, se sale del ciclo y contin�a
con la ejecuci�n del programa.

Hay que tener mucho cuidado, cuando trabajamos con ciclos,
ya que podemos caer en un ciclo infinito, es decir que nunca se sale de �l.
Lo cual no es un error de sintaxis sino de l�gica. Por lo cual en las
acciones debemos siempre colocar algo que haga que se modifique el resultado
de la condici�n, lo cual puede ser una bandera, un contador o un acumulador.

Ejemplo 4.1

Dise�e un Programa que imprima los primeros 10 n�meros.

#include <stdio.h>

#include <conio.h>

main()

{

int i=1; /*Declaramos nuestro contador con su Valor Inicial*/

while(i<=10) /*Mientras i sea menor o igual a 10:*/

{

printf("%dt", i);/*Imprimir el valor de i*/

i+=1;/*Aumentar el contador en 1*/

}

getch();

return 0;

}

Ejemplo 4.2

Se desea conocer el promedio de los n�meros mayores
que cero, en una serie de n�meros ingresados por el usuario. De los cuales
no se sabe la cantidad, haciendo uso de una bandera, dise�e un programa
en el cual el usuario ingrese los n�meros que desee.

#include <stdio.h>

#include <conio.h>

main()

{

int i=0, sum=0, ban=1, n;

float prom;

while(ban==1)

{

printf("Ingrese un n�mero por Favor:n");

scanf("%d", &n);

if(n>0)

{

i=i+1;

sum+=n;

}

printf("Desea Ingresar Otro N�mero? (Si=1 y No=0)n");

scanf("%d", &ban);

}

prom=sum/i;

printf("************************************************************n");

printf("*** El Promedio de los numeros mayores que cero es:
%.2f ***n", prom);

printf("************************************************************n");

getch();

return 0;

}

Ejercicio 4.3

En un sal�n se tienen las notas de 14, alumnos; de los
cuales se desea saber cual fue el promedio de todas las notas, cual fue la nota
mayor y la nota menor. As� como la cantidad de aprobados en el curso
(Para Aprobar la asignatura se requiere de una nota mayor o igual a 6.0)

#include <stdio.h>

#include <conio.h>

main()

{

float suma=0, prom, menor=11, mayor=-1, nota;

int i=1,j=0;

while(i<=14)

{

printf("Ingrese la Nota del alumno %d:n", i);

scanf("%f", &nota);

while(nota<0.00 || nota >10.00)

{

printf("ERROR, la nota debe estar entre 0 y 10n");

scanf("%f", &nota);

}

if(nota>=6.00)

j=j+1;

if(nota>mayor)

mayor=nota;

if(nota<menor)

menor=nota;

i=i+1;

suma=suma+nota;

}

prom=suma/14;

printf("El Promedio es %.2fnn", prom);

printf("El total de Aprobados es %dn", j);

printf("La Mayor nota fue %.2fn", mayor);

printf("%.2f corresponde a la nota menorn", menor);

getch();

return 0;

}

Ciclo Controlado por contador.

En algunas ocasiones, sabemos a ciencia cierta el n�mero
de veces que se tiene que repetir una misma acci�n o bloque de acciones.
Y para ello es que nos sirve, esta estructura. Su sintaxis es la siguiente:

for( valor inicial; condici�n; incremento)

accion;

Donde:

Valor inicial: es el valor con el cual inicializamos nuestra
variable de control.

Condici�n: si la cumple, ejecuta la acci�n o
acciones e incrementa o decrementa la variable de control, sino la cumple la
condici�n, se sale del ciclo.

Incremento; que puede ser positivo o negativo (decremento).

Veamos un ejemplo sencillo:

Ejemplo 4.4:

Dise�e un programa que imprima los primeros 10 n�meros:

#include <stdio.h>

#include <conio.h>

main()

{

int i;

for(i=1; i<=10; i++)

printf("%dt", i);

getch();

return 0;

}

ejemplo4.5

Dise�e un programa en C, que calcule las compras totales,
realizadas por un grupo de 20 amas de casa. Luego con esa informaci�n
obtenga la media.

#include <stdio.h>

#include <conio.h>

main()

{

int i;

float compra, desvia, prom, varinza, sum=0;

for(i=1; i<=10; i++)

{

printf("Ingrese la cantidad que gast� la ama de casa
%d:n", i);

scanf("%f", &compra);

while(compra<0)

{

printf("ERROR, la compra debe ser mayor que cero,
vuelva a intentarlo:n");

scanf("%f", &compra);

}

sum=sum+compra;

}

prom=sum/12;

printf("El promedio de las compras es %.2fnna", prom);

getch();

return 0;

}

Cabe, mencionar que, en el ciclo for, podemos hacer cuentas
decrecientes, es decir asignarle un valor grande a nuestra variable de control
y luego irla disminuyendo hasta un valor determinado.

Ejemplo 4.6

En un cine, se tienen 3 diferentes clases de boletos. Se pide
que dise�e un programa en el cual:

    1. se lea el precio de las 3 clase de boletos
    2. Se lea el numero de boletos vendidos de cada tipo
    3. Calcular cual boleto es el que se vendi� menos
    4. El total recaudado en taquilla

Adem�s se sabe que durante el d�a se realizaron
un total de n ventas.

#include <stdio.h>

#include <conio.h>

main()

{

float preciob1, preciob2, preciob3, sum=0, sum1=0, sum2=0,
sum3=0;

int n, i, boletos1, boletos2, boletos3, boleto;

clrscr();

printf("ttBIENVENIDO(A)nnn");

printf("Ingrese el precio de los boletos 1:n");

scanf("%f", &preciob1);

while(preciob1<0)

{

printf("ERRORn");

scanf("%f", &preciob1);

}

printf("Ingrese el precio de los boletos 2:n");

scanf("%f",&preciob2);

while(preciob2<0)

{

printf("ERRORn");

scanf("%f", &preciob2);

}

printf("Ingrese el precio de los boletos 3:n");

scanf("%f",&preciob3);

while(preciob3<0)

{

printf("ERRORn");

scanf("%f", &preciob3);

}

printf("�Cu ntas ventas se realizaron este d�a?:n");

scanf("%d", &n);

while(n<0)

{

printf("ERRORn");

scanf("%d", &n);

}

for(i=1; i<=n; i++)

{

printf("Ingrese el Boleto:n");

scanf("%d", &boleto);

switch(boleto)

{

case 1: printf("Ingrese la cantidad de boletos vendidos:n");

scanf("%d", &boletos1);

sum1+=boletos1;

sum=sum+(boletos1*preciob1);

break;

case 2: printf("Ingrese la cantidad de boletos vendidos:n");

scanf("%d", &boletos2);

sum2+=boletos2;

sum=sum+(boletos2*preciob2);

break;

case 3: printf("Ingrese la cantidad de boletos vendidos:n");

scanf("%d", &boletos3);

sum3+=boletos3;

sum=sum+(boletos3*preciob3);

break;

default: printf("ERROR, Vuelva a intentarlonn");

break;

}

}

clrscr();

if(sum3<sum2 && sum3<sum1)

printf("Los Boletos que se vendieron menos fueron los
boletos numero UNOnn");

if(sum2<sum3 && sum2<sum1)

printf("Los Boletos que se vendieron menos fueron los
boletos numero DOSnn");

if(sum1<sum2 && sum1<sum3)

printf("Los Boletos que se vendieron menos fueron los
boletos numero TRESnn");

printf("El total recaudado en taquilla, durante este dia fue:
%.2fnn", sum);

getch();

return 0;

}

Ciclo Do… while

Es te ciclo funciona de la siguiente manera, realiza la acci�n
o conjunto de acciones, luego eval�a una condici�n de resultar
cierta vuelve a realizar la/s accion/es. Cuando sea falsa, se sale del ciclo.
Esta estructura, no est� l�gicamente, estructurada, por ello,
no hablaremos mucho, sin embargo realizaremos un par de ejemplos, de este ciclo.

Formato :

do {

sentencia;

.

.

} while(<expL>);

La diferencia fundamental, entre el ciclo while y do…while,
es que en este ultimo, las sentencias se realizar�n por lo menos una
vez, en cambio, con while, solo se cumplir�n mientras se cumpla
la condici�n, lo cual puede ser nunca.

Ejemplo 4.7

Programa que determina si un a�o es bisiesto o no. Y
un a�o es bisiesto si es m�ltiplo de cuatro, pero excluyendo aquellos
que son m�ltiplos de 100 pero no de 400

#include <stdio.h>

#include <conio.h>

void main()

{

int anio;

char respuesta;

printf("nnnINICIO DEL PROGRAMAnnn");

printf("nnEl programa te pide un anio y te dice exactamente si es bisiesto
o no");

do

{

/*ENTRADA DE DATOS*/

printf("nnIntroduzca un anio determinado ");

scanf("%d",&anio);

/*PROCESO Y SALIDA DE DATOS*/

if ((anio%4==0 && anio%100!=0)||(anio%400==0)) printf("nnEl
anio es bisiesto");

else printf("nnEl anio no es bisiesto");

printf("nnDesea introducir mas datosnn");

respuesta=getch();

} while(respuesta=='S' || respuesta=='s');

printf("nnnFIN DEL PROGRAMAnnn");

}

NOTA: este c�digo ha sido tomado de "Practicas
de Programaci�n en C", de Fernando Mu�oz Ledesma. Practica
3, ejercicio 5.

Cuestionario

  1. �qu� es y c�mo funciona un ciclo?____________________________________________________________________________________________________________________
  2. Cu�l es la diferencia entre un contador y un acumulador:_____________________________________________________________________________________________________________
  3. �cu�l es la mejor manera de validar datos?:_________________________________________________________________________________________________________________
  4. �c�mo se evita un ciclo infinito?:__________________________________________________________________________________________________________________
  5. �Qu� diferencia existe entre un ciclo de entrada asegurada y el do…
    while?:______________________________________________________

Descubre donde est� el error.

El siguiente c�digo muestra la serie:

1^2+2^2+3^2….n^2

en el cual hay errores de l�gica, de sintaxis o hasta
de ejecuci�n, puedes descubrirlos y corregirlos?

#include <stdio.h>

#include <conio.h>

main()

{

int n i, x, sum=0;

printf("Inrtroduzca el valor de n:n");

scanf("%d", &n);

while(n<0)

{

printf("Error, vuelva a digitar el valor de n:n");

scanf("%d", n);

}

for(i=1; i<=n, i++)

x=i*i;

sum+=n;

printf("El valor de la suma es:%dnn", sum)

getch();

return 0;

}

Ejercicios

  1. Se desea conocer la suma de los n�meros enteros, positivos menores
    que n, el cual es un dato dado por el usuario.
  2. Muestre un programa en c, que imprima en pantalla los n�meros desde
    un valor inicial, hasta un valor final, ingresados por el usuario, tanto en
    forma descendente como ascendente.
  3. Dise�e un programa que imprima la serie de Fugonacci, as�:
    0 1 1 2 3 5 8 13…. hasta un n�mero n dado por el usuario.
  4. Calcule el promedio de edades de un grupo de estudiantes, de los cuales
    no se conoce la cantidad.
  5. Dise�e un programa que obtenga, la calificaci�n mayor y la
    calificaci�n menor, de un grupo de 40 estudiantes, adem�s de
    los nombres de dichos alumnos.
  6. En un pa�s hubieron elecciones para elegir al presidente. El pa�s
    consta de 7 provincias o regiones, de las cuales se han levantado actas que
    contiene el total de votos obtenidos por los 4 partidos pol�ticos en
    dicha regi�n. Dise�e un programa en c, que lea las actas de
    las 7 provincias, muestre que partido gan� las elecciones y en caso
    de empate, lo especifique con un mensaje.
  7. en un supermercado, hay 3 departamentos (de ropa, comestibles y perfumer�a),
    en lo cuales se realizan un descuento de 5%, 3.5% y 8% respectivamente, por
    las compras totales mayores de $100.00. dise�e un programa que dado
    el monto de la compra, realice los descuentos pertinentes por departamento,
    le indique al usuario a cuanto asciende su nuevo monto e indique, cuanto fue
    lo recaudado al final del d�a.
  8. La Empresa, el porvenir s.a de c.v desea conocer lo que debe pagar en concepto
    de horas extras aun grupo de n empleados. Se sabe que una hora extra diurna,
    se paga el doble que una hora normal. Y una hora extra nocturna se paga el
    doble de una hora normal m�s el 25%. Adem�s que todos los empleados
    tiene sueldos diferentes, muestre el nuevo sueldo de cada uno de ellos y lo
    que tendr� que pagar la empresa en concepto de horas extra.
  9. Una compa��a de tel�fonos, cobra $0.03 por minuto la
    llamada nacional local, $0.06 por la llamada de larga distancia nacional y
    $0.10 la llamada de larga distancia internacional. Dise�e un programa
    que calcule las facturas mensuales de los clientes, sabiendo que, si las llamadas
    fueron realizadas por la ma�ana tienen un doble valor, y si los 10
    primeros minutos de llamadas locales son gratis, en cualquier horario.

Cap�tulo V: Funciones en C

La modularizaci�n, es una t�cnica usada por los
programadores para hacer sus c�digos m�s cortos, ya que consiste
en reducir un gran problema complejo, en peque�os problemitas m�s
sencillos, concentr�ndose en la soluci�n por separado, de cada
uno de ellos.

En C, se conocen como funciones aquellos trozos de c�digos
utilizados para dividir un programa con el objetivo que, cada bloque realice
una tarea determinada.

En las funciones juegan un papel muy importe las variables,
ya que como se ha dicho estas pueden ser locales o globales.

Variables Globales: Estas se crean durante toda la ejecuci�n
del programa, y son globales, ya que pueden ser llamadas, le�das, modificadas,
etc; desde cualquier funci�n. Se definen antes del main().

Variables Locales: Estas, pueden ser utilizadas �nicamente
en la funci�n que hayan sido declaradas.

La sintaxis de una funci�n es la siguiente:

Tipo_de_datos nombre_de_la_funcion(tipo y nombre de argumentos)

{

acciones

}

donde:



  • Tipo_de_datos: Es el tipo de dato que devolver� esa funci�n,
    que puede ser real, entera, o tipo void(es decir que no devolver� ning�n
    valor).


  • Nombre_de_la_funcion: Es el identificador que le damos a nuestra
    funci�n, la cual debe cumplir las reglas que definimos en un principio
    para los identificadores.


  • Tipo y nombre de argumentos: son los par�metros que recibe
    la funci�n. Los argumentos de una funci�n no son m�s
    que variables locales que reciben un valor. Este valor se lo enviamos al hacer
    la llamada a la funci�n. Pueden existir funciones que no reciban argumentos.


  • Acciones: Constituye el conjunto de acciones, de sentencias que cumplir�
    la funci�n, cuando sea ejecutada. Entre ellas est�n:
    1. Asignaciones
    2. Lecturas
    3. Impresiones
    4. C�lculos, etc

    Una funci�n, termina con la llave de cerrar, pero
    antes de esta llave, debemos colocarle la instrucci�n return, con
    la cual devolver� un valor espec�fico. Es necesario recalcar
    que si la funci�n no devuelve ning�n valor, es decir, es tipo
    void, no tiene que ir la sentencia return, ya que de lo contrario, nos dar�
    un error.

    Pero, es v�lido que nos hagamos la siguiente pregunta:

    �C�mo es que funcionan los Subprogramas?

    A menudo, utilizamos el adjetivo de "Subprogramas",
    para referirnos a las funciones, as� que, el lector debe familiarizarse
    tambi�n con este t�rmino.

    Los subprogramas se comunican con el programa principal,
    que es el que contiene a las funciones, mediante par�metros, que estos
    pueden ser: Par�metros Formales y Par�metros Actuales.

    Cuando se da la comunicaci�n los par�metros
    actuales son utilizados en lugar de los par�metros formales.

    Paso de Par�metros

    Existen dos formas de pasar par�metros, las cuales
    son:

      1. Paso por Valor

    Tambi�n conocido como par�metros valor. Los
    valores se proporcionan en el orden de c�lculos de entrada.

    Los par�metros se tratan como variables locales y
    los valores iniciales se proporcionan copiando los valores de correspondientes
    argumentos.

    Los par�metros formales-Locales de una funci�n
    reciben como inicilaes los valores de los par�metros actuales y con
    ellos se ejecutan las acciones descritas en el subprograma.

    Ejemplo:

    A=5;

    B=7;

    C=proc1(A, 18, B*3+4);

    Proc1(X, Y, Z)

    Explicaci�n:

    Donde, se encuentra c, se est� llamando la funci�n,
    denominada proc1, en la cual se est�n enviando como par�metros
    el valor de A, que es cinco; el cual es recibido por la variable X, en la
    definici�n de la funci�n proc1; en la misma funci�n,
    Y tendr� el valor de 18; por que ese es el valor del par�metro
    formal, mientras que Z, tendr� un valor inicial de 25, ya que ese es
    el resultado del tercer par�metro que resulta ser una expresi�n
    aritm�tica.

    Funciones Definidas Por El Usuario en C

    Una funci�n, como ya se ha dicho, es un bloque de
    c�digo dentro del programa que se encarga de realizar una tarea determinada.
    Por lo tanto un programa en c debe constar de una o m�s funciones,
    y por su puesto no puede faltar la funci�n principal main().

    Un viejo adagio dice: Separa y vencer�s, lo cual se
    acopla perfectamente cuando tenemos un programa que es bastante grande; podemos
    separarlos en peque�os subprogramas (funciones), y concentrarnos en
    la soluci�n por separados de cada uno de ellos y as� resolver
    un gran problemas, en unos cuantos problemitas m�s peque�os.

    Si un programa, est� constituido por m�s de
    una funci�n, las llamadas a la misma, pueden realizarse desde cualquier
    parte del programa, y la definici�n de ellas debe ser independiente
    unas de otras.

    Por lo tanto ser�a un grave error el tratar de definir
    una funci�n dentro de otra.

    Una funci�n puede ser llamada desde cualquier parte
    del programa no s�lo una vez, y cuando es llamada, empieza a ejecutar
    las acciones que est�n escritas en c�digo.

    Para mayor comodidad del lector vamos a ver varios ejemplos,
    del uso de funciones y a medida que vayamos avanzando se volver�n m�s
    complejos.

    El orden ser� el siguiente:

    1. Funciones que no devuelven ning�n valor
    2. Funciones que devuelven un valor entero
    3. Funciones que devuelven un valor Real
    4. Funciones combinadas
    5. Funciones en las que usamos Men�.

    1. Funciones que no devuelven ning�n valor.

    C�mo se ha dicho las funciones pueden o no devolver
    alg�n valor, para mi parecer, este tipo de funciones son las m�s
    sencillas, ya que cuando se llama la funci�n, esta realiza lecturas,
    asignaciones, c�lculos o impresiones, finaliza la ejecuci�n
    de la funci�n y el programa contin�a normalmente.

    Ejemplo 5.1

    Dise�e un programa que dados dos n�meros enteros
    determine la suma y cual de ellos es mayor, usando dos funciones diferentes.

    #include <stdio.h>

    #include <conio.h>

    void suma (int a, int b); /*Declaraci�n de la funci�n*/

    void mayor (int a, int b); /*Tipo de dato, nombre de la funci�n
    y el tipo y nombre de los argumentos*/

    main()

    {

    int a, b;

    printf("Ingrese el valor de a:n");

    scanf("%d", &a);

    printf("Ingrese el valor de b:n");

    scanf("%d", &b);

    suma(a,b); /*Llamado de la funci�n*/

    mayor(a,b); /*Unicamente el nombre de la funci�n y de los
    par metros*/

    getch();

    return 0;

    }

    void suma(int a, int b) /*Definici�n de la funci�n*/

    { /*Abrimos llaves al inicio de la definici�n*/

    int sum; /*Declaraci�n de las variables locales*/

    sum=a+b;

    printf("El valor de la suma es %d:nn", sum);

    } /*Fin de la funci�n suma*/

    void mayor(int a, int b)

    {

    if(a==b)

    printf("Son igualesnn");

    else

    {

    if(a>b)

    printf("El valor de a es mayor que el de bnn");

    else

    printf("El valor de b es mayor que el de ann");

    }

    }

    Definici�n de la Funci�n

    La funci�n ha sido declarada, ha sido llamada y por
    lo tanto deber haber sido definida. Lo cual consta de dos partes, las cuales
    son:

    1. La Primera L�nea
    2. Que como su nombre lo indica, es la primera l�nea
      de la definici�n de la funci�n y con ella le indicamos al
      compilador que est� en presencia de una funci�n. Su formato
      es el siguiente:

      Tipo_de_dato nombre_de_la_funci�n (tipo y nombre
      de los argumentos)

    3. Cuerpo de la funci�n

    Se inicia con una llave "{", y en ella, se pueden
    realizar asignaciones, c�lculos, impresiones, as� como la declaraci�n
    de las variables locales. Puede estar constituidas por estructuras secuenciales,
    selectivas, iterativas, anidamientos, se pueden llamar otras funciones, etc;
    finaliza con "}". Puede devolver uno o ning�n valor.

    Ejemplo 5.2

    Dise�e un Programa en C, que Dado un n�mero
    entero y mayor que cero, Determine si es o no un n�mero Primo. Ojo,
    los n�meros primos s�lo son divisibles por el mismo y por la
    unidad (1).

    #include <stdio.h>

    #include <conio.h>

    void primo (int numero);

    main()

    {

    int numero, ban=1;

    clrscr();

    while(ban==1)

    {

    printf("Introduzca el n�mero por favor:n");

    scanf("%d", &numero);

    while(numero<0)

    {

    printf("ERROR, el valor del n�mero debe ser mayor que
    ceron");

    scanf("%d", &numero);

    }

    primo(numero);

    printf("�Otro n�mero (si=1 y No=0)?n");

    scanf("%d", &ban);

    }

    getch();

    return 0;

    }

    void primo (int numero)

    {

    int div, primo=1;

    for(div=2; div<numero; div++)

    {

    if(numero%div==0)

    {

    primo=0;

    printf("%d NO es primonnn", numero);

    return 0;

    }

    else

    primo=1;

    }

    if(primo!=0)

    printf("%d es primonnn", numero);

    }

    1. Funciones que devuelven un valor entero
    2. Las funciones que devuelven alg�n valor, se les
      llama PROTOTIPOS DE FUNCIONES:

      Antes de usar una funci�n C debe tener conocimiento
      acerca del tipo de dato que regresara y el tipo de los

      par�metros que la funci�n espera.

      El est�ndar ANSI de C introdujo una nueva (mejor)
      forma de hacer lo anterior respecto a las versiones previas

      de C.

      La importancia de usar prototipos de funciones es la siguiente:

      Se hace el c�digo mas estructurado y por lo tanto,
      m�s f�cil de leer.

      Se permite al compilador de C revisar la sintaxis de las
      funciones llamadas.

      Lo anterior es hecho, dependiendo del alcance de la funci�n.
      B�sicamente si una funci�n ha sido definida antes

      de que sea usada (o llamada), entonces se puede usar la
      funci�n sin problemas.

      Si no es as�, entonces la funci�n se debe
      declarar. La declaraci�n simplemente maneja el tipo de dato que la

      funci�n regresa y el tipo de par�metros usados
      por la funci�n.

      Es una pr�ctica usual y conveniente escribir el
      prototipo de todas las funciones al principio del programa, sin

      embargo esto no es estrictamente necesario.

      Para declarar un prototipo de una funci�n se indicara
      el tipo de dato que regresar� la funci�n, el nombre de la

      funci�n y entre par�ntesis la lista del tipo
      de los par�metros de acuerdo al orden que aparecen en la definici�n
      de la

      funci�n. Por ejemplo:

      int longcad(int n); Lo anterior declara una funci�n
      llamada longcad que regresa un valor entero y acepta otro valor entero como
      par�metro.

      (Tomado de "Manual de C" de H�ctor Tejada
      Villela)

      Ejemplo 5.3

      Dise�e un programa, que dado un n�mero entero
      y mayor que cero, muestre su factorial. (El factorial de 5 es 120; 5x4x3x2x1=120)

      #include <stdio.h>

      #include <conio.h>

      int factorial (int num);

      main()

      {

      int num, ban=1;

      clrscr();

      while(ban==1)

      {

      printf("Ingrese el valor del n�mero por favor:n");

      scanf("%d", &num);

      while(num<0)

      {

      printf("ERROR, el valor del n�mero debe ser mayor
      que cero:n");

      scanf("%d", &num);

      }

      printf("El valor del factorial es %dnn", factorial (num));

      printf("�Desea Realizar otro calculo?Si=1 y No=0n");

      scanf("%d", &ban);

      }

      getch();

      return 0;

      }

      int factorial (int num)

      {

      int sum=1, i;

      for(i=2; i<=num; i++)

      {

      sum=sum*i;

      }

      return (sum);

      }

      Explicaci�n:

      Quiz�, lo �nico nuevo, e importante de explicar,
      radica en la llamada y la definici�n de la funci�n. Cuando
      una funci�n nos devolver� un valor entero, al identificador
      de dicha funci�n debe precederle el tipo de dato. En el lugar, donde
      llamamos la funci�n, es que aparecer� el valor que nos devuelva,
      como valor de retorno. En nuestro ejemplo, en una impresi�n. Y al
      momento de definirla, no se nos debe olvidar, colocarle la sentencia return();
      ya que, mediante esta declaratoria, est� retornando el valor
      calculado.

      Pero, que sucede cuando se est� trabajando, con
      valores bastante grandes, al utilizar solamente el int, se producir�
      un error l�gico; ya que como valor de retorno podr�a ser un
      cero o una cifra negativa. Por tanto debemos usar el tipo de dato "long
      int".

      Ejemplo 5.4

      Dise�e un programa, que dada una cifra entera y
      mayor que cero, sea elevada a una potencia introducida por el usuario, la
      cual. (Ejemplo: 5^2=25).

      #include <stdio.h>

      #include <conio.h>

      long int potencia (int base, int exponente);

      main()

      {

      int base, exponente;

      clrscr();

      printf("La Base es:n");

      scanf("%d", &base);

      while (base<0)

      {

      printf("ERROR, el dato debe ser mayor que cero:n");

      scanf("%d", &base);

      }

      printf("El Exponente es:n");

      scanf("%d", &exponente);

      printf("%d ^ %d es %ldnn", base, exponente, potencia(base,exponente));

      getch();

      return 0;

      }

      long int potencia (int base, int exponente)

      {

      long int sum=0, i,x;

      for(i=1; i<exponente; i++)

      {

      x=base*base;

      sum=sum+x;

      }

      return (sum);

      }

      Este m�todo es un poco complejo y puede realizarse
      de manera m�s f�cil, haciendo uso de las funciones predefinidas
      en C, de las cuales hablaremos a continuaci�n.

    3. Funciones que Devuelven un Valor Real

    Antes que nada, trataremos las funciones predefinidas en
    C. Ya que C, posee ciertas funciones que nos ayudan hacer nuestros programas
    m�s f�ciles y utilizar menos c�digo.

    El lenguaje c, cuenta con una serie de funciones de bibliotecas
    que realizan operaciones y c�lculos de uso frecuente.

    Para acceder a una funci�n, se realiza mediante el
    nombre seguido de los argumentos que le servir�n a la funci�n
    a realizar la tarea espec�fica.

    Nombre(arg1, arg2,…argn);

    *Funciones Matem�ticas

    Para acceder a ellas, se debe colocar la directiva #include
    <math.h> en el encabezado del programa.


    Funci�n (Sintaxis)


    Tipo de Dato


    Prop�sito


    acos(d)


    double


    Devuelve el arco coseno de d


    asin(d)


    double


    Devuelve el arco seno de d


    atan(d)


    double


    Devuelve el arco tangente de d


    atan(d1, d2)


    double


    Devuelve el arco tangente de d1/d2


    ceil(d)


    double


    Devuelve el valor redondeado por exceso, al siguiente
    entero mayor


    cos(d)


    double


    Devuelve el coseno de d


    cosh(d)


    double


    Devuelve coseno hiperb�lico de d


    exp(d)


    double


    Eleva a la potencia d


    fabs(d)


    double


    Devuelve el valor absoluto de d


    floor(d)


    double


    Devuelve el valor redondeado por defecto al entero
    menor m�s cercano


    log(d)


    double


    Devuelve el logaritmo natural de d


    log10(d)


    double


    Devuelve el lo. (base10) de d


    pow(d1, d2)


    double


    Devuelve d1 elevado a la potencia d2


    sin(d)


    Double


    Devuelve el seno de d


    sinh(d)


    double


    Seno hiperb�lico de d


    sqrt(d)


    double


    Ra�z cuadrada de d


    Tan(d)


    double


    Devuelve la tangente de d


    tanh(d)


    double


    Devuelve la tangente hiperb�lica de d

    Las siguientes funciones se encuentran en las librer�as:
    stdid.h � stdlib.h:


    Funci�n (sintaxis)


    Tipo


    Prop�sito


    abs(i)


    int


    Devuelve el valor absoluto de i


    ran()


    int


    Devuelve un entero aleatorio


    srand(u)


    void


    Inicializa el generador de n�meros aleatorios


    div(d1/d2)

    Double/

    int


    Devuelve el cociente y el resto de la divisi�n


    atuf(s)


    Double


    Convierte la cadena a una cantidad de doble precisi�n


    atoi(s)


    int


    Convierte cadenas a un entero


    atol(s)


    long


    Convierte cadenas a un entero largo

    Hay muchas otras funciones, pero para ahondar m�s,
    debes saber cu�l es la versi�n de C, instalada en tu m�quina
    y as� verificar cu�les funcionan correctamente; pero por lo
    general, estas funciones son muy est�ndar para la mayor�a de
    compiladores.

    A continuaci�n, pasaremos a desarrollar una serie
    de ejercicios, en los cuales haremos uso de la funciones predefinidas en c,
    as� como la modularizaci�n, es decir; el uso de funciones definidas
    por el usuario.

    Ejemplo 5.5

    Se desea conocer el resultado de las siguientes operaciones:

    1. Ö a+b
    2. |a-b|
    3. ab
    4. Las variables a y b, son de tipo real, y pueden ser positivas
      o negativas.

      #include <stdio.h>

      #include <conio.h>

      #include <math.h>

      double raiz(float a, float b);

      double valor_absoluto(float a, float b);

      double exponente (float a, float b);

      main()

      {

      float a, b;

      clrscr();

      printf("ttBIENVENIDOnn");

      printf("Ingrese el valor de a, por favor:n");

      scanf("%f", &a);

      printf("Ahora el valor de b:n");

      scanf("%f", &b);

      printf("El resultado de la ra�z cuadrada de %.2f + %.2f
      es %.2fnn", a,b,raiz(a,b));

      printf("|%.2f-%.2f| es igual a %.2fnn", a,b,valor_absoluto(a,b));

      printf("%.2f^%.2f es igual a %fnn", a,b,exponente(a,b));

      getch();

      return 0;

      }

      double raiz(float a, float b)

      {

      float x;

      double y;

      x=a+b;

      y=sqrt(x);

      return (y);

      }

      double valor_absoluto(float a, float b)

      {

      float x;

      double y;

      x=a-b;

      y=fabs(x);

      return (y);

      }

      double exponente (float a, float b)

      {

      double x;

      x=pow(a,b);

      return (x);

      }

      Supongo que, este ejemplo no requiere mayor explicaci�n.
      Pero me gustar�a que el lector, comprenda la gran cantidad de usos
      que podemos darle, a aquellas funciones matem�ticas, junto con las
      funciones definidas por el usuario, esta es una gran ayuda, ya que �se imaginan
      la cantidad de c�digo que deber�amos colocar, para determinar
      cosas tan elementales como el valor absoluto?; con estas funciones matem�ticas,
      C, nos ahorra mucho trabajo y c�digo.

    5. Funciones Combinadas
    6. A continuaci�n veremos un ejemplo de un programa
      en el cual utilizamos dos funciones de diferente tipo de dato.

      Ejemplo 5.5

      El valor del n�mero e se puede aproximar sumando n t�rminos
      de la serie: e = 1 + 1/1! + 1/2! + 1/3! + … Escribir un programa que solicite
      el n�mero de t�rminos de la serie a sumar e informe del valor
      aproximado de e. T�ngase en cuenta que el termino i de la anterior
      serie se obtiene dividiendo por (i-1). (La exclamaci�n es el factorial).

      #include <stdio.h>

      #include <conio.h>

      #include <stdlib.h>

      void calculodatos(int numero);

      double factorial(int dato);

      void main(void)

      {

      int numero;

      char respuesta;

      printf("nnnINICIO DEL PROGRAMAnnn");

      printf("nnEl programa te calcula el valor del numero e.");

      do {

      do {

      printf("nnIntroduzca un numero de terminos de la serie: ");

      scanf("%d",&numero);

      } while (numero<0);

      calculodatos(numero);

      printf("nn�Desea introducir mas datos?nn");

      respuesta=getch();

      system("cls");

      }
      while (respuesta=='s' || respuesta=='S');

      printf("nnnttÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");

      printf("nttÛÛÛ FIN DEL PROGRAMA ÛÛÛ");

      printf("nttÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛnnn");

      }

      void calculodatos(int numero)

      {

      register int i;

      register double e=1.;

      for (i=1;i<=numero;i++) {

      e=e+1./factorial(i);

      }

      printf("nnEl valor de e para %d terminos es %f.",numero,e);

      }

      double
      factorial(int dato)

      {

      register int i;

      register double resultado=1;

      for (i=dato;i>0;i–) resultado=resultado*i;

      return resultado;

      }

      El ejemplo anterior ha sido tomado de "Practicas de C", de Fernando
      Mu�oz Ledesma. ledesmafernando[arroba]msn.com

      Y as� como este ejemplo, podemos realizar muchas otras combinaciones
      de funciones, seg�n necesitemos y lo solicite nuestro programa.

    7. Funciones en las que usamos Men�

    En la pr�ctica, muchas veces debemos dise�ar programas,
    que nos permitan elegir la acci�n o acciones a realizar, es decir haciendo
    uso de un men�. El cual, no es m�s ni menos que la aplicaci�n
    de un selector m�ltiple. Un switch.

    Veamos un ejemplo.

    Ejemplo 5.6

    Dise�e un programa, que dado un �ngulo, muestre
    su seno, coseno o tangente; seg�n lo desee el usuario.

    #include <stdio.h>

    #include <conio.h>

    #include <math.h>

    void seno (float angulo);

    void coseno (float angulo);

    void tangente (float angulo);

    main()

    {

    float angulo;

    int opcion, ban=1;

    clrscr();

    while(ban==1)

    {

    printf("ttBIENVENIDO/Ann");

    printf("Introduzca el valor del angulo, por favor:n");

    scanf("%f", &angulo);

    printf("�Que desea hacer?:nn");

    printf("********************************************n");

    printf("**** 1. seno del angulo ****n");

    printf("**** 2. coseno del angulo ****n");

    printf("**** 3. tangente del angulo ****n");

    printf("********************************************n");

    scanf("%d", &opcion);

    while(opcion<0 || opcion>3)

    {

    printf("ERROR, la opcion debe estar entre 0 y 3:n");

    scanf("%d", &opcion);

    }

    clrscr();

    switch(opcion)

    {

    case 1: seno (angulo);

    break;

    case 2: coseno (angulo);

    break;

    case 3: tangente (angulo);

    break;

    }

    printf("�Hay mas datos? (si=1 y no=0)n");

    scanf("%d",&ban);

    }

    getch();

    return 0;

    }

    void seno (float angulo)

    {

    float y;

    y=sin (angulo);

    printf("El seno de %f es %fnn", angulo, y);

    }

    void coseno (float angulo)

    {

    float y;

    y=cos(angulo);

    printf("El coseno de %f es %fnn", angulo, y);

    }

    void tangente (float angulo)

    {

    float y;

    y=tan(angulo);

    printf("La tangente de %f es %fnn", angulo, y);

    getch();

    }

    Cuestionario

    1. Mencione y explique, las parte en las que se componen las funciones definidas
      por el usuario en C:_________________________________________________________________________________________________________________________________________________________________________________________________________________________
    2. �Cu�l es la diferencia entre las funciones predefinidas en c y
      las funciones definidas por el usuario?_________________________________________________________________________________________________________________________________________________________________________________________________
    3. �En que consiste el paso de par�metros?:____________________________________________________________________________________________________________________________________________________________________________________________
    4. �Cu�l es la diferencia entre par�metros formales y actuales?:__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
    5. En que se diferencias las variables locales a las globales:___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    Ejercicios

    1. Realice una peque�a calculadora, utilizando funciones
    2. Dise�e un programa que permita calcular la serie � + 1/3 + �+ …
      1/n.
    3. Dise�e un programa, que muestre el mayor y el menor de tres introducidos
      por el usuario.
    4. Se desea conocer el logaritmo natural y el logaritmo base 10 de una serie
      de n�meros. As� como la suma de dichos valores
    5. Se desea conocer la permutaci�n de dos n�meros distintos.
      Usando funciones. Dise�e un programa que resuelva dicho problema.
      (NOTA: 5P3=5!/(5-3)!)
    6. Se desea conocer la equivalencia de d�lares a colones (un d�lar
      = 8.75 de col�n), la equivalencia de un kilogramos a libras (1kg=2.2lb)
      y la conversi�n de kil�metros a millas (1km=0.62millas). realice
      esta soluci�n mediante un men�.
    7. Calcule lo que debe pagar cada cliente en un almac�n; si por cada
      compra el cliente tiene derecho a sacar un papelito, y dependiendo del color,
      se efect�an diferentes descuentos. Si el color es blanco, se realiza
      un descuento del 2.63% sobre la cuenta, si es verde, un descuento de 4.85%
      y si es rojo, un descuento de 5.02%. se sabe adem�s que si es d�a
      lunes o viernes, el porcentaje de descuento es el doble.
    8. El seno de un �ngulo, puede aproximarse, de la siguiente manera:
      sin(x) = x – x^3/3! + x^5/5! – x^7/7! + …, determine este valor, y usando
      la funci�n sin(d), luego muestre la diferencia entre estos valores.
    9. En una empresa de electricidad, se cobrar las facturas correspondientes
      al consumo de kwh, de la siguiente manera: los primeros 100 kwh, se cobran
      $2.5, lo siguientes 200 kwh, son a $5.00, los 300kwh, siguientes, son cobrados
      a raz�n de $7.5, los kwh siguientes se cobran a $7.00. dise�e
      un programa que permita determinar lo que debe pagar un grupo de clientes
      al final del mes.
    10. En una empresa de repuestos de autom�vil, poseen 10 tipos de repuestos
      identificados con los n�meros de 1 al 10. durante la semana se realizan
      diferentes ventas de los repuestos. Se desea saber la cantidad de repuestos
      que se deben comprar, para actualizar el inventario. El cual se realiza
      cada cinco d�as, y se procede de la siguiente manera: cada d�a
      se contabilizan el total de facturas, en las cuales se muestran la cantidad
      de art�culos vendidos as� como el total de la venta. Con esos
      datos, indique al usuario cuantos y de que tipo, son los repuestos que se
      deben comprar as� como la ganancia.

    Cap�tulo VI "Estructuras de
    Datos"

    Un array es un identificador que referencia un conjunto
    de datos del mismo tipo. Imagina un tipo de dato int; podremos crear
    un conjunto de datos de ese tipo y utilizar uno u otro con solo cambiar el
    �ndice que lo referencia. El �ndice ser� un valor entero
    y positivo. En 'C' los arrays comienzan por la posici�n 0.

    Vectores

    Un vector es un array unidimensional,
    es decir, solo usa un �ndice para referenciar a cada uno de los elementos.

    Su declaraci�n ser�: tipo nombre
    [tama�o];

    El tipo puede ser cualquiera de los ya conocidos y el tama�o
    indica el n�mero de elementos del vector (se debe indicar entre corchetes
    [ ]). En el ejemplo puedes observar que la variable i es utilizada
    como �ndice, el primer for sirve para rellenar el vector y el
    segundo para visualizarlo. Como ves, las posiciones van de 0 a 9
    (total 10 elementos).

    (Tomado de "Introducci�n al lenguaje de programaci�n
    de C/C++". Sergio Pacho)

    Ejemplo:

    int num[100]; /*Arreglo de tipo entero compuesto de 100 posiciones*/

    char nom[80]; /*Texto de 80 caracteres*/

    float x[12]; /*arreglo de 12 elementos punto flotantes */

    Constante Simb�lica

    Hace m�s sencillo o m�s f�cil modificar
    un programa que utiliza arreglos. Ya que todas las referencias al tama�o
    del arreglo pueden ser alteradas, cambiando el valor de la constante simb�lica.

    Ejemplo 6.1

    Dise�e un programa que lea un vector de 10 posiciones,
    luego determine si la quinta posici�n es positiva, si la primera posici�n
    es negativa y si la ultima posici�n es cero.

    #include <stdio.h>

    #include <conio.h>

    #define N 10

    main()

    {

    float x[N];

    int i;

    for(i=0; i<N; i++)

    {

    printf("Ingrese el valor %d:n", i);

    scanf("%f", &x[i]);

    }

    if(x[4]>0)

    {

    printf("La quinta Posici�n es Positivann");

    }

    if(x[0]<0)

    {

    printf("La 1ø Posici�n es Negativonn");

    }

    if(x[N-1]==0)

    {

    printf("La Ultima Posici�n es ceronn");

    }

    getch();

    return 0;

    }

    Explicaci�n

    En este ejemplo estamos haciendo uso de la constante simb�lica,
    de cuyos beneficios ya se habl�. La definimos con 10 posiciones, recordando
    que C, empieza a contar desde cero. Luego definimos el vector llamado x, como
    punto flotante, y ojo, que �ste va acompa�ado de su dimensi�n.
    Luego haciendo uso de un for, empezamos a llenar el vector. Luego preguntamos
    si la posici�n cuatro es positiva. El lector se preguntar� el
    por que, la instrucci�n es x[4] y no x[5], ya que; lo que queremos
    es averiguar, si la posici�n cinco es la positiva. Pues bien, la posici�n
    identificada con el n�mero cuatro, es en efecto la que contiene el
    quinto n�mero. As�:

    Esta es una versi�n gr�fica, de lo que suceder�a
    al llenar nuestro vector con los valores indicados. Como podemos ver, C empieza
    a enumerar las casillas desde el cero, hasta el 9. totalizando de esa manera
    10 posiciones. As� que, x[4]=8.

    Es por ello, que el for, lo inicializamos con cero, hasta
    un valor menor que el de la constante, ya que de lo contrario nos dar�a
    un error.

    Una particularidad con los vectores de tipo char (cadena
    de caracteres), es que deberemos indicar en que elemento se encuentra el fin
    de la cadena mediante el car�cter nulo (). Esto no lo controla
    el compilador, y tendremos que ser nosotros los que insertemos este car�cter
    al final de la cadena. Por tanto, en un vector de 10 elementos de tipo char
    podremos rellenar un m�ximo de 9, es decir, hasta vector[8].Si
    solo rellenamos los 5 primeros, hasta vector[4], debemos asignar el
    car�cter nulo a vector[5]. Es muy sencillo: vector[5]='';

    Ahora veremos un ejemplo de como se rellena un vector de
    tipo char. Podemos ver que en el for se encuentran dos condiciones:

    1.-Que no se hayan rellenado todos los elementos (i<19).

    2.-Que el usuario no haya pulsado la tecla ENTER,
    cuyo c�digo ASCII es 13.

    (cadena[x-i]!=13).

    Uso de Vectores dentro de las Funciones

    Un vector, solo puede ser argumento formal, es decir; por
    el momento, no podemos enviarlo como valor de retorno., digo por el momento
    por que cuando hablemos de punteros, veremos que si se pueden enviar.

    Y dicho proceso se realiza de la siguiente manera:

    • Declaraci�n o Prototipo:

    Tipo_de_dato nombre de la funcion (tipo_de_dato[]);

    • Llamado de la Funci�n

    Nombre_de_la_funcion(nombre del vector);

    • Definici�n de la funci�n

    Tipo_de_dato nombre de la funcion (tipo_de_dato
    nombre[])

    Ejemplo 6.2

    Dise�e un programa en C, que lea un vector de un
    m�ximo de 20 posiciones, y luego determine:

    -La suma de todos los valores

    -El mayor de los valores, as� como la posici�n
    del mismo.

    se sabe que dichos datos son de tipo entero

    #include <stdio.h>

    #include <conio.h>

    #define N 20

    int suma (int [N]); /*Declaraci�n de la funci�n*/

    void mayor (int [N]); /*Ojo, los argumentos que son vectores
    solo necesitan el tipo de dato y la direcci�n*/

    main()

    {

    int numeros[N], i;

    printf("Ingrese la Cantidad de Valores:n");

    scanf("%d", &limite);

    while(limite<0 || limite >N)

    for(i=0; i<N; i++)

    {

    printf("Ingrese el elemento %d del vector:n", i);

    scanf("%d", &numeros[i]);

    }

    printf("La suma de todos los elementos del vector es:
    %dn", suma(numeros));

    mayor(numeros); /*Llamado de la funci�n */

    getch();

    return 0;

    }

    int suma (int numeros [N]) /*Definici�n de la funci�n
    */

    {

    int sum=0, i;

    for(i=0; i<N; i++)

    sum=sum+numeros[i];

    return (sum);

    }

    void mayor (int numeros [N])

    {

    int pos=0, mayor=numeros[0], i;

    for(i=1; i<N; i++)

    {

    if(numeros[i]>mayor)

    {

    mayor=numeros[i];

    pos=i;

    }

    }

    printf("El valor mayor es %d y esta en la posici�n %dnn",
    mayor, pos);

    }

    El lector, debe preguntarse, que pasar�a si existen
    dos valores exactamente iguales que sean los valores m�ximos y que
    por ende, est�n en diferentes posiciones, que soluci�n le dar�as
    como programador?… este tipo de preguntas debe hacerse siempre que ha finalizado
    un programa, y nunca dejar nada sin resolver, por que recordemos que los programas
    que dise�amos son para que otras personas los usen.

    Matrices

    Las matrices se declaran de forma an�loga,
    con corchetes independientes para cada

    sub�ndice. La forma general de la declaraci�n
    es:

    tipo nombre[numero_filas][numero_columnas];

    donde tanto las filas como las columnas se
    numeran tambi�n a partir de 0. La forma de acceder a los elementos
    de la matriz es utilizando su nombre, seguido de las expresiones enteras correspondientes
    a los dos sub�ndices, entre corchetes.

    En C tanto los vectores como las matrices admiten los tipos
    de las variables escalares (char, int, long,
    float, double, etc.),

    Las matrices en C se almacenan por filas, en posiciones
    consecutivas de memoria. En cierta forma, una matriz se puede ver como un
    vector de vectores-fila. Si una matriz tiene N filas (numeradas de
    0 a N-1) y M columnas (numeradas de 0 a la M-1), el elemento (i, j) ocupa
    el lugar:

    posici�n_elemento(0, 0) + i * M + j

    A esta f�rmula se le llama f�rmula de direccionamiento
    de la matriz.

    (Tomado de "Aprenda Lenguaje ANSI C como si estuviera
    en Primero". Universidad de Navarra).

    Ejemplo 6.3

    Dise�e un programa que lea un matriz de 6*6 y luego
    determine la suma de cada una de las filas y la almacene en un vector llamado
    suma.

    #include <stdio.h>

    #include <conio.h>

    #define F 6

    #define C 6

    main()

    {

    int matriz[F][C], i,j, vector [F]={0,0,0,0,0,0};

    for(i=0; i<F; i++)

    for(j=0; j<C; j++)

    {

    printf("Ingrese el elemento F=%d y Columna=%d de
    la matriz:n", i,j);

    scanf("%d", &matriz[i][j]);

    vector[i]=vector[i]+matriz[i][j];

    }

    printf("La Matriz generada es:nn");

    for(i=0; i<F; i++)

    {

    for(j=0; j<C; j++)

    {

    printf("*%d*", matriz[i][j]);

    }

    printf("n");

    }

    printf("Y el vector suma de las filas es:nn");

    for(i=0; i<F; i++)

    printf("%dt", vector[i]);

    getch();

    return 0;

    }

    Creo que no hay mucho por explicar, el uso de una matriz
    en C, es bastante parecido al de un vector, pero con las diferencias que en
    un vector tenemos �nicamente una dimensi�n y en las matrices
    tenemos dos.

    A continuaci�n desarrollaremos un ejemplo, el cual
    es bastante significativo para mi, ya que fue mi primer proyecto, cuando curs�
    la Materia de Programaci�n I en la Universidad, espero que les guste:

    Ejemplo 6.4

    Escriba un programa que visualice un cuadro m�gico
    de orden impar N, comprendido entre 3 y 11; el usuario debe elegir el valor
    de N. Un cuadro m�gico se compone de n�meros enteros entre 1
    y N, la suma de los n�meros que figuran en cada fila, columna y diagonal
    son iguales.

    Ejemplo:


    8


    1


    6


    3


    5


    7


    4


    9


    2

    Un m�todo de generaci�n consiste en situar
    en el centro de la primera fila, el n�mero siguiente en la casilla
    situada por encima y a la derecha, y as� sucesivamente … el cuadro
    es c�clico, la l�nea encima de la primera, es de hecho, la �ltima
    y la columna a la derecha de la ultima es la primera. En caso de que el n�mero
    generado caiga en una casilla ocupada, se elige la casilla situada de bajo
    del n�mero que acaba de ser situado.

    (Un poco complicado de entender… �verdad?… no te preocupes,
    a mi me cost� un poco de tiempo entenderlo, para darle soluci�n)

    #include <stdio.h>

    #include <conio.h>

    #define N 11

    #define M 11

    int comprueba (int [N][M], int dim);

    void impresion (int [N][M], int dim);

    main()

    {

    int cuadrado[N][M];

    int dim, f, c, i;

    clrscr();

    printf("Introduzca la dimenci�n por favor:n");

    scanf("%d", &dim);

    while(dim<3 || dim>11)

    {

    printf("ERROR, el valor de la dimenci�n debe estar entre
    3 y 11:n");

    scanf("%d", &dim);

    }

    while((dim%2)!=1)

    {

    printf("ERROR el valor de la dimenci�n debe ser Impar:n");

    scanf("%d", &dim);

    }

    for(f=0; f<dim; f++)

    for(c=0; c<dim; c++)

    cuadrado[f][c]=0;

    f=0;

    c=dim/2;

    cuadrado[f][c]=1;

    for(i=2; i<=dim*dim; i++)

    {

    f–;

    c++;

    if(f<0 && c==dim)

    {

    f=1;

    c=dim-1;

    }

    if(f<0)

    f=dim-1;

    if(c==dim)

    c=0;

    if(cuadrado[f][c]!=0)

    {

    c–;

    f=f+2;

    }

    cuadrado[f][c]=i;

    }

    printf("La constante m gica es: %dnn", comprueba
    (cuadrado, dim));

    impresion(cuadrado, dim);

    getch();

    return 0;

    }

    int comprueba (int cuadrado [N][M], int dim)

    {

    int magic=1, f,c, consmagic, sum=0, i, j=-1;

    consmagic=((dim*dim*dim)+dim)/2;

    for(f=0; f<dim; f++)

    {

    sum=0;

    for(c=0; c<dim; c++)

    sum=sum+cuadrado[f][c];

    if(sum!=consmagic)

    magic=0;

    }

    for(c=0; c<dim; c++)

    {

    sum=0;

    for(f=0; f<dim; f++)

    sum=sum+cuadrado[f][c];

    if(sum!=consmagic)

    magic=0;

    }

    sum=0;

    for(i=0; i<dim; i++)

    sum=sum+cuadrado[i][i];

    if(sum!=consmagic)

    magic=0;

    sum=0;

    for((i=dim-1); i>=0; i–)

    {

    j=j+1;

    sum=sum+cuadrado[i][j];

    }

    if(sum!=consmagic)

    magic=0;

    if(magic==0)

    consmagic=0;

    return (consmagic);

    }

    void impresion (int cuadrado[N][M], int dim)

    {

    int f, c;

    printf("tEL CUADRO GENERADO ES:nn");

    for(f=0; f<dim; f++)

    {

    for(c=0; c<dim; c++)

    printf("*%d*", cuadrado[f][c]);

    printf("n");

    }

    }

    Cuestionario

    1. �Qu� es una array o arreglo?___________________________________________________________________________________________________________________________________________________________________________________________________________________
    2. �Cu�l es la diferencia entre un vector y una matriz?_______________________________________________________________________________________________________________________________________________________________________
    3. �C�mo se define y se declara una funci�n cuyos par�metros
      son vectores o matrices?____________________________________________________________________________________________________________________________________________________________________
    4. �Cu�les son los tipos de datos admitidos para los arreglos?:______________________________________________________________________________________________________________________________________________________________________________________________________________________________
    5. �Cu�les son las diferencias fundamentales entre un arreglo y una
      variable simple?________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    Ejercicios

    1. En una escuela se tiene el listado de 30 alumnos con sus respectivas notos,
      dise�e un programa que muestre las notas de los alumnos que tuvieron
      una nota mayor que el promedio.
    2. Dise�e un programa que dado un vector de magnitud X, busque y muestre
      la posici�n en la que se encuentra un valor N, dentro del vector
    3. Se tiene dos vectores A y B, dise�e una soluci�n, en la
      cual, en un tercer vector se guarde la multiplicaci�n de los vectores
      A y B, y luego se impriman los tres vectores, uno a la par del otro, en
      forma vertical
    4. Dise�e un programa en C, en el cual guarde un vector de 100 posiciones,
      determine la media y la desviaci�n est�ndar.
    5. Almacenar 50 n�meros en un vector, elevar al cuadrado cada valor
      almacenado en el vector, almacenar el resultado en otro vector. Imprimir
      el vector original y el vector resultante
    6.      Dise�e un algoritmo y programa que lea
      dos vectores A y B de 20 elementos cada uno y sume el primer elemento de
      A con el ultimo elemento de B y luego el segundo elemento de A por el diecinueveavo
      elemento de B y as� sucesivamente hasta llegar al veinteavo elemento
      de A por el primer elemento de B. El resultado de la suma almacenarlo en
      un vector C.
    7. Se desea conocer la suma de la diagonal mayor y la diagonal menor de una
      matriz de F*C, e indique la diferencia matem�tica entre ambos resultados.
    8. En una tiemda, hay 8 departamentos y se tiene el registro de las ventas
      del a�o pasado de cada departamento por mes. Se desea conocer: el
      departamento que tuvo mayores ventas a lo largo de a�o. El departamento
      que tuvo menores ventas en el a�o. El mes en que se vendi�
      m�s en el departamento n�mero 3 y los meses y el departamento
      que super� las ventas promedios as� como el total de lo vendido
      a lo largo de a�o.
    9. Se tienen dos Matrices de tama�o 4×4, se pide escriba un programa
      en el cual,. Mediante un men�, se puedan sumar, multiplicar o dividir
      las matrices.

    10. El departamento de polic�a de la ciudad de San
    Salvador ha acumulado informaci�n referente a las infracciones de
    los l�mites de velocidad durante un determinado periodo de tiempo.
    El departamento ha dividido la ciudad en cuatro cuadrantes y desea realizar
    una estad�stica de las infracciones a los l�mites de velocidad
    en cada uno de ellos. Para cada infracci�n se ha preparado una tarjeta
    que contiene la siguiente informaci�n:

    �         numero
    de registro del veh�culo;

    �         cuadrante
    en el que se produjo la infracci�n

    �         limite
    de velocidad en milla por hora

    Dise�e un programa para producir 2 informes; el
    1o. Que contiene una lista de la multa de velocidad recolectadas, donde
    la multa se calcula como la suma del costo de la corte ($20,000) mas $ 1,250
    por cada mph que exceda la velocidad limite. Prepare una tabla con los siguientes
    resultados:


    INFRACCIONES A LOS LIMITES DE VELOCIDAD


    Registro del veh�culo


    Velocidad registrada (MPH)


    Velocidad limite


    Multa

    Este informe debe ser seguido de un segundo en el cual
    se proporcione un an�lisis de las infracciones por cuadrante. Para
    cada uno de los 4 cuadrantes mencionados, debe darse el numero de infracciones
    y la multa promedio.

 P�gina anterior Volver al principio del trabajoP�gina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter