SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
Capítulo 6


Funciones Predefinidas de
C++
6.1 Concepto de Función

6.2 Funciones Aritméticas

6.3 Funciones trigonométricas

6.4 Funciones de caracteres

6.5 Funciones de Cadena

6.6 Generador de números aleatorios

6.7 De Control de pantalla
6       Funciones Predefinidas de C++


Introducción

Los desarrolladores en C++, hacen sus programas teniendo siempre en mente escribir lo menos
posible reutilizando bloques de código, dividiendo mentalmente las partes del programa (entrada -
proceso – salida) como divisiones principales.

Además hay procesos cotidianos en los programas que a menudo no vale la pena escribirlos
reiteradamente, En eso C++ nos facilita la labor pues cuenta con funciones predefinidas de diferentes
tipos y para cada tipo de situaciones. No obstante antes de mostrar las funciones predefinidas
mostraremos el concepto de función para ingresar con más visión a las funciones.



6.1 Concepto de Función

Una función es un conjunto de instrucciones con una tarea determinada, una función es utilizada para
dividir un programa en subprogramas con tareas propias de la función. Una función siempre devuelve
valor.

Para ver definición de funciones Véase capítulo 7.



6.2 Funciones Aritméticas



                                                                                    Valor
                                     Tipo Dato       Tipo Dato                                Librería
Función         Descripción                                        Ejemplo        devuelto
                                    Argumento        devuelto                                   (**)
                                                                                  ejemplo
                                   double            double      sqrt(4.0)        2.0
sqrt       Raíz cuadrada           float             float       sqrt(4.0)        2.0         math.h
                                   long              long        sqrt(4)          2
                                                                 pow(2.0,
                                                     double                       8.0
                                   double                        3.0)
                                                                                  8.0
                                                                 pow(2.0, 3)
pow                                                              pow(2.0,
           Potencias               float             float                        8.0         math.h
(*)                                                              3.0)
                                                                                  8.0
                                                                 pow(2.0, 3)
                                   long              long
                                                                 pow(20.0, 3)     8000.0
                                   double            double
abs(-7.0)         7
                                     double         double
                                                                   abs(7.0)          7
                                                                   abs(-7.0)         7            math.h
                                     float          float
                                                                   abs(7.0)          7
                                                                   abs(-7)           7
                                     int            int
abs        Valor Absoluto                                          abs(7)            7
                                                                   abs(-70000)       70000
                                     long           long
                                                                   abs(70000)        70000
                                     long           long           abs(-                          stdlib.h
                                                                                     70000.0
                                     double         double         70000.0)
                                                                                     70000.0
                                                                   abs(70000.0)
                                                                   ceil(3.2)         4.0
                                     double         double
                                                                   ceil(3.9)         4.0
                                                                   ceil(3.2)         4.0
                                     float          float
           Techo(redondeo                                          ceil(3.9)         4.0
ceil                                                                                              math.h
           arriba)                                                 ceil(30000.2
                                     long           long           )                 30001.0
                                     double         double         ceil(30000.9      30001.0
                                                                   )
                                                                   floor(3.2)        3.0
                                     double         double
                                                                   floor (3.9)       3.0
                                                                   floor (3.2)       3.0
                                     float          float
                                                                   floor (3.9)       3.0
floor      Piso(redondeo abajo)                                                                   math.h
                                                                   floor
                                     long           long           (30000.2)         30000.0
                                     double         double         floor             30000.0
                                                                   (30000.9)
                                     double         double         exp(1.0)          2.7
                                     float          float          exp(1.0)          2.7
exp        Exponencial                                                                            math.h
                                     long           long
                                                                   exp(10.0)         22026.5
                                     double         double
                                     double         double         log(5.0)          1.6
                                     float          float          log(5.0)          1.6
log        Logaritmo natural(ln)                                                                  math.h
                                     long           long
                                                                   log(1000.0)       6.9
                                     double         double
                                     double         double         log10(10.0)       1.0
           Logaritmo base 10         float          float          log10(10.0)       1.0
log10                                                                                             math.h
           (ln)                      long           long           log10(1000.0
                                                                                     3.0
                                     double         double         )


(*) Para la función pow y otras, solo basta con asignar a una variable de tipo del valor devuelto de la
función o mostrar por pantalla con el formato, por ejemplo:
Guardando el valor en variable:




double base=2.0, exponente=3.0, resultado;
resultado=pow(base, exponente);
printf("nnResultado: %8.1lf ", resultado);



o mostrar directamente por pantalla:


double base=2.0, exponente=3.0;
printf("nnResultado: %8.1lf ", pow(base, exponente));




6.3 Funciones trigonométricas



                                                                        Valor
                             Tipo Dato    Tipo Dato                               Librería
Función    Descripción                                   Ejemplo(*)    devuelto
                            Argumento     devuelto                                  (**)
                                                                       ejemplo
                           double        double        cos(0.0)       1.0
cos        Coseno          float         float         cos(0.0)       1.0         math.h
                           long double   long          cos(1000.0)    0.6
                           double        double        acos(1.0)      0.0
acos       Arco Coseno     float         float         acos(1.0)      0.0         math.h
                           long double   long double   acos(0.5)      1.0
                           double        double        sin(0.5)       0.5
                                                                                  math.h
sin        Seno            float         float         sin(0.5)       0.5
                           long double   long double   sin(10.0)      -0.5
                           double        double        asin(0.8)      0.9
asin       Arco Seno       float         float         asin(0.8)      0.9         math.h
                           long double   long double   asin(1.0)      1.6
                           double        double        tan(1.0)       1.6
tan        Tangente        float         float         tan(1.0)       1.6         math.h
                           long double   long double   tan(100.0)     -0.6
                           double        double        atan(0.8)      0.7
           Arco
atan                       float         float         atan(0.8)      0.7         math.h
           Tangente
                           long double   long double   atan(100.0)    1.6
                           double        double        cosh(1.0)      1.5
           Coseno
cosh                       float         float         cosh(1.0)      1.5         math.h
           Hiperbólico
                           long double   long double   cosh(10.0)     11013.2
                           double        double        tanh(1.0)      0.8
           Tangente
tanh                       float         float         tanh(1.0)      0.8         math.h
           Hiperbólico
                           long double   long double   tanh(0.5)      0.5
(*) Notar que en los ejemplos se asignan como parámetros constantes de tipo real, pues todos aceptan
reales ya sea double, float o long double, no obstante también es posible asignar variables con
el tipo solicitado en la función.



6.4 Funciones de caracteres

Muchas de las funciones predefinidas toman como base la tabla de códigos ascii.

Para hacer comparaciones, conversiones y búsquedas generalmente es trabajado mediante el número
de código de cada carácter. A continuación mostramos la tabla de código ascii con los caracteres
imprimibles.



