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

Manual de Programación en el Lenguaje C (página 3)



Partes: 1, 2, 3

Partes: 1, , 3

Capitulo 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. 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)

    2. La Primera Línea
    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("&uml;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. 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.

    2. Funciones que devuelven un valor
      entero
    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|

      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.

    3. ab

      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.

    4. Funciones Combinadas
    5. 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.

    Capitulo 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.

    Dedicatoria Final

    Espero que estas pequeñas y humildes
    páginas te sean de mucha utilidad,
    para esta etapa de tu vida como programador…

    Deseo a la Vez dedicar, este pequeño triunfo
    a mi Madre, que siempre está apoyándome y
    dándome impulso a pesar de todo…

    Si tienes alguna duda, comentario o sugerencia,
    puedes hacerla a mi correo:

    (Espera próximamente una segunda entrega en
    la cual hablaré de algunos aspectos como punteros,
    colas, pilas….
    etc)

    "Los sueños no son para los
    soñadores, sino para los que trabajan por hacerlos
    realidad"

    Animo!!! Y no te desalientes, sigue siempre
    adelante

     

     

     

    Autor:

    Br. Manuel Antonio Ortez

Partes: 1, 2, 3
 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