Tabla de códigos ascii Imprimibles


 Código      Carácter     Código      Carácter      Código      Carácter     Código      Carácter

  (*)32                      56           8            80          P              104        h
    33          !            57           9            81          Q              105        i
    34          "            58           :            82          R              106        j
    35          #            59           ;            83          S              107        k
    36          $            60           <            84          T              108        l
    37          %            61           =            85          U              109        m
    38          &            62           >            86          V              110        n
    39          '            63           ?            87          W              111        o
    40          (            64           @            88          X              112        p
    41          )            65           A            89          Y              113        q
    42          *            66           B            90          Z              114        r
    43          +            67           C            91          [              115        s
    44          ,            68           D            92                        116        t
    45          -            69           E            93          ]              117        u
    46          .            70           F            94          ^              118        v
    47          /            71           G          (*)95         _              119        w
    48          0            72           H            96          `              120        x
    49          1            73           I            97          a              121        y
    50          2            74           J            98          b              122        z
    51          3            75           K            99          c              123        {
    52          4            76           L           100          d              124        |
    53          5            77           M           101          e              125        }
    54          6            78           N           102          f              126        ~
    55          7            79           O           103          g
La tabla muestra los caracteres imprimibles por pantalla incluyendo el carácter con código número 32
que representa el espacio en blanco y el carácter número 95 es la línea inferior.

Funciones de caracteres



                                                                                   Valor
                                                      Tipo
                                       Tipo Dato                                  devuelt    Librería
Función          Descripción                          Dato        Ejemplo(*)
                                      Argumento                                      o         (**)
                                                    devuelto
                                                                                  ejemplo
          Devuelve true si su
                                                                isalnum('B')
          argumento satisface                                                      true
                                                                isalnum('1')
isalnum   isalpha o isdigit.             char         bool                         true      ctype.h
                                                                isalnum('+')
          Caso contrario devuelve                                                  false
          false.
          Devuelve true si su
          argumento es letra                                    isalpha('B')
                                                                                   true
          (Mayúscula o                                          isalpha('1')
isalpha                                  char         bool                         false     ctype.h
          Minúscula). Caso                                      isalpha('+')
                                                                                   false
          contrario devuelve
          false.
          Devuelve true si su                                   isdigit('B')
                                                                                   false
          argumento es un digito.                               isdigit('1')
isdigit                                  char         bool                         true      ctype.h
          Caso contrario devuelve                               isdigit('+')
                                                                                   false
          false.
          Devuelve true si su
          argumento es un
          carácter imprimible que
                                                                ispunct('B')
          no satisface isalnum y                                                   false
                                                                ispunct('1')
ispunct   no es espacio en blanco        char         bool                         false     ctype.h
                                                                ispunct('+')
          (Caracteres de                                                           true
          puntuación). Caso
          contrario devuelve
          false.
          Devuelve true si su                                   isspace(
          argumento es un                                       '   ')             true
          carácter de espacio en                                isspace(' ')       true
isspace                                  char         bool                                   ctype.h
          blanco (Tabular, Enter).                              isspace('n'       true
          Caso contrario devuelve                               )
          false.
          Devuelve true si su                                   iscntrl
          argumento es un                                       (
iscntrl
          carácter de control. Caso      char         bool      char(127)          true      ctype.h
(*)
          contrario devuelve                                    )
          false.
          Devuelve true si su                                   islower('a')       true
islower                                  char         bool                                   ctype.h
          argumento es letra                                    islower('A')       false
Minúscula. Caso                                        islower('+')       false
           contrario devuelve
           false.
                                                                  isupper
           Devuelve true si su                                    ('a')
           argumento es letra                                     isupper            false
isupper    Mayúscula. Caso                 char         bool      ('A')              true       ctype.h
           contrario devuelve                                     isupper            false
           false.                                                 ('+')

           Devuelve la versión en
                                                                  tolower('A')
           minúscula de su                                                              a
                                                                  tolower('a')
tolower    argumento. Si no tiene          char         char                            a       ctype.h
                                                                  tolower('+')
           minúscula devuelve el                                                        +
           mismo argumento
           Devuelve la versión en
                                                                  toupper('A')
           mayúscula de su                                                              A
                                                                  toupper('a')
toupper    argumento. Si no tiene          char         char                            A       ctype.h
                                                                  toupper('+')
           mayúscula devuelve el                                                        +
           mismo argumento




(*) Hay una forma de averiguar cuáles son caracteres de control y esto es con las siguientes
instrucciones:



for(int i=1;i<=127;i++)
if(iscntrl(char(i)))
      printf("n%d = %c", i, char(i));



El resultado nos mostrara todos los caracteres en el cual su código ascii esta entre (1-31) y el 127. Son
caracteres no imprimibles por ejemplo el número 10 que representa la tecla <Enter>



6.5 Funciones de Cadena



                                                                                     Valor
                                                                                                Librería
      Prototipo                 Descripción                  Ejemplo                devuelto
                                                                                                  (**)
                                                                                    ejemplo
int atoi
                          Convierte <cadena>      char cad[2]={'1','0'};
(char* <cadena>)                                                                       10        stdlib.h
                          hacia un int            atoi(cad);
long atol
                     Convierte <cadena>     char cad[2]={'0','5'};
(char* <cadena>)                                                        5     stdlib.h
                     hacia un long          atol(cad);
double atof                                 char
                     Convierte <cadena>
(char* <cadena>)                            cad[3]={'0','.','5'};       0.5   math.h
                     hacia un double
                                            atof(cad)
char* strcat(
                     Anexa o junta          char cad1[10]={'A','B'};
char*
                     <cad_origen > al       char cad2[2]={'C'};
<cad_destino>,                                                          ABC   string.h
                     final de               strcat(cad1, cad2);
char* <cad_origen>
                     <cad_destino>          printf("n%s", cad1);
)
                     Devuelve 0, si las
                                            char cad1[1]={'A'};
                     cadenas son
int strcmp(                                 char cad2[1]={'A'};
                     iguales, 1 si
char* <cadena1>,                            printf("n%d",              0     string.h
                     <cadena1> es mayor
char* <cadena2>)                            strcmp(cad1, cad2));
                     a <cadena2> y -1 si
                     es menor (*)
char* strcpy(
                     Cambia el valor de     char cad[10];
char*
                     <Expresioncad>         strcpy(cad, "ABC");
<cad_destino>,                                                          ABC   string.h
                     hacia                  printf("n%s", cad);
char*
                     <cad_destino>
<Expresioncad>)
int strlen                                  char cad[10]={'A','B'};
                     Devuelve la longitud
(char* <cadena>)                            printf("n%d",              ABC   string.h
                     de <cadena>
                                            strlen(cad));
char* strncat(
char*                Anexa o junta <n>
                                            char cad1[10]={'A','B'};
<cad_destino>,       caracteres de
                                            char cad2[2]={'C','D'};
char*                <cad_origen > al                                   ABC   string.h
                                            strncat(cad1,cad2,1);
<cad_origen>,        final de
                                            printf("n%s", cad1);
int <n>)             <cad_destino>

int strncmp(
                     Compara <n>            char cad1[10]={'A','B'};
char* <cadena1>,
                     caracteres de          char cad2[2]={'A','C'};
char* <cadena2>,                                                        0     string.h
                     <cadena1> con          printf("n%d",
int <n>)
                     <cadena2>              strncmp(cad1, cad2, 1));
                                            char
                     Devuelve un puntero
                                            cad1[10]={'A','B','C'};
                     a la primera
                                            char cad2[10]={'B'};
char* strstr(        ocurrencia de la
                                            char cad3[10];
char* <cadena>,      cadena <Patrón>                                    BC    string.h
                                            strcpy(cad3, strstr(cad1,
char* <Patrón>)      en <cadena> y
                                            cad2));
                     NULL si no lo
                                            printf("n%s", cad3);
                     encuentra
                     Devuelve un puntero    char cad1[10]={'A','B',
char* strchr(
                     a la primera           'A','B'};
char* <cadena>,                                                         BAB   string.h
                     ocurrencia de la       char car='B';
char <caracter>)
                     cadena <               char cad3[10];
caracter> en           strcpy(cad3, strchr(cad1,
                         <cadena> y NULL        car));
                         si no lo               printf("n%s", cad3);
                         encuentra
                         Devuelve un puntero    char cad1[10]={'A','B',
                         a la última            'A','B'}; char car='B';
                         ocurrencia de la       char cad3[10];
char* strrchr(
                         cadena <               strcpy(
char* <cadena>,                                                                       B       string.h
                         caracter> en           cad3, strrchr(cad1, car)
char <caracter>)
                         <cadena> y NULL        );
                         si no lo               printf("n%s", cad3);
                         encuentra


(*) Devuelve 0, si son iguales en longitud y caracteres, 1 si <cadena1> es mayor a <cadena2> y -1 si
es menor.



Ejemplos:




char cad1[10]={'B', 'B'};
char cad2[2]={'A'};
printf("nResultado: %d", strcmp(cad1, cad2));
/*Retorna 1, por que el caracter mas alto de cad1 es 'B' y el caracter
mas alto de cad2 es 'A' es decir 'B'>'A' en la tabla de los codigos ascii
*/




char cad1[10]={'B', 'B'};
char cad2[2]={'C'};
printf("nResultado: %d", strcmp(cad1, cad2));
/*Retorna -1, por que el caracter mas alto de cad1 es 'B' y el caracter
mas alto de cad2 es 'C' es decir 'B'<'C' en la tabla de los codigos ascii
*/




(**) Las librerías mostradas en las tablas son automáticamente referenciadas en Visual Studio .Net por
la ya conocida referencia:
#include <iostream>
using namespace std;




6.6 Generador de números aleatorios

A menudo en los problemas computacionales es necesario generar números al azar o aleatorios. A
continuación mostramos la forma de generar números aleatorios en C++.




#include <iostream>
using namespace std;
#include "stdlib.h"
#include "time.h"

void main(){
int tiempo, desde, hasta, Numero;

tiempo=time(NULL);
srand(tiempo);

desde=50; hasta=150;

Numero=desde + rand() % (1 + hasta - desde);

printf("%dn", Numero);
system("PAUSE");

}



Observamos del ejemplo anterior las nuevas directivas a utilizar:




#include "stdlib.h"
#include "time.h"



Generamos la semilla de números aleatorios:
tiempo=time(NULL);
srand(tiempo);



Establecemos los límites de generación de números (50-150):




desde=50; hasta=150;



Generamos el número aleatorio y lo guardamos en la variable Número:




Numero=desde + rand() % (1 + hasta - desde);



En general la fórmula para generar números aleatorios entre a y b:


a + rand() % (1 + b - a)
Capítulo 7


Programación Modular
7.1 Diseño descendente

7.2 Subprogramas

7.3 Variables globales y locales

7.4 Funciones

         7.4.1 Definición de funciones

         7.4.2 Invocación a las funciones

7.5 Procedimientos

    7.5.1 Definición de Procedimientos

    7.5.2 Invocación a las Procedimientos

7.6 Tipos de Parámetros
7       Programación Modular


Introducción

Los desarrolladores en C++, hacen sus programas teniendo siempre en mente el conocido dicho
“Divide y vencerás”, el cual nos va a evitar serios dolores de cabeza a la hora de realizar aplicaciones
grandes y complejas. En C++ es esencial el trabajo modular ya sea por objetivos, abstracción o por
reutilización.

Un módulo representa un bloque abstracto de código, esto es el programa principal o subprogramas
en una solución a un problema computacional.



7.1 Diseño descendente
Las aplicaciones en C++ y varios lenguajes de programación tienen como característica el diseño
descendente en la escritura de código, es decir “de arriba hacia abajo” esto significa que en una hoja
de código el compilador va a hacer un barrido desde la primera hasta la última línea en la hoja de
código.



                          Línea 1 xxxxxxxx
                          Línea 2 xxxxxxxx
                          Línea 3 xxxxxxxx
                          Línea 4 xxxxxxxx
                          Línea 5 xxxxxxxx
                          …………………...
                          ……………………
                          Línea n-1 ...……..
                          Línea n...………..




7.2 Subprogramas

Son subdivisiones que bifurcan o alteran el flujo del código en un programa. Hacia la zona del
subprograma, esto puede ser en la hoja de código o en ocasiones a otros archivos.



A continuación mostramos un esquema de un programa hecho de forma modular:
PROGRAMA PRINCIPAL                                SUBPROGRAMA (X)
           Línea 1 xxxxxxxx                                Línea 1 xxxxxxxx
           Línea 2 xxxxxxxx                                Línea 2 xxxxxxxx
           LLAMA SUBPROGRAMA X                             ……………………
           Línea 4 xxxxxxxx                                Línea n-1 ...……..
           Línea 5 xxxxxxxx                                Línea n...………..
           Línea 6 xxxxxxxx
           LLAMA SUBPROGRAMA X
           Línea 8 xxxxxxxx
           Línea 9 xxxxxxxx
           Línea 10 xxxxxxxx
           LLAMA SUBPROGRAMA Y
           Línea 11 xxxxxxxx                                  El esquema representa el
           Línea 12 xxxxxxxx                                  flujo de un programa con
           …………………...                                         dos subprogramas.
           ……………………
           Línea n-1 ...……..
           Línea n...………..



                SUBPROGRAMA (Y)
                Línea 1 xxxxxxxx
                Línea 2 xxxxxxxx
                Línea 3 xxxxxxxx
                ……………………
                Línea n...………..



Notar que el programa principal cuenta con 2 subprogramas estos puede estar dentro de la hoja de
código o en otro archivo.

El compilador comienza con la línea 1, línea 2 y llega a la línea en la cual se llama al subprograma X,
entonces el flujo brinca al subprograma X entonces comienza a ejecutarse la línea 1, 2, …n del
subprograma. Al terminar de ejecutarse el subprograma el flujo retorna al programa principal.

Entonces continúa el programa principal con la línea 4, 5, 6 entonces vuelve a llamar al subprograma X
y vuelve a ejecutar y terminar sus instrucciones para retornar nuevamente al programa principal.

Se ejecuta las líneas 8,9,10 y llega a la invocación del subprograma Y, entonces similar a lo que hizo
el compilador con el subprograma X hace con Y, ejecuta las líneas del subprograma Y, al finalizar
retorna al programa principal hasta terminar de ejecutar lo restante.
7.3 Variables globales y locales

Una variable es global o local en función de la zona dentro de la hoja de código en donde es
declarada. Esto puede ser por el alcance del valor de la variable con la cual se necesita trabajar.



Variable global

Es una variable que es declarada fuera de todo modulo, su valor almacenado es mantenido hasta que
se termine el programa.


#include <iostream>
using namespace std;

int nro; //Variable global nro
void main(){




Variable local

Es una variable que es declarada dentro de un módulo, su valor almacenado es mantenido hasta que
termine el modulo.


#include <iostream>
using namespace std;

void main(){
int nro; //Variable Local del programa principal
7.4 Funciones

Una función es un módulo de instrucciones con una tarea específica que retorna siempre resultado(s).
Este resultado es del tipo de datos con el cual fue definido.

Una función es código en espera hasta que la función sea invocada desde el programa principal, el
valor devuelto por la función puede ser almacenado o mostrado directamente por pantalla.



7.4.1 Definición de funciones

Para utilizar una función antes previamente debe ser definida. A continuación mostramos la definición
de una función:


<Tipo de dato> <Nombre Función> (<Lista de argumentos>){


       <Conjunto de instrucciones>


return <valor/variable>;
}




Dónde:

<Tipo de dato>:

Tipo de datos valido C++ (int, double, bool, etc.) Véase apartado 3.1.1



<Nombre Función> :

Identificador valido C++(Aplica las reglas a nombrar variables Véase apartado 3.1.3)



<Lista de argumentos>:

Lista de variables separadas por coma, cada argumento debe estar declarado con el tipo de dato
(<Tipo de dato > <Argumento1>, < Tipo de dato > <Argumento2>,…)



<valor/variable>:
Valor o variable que la función devolverá como resultado, cabe decir que este resultado debe ser del
tipo de dato declarado por la función.



Ejemplo:

La siguiente función es de tipo entera y retorna la suma de dos números enteros.


int f_sumar(int A, int B){
int devolver;
devolver = A + B;
return devolver;
}




7.4.2 Invocación a las funciones

La función f_sumar es un código en espera sino hasta que es invocado desde el modulo void main.

Para invocar a una función se nombra la función y se pasan valores como se muestra a continuación:




void main(){
int A, resultado;
A=10;
resultado=f_sumar(A, 5);//Invocacion a funcion
printf("%dn", resultado);//Muestra 15
system("PAUSE");
}




Una función no es necesariamente invocado de la función principal void main también es posible que
sea invocado desde cualquier función valida de C++, y todas ellas estarán en espera hasta que sean
invocados desde el modulo void main. A continuación mostraremos como se invoca una función
dentro de otra:
int f_sumar(int A, int B){
int devolver;
devolver = A + B;
return devolver;
}

int f_doble(int A){
int devolver;
devolver = f_sumar(A, A);//Invocacion a funcion f_sumar
return devolver;
}



El programa completo es:




#include <iostream>
using namespace std;

//Definicion de la funcion f_sumar
int f_sumar(int A, int B){
int devolver;
devolver = A + B;
return devolver;
}

//Definición de la funcion f_doble
int f_doble(int A){
int devolver;
devolver = f_sumar(A, A);//Invocacion a función f_sumar
return devolver;
}

//Programa Principal
void main(){
int A, resultado;
A=10;
resultado=f_doble(A);//Invocacion a función f_doble
printf("%dn", resultado);//Muestra 20
system("PAUSE");
}
7.5 Procedimientos

Un procedimiento es un tipo de función con la única restricción que NO retorna resultado(s). Por tanto
todas las reglas que se describieron para las funciones son también aplicables a los procedimientos.

En C++ los procedimientos también son conocidos como funciones void. Se concibe a un
procedimiento como bloque de código que es anexado al módulo que lo invoca.



7.5.1 Definición de Procedimientos

Para utilizar un procedimiento antes previamente debe ser definida. A continuación mostramos la
definición de un procedimiento:




void <Nombre Procedimiento > (<Lista de argumentos>){

       <Conjunto de instrucciones>

}




Dónde:



<Nombre Procedimiento > :

Identificador valido C++(Aplica las reglas a nombrar variables Véase apartado 3.1.3)



<Lista de argumentos>:

Lista de variables separadas por coma, cada argumento debe estar declarado con el tipo de dato
(<Tipo de dato > <Argumento1>, < Tipo de dato > <Argumento2>,…)



Ejemplo:

El siguiente procedimiento muestra por pantalla un entero.
void f_mostrar(int A){
printf("%dn", A);
system("PAUSE");
}




7.4.2 Invocación a los Procedimientos

El procedimiento f_mostrar es un código en espera sino hasta que es invocado desde el modulo
void main.




void main(){
int A, resultado;
A=10;
f_mostrar(A); //Invocacion a Procedimiento f_mostrar
}



El programa completo es:




#include <iostream>
using namespace std;

//Definición de Procedimiento f_mostrar
void f_mostrar(int A){
printf("%dn", A);
system("PAUSE");
}

//Procedimiento Principal
void main(){
int A, resultado;
A=10;
f_mostrar(A);//Invocacion a Procedimiento f_mostrar
}
Como podemos apreciar la función principal void main es un procedimiento o una función void.

Tener en cuenta que las variables que se declaran y los argumentos solo cuentan dentro del módulo
donde fueron declaradas, por lo tanto el argumento (int A) del procedimiento f_mostrar y la
variable int A de void main son distintas.



7.6 Tipos de Parámetros

En C++ los parámetros o argumentos de una función pueden ser de dos tipos: Por valor o por
referencia.



Parámetro Por Valor

Son aquellos parámetros en los cuales el valor o contenido de los parámetros es copiado, y dentro de
la función se trabaja con dicha copia. Esto sugiere que la variable real no puede ser modificada en
contenido.




void f_incrementar(int A){//Argumento A es por valor
A++;
printf("%dn", A);
}

void main(){
int A;
A=10;
f_incrementar(A);//Muestra 11
printf("%dn", A);//Muestra 10
system("PAUSE");
}




Parámetro Por Referencia

Son aquellos parámetros en los cuales la dirección de memoria es pasada hacia la función, esto indica
que dentro de la función se trabaja realmente con la variable que es pasada como argumento, por
tanto dicha variable puede ser modificada.
Para decirle al compilador de C++ que un argumento es por referencia se debe anteponer a la variable
el símbolo de ampersand &.




void f_incrementar(int &A){ //Argumento A es por referencia
A++;
printf("%dn", A);
}

void main(){
int A;
A=10;
f_incrementar(A);//Muestra 11
printf("%dn", A);//Muestra 11
system("PAUSE");
}



Se recomienda usar parámetros por referencia en lo mínimo. Es posible también modificar variables en
funciones si la declaramos como variables globales, esto nos va a facilitar el entendimiento y sabremos
que estamos modificando.
Capítulo 8


Arreglos

  8.1 Arreglos Unidimensionales

    8.1.1 Representación Grafica

    8.1.2 Asignación de Valores

    8.1.3 Lectura y escritura de datos

    8.1.4 Recorrido, inserción y eliminación en un vector

  8.2 Arreglos Bidimensionales

    8.1.1 Representación Grafica

    8.2.2 Asignación de Valores

    8.2.3 Lectura y escritura de datos

    8.2.4 Recorrido, inserción y eliminación en una matriz

  8.3 Ordenamientos

    8.3.1 método de intercambio o burbuja

    8.3.2 método por inserción,

    8.3.3 método por selección

    8.3.4 método de ordenación rápida (quicksort).

  8.4 Búsquedas

       8.4.1 Tipos de búsqueda

       8.4.2 Método Búsqueda Binaria
8     Arreglos


Introducción

Los arreglos son conjuntos de datos del mismo tipo, agrupados en una variable y cuyo acceso
individual es numérico, este acceso individual es denominado índice. Un arreglo puede contener por
ejemplo listas de calificaciones de exámenes, de temperaturas o de nombres.

Cabe decir que la cantidad de elementos de los arreglos es de tipo estática es decir que al declarar la
longitud del vector esta va a mantener su longitud hasta el final del programa.



8.1 Arreglos Unidimensionales


8.1.1 Representación Grafica

A continuación mostramos un vector de tipo entero de 10 elementos:


int A[10]


 0 1 2 3 4 5 6 7 8  9
 7 5 6 3 0 8 2 1 15 9


A[0]=7       A[3]=3        A[8]=15



8.1.2 Asignación de Valores

Asignar a un elemento del vector es mediante la variable seguida del índice entre corchetes así como
sigue a continuación:




<Variable_vector>[<indice>] = <variable / valor>;
Ejemplos:



A[0] = 7;            A[3] = 3;             A[8] = 15;

A[5] = A[1];         A[6] = A[6] * 2;      A[7] = A[0] / A[1];

A[9] = desde + rand() % (1 + hasta - desde);



8.1.3 Lectura y escritura de datos

Leer o escribir un elemento del vector es similar ha como se hace a variables individuales mediante la
variable seguida del índice entre corchetes así como sigue a continuación:



Lectura


scanf(<formato>, &<Variable_vector>[<indice>] );



Ejemplos


scanf("%d", &A[ 5 ]);
scanf("%d", &A[ 0 ]);
scanf("%d", &A[ p ]);



Escritura


printf(<formato>, <lista de elementos de vector>);



Ejemplos


printf("%d", A[ 5 ]);
printf("%lf", B[ 0 ]);
printf("%d y %8.2lf", A[ p ], B[ p ]);



8.1.4 Recorrido, inserción, eliminación y ejemplos en un vector



Recorrido

Para recorrer un vector ya sea para asignación, lectura o escritura utilizamos la sentencia for

ya que conocemos el inicio y el final del recorrido, así como se muestra a continuación:


Ejemplo 1 Asignación del índice a cada elemento de un vector de 10 elementos:


Longitud=10;
for(i=0 ; i< Longitud ; i++){
      A[i]=i;
}



Ejemplo 2 Ingreso por teclado a cada elemento de un vector de 10 elementos:


Longitud=10;
for(i=0 ; i< Longitud ; i++){
      scanf("%d", &A[i]);
}



Ejemplo 3 Impresión por teclado a cada elemento en una línea para un vector de 10 elementos:


Longitud=10;
for(i=0 ; i< Longitud ; i++){
      printf("%dn", A[i]);
}
Inserción

Sabemos que la longitud del vector es de tipo estática por tanto la inserción es simulada, es decir no
aumenta la longitud declarada al inicio.

Para tal caso debemos declarar la longitud del vector con un valor máximo tope, que contemple la
longitud actual más las inserciones.

Debemos tener la longitud virtual del vector en una variable

A continuación mostramos el algoritmo de inserción si suponemos que:




int A[6], N=4;

 0 1 2 3 4 5
 2 3 1 4




Algoritmo de inserción:


for(i = N-1 ; i>=posicion-1 ; i--)
      A[i+1] = A[i];

A[posicion-1] = nro_insertar;
N++;




Dónde:



<A>:                  Vector de elementos

< posicion >:         Posición a insertar

< nro_insertar >:     Valor a insertar

< N >:                Longitud del vector
Explicación del algoritmo




for(i = N-1 ; i>=posicion-1 ; i--)
      A[i+1] = A[i];




< for(i = N-1 ; i>=posicion-1 ; i--) > significa que la variable < i > comienza de la longitud
del vector < N-1 >, y termina en la posición a insertar < i>=posicion-1 >. < A[i+1] = A[i] >
significa el elemento siguiente es igual al anterior.



Si < posicion > a insertar es 2 entonces:


Procedemos a desplazar los elementos desde el final hasta la posición:

 A[i+1]      =   A[i]
  A[4]       =   A[3]
  A[3]       =   A[2]
  A[2]       =   A[1]

Resultado:

 0 1 2 3 4 5
 2 3 3 1 4




A[posicion-1] = nro_insertar;




Si < nro_insertar > es 10 entonces:


A[2-1] = 10;


 0 1 2 3 4 5
 2 10 3 1 4
N++;



Como N tenía el valor de 4 y se incrementa en uno entonces:


N=5




Eliminación

Sabemos que la longitud del vector es de tipo estática por tanto la eliminación es simulada, es decir no
decrementa la longitud declarada al inicio.

Debemos tener la longitud virtual del vector en una variable.

A continuación mostramos el algoritmo de eliminación si suponemos que:




int A[6], N=5;

 0 1 2 3 4 5
 2 3 1 4 5




Algoritmo de eliminación:


for(i= posicion; i<N ; i++)
      A[i-1]=A[i];

N--;



Dónde:
<A>:                    Vector de elementos

< posicion >:           Posición a eliminar

< N >:                  Longitud del vector



Explicación del algoritmo




for(i= posicion; i<N ; i++)
      A[i-1]=A[i];



< for(i= posicion; i<N ; i++) > significa que la variable < i > comienza de la posición a
eliminar < i= posicion > hasta la longitud del vector < i<N >. < A[i-1] = A[i] > significa el
elemento anterior es igual al siguiente.



Si < posicion > a eliminar es 2 entonces:


Procedemos a desplazar los elementos desde la posición hasta el final:

 A[i-1]      =   A[i]
  A[1]       =   A[2]
  A[2]       =   A[3]
  A[3]       =   A[4]

Resultado:

 0 1 2 3 4 5
 2 1 4 5 5




N--;



Como N tenía el valor de 5 y se decrementa en uno entonces:
N=4




8.2.1 Representación Grafica

A continuación mostramos una matriz de tipo entero de 5x5 (filas x columnas) elementos:


int A[5][5]


A[0][0]=2        A[0][3]=6


     0   1   2   3    4          A[1] [1]=6
 0   2   3   5   6    7
 1   5   6   0   8    6          A[2] [3]=9
 2   2   6   3   9    5
 3   1   2   7   2    8          A[3] [1]=2
 4   7   8   9   3    4


A[4] [0]=7           A[3][3]=2




8.2.2 Asignación de Valores

Asignar a un elemento de la matriz es mediante la variable seguida de los índices entre corchetes así
como sigue a continuación:




<Variable_matriz>[<índice_fila>][<índice_columna>] = <variable / valor>;




Ejemplos:
A[0][0] = 7;         A[3][1] = 3;           A[8][8] = 15;

A[5][0] = A[1][3];   A[6][2] = A[6][2] * 2; A[7][5] = A[0][3] / A[1][9];

A[9][1] = desde + rand() % (1 + hasta - desde);




8.1.3 Lectura y escritura de datos

Leer o escribir un elemento de la matriz es similar ha como se hace a variables individuales mediante
la variable seguida de los índices entre corchetes así como sigue a continuación:



Lectura


scanf(<formato>, &<Variable_matriz>[<índice_fila>][<índice_columna>]);



Ejemplos


scanf("%d", &A[ 5 ][ 5 ]);
scanf("%d", &A[ 0 ][ 1 ]);
scanf("%d", &A[ f ][ c ]);



Escritura


printf(<formato>, <lista de elementos de la matriz>);



Ejemplos


printf("%d", A[ 5 ][ 4 ]);
printf("%lf", B[ 0 ][ 0 ]);
printf("%d y %8.2lf", A[ f ][ 1 ], B[ f ][ c ]);
8.2.4 Recorridos y ejemplos de matrices.



Para recorrer una matriz ya sea para asignación, lectura o escritura utilizamos 2 sentencias for

Uno para controlar las filas y otro para las columnas, así como se muestra a continuación:


Ejemplo 1 Asignación de la suma de los índices a cada elemento de una matriz de 5x4 elementos:


TotalFilas=5;
TotalColumnas=4;
for(fila=0 ; fila < TotalFilas ; fila++)
      for(columna=0 ; columna < TotalColumnas; columna++)
            A[fila][columna]= fila + columna;




Ejemplo 2 Recorrer y sumar cada elemento en forma horizontal para una matriz de 2x3 elementos:


TotalFilas=2;
TotalColumnas=3;
S=0;
for(fila=0 ; fila < TotalFilas ; fila++)
      for(columna=0 ; columna < TotalColumnas; columna++)
            S+=A[fila][columna];


Recorrido:

 fila columna
  0       0
  0       1
  0       2
  1       0
  1       1
  1       2
Ejemplo 3 Recorrer y sumar cada elemento en forma vertical para una matriz de 2x3 elementos:


TotalFilas=2;
TotalColumnas=3;
S=0;
for(columna=0 ; columna < TotalColumnas; columna++)
      for(fila=0 ; fila < TotalFilas ; fila++)
            S+=A[fila][columna];


Recorrido:

 columna fila
     0    0
     0    1
     1    0
     1    1
     2    0
     2    1




Ejemplo 4 Cargar elementos a una matriz de 5x6 elementos:


TotalFilas=5;
TotalColumnas=6;
for(fila=0 ; fila < TotalFilas ; fila++)
      for(columna=0 ; columna < TotalColumnas; columna++)
            scanf("%d", A[fila][columna]);




Las instrucciones anteriores son correctas sin embargo tendremos que ingresar por teclado 5x6 veces
es decir 30.



Para tal caso podemos utilizar los números aleatorios:
tiempo=time(NULL);
srand(tiempo);

TotalFilas=5; TotalColumnas=6;
desde=1; hasta=10;
for(fila=0 ; fila< TotalFilas ; fila++)
    for(columna=0 ; columna< TotalColumnas ; columna++)
            A[fila][columna] = desde + rand() % (1 + hasta - desde);




Ejemplo 5 Generar y mostrar por pantalla una matriz de 5x6 elementos:


tiempo=time(NULL);
srand(tiempo);

TotalFilas=5; TotalColumnas=6;
desde=1; hasta=5;
for(fila=0 ; fila< TotalFilas ; fila++){
      printf("nnt");
    for(columna=0 ; columna< TotalColumnas ; columna++){
            A[fila][columna] = desde + rand() % (1 + hasta - desde);
            printf("t%d", A[fila][columna]);
     }
}



Ejemplo 6 Definir e ingresar el orden NxM a una matriz:


//Definition
const int OrdenMax = 10;
int A[OrdenMax][OrdenMax], N, M;
//Ingreso
printf("nrIngrese # de filas de la matriz: "); scanf("%d", &N); fflush(stdin);
printf("nrIngrese # de columnas de la matriz: "); scanf("%d", &M);
fflush(stdin);




Ejemplo 7 Se tiene una matriz de orden N*M de tipo entero, se pide
generar y mostrar números aleatorios entre 1 y 16 dentro de la matriz.



#include <iostream>
using namespace std;
#include "stdlib.h"
#include "time.h"

void main(){
//Definition de matriz
const int OrdenMax = 10;
int A[OrdenMax][OrdenMax], N, M;
int tiempo, desde, hasta, fila, columna;
//Ingreso orden matriz
printf("nrIngrese # de filas de la matriz: "); scanf("%d", &N);
fflush(stdin);
printf("nrIngrese # de columnas de la matriz: "); scanf("%d", &M);
fflush(stdin);

tiempo=time(NULL);
srand(tiempo);

desde=1; hasta=16; //rango números a generar
for(fila=0 ; fila<N ; fila++){
      printf("nnt");
     for(columna=0 ; columna<M ; columna++){
       //generación de numero
       A[fila][columna] = desde + rand() % (1 + hasta - desde);
       //impresión de numero
       printf("t%d", A[fila][columna]);
     }
}

printf("nn");
system("PAUSE");

}




8.3 Ordenamientos

En arreglos existen muchos métodos de ordenación de elementos a continuación mostraremos los
más utilizados.



8.3.1 método de intercambio o burbuja
for(i=0 ; i<N-1 ; i++)
    for(j=i+1 ; j<N ; j++)
          if(A[i] > A[j]){
                  aux=A[i];
                  A[i]=A[j];
                  A[j]=aux;
            }




Explicación del algoritmo



El primer < for > indica que se debe recorrer desde el inicio < i=0 > hasta el penúltimo elemento <
i<N-1 >


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



El segundo < for > indica que se debe recorrer desde el siguiente del elemento actual < j=i+1 >
hasta el último elemento < j<N >


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



Si N=6 el recorrido de los dos for:

i   j
0   1,2,3,4,5
1   2,3,4,5
2   3,4,5
3   4,5
4   5


Recordar el algoritmo del intercambio de valores entre dos variables A y B:


aux = A;
A   = B;
B   = aux;
Supongamos que el vector es el siguiente:

0 1 2 3 4 5
3 5 4 6 7 0


Como conocemos N=6, el recorrido de las variables <i> y <j> el algoritmo del intercambio es
entonces:

i   j A[i] A[j] A[i] > A[j]                 Intercambio
0   1  3    5      false
0   2  3    4      false
0   3  3    6      false
0   4  3    7      false
0   5  3    0      true                 0   5   4   6   7   3

1   2       5           4       true    0   4   5   6   7   3
1   3       4           6       false
1   4       4           7       false
1   5       4           3       true    0   3   5   6   7   4

2 3         5           6       false
2 4         5           7       false
2 5         5           4       true    0   3   4   6   7   5

3 4         6           7       false
3 5         6           5       true    0   3   4   5   7   6

4 5         7           6               0   3   4   5   6   7


El resultado final es el arreglo ordenado:

0   3   4       5   6       7
Capítulo 9


Cadenas
  9.1 Fundamentos de cadenas

  9.2 Asignación de Valores

  9.3 Lectura y escritura de datos

  9.4 Arreglo de cadenas

  9.5 Lectura y escritura de datos
9.1 Fundamentos de cadenas

Introducción

En el mundo de la programación y sistemas se trabajan con base de datos. Que no es más que datos
interrelacionados, y en su mayoría almacena datos de tipo texto (Cadenas).

Entonces debemos aprender también a manejar bien los datos tipos cadenas en operaciones de
concatenación, extracción, filtros, etc.

En C++ existen dos tipos de cadenas: estáticas y dinámicas. Nosotros comenzaremos con las de tipos
estáticas para comprender el manejo interno y de cómo son las operaciones primitivas.



Representación Grafica

A continuación mostramos un vector de tipo carácter de 12 elementos:



char A[12]

 0 1 2 3 4 5 6 7 8 9 10 11 12
 H O L A   M U N D O 0 ? ?


A[0]=H         A[3]=A         A[8]=D                       Operador marcador de fin de cadena




9.2 Asignación de valores

Asignar a un elemento de la cadena es mediante la variable seguida de los índices entre corchetes así
como sigue a continuación:




<Variable_cadena>[<índice>] = <variable / valor>;
Ejemplos:




A[0] = '7';
A[3] = (char)65;
A[8] = 'A';




9.3 Lectura y escritura de Datos

Leer o escribir un elemento de la cadena es similar a como se hace en los vectores, con la adición de
entrada completa de la cadena mediante la función < gets >. Muchas de las operaciones en cadenas
se realizan mediante funciones (Véase apartado 6.5).



Lectura Carácter




scanf(<formato>, &<Variable_cadena>[<indice>] );



Ejemplos




scanf("%c", &A[ 5 ]);
scanf("%c", &A[ 0 ]);
scanf("%c", &A[ p ]);




Lectura Cadena




gets(<Variable_cadena>);
Ejemplos




gets(A);
gets(B);




Escritura Caracter


printf(<formato caracter>, <lista de elementos de cadena>);



Ejemplos




printf("%c", A[ 5 ]);
printf("%c y %c", A[ p ], B[ p ]);



Escritura Cadena




printf(<formato cadena>, <Variable cadena>);



Ejemplos




printf("%s", A);
printf("%s y %s", A, B);
9.4 Arreglo de cadenas



A continuación mostramos una matriz de tipo carácter de 5x16 elementos:

char A[5][16]


A[0][0]=J        A[0][3]= <espacio>         A[0][7]=A


   0 1 2 3          4 5 6       7 8 9 10 11 12 13 14 15
 0 J O E            R O C       A 0 ? ? ? ? ? ? ?                        A[1][10]=S
 1 M A R I          A    S      A L A S 0 ? ? ? ?
 2 J U L I          O    T      E L L O 0 ? ? ? ?
 3 P E D R          O    M      O R E N O 0 ? ? ?                        A[2][9]=L
 4 P I L A          R 0 ?      ? ? ? ? ? ? ? ? ?


A[4][0]=P        A[4][4]=R        A[3][7]=O       A[3][12]=0




9.5 Lectura y escritura de datos



Lectura Cadena




gets(<Variable_cadena>[<índice fila>]);



Ejemplos




gets(A[0]);
gets(B[p]);
Escritura Cadena




printf(<formato cadena>, <Variable cadena>);



Ejemplos




printf("%s", A[0]);
printf("%s y %s", A[0], B[p]);



Ejemplo 1:

Ingrese una cadena de caracteres por teclado, desarrolle la simulación de la función extraer.



Solución


#include <iostream>
using namespace std;

void main(){
const int LongitudMax = 100;
char cadena[LongitudMax], Resultado[LongitudMax];
int i, inicio, fin, nrocar, c;

printf("nrIngrese Cadena: "); gets(cadena); fflush(stdin);
printf("nrPosicion de Inicio a Extraer: "); scanf("%d", &inicio); fflush(stdin);
printf("nrNumero de caracteres a Extraer: "); scanf("%d", &nrocar);
fflush(stdin);

c=0;
fin=(inicio-1) + nrocar;
for(i=inicio-1 ; i < fin ; i++){
      Resultado[c]=cadena[i];
c++;
}
Resultado[c]='0';

printf("nnLa cadena extraida es %snn", Resultado);

system("PAUSE");
}



Explicación del algoritmo




const int LongitudMax = 100;
char cadena[LongitudMax], Resultado[LongitudMax];
int i, inicio, fin, nrocar, c;



Observamos la declaración de variables: una constante con la longitud máxima de la cadena, una
variable cadena para el ingreso y una variable resultado para mostrar lo que se va a extraer. Y un
conjunto de variables numéricas.




printf("nrIngrese Cadena: "); gets(cadena); fflush(stdin);
printf("nrPosicion de Inicio a Extraer: "); scanf("%d", &inicio); fflush(stdin);
printf("nrNumero de caracteres a Extraer: "); scanf("%d", &nrocar);
fflush(stdin);



Las instrucciones mostradas son para el ingreso de variables. Observar la instrucción <fflush> después
de cada instrucción de ingreso, para no perder caracteres.




c=0;
fin=(inicio-1) + nrocar;
for(i=inicio-1 ; i < fin ; i++){
      Resultado[c]=cadena[i];
      c++;
}
Inicializamos a la variable c a cero. La variable fin representa hasta donde se va a extraer, es inicio
menos uno más la cantidad de caracteres a extraer.

En el bucle for la variable i comienza en inicio menos uno hasta fin y se va asignando a resultado el
contenido carácter a carácter. La variable c representa el índice de la variable resultado.




Resultado[c]='0';



Demarcamos el final de la cadena.




printf("nnLa cadena extraida es %snn", Resultado);



Mostramos por pantalla el resultado.



Supongamos que los datos ingresados en el programa son los siguientes:



cadena=”JUAN PEREZ”

inicio=6

nrocar=4



Entonces:



c=0

fin = ( 6 - 1 ) + 4 = 9

i=5
i   c Resultado[c]
5   0      P
6   1      E
7   2      R
8   3      E

Más contenido relacionado

Destacado

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Destacado (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Fundamentos de la programacion u2

  • 1. Capítulo 6 Funciones Predefinidas de C++ 6.1 Concepto de Función 6.2 Funciones Aritméticas 6.3 Funciones trigonométricas 6.4 Funciones de caracteres 6.5 Funciones de Cadena 6.6 Generador de números aleatorios 6.7 De Control de pantalla
  • 2. 6 Funciones Predefinidas de C++ Introducción Los desarrolladores en C++, hacen sus programas teniendo siempre en mente escribir lo menos posible reutilizando bloques de código, dividiendo mentalmente las partes del programa (entrada - proceso – salida) como divisiones principales. Además hay procesos cotidianos en los programas que a menudo no vale la pena escribirlos reiteradamente, En eso C++ nos facilita la labor pues cuenta con funciones predefinidas de diferentes tipos y para cada tipo de situaciones. No obstante antes de mostrar las funciones predefinidas mostraremos el concepto de función para ingresar con más visión a las funciones. 6.1 Concepto de Función Una función es un conjunto de instrucciones con una tarea determinada, una función es utilizada para dividir un programa en subprogramas con tareas propias de la función. Una función siempre devuelve valor. Para ver definición de funciones Véase capítulo 7. 6.2 Funciones Aritméticas Valor Tipo Dato Tipo Dato Librería Función Descripción Ejemplo devuelto Argumento devuelto (**) ejemplo double double sqrt(4.0) 2.0 sqrt Raíz cuadrada float float sqrt(4.0) 2.0 math.h long long sqrt(4) 2 pow(2.0, double 8.0 double 3.0) 8.0 pow(2.0, 3) pow pow(2.0, Potencias float float 8.0 math.h (*) 3.0) 8.0 pow(2.0, 3) long long pow(20.0, 3) 8000.0 double double
  • 3. abs(-7.0) 7 double double abs(7.0) 7 abs(-7.0) 7 math.h float float abs(7.0) 7 abs(-7) 7 int int abs Valor Absoluto abs(7) 7 abs(-70000) 70000 long long abs(70000) 70000 long long abs(- stdlib.h 70000.0 double double 70000.0) 70000.0 abs(70000.0) ceil(3.2) 4.0 double double ceil(3.9) 4.0 ceil(3.2) 4.0 float float Techo(redondeo ceil(3.9) 4.0 ceil math.h arriba) ceil(30000.2 long long ) 30001.0 double double ceil(30000.9 30001.0 ) floor(3.2) 3.0 double double floor (3.9) 3.0 floor (3.2) 3.0 float float floor (3.9) 3.0 floor Piso(redondeo abajo) math.h floor long long (30000.2) 30000.0 double double floor 30000.0 (30000.9) double double exp(1.0) 2.7 float float exp(1.0) 2.7 exp Exponencial math.h long long exp(10.0) 22026.5 double double double double log(5.0) 1.6 float float log(5.0) 1.6 log Logaritmo natural(ln) math.h long long log(1000.0) 6.9 double double double double log10(10.0) 1.0 Logaritmo base 10 float float log10(10.0) 1.0 log10 math.h (ln) long long log10(1000.0 3.0 double double ) (*) Para la función pow y otras, solo basta con asignar a una variable de tipo del valor devuelto de la función o mostrar por pantalla con el formato, por ejemplo: Guardando el valor en variable: double base=2.0, exponente=3.0, resultado;
  • 4. resultado=pow(base, exponente); printf("nnResultado: %8.1lf ", resultado); o mostrar directamente por pantalla: double base=2.0, exponente=3.0; printf("nnResultado: %8.1lf ", pow(base, exponente)); 6.3 Funciones trigonométricas Valor Tipo Dato Tipo Dato Librería Función Descripción Ejemplo(*) devuelto Argumento devuelto (**) ejemplo double double cos(0.0) 1.0 cos Coseno float float cos(0.0) 1.0 math.h long double long cos(1000.0) 0.6 double double acos(1.0) 0.0 acos Arco Coseno float float acos(1.0) 0.0 math.h long double long double acos(0.5) 1.0 double double sin(0.5) 0.5 math.h sin Seno float float sin(0.5) 0.5 long double long double sin(10.0) -0.5 double double asin(0.8) 0.9 asin Arco Seno float float asin(0.8) 0.9 math.h long double long double asin(1.0) 1.6 double double tan(1.0) 1.6 tan Tangente float float tan(1.0) 1.6 math.h long double long double tan(100.0) -0.6 double double atan(0.8) 0.7 Arco atan float float atan(0.8) 0.7 math.h Tangente long double long double atan(100.0) 1.6 double double cosh(1.0) 1.5 Coseno cosh float float cosh(1.0) 1.5 math.h Hiperbólico long double long double cosh(10.0) 11013.2 double double tanh(1.0) 0.8 Tangente tanh float float tanh(1.0) 0.8 math.h Hiperbólico long double long double tanh(0.5) 0.5
  • 5. (*) Notar que en los ejemplos se asignan como parámetros constantes de tipo real, pues todos aceptan reales ya sea double, float o long double, no obstante también es posible asignar variables con el tipo solicitado en la función. 6.4 Funciones de caracteres Muchas de las funciones predefinidas toman como base la tabla de códigos ascii. Para hacer comparaciones, conversiones y búsquedas generalmente es trabajado mediante el número de código de cada carácter. A continuación mostramos la tabla de código ascii con los caracteres imprimibles. Tabla de códigos ascii Imprimibles Código Carácter Código Carácter Código Carácter Código Carácter (*)32 56 8 80 P 104 h 33 ! 57 9 81 Q 105 i 34 " 58 : 82 R 106 j 35 # 59 ; 83 S 107 k 36 $ 60 < 84 T 108 l 37 % 61 = 85 U 109 m 38 & 62 > 86 V 110 n 39 ' 63 ? 87 W 111 o 40 ( 64 @ 88 X 112 p 41 ) 65 A 89 Y 113 q 42 * 66 B 90 Z 114 r 43 + 67 C 91 [ 115 s 44 , 68 D 92 116 t 45 - 69 E 93 ] 117 u 46 . 70 F 94 ^ 118 v 47 / 71 G (*)95 _ 119 w 48 0 72 H 96 ` 120 x 49 1 73 I 97 a 121 y 50 2 74 J 98 b 122 z 51 3 75 K 99 c 123 { 52 4 76 L 100 d 124 | 53 5 77 M 101 e 125 } 54 6 78 N 102 f 126 ~ 55 7 79 O 103 g
  • 6. La tabla muestra los caracteres imprimibles por pantalla incluyendo el carácter con código número 32 que representa el espacio en blanco y el carácter número 95 es la línea inferior. Funciones de caracteres Valor Tipo Tipo Dato devuelt Librería Función Descripción Dato Ejemplo(*) Argumento o (**) devuelto ejemplo Devuelve true si su isalnum('B') argumento satisface true isalnum('1') isalnum isalpha o isdigit. char bool true ctype.h isalnum('+') Caso contrario devuelve false false. Devuelve true si su argumento es letra isalpha('B') true (Mayúscula o isalpha('1') isalpha char bool false ctype.h Minúscula). Caso isalpha('+') false contrario devuelve false. Devuelve true si su isdigit('B') false argumento es un digito. isdigit('1') isdigit char bool true ctype.h Caso contrario devuelve isdigit('+') false false. Devuelve true si su argumento es un carácter imprimible que ispunct('B') no satisface isalnum y false ispunct('1') ispunct no es espacio en blanco char bool false ctype.h ispunct('+') (Caracteres de true puntuación). Caso contrario devuelve false. Devuelve true si su isspace( argumento es un ' ') true carácter de espacio en isspace(' ') true isspace char bool ctype.h blanco (Tabular, Enter). isspace('n' true Caso contrario devuelve ) false. Devuelve true si su iscntrl argumento es un ( iscntrl carácter de control. Caso char bool char(127) true ctype.h (*) contrario devuelve ) false. Devuelve true si su islower('a') true islower char bool ctype.h argumento es letra islower('A') false
  • 7. Minúscula. Caso islower('+') false contrario devuelve false. isupper Devuelve true si su ('a') argumento es letra isupper false isupper Mayúscula. Caso char bool ('A') true ctype.h contrario devuelve isupper false false. ('+') Devuelve la versión en tolower('A') minúscula de su a tolower('a') tolower argumento. Si no tiene char char a ctype.h tolower('+') minúscula devuelve el + mismo argumento Devuelve la versión en toupper('A') mayúscula de su A toupper('a') toupper argumento. Si no tiene char char A ctype.h toupper('+') mayúscula devuelve el + mismo argumento (*) Hay una forma de averiguar cuáles son caracteres de control y esto es con las siguientes instrucciones: for(int i=1;i<=127;i++) if(iscntrl(char(i))) printf("n%d = %c", i, char(i)); El resultado nos mostrara todos los caracteres en el cual su código ascii esta entre (1-31) y el 127. Son caracteres no imprimibles por ejemplo el número 10 que representa la tecla <Enter> 6.5 Funciones de Cadena Valor Librería Prototipo Descripción Ejemplo devuelto (**) ejemplo int atoi Convierte <cadena> char cad[2]={'1','0'}; (char* <cadena>) 10 stdlib.h hacia un int atoi(cad);
  • 8. long atol Convierte <cadena> char cad[2]={'0','5'}; (char* <cadena>) 5 stdlib.h hacia un long atol(cad); double atof char Convierte <cadena> (char* <cadena>) cad[3]={'0','.','5'}; 0.5 math.h hacia un double atof(cad) char* strcat( Anexa o junta char cad1[10]={'A','B'}; char* <cad_origen > al char cad2[2]={'C'}; <cad_destino>, ABC string.h final de strcat(cad1, cad2); char* <cad_origen> <cad_destino> printf("n%s", cad1); ) Devuelve 0, si las char cad1[1]={'A'}; cadenas son int strcmp( char cad2[1]={'A'}; iguales, 1 si char* <cadena1>, printf("n%d", 0 string.h <cadena1> es mayor char* <cadena2>) strcmp(cad1, cad2)); a <cadena2> y -1 si es menor (*) char* strcpy( Cambia el valor de char cad[10]; char* <Expresioncad> strcpy(cad, "ABC"); <cad_destino>, ABC string.h hacia printf("n%s", cad); char* <cad_destino> <Expresioncad>) int strlen char cad[10]={'A','B'}; Devuelve la longitud (char* <cadena>) printf("n%d", ABC string.h de <cadena> strlen(cad)); char* strncat( char* Anexa o junta <n> char cad1[10]={'A','B'}; <cad_destino>, caracteres de char cad2[2]={'C','D'}; char* <cad_origen > al ABC string.h strncat(cad1,cad2,1); <cad_origen>, final de printf("n%s", cad1); int <n>) <cad_destino> int strncmp( Compara <n> char cad1[10]={'A','B'}; char* <cadena1>, caracteres de char cad2[2]={'A','C'}; char* <cadena2>, 0 string.h <cadena1> con printf("n%d", int <n>) <cadena2> strncmp(cad1, cad2, 1)); char Devuelve un puntero cad1[10]={'A','B','C'}; a la primera char cad2[10]={'B'}; char* strstr( ocurrencia de la char cad3[10]; char* <cadena>, cadena <Patrón> BC string.h strcpy(cad3, strstr(cad1, char* <Patrón>) en <cadena> y cad2)); NULL si no lo printf("n%s", cad3); encuentra Devuelve un puntero char cad1[10]={'A','B', char* strchr( a la primera 'A','B'}; char* <cadena>, BAB string.h ocurrencia de la char car='B'; char <caracter>) cadena < char cad3[10];
  • 9. caracter> en strcpy(cad3, strchr(cad1, <cadena> y NULL car)); si no lo printf("n%s", cad3); encuentra Devuelve un puntero char cad1[10]={'A','B', a la última 'A','B'}; char car='B'; ocurrencia de la char cad3[10]; char* strrchr( cadena < strcpy( char* <cadena>, B string.h caracter> en cad3, strrchr(cad1, car) char <caracter>) <cadena> y NULL ); si no lo printf("n%s", cad3); encuentra (*) Devuelve 0, si son iguales en longitud y caracteres, 1 si <cadena1> es mayor a <cadena2> y -1 si es menor. Ejemplos: char cad1[10]={'B', 'B'}; char cad2[2]={'A'}; printf("nResultado: %d", strcmp(cad1, cad2)); /*Retorna 1, por que el caracter mas alto de cad1 es 'B' y el caracter mas alto de cad2 es 'A' es decir 'B'>'A' en la tabla de los codigos ascii */ char cad1[10]={'B', 'B'}; char cad2[2]={'C'}; printf("nResultado: %d", strcmp(cad1, cad2)); /*Retorna -1, por que el caracter mas alto de cad1 es 'B' y el caracter mas alto de cad2 es 'C' es decir 'B'<'C' en la tabla de los codigos ascii */ (**) Las librerías mostradas en las tablas son automáticamente referenciadas en Visual Studio .Net por la ya conocida referencia:
  • 10. #include <iostream> using namespace std; 6.6 Generador de números aleatorios A menudo en los problemas computacionales es necesario generar números al azar o aleatorios. A continuación mostramos la forma de generar números aleatorios en C++. #include <iostream> using namespace std; #include "stdlib.h" #include "time.h" void main(){ int tiempo, desde, hasta, Numero; tiempo=time(NULL); srand(tiempo); desde=50; hasta=150; Numero=desde + rand() % (1 + hasta - desde); printf("%dn", Numero); system("PAUSE"); } Observamos del ejemplo anterior las nuevas directivas a utilizar: #include "stdlib.h" #include "time.h" Generamos la semilla de números aleatorios:
  • 11. tiempo=time(NULL); srand(tiempo); Establecemos los límites de generación de números (50-150): desde=50; hasta=150; Generamos el número aleatorio y lo guardamos en la variable Número: Numero=desde + rand() % (1 + hasta - desde); En general la fórmula para generar números aleatorios entre a y b: a + rand() % (1 + b - a)
  • 12. Capítulo 7 Programación Modular 7.1 Diseño descendente 7.2 Subprogramas 7.3 Variables globales y locales 7.4 Funciones 7.4.1 Definición de funciones 7.4.2 Invocación a las funciones 7.5 Procedimientos 7.5.1 Definición de Procedimientos 7.5.2 Invocación a las Procedimientos 7.6 Tipos de Parámetros
  • 13. 7 Programación Modular Introducción Los desarrolladores en C++, hacen sus programas teniendo siempre en mente el conocido dicho “Divide y vencerás”, el cual nos va a evitar serios dolores de cabeza a la hora de realizar aplicaciones grandes y complejas. En C++ es esencial el trabajo modular ya sea por objetivos, abstracción o por reutilización. Un módulo representa un bloque abstracto de código, esto es el programa principal o subprogramas en una solución a un problema computacional. 7.1 Diseño descendente Las aplicaciones en C++ y varios lenguajes de programación tienen como característica el diseño descendente en la escritura de código, es decir “de arriba hacia abajo” esto significa que en una hoja de código el compilador va a hacer un barrido desde la primera hasta la última línea en la hoja de código. Línea 1 xxxxxxxx Línea 2 xxxxxxxx Línea 3 xxxxxxxx Línea 4 xxxxxxxx Línea 5 xxxxxxxx …………………... …………………… Línea n-1 ...…….. Línea n...……….. 7.2 Subprogramas Son subdivisiones que bifurcan o alteran el flujo del código en un programa. Hacia la zona del subprograma, esto puede ser en la hoja de código o en ocasiones a otros archivos. A continuación mostramos un esquema de un programa hecho de forma modular:
  • 14. PROGRAMA PRINCIPAL SUBPROGRAMA (X) Línea 1 xxxxxxxx Línea 1 xxxxxxxx Línea 2 xxxxxxxx Línea 2 xxxxxxxx LLAMA SUBPROGRAMA X …………………… Línea 4 xxxxxxxx Línea n-1 ...…….. Línea 5 xxxxxxxx Línea n...……….. Línea 6 xxxxxxxx LLAMA SUBPROGRAMA X Línea 8 xxxxxxxx Línea 9 xxxxxxxx Línea 10 xxxxxxxx LLAMA SUBPROGRAMA Y Línea 11 xxxxxxxx El esquema representa el Línea 12 xxxxxxxx flujo de un programa con …………………... dos subprogramas. …………………… Línea n-1 ...…….. Línea n...……….. SUBPROGRAMA (Y) Línea 1 xxxxxxxx Línea 2 xxxxxxxx Línea 3 xxxxxxxx …………………… Línea n...……….. Notar que el programa principal cuenta con 2 subprogramas estos puede estar dentro de la hoja de código o en otro archivo. El compilador comienza con la línea 1, línea 2 y llega a la línea en la cual se llama al subprograma X, entonces el flujo brinca al subprograma X entonces comienza a ejecutarse la línea 1, 2, …n del subprograma. Al terminar de ejecutarse el subprograma el flujo retorna al programa principal. Entonces continúa el programa principal con la línea 4, 5, 6 entonces vuelve a llamar al subprograma X y vuelve a ejecutar y terminar sus instrucciones para retornar nuevamente al programa principal. Se ejecuta las líneas 8,9,10 y llega a la invocación del subprograma Y, entonces similar a lo que hizo el compilador con el subprograma X hace con Y, ejecuta las líneas del subprograma Y, al finalizar retorna al programa principal hasta terminar de ejecutar lo restante.
  • 15. 7.3 Variables globales y locales Una variable es global o local en función de la zona dentro de la hoja de código en donde es declarada. Esto puede ser por el alcance del valor de la variable con la cual se necesita trabajar. Variable global Es una variable que es declarada fuera de todo modulo, su valor almacenado es mantenido hasta que se termine el programa. #include <iostream> using namespace std; int nro; //Variable global nro void main(){ Variable local Es una variable que es declarada dentro de un módulo, su valor almacenado es mantenido hasta que termine el modulo. #include <iostream> using namespace std; void main(){ int nro; //Variable Local del programa principal
  • 16. 7.4 Funciones Una función es un módulo de instrucciones con una tarea específica que retorna siempre resultado(s). Este resultado es del tipo de datos con el cual fue definido. Una función es código en espera hasta que la función sea invocada desde el programa principal, el valor devuelto por la función puede ser almacenado o mostrado directamente por pantalla. 7.4.1 Definición de funciones Para utilizar una función antes previamente debe ser definida. A continuación mostramos la definición de una función: <Tipo de dato> <Nombre Función> (<Lista de argumentos>){ <Conjunto de instrucciones> return <valor/variable>; } Dónde: <Tipo de dato>: Tipo de datos valido C++ (int, double, bool, etc.) Véase apartado 3.1.1 <Nombre Función> : Identificador valido C++(Aplica las reglas a nombrar variables Véase apartado 3.1.3) <Lista de argumentos>: Lista de variables separadas por coma, cada argumento debe estar declarado con el tipo de dato (<Tipo de dato > <Argumento1>, < Tipo de dato > <Argumento2>,…) <valor/variable>:
  • 17. Valor o variable que la función devolverá como resultado, cabe decir que este resultado debe ser del tipo de dato declarado por la función. Ejemplo: La siguiente función es de tipo entera y retorna la suma de dos números enteros. int f_sumar(int A, int B){ int devolver; devolver = A + B; return devolver; } 7.4.2 Invocación a las funciones La función f_sumar es un código en espera sino hasta que es invocado desde el modulo void main. Para invocar a una función se nombra la función y se pasan valores como se muestra a continuación: void main(){ int A, resultado; A=10; resultado=f_sumar(A, 5);//Invocacion a funcion printf("%dn", resultado);//Muestra 15 system("PAUSE"); } Una función no es necesariamente invocado de la función principal void main también es posible que sea invocado desde cualquier función valida de C++, y todas ellas estarán en espera hasta que sean invocados desde el modulo void main. A continuación mostraremos como se invoca una función dentro de otra:
  • 18. int f_sumar(int A, int B){ int devolver; devolver = A + B; return devolver; } int f_doble(int A){ int devolver; devolver = f_sumar(A, A);//Invocacion a funcion f_sumar return devolver; } El programa completo es: #include <iostream> using namespace std; //Definicion de la funcion f_sumar int f_sumar(int A, int B){ int devolver; devolver = A + B; return devolver; } //Definición de la funcion f_doble int f_doble(int A){ int devolver; devolver = f_sumar(A, A);//Invocacion a función f_sumar return devolver; } //Programa Principal void main(){ int A, resultado; A=10; resultado=f_doble(A);//Invocacion a función f_doble printf("%dn", resultado);//Muestra 20 system("PAUSE"); }
  • 19. 7.5 Procedimientos Un procedimiento es un tipo de función con la única restricción que NO retorna resultado(s). Por tanto todas las reglas que se describieron para las funciones son también aplicables a los procedimientos. En C++ los procedimientos también son conocidos como funciones void. Se concibe a un procedimiento como bloque de código que es anexado al módulo que lo invoca. 7.5.1 Definición de Procedimientos Para utilizar un procedimiento antes previamente debe ser definida. A continuación mostramos la definición de un procedimiento: void <Nombre Procedimiento > (<Lista de argumentos>){ <Conjunto de instrucciones> } Dónde: <Nombre Procedimiento > : Identificador valido C++(Aplica las reglas a nombrar variables Véase apartado 3.1.3) <Lista de argumentos>: Lista de variables separadas por coma, cada argumento debe estar declarado con el tipo de dato (<Tipo de dato > <Argumento1>, < Tipo de dato > <Argumento2>,…) Ejemplo: El siguiente procedimiento muestra por pantalla un entero.
  • 20. void f_mostrar(int A){ printf("%dn", A); system("PAUSE"); } 7.4.2 Invocación a los Procedimientos El procedimiento f_mostrar es un código en espera sino hasta que es invocado desde el modulo void main. void main(){ int A, resultado; A=10; f_mostrar(A); //Invocacion a Procedimiento f_mostrar } El programa completo es: #include <iostream> using namespace std; //Definición de Procedimiento f_mostrar void f_mostrar(int A){ printf("%dn", A); system("PAUSE"); } //Procedimiento Principal void main(){ int A, resultado; A=10; f_mostrar(A);//Invocacion a Procedimiento f_mostrar }
  • 21. Como podemos apreciar la función principal void main es un procedimiento o una función void. Tener en cuenta que las variables que se declaran y los argumentos solo cuentan dentro del módulo donde fueron declaradas, por lo tanto el argumento (int A) del procedimiento f_mostrar y la variable int A de void main son distintas. 7.6 Tipos de Parámetros En C++ los parámetros o argumentos de una función pueden ser de dos tipos: Por valor o por referencia. Parámetro Por Valor Son aquellos parámetros en los cuales el valor o contenido de los parámetros es copiado, y dentro de la función se trabaja con dicha copia. Esto sugiere que la variable real no puede ser modificada en contenido. void f_incrementar(int A){//Argumento A es por valor A++; printf("%dn", A); } void main(){ int A; A=10; f_incrementar(A);//Muestra 11 printf("%dn", A);//Muestra 10 system("PAUSE"); } Parámetro Por Referencia Son aquellos parámetros en los cuales la dirección de memoria es pasada hacia la función, esto indica que dentro de la función se trabaja realmente con la variable que es pasada como argumento, por tanto dicha variable puede ser modificada.
  • 22. Para decirle al compilador de C++ que un argumento es por referencia se debe anteponer a la variable el símbolo de ampersand &. void f_incrementar(int &A){ //Argumento A es por referencia A++; printf("%dn", A); } void main(){ int A; A=10; f_incrementar(A);//Muestra 11 printf("%dn", A);//Muestra 11 system("PAUSE"); } Se recomienda usar parámetros por referencia en lo mínimo. Es posible también modificar variables en funciones si la declaramos como variables globales, esto nos va a facilitar el entendimiento y sabremos que estamos modificando.
  • 23. Capítulo 8 Arreglos 8.1 Arreglos Unidimensionales 8.1.1 Representación Grafica 8.1.2 Asignación de Valores 8.1.3 Lectura y escritura de datos 8.1.4 Recorrido, inserción y eliminación en un vector 8.2 Arreglos Bidimensionales 8.1.1 Representación Grafica 8.2.2 Asignación de Valores 8.2.3 Lectura y escritura de datos 8.2.4 Recorrido, inserción y eliminación en una matriz 8.3 Ordenamientos 8.3.1 método de intercambio o burbuja 8.3.2 método por inserción, 8.3.3 método por selección 8.3.4 método de ordenación rápida (quicksort). 8.4 Búsquedas 8.4.1 Tipos de búsqueda 8.4.2 Método Búsqueda Binaria
  • 24. 8 Arreglos Introducción Los arreglos son conjuntos de datos del mismo tipo, agrupados en una variable y cuyo acceso individual es numérico, este acceso individual es denominado índice. Un arreglo puede contener por ejemplo listas de calificaciones de exámenes, de temperaturas o de nombres. Cabe decir que la cantidad de elementos de los arreglos es de tipo estática es decir que al declarar la longitud del vector esta va a mantener su longitud hasta el final del programa. 8.1 Arreglos Unidimensionales 8.1.1 Representación Grafica A continuación mostramos un vector de tipo entero de 10 elementos: int A[10] 0 1 2 3 4 5 6 7 8 9 7 5 6 3 0 8 2 1 15 9 A[0]=7 A[3]=3 A[8]=15 8.1.2 Asignación de Valores Asignar a un elemento del vector es mediante la variable seguida del índice entre corchetes así como sigue a continuación: <Variable_vector>[<indice>] = <variable / valor>;
  • 25. Ejemplos: A[0] = 7; A[3] = 3; A[8] = 15; A[5] = A[1]; A[6] = A[6] * 2; A[7] = A[0] / A[1]; A[9] = desde + rand() % (1 + hasta - desde); 8.1.3 Lectura y escritura de datos Leer o escribir un elemento del vector es similar ha como se hace a variables individuales mediante la variable seguida del índice entre corchetes así como sigue a continuación: Lectura scanf(<formato>, &<Variable_vector>[<indice>] ); Ejemplos scanf("%d", &A[ 5 ]); scanf("%d", &A[ 0 ]); scanf("%d", &A[ p ]); Escritura printf(<formato>, <lista de elementos de vector>); Ejemplos printf("%d", A[ 5 ]);
  • 26. printf("%lf", B[ 0 ]); printf("%d y %8.2lf", A[ p ], B[ p ]); 8.1.4 Recorrido, inserción, eliminación y ejemplos en un vector Recorrido Para recorrer un vector ya sea para asignación, lectura o escritura utilizamos la sentencia for ya que conocemos el inicio y el final del recorrido, así como se muestra a continuación: Ejemplo 1 Asignación del índice a cada elemento de un vector de 10 elementos: Longitud=10; for(i=0 ; i< Longitud ; i++){ A[i]=i; } Ejemplo 2 Ingreso por teclado a cada elemento de un vector de 10 elementos: Longitud=10; for(i=0 ; i< Longitud ; i++){ scanf("%d", &A[i]); } Ejemplo 3 Impresión por teclado a cada elemento en una línea para un vector de 10 elementos: Longitud=10; for(i=0 ; i< Longitud ; i++){ printf("%dn", A[i]); }
  • 27. Inserción Sabemos que la longitud del vector es de tipo estática por tanto la inserción es simulada, es decir no aumenta la longitud declarada al inicio. Para tal caso debemos declarar la longitud del vector con un valor máximo tope, que contemple la longitud actual más las inserciones. Debemos tener la longitud virtual del vector en una variable A continuación mostramos el algoritmo de inserción si suponemos que: int A[6], N=4; 0 1 2 3 4 5 2 3 1 4 Algoritmo de inserción: for(i = N-1 ; i>=posicion-1 ; i--) A[i+1] = A[i]; A[posicion-1] = nro_insertar; N++; Dónde: <A>: Vector de elementos < posicion >: Posición a insertar < nro_insertar >: Valor a insertar < N >: Longitud del vector
  • 28. Explicación del algoritmo for(i = N-1 ; i>=posicion-1 ; i--) A[i+1] = A[i]; < for(i = N-1 ; i>=posicion-1 ; i--) > significa que la variable < i > comienza de la longitud del vector < N-1 >, y termina en la posición a insertar < i>=posicion-1 >. < A[i+1] = A[i] > significa el elemento siguiente es igual al anterior. Si < posicion > a insertar es 2 entonces: Procedemos a desplazar los elementos desde el final hasta la posición: A[i+1] = A[i] A[4] = A[3] A[3] = A[2] A[2] = A[1] Resultado: 0 1 2 3 4 5 2 3 3 1 4 A[posicion-1] = nro_insertar; Si < nro_insertar > es 10 entonces: A[2-1] = 10; 0 1 2 3 4 5 2 10 3 1 4
  • 29. N++; Como N tenía el valor de 4 y se incrementa en uno entonces: N=5 Eliminación Sabemos que la longitud del vector es de tipo estática por tanto la eliminación es simulada, es decir no decrementa la longitud declarada al inicio. Debemos tener la longitud virtual del vector en una variable. A continuación mostramos el algoritmo de eliminación si suponemos que: int A[6], N=5; 0 1 2 3 4 5 2 3 1 4 5 Algoritmo de eliminación: for(i= posicion; i<N ; i++) A[i-1]=A[i]; N--; Dónde:
  • 30. <A>: Vector de elementos < posicion >: Posición a eliminar < N >: Longitud del vector Explicación del algoritmo for(i= posicion; i<N ; i++) A[i-1]=A[i]; < for(i= posicion; i<N ; i++) > significa que la variable < i > comienza de la posición a eliminar < i= posicion > hasta la longitud del vector < i<N >. < A[i-1] = A[i] > significa el elemento anterior es igual al siguiente. Si < posicion > a eliminar es 2 entonces: Procedemos a desplazar los elementos desde la posición hasta el final: A[i-1] = A[i] A[1] = A[2] A[2] = A[3] A[3] = A[4] Resultado: 0 1 2 3 4 5 2 1 4 5 5 N--; Como N tenía el valor de 5 y se decrementa en uno entonces:
  • 31. N=4 8.2.1 Representación Grafica A continuación mostramos una matriz de tipo entero de 5x5 (filas x columnas) elementos: int A[5][5] A[0][0]=2 A[0][3]=6 0 1 2 3 4 A[1] [1]=6 0 2 3 5 6 7 1 5 6 0 8 6 A[2] [3]=9 2 2 6 3 9 5 3 1 2 7 2 8 A[3] [1]=2 4 7 8 9 3 4 A[4] [0]=7 A[3][3]=2 8.2.2 Asignación de Valores Asignar a un elemento de la matriz es mediante la variable seguida de los índices entre corchetes así como sigue a continuación: <Variable_matriz>[<índice_fila>][<índice_columna>] = <variable / valor>; Ejemplos:
  • 32. A[0][0] = 7; A[3][1] = 3; A[8][8] = 15; A[5][0] = A[1][3]; A[6][2] = A[6][2] * 2; A[7][5] = A[0][3] / A[1][9]; A[9][1] = desde + rand() % (1 + hasta - desde); 8.1.3 Lectura y escritura de datos Leer o escribir un elemento de la matriz es similar ha como se hace a variables individuales mediante la variable seguida de los índices entre corchetes así como sigue a continuación: Lectura scanf(<formato>, &<Variable_matriz>[<índice_fila>][<índice_columna>]); Ejemplos scanf("%d", &A[ 5 ][ 5 ]); scanf("%d", &A[ 0 ][ 1 ]); scanf("%d", &A[ f ][ c ]); Escritura printf(<formato>, <lista de elementos de la matriz>); Ejemplos printf("%d", A[ 5 ][ 4 ]); printf("%lf", B[ 0 ][ 0 ]); printf("%d y %8.2lf", A[ f ][ 1 ], B[ f ][ c ]);
  • 33. 8.2.4 Recorridos y ejemplos de matrices. Para recorrer una matriz ya sea para asignación, lectura o escritura utilizamos 2 sentencias for Uno para controlar las filas y otro para las columnas, así como se muestra a continuación: Ejemplo 1 Asignación de la suma de los índices a cada elemento de una matriz de 5x4 elementos: TotalFilas=5; TotalColumnas=4; for(fila=0 ; fila < TotalFilas ; fila++) for(columna=0 ; columna < TotalColumnas; columna++) A[fila][columna]= fila + columna; Ejemplo 2 Recorrer y sumar cada elemento en forma horizontal para una matriz de 2x3 elementos: TotalFilas=2; TotalColumnas=3; S=0; for(fila=0 ; fila < TotalFilas ; fila++) for(columna=0 ; columna < TotalColumnas; columna++) S+=A[fila][columna]; Recorrido: fila columna 0 0 0 1 0 2 1 0 1 1 1 2
  • 34. Ejemplo 3 Recorrer y sumar cada elemento en forma vertical para una matriz de 2x3 elementos: TotalFilas=2; TotalColumnas=3; S=0; for(columna=0 ; columna < TotalColumnas; columna++) for(fila=0 ; fila < TotalFilas ; fila++) S+=A[fila][columna]; Recorrido: columna fila 0 0 0 1 1 0 1 1 2 0 2 1 Ejemplo 4 Cargar elementos a una matriz de 5x6 elementos: TotalFilas=5; TotalColumnas=6; for(fila=0 ; fila < TotalFilas ; fila++) for(columna=0 ; columna < TotalColumnas; columna++) scanf("%d", A[fila][columna]); Las instrucciones anteriores son correctas sin embargo tendremos que ingresar por teclado 5x6 veces es decir 30. Para tal caso podemos utilizar los números aleatorios:
  • 35. tiempo=time(NULL); srand(tiempo); TotalFilas=5; TotalColumnas=6; desde=1; hasta=10; for(fila=0 ; fila< TotalFilas ; fila++) for(columna=0 ; columna< TotalColumnas ; columna++) A[fila][columna] = desde + rand() % (1 + hasta - desde); Ejemplo 5 Generar y mostrar por pantalla una matriz de 5x6 elementos: tiempo=time(NULL); srand(tiempo); TotalFilas=5; TotalColumnas=6; desde=1; hasta=5; for(fila=0 ; fila< TotalFilas ; fila++){ printf("nnt"); for(columna=0 ; columna< TotalColumnas ; columna++){ A[fila][columna] = desde + rand() % (1 + hasta - desde); printf("t%d", A[fila][columna]); } } Ejemplo 6 Definir e ingresar el orden NxM a una matriz: //Definition const int OrdenMax = 10; int A[OrdenMax][OrdenMax], N, M; //Ingreso printf("nrIngrese # de filas de la matriz: "); scanf("%d", &N); fflush(stdin); printf("nrIngrese # de columnas de la matriz: "); scanf("%d", &M); fflush(stdin); Ejemplo 7 Se tiene una matriz de orden N*M de tipo entero, se pide generar y mostrar números aleatorios entre 1 y 16 dentro de la matriz. #include <iostream>
  • 36. using namespace std; #include "stdlib.h" #include "time.h" void main(){ //Definition de matriz const int OrdenMax = 10; int A[OrdenMax][OrdenMax], N, M; int tiempo, desde, hasta, fila, columna; //Ingreso orden matriz printf("nrIngrese # de filas de la matriz: "); scanf("%d", &N); fflush(stdin); printf("nrIngrese # de columnas de la matriz: "); scanf("%d", &M); fflush(stdin); tiempo=time(NULL); srand(tiempo); desde=1; hasta=16; //rango números a generar for(fila=0 ; fila<N ; fila++){ printf("nnt"); for(columna=0 ; columna<M ; columna++){ //generación de numero A[fila][columna] = desde + rand() % (1 + hasta - desde); //impresión de numero printf("t%d", A[fila][columna]); } } printf("nn"); system("PAUSE"); } 8.3 Ordenamientos En arreglos existen muchos métodos de ordenación de elementos a continuación mostraremos los más utilizados. 8.3.1 método de intercambio o burbuja
  • 37. for(i=0 ; i<N-1 ; i++) for(j=i+1 ; j<N ; j++) if(A[i] > A[j]){ aux=A[i]; A[i]=A[j]; A[j]=aux; } Explicación del algoritmo El primer < for > indica que se debe recorrer desde el inicio < i=0 > hasta el penúltimo elemento < i<N-1 > for(i=0 ; i<N-1 ; i++) El segundo < for > indica que se debe recorrer desde el siguiente del elemento actual < j=i+1 > hasta el último elemento < j<N > for(j=i+1 ; j<N ; j++) Si N=6 el recorrido de los dos for: i j 0 1,2,3,4,5 1 2,3,4,5 2 3,4,5 3 4,5 4 5 Recordar el algoritmo del intercambio de valores entre dos variables A y B: aux = A; A = B; B = aux;
  • 38. Supongamos que el vector es el siguiente: 0 1 2 3 4 5 3 5 4 6 7 0 Como conocemos N=6, el recorrido de las variables <i> y <j> el algoritmo del intercambio es entonces: i j A[i] A[j] A[i] > A[j] Intercambio 0 1 3 5 false 0 2 3 4 false 0 3 3 6 false 0 4 3 7 false 0 5 3 0 true 0 5 4 6 7 3 1 2 5 4 true 0 4 5 6 7 3 1 3 4 6 false 1 4 4 7 false 1 5 4 3 true 0 3 5 6 7 4 2 3 5 6 false 2 4 5 7 false 2 5 5 4 true 0 3 4 6 7 5 3 4 6 7 false 3 5 6 5 true 0 3 4 5 7 6 4 5 7 6 0 3 4 5 6 7 El resultado final es el arreglo ordenado: 0 3 4 5 6 7
  • 39. Capítulo 9 Cadenas 9.1 Fundamentos de cadenas 9.2 Asignación de Valores 9.3 Lectura y escritura de datos 9.4 Arreglo de cadenas 9.5 Lectura y escritura de datos
  • 40. 9.1 Fundamentos de cadenas Introducción En el mundo de la programación y sistemas se trabajan con base de datos. Que no es más que datos interrelacionados, y en su mayoría almacena datos de tipo texto (Cadenas). Entonces debemos aprender también a manejar bien los datos tipos cadenas en operaciones de concatenación, extracción, filtros, etc. En C++ existen dos tipos de cadenas: estáticas y dinámicas. Nosotros comenzaremos con las de tipos estáticas para comprender el manejo interno y de cómo son las operaciones primitivas. Representación Grafica A continuación mostramos un vector de tipo carácter de 12 elementos: char A[12] 0 1 2 3 4 5 6 7 8 9 10 11 12 H O L A M U N D O 0 ? ? A[0]=H A[3]=A A[8]=D Operador marcador de fin de cadena 9.2 Asignación de valores Asignar a un elemento de la cadena es mediante la variable seguida de los índices entre corchetes así como sigue a continuación: <Variable_cadena>[<índice>] = <variable / valor>;
  • 41. Ejemplos: A[0] = '7'; A[3] = (char)65; A[8] = 'A'; 9.3 Lectura y escritura de Datos Leer o escribir un elemento de la cadena es similar a como se hace en los vectores, con la adición de entrada completa de la cadena mediante la función < gets >. Muchas de las operaciones en cadenas se realizan mediante funciones (Véase apartado 6.5). Lectura Carácter scanf(<formato>, &<Variable_cadena>[<indice>] ); Ejemplos scanf("%c", &A[ 5 ]); scanf("%c", &A[ 0 ]); scanf("%c", &A[ p ]); Lectura Cadena gets(<Variable_cadena>);
  • 42. Ejemplos gets(A); gets(B); Escritura Caracter printf(<formato caracter>, <lista de elementos de cadena>); Ejemplos printf("%c", A[ 5 ]); printf("%c y %c", A[ p ], B[ p ]); Escritura Cadena printf(<formato cadena>, <Variable cadena>); Ejemplos printf("%s", A); printf("%s y %s", A, B);
  • 43. 9.4 Arreglo de cadenas A continuación mostramos una matriz de tipo carácter de 5x16 elementos: char A[5][16] A[0][0]=J A[0][3]= <espacio> A[0][7]=A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 J O E R O C A 0 ? ? ? ? ? ? ? A[1][10]=S 1 M A R I A S A L A S 0 ? ? ? ? 2 J U L I O T E L L O 0 ? ? ? ? 3 P E D R O M O R E N O 0 ? ? ? A[2][9]=L 4 P I L A R 0 ? ? ? ? ? ? ? ? ? ? A[4][0]=P A[4][4]=R A[3][7]=O A[3][12]=0 9.5 Lectura y escritura de datos Lectura Cadena gets(<Variable_cadena>[<índice fila>]); Ejemplos gets(A[0]); gets(B[p]);
  • 44. Escritura Cadena printf(<formato cadena>, <Variable cadena>); Ejemplos printf("%s", A[0]); printf("%s y %s", A[0], B[p]); Ejemplo 1: Ingrese una cadena de caracteres por teclado, desarrolle la simulación de la función extraer. Solución #include <iostream> using namespace std; void main(){ const int LongitudMax = 100; char cadena[LongitudMax], Resultado[LongitudMax]; int i, inicio, fin, nrocar, c; printf("nrIngrese Cadena: "); gets(cadena); fflush(stdin); printf("nrPosicion de Inicio a Extraer: "); scanf("%d", &inicio); fflush(stdin); printf("nrNumero de caracteres a Extraer: "); scanf("%d", &nrocar); fflush(stdin); c=0; fin=(inicio-1) + nrocar; for(i=inicio-1 ; i < fin ; i++){ Resultado[c]=cadena[i];
  • 45. c++; } Resultado[c]='0'; printf("nnLa cadena extraida es %snn", Resultado); system("PAUSE"); } Explicación del algoritmo const int LongitudMax = 100; char cadena[LongitudMax], Resultado[LongitudMax]; int i, inicio, fin, nrocar, c; Observamos la declaración de variables: una constante con la longitud máxima de la cadena, una variable cadena para el ingreso y una variable resultado para mostrar lo que se va a extraer. Y un conjunto de variables numéricas. printf("nrIngrese Cadena: "); gets(cadena); fflush(stdin); printf("nrPosicion de Inicio a Extraer: "); scanf("%d", &inicio); fflush(stdin); printf("nrNumero de caracteres a Extraer: "); scanf("%d", &nrocar); fflush(stdin); Las instrucciones mostradas son para el ingreso de variables. Observar la instrucción <fflush> después de cada instrucción de ingreso, para no perder caracteres. c=0; fin=(inicio-1) + nrocar; for(i=inicio-1 ; i < fin ; i++){ Resultado[c]=cadena[i]; c++; }
  • 46. Inicializamos a la variable c a cero. La variable fin representa hasta donde se va a extraer, es inicio menos uno más la cantidad de caracteres a extraer. En el bucle for la variable i comienza en inicio menos uno hasta fin y se va asignando a resultado el contenido carácter a carácter. La variable c representa el índice de la variable resultado. Resultado[c]='0'; Demarcamos el final de la cadena. printf("nnLa cadena extraida es %snn", Resultado); Mostramos por pantalla el resultado. Supongamos que los datos ingresados en el programa son los siguientes: cadena=”JUAN PEREZ” inicio=6 nrocar=4 Entonces: c=0 fin = ( 6 - 1 ) + 4 = 9 i=5
  • 47. i c Resultado[c] 5 0 P 6 1 E 7 2 R 8 3 E