Está en la página 1de 8

Gua bsica de programacin en C++ estructurado

Manejo bsico de la parte estructurada de C++

1 Introduccin
Durante el curso, se emplear el lenguaje de programacin C++. Este lenguaje de programacin cuenta con muchas posibilidades, ya que adems de de inir sus propias e!tensiones, incluye una "ariante de C ms e!igente con el cumplimiento del sistema de tipos que el C original. Espec icamente, no se utili#an las capacidades de C++ para programacin orientada a objetos, sino slo la parte que da soporte al paradigma de programacin estructurada. C++ permite ocultar una buena parte de las caractersticas ms complejas de C, mientras otras se pueden utili#ar tal cul se haca en C. $ continuacin se enumeran las caractersticas ms bsicas de este hbrido entre C y C++.

2 Programa de ejemplo: Hola, Mundo!


El tpico programa de ejemplo, Hola, mundo!, se muestra a continuacin.
#include <cstdio> int main() { printf( "Hola, Mundo!" ); }

3 Entrada y Salida
%a entrada y salida se reali#a mediante las unciones scanf() y printf(), respecti"amente. &lo es necesario tener en cuenta que para las cadenas, se debe utili#ar gets(). $ continuacin, se discuten los principales tipos de datos.

3.1 Cadena de formato


%as cadenas de ormato, adems de contener ormatos para tipos, como se "er a continuacin, pueden contener tambi'n cdigos que simboli#an ciertos caracteres. %os ms utili#ados son \n, que simboli#a un salto de lnea, y \t, que representa un tabulador.

3.2 Enteros
%os n(meros enteros se ormatean con el indicador )*d+. Este indicador de tipo puede lle"ar en su interior un n(mero, que indica el ancho que se desea para 'l. &e utili#a esta posibilidad en el printf(), ya que en ese caso se imprimen el n(mero de espacios que sea necesario, en caso de que el n(mero mismo no tenga su icientes dgitos, para completar el ancho. $s, las instrucciones printf( !d"n#, $%% ); printf( !d"n#, &' );, hacen que los n(meros ,-- y ./ apare#can en lneas distintas pero correctamente tabulados. El primero, con dos espacios precedi'ndolo, y el segundo con tres.
#include <cstdio> int main() { int edad; printf( "(ame tu edad) " ); scanf( " d", *edad ); } printf( "+u edad es) &d"n", edad );

3.3 Reales
En C++, se pueden emplear dos tipos de n(meros lotantes0 float, de precisin simple, y double, de doble precisin. Como mnimo, el primero o rece e!actitud hasta el se!to decimal, y el segundo hasta el d'cimo. %os n(meros reales se ormatean con el indicador )* +, )*l + 1este (ltimo para n(meros lotantes de tipo double2. Este indicador de tipo puede lle"ar en su interior un n(mero, o dos n(meros separados por un punto, que indican el ancho que se desea para 'l, y el n(mero de decimales que se debe mostrar, respecti"amente. &e utili#a esta posibilidad en el printf(), ya que en ese caso se imprimen el n(mero de espacios que sea necesario, en caso de que el n(mero mismo no tenga su icientes dgitos, para completar el ancho. $s, las instrucciones printf( ,-'f"n#, $%%-.!/ ); printf( ,-'f"n#, &'-,01 );, hacen que los n(meros ,--.34 y ./.56 apare#can en lneas distintas pero correctamente tabulados. El primero, con un espacio precedi'ndolo, y el segundo con dos.
#include <cstdio> const float 2alor3uro3n4esetas 5 $//-&0/; int main() { float cantidad; printf( "(ame una cantidad en euros) " ); scanf( " f", *cantidad ); printf( "3n pesetas es) } ,-%f"n", cantidad 6 2alor3uro3n4esetas );

3.4 Cadenas
%as cadenas se piden mediante la uncin gets(), y se muestran mediante la uncin printf(). &i se desea, se puede utili#ar tambi'n la uncin scanf(), pero es necesario tener en cuenta que ante la aparicin de un espacio, esta uncin dejar de leer la entrada retorna el control al programa. $dems, en caso de utili#ar scan 12, 78 se debe poner un ampersand delante del nombre de la cadena de caracteres.
#include <cstdio> int main() { c7ar nom8re9$'0:; printf( "(ame tu nom8re) " ); ;ets( nom8re ); } printf( "Hola, s"n", nom8re );

Manejo de cadena! de caractere!


%as cadenas de caracteres se manejan al igual que se manejaban en C, mediante "ectores de caracteres. En estos "ectores de caracteres, un carcter adicional de "alor - 1muchas "eces indicado como 9:-92 marca el inal de la cadena. E!iste un mdulo de C++, llamada cstring, que proporciona "arias unciones para manejar cadenas. $s mismo, otra librera de C++, cstdlib, proporciona las con"ersiones de cadena a n(mero y "ice"ersa.

4.1 Asignar un valor a la cadena de caracteres


%os "alores se asignan mediante la uncin strcpy(), que admite dos parmetros0 el primero el "ector de caracteres de destino, y el segundo la cadena a insertar en el mismo, que puede ser otro "ector de caracteres o un literal de cadena. En cualquier caso, el "ector de caracteres receptor debe tener su iciente tama;o para recibir la cadena y el cero de in de cadena.
#include <cstdio> #include <cstrin;> int main() { c7ar s9$'0:; strcp<( s, "esto es una prue8a" ); printf( " s"n", s); }

4.2 Concatenar dos cadenas


Dos "ectores de caracteres se pueden concatenar mediante la uncin strcat(), que admite dos parmetros. El primero es el primer "ector de caracteres, que actuar tambi'n como destino. El segundo es un literal de cadena u otro "ector de caracteres, que se copiar a continuacin del (ltimo carcter ocupado en el primer "ector de caracteres. 7tese que debe haber su iciente espacio en el primer "ector de caracteres para su propia contenido concatenado con la segunda cadena y el cero de in de cadena.
#include <cstdio> #include <cstrin;> int main() { c7ar s9$'0:; strcp<( s, "esto es una prue8a" ); strcat( s, ", < esta es otra" ); printf( " s"n", s); }

4.3 Obtener el tamao de una cadena


%a cuenta de n(mero de caracteres de una cadena se obtiene mediante la uncin strlen(), que admite un slo parmetro, un "ector de caracteres o cadena literal, y de"uel"e el tama;o sin contar el cero de in de cadena. $s, printf( d"n#, strlen( Hola# ) );, mostrara el "alor 3 por pantalla.

4.4 Pasar el contenido de una cadena a may sculas o min sculas


7o e!iste una uncin que permita con"ertir una cadena a may(sculas o min(sculas, aunque las unciones toupper() y tolo er(), de inidas en el mdulo cctype, permiten construir cilmente sendas unciones.
#include <cstdio> #include <cstrin;> #include <cct<pe> =oid strtoupper(c7ar s9:);

=oid strtolo>er(c7ar s9:); int main() { c7ar s$9$'0:; c7ar s'9$'0:; strcp<( s$, "Hola" ); strcp<( s', "Mundo" ); strtoupper( s$ ); strtolo>er( s' ); printf( " s, } =oid strtoupper(c7ar s9:) { int i; for(i 5 %; i < strlen( s ); ??i) { s9 i : 5 toupper( s9 i : ); } } =oid strtolo>er(c7ar s9:) { int i; for(i 5 %; i < strlen( s ); ??i) { s9 i : 5 tolo>er( s9 i : ); } } s"n", s$, s' );

4.! "aciar de contenido una cadena


El in de cadena en C++ se marca con un carcter que tiene "alor -. &i se desea que una cadena pase a estar "aca, basta con poner la marca de in de cadena en su primera posicin. <or ejemplo, dado un "ector de caracteres s, la instruccin s9 % : 5 @"%@; s9 % : 5 %; hace que el contenido de s sea la cadena "aca.

4.# Pasar una cadena a un n mero


<ara pasar una cadena a un n(mero, debe usarse la uncin atoi(), en el mdulo cstdlib. $dmite un solo parmetro, el "ector de caracteres a con"ertir. En caso de que el contenido de la cadena no pueda con"ertirse a un n(mero, de"uel"e cero. =n ejemplo de uso se muestra a continuacin.
include <cstdio> #include <cstdli8> int main() { printf( " d"n", atoi( "!." ) ); }

4.$ Pasar un n mero a cadena


<ara hacer la con"ersin in"ersa al punto anterior, se utili#a la uncin sprintf(), que unciona de manera anloga a printf(), pero ormatea los datos a una cadena de caracteres, en lugar de la pantalla. <or ello, el primer argumento de sprintf() es el "ector de caracteres de destino, mientras el resto de parmetros permanecen inalterados.

#include <cstdio> #include <cstdli8> int main() { int numero; c7ar s9$'0:; printf( "(ame un nAmero) " ); scanf( " d", *numero ); sprintf( s, " d", numero ); printf( "3l nAmero era s"n", s );

" Pa!o de par#metro!


C++ permite dos tipos de paso de parmetros0 por "alor 1tambi'n denominado por copia, en terminologa de C++2, y por re erencia.

!.1 Paso de %ar&metros %or referencia


El paso de parmetros por re erencia se utili#a cuando se le quiere pasar una "ariable a una uncin o procedimiento, de manera que los cambios que se le hagan a esa "ariable dentro de la uncin sean repercutidos despu's en el resto del programa.
#include <cstdio> =oid sBr(float *C); int main() { float numero; printf( "(ame un nAmero) " ); scanf( " f", *numero ); sBr( numero ); } printf( "3l cuadrado es %-%f"n", numero );

=oid sBr(float *C) { C 5 C 6 C; }

!.2 Paso de %ar&metros %or valor


El paso de parmetros por "alor se utili#a cuando se le quiere smplemente pasar un dato a una uncin o procedimiento, sin ms repercursiones en el resto del programa. El paso de parmetros por "alor admite dos "ariantes, que es necesario utili#ar en uncin del tipo de dato del parmetro que se quiera pasar. <ara los tipos de datos simples, esto es, Entero y >eal, el paso de parmetros por "alor consiste bsicamente en poner el nombre del tipo y el nombre del parmetro ormal a continuacin. <ara su in"ocacin, se indica el nombre de la "ariable o un "alor literal.
#include <cstdio> dou8le sBr(dou8le);

int main() { float numero; printf( "(ame un nAmero) " ); scanf( " f", *numero ); } printf( "3l cuadrado es %-%f"n", sBr( numero ) );

dou8le sBr(dou8le C) { return C 6 C; }

"$2$1 Pa!o de %ectore! y matrice!


%os "ectores y matrices, siempre se pasan por re erencia, aunque no se indique e!plcitamente con la sinta!is comentada anteriormente. &i se desea indicar que el "ector no "a a cambiar durante la uncin, se debe poner el modi icador const delante del parmetro ormal del "ector.
#include <cstdio> int strlen(const c7ar s9:); int main() { c7ar nom8re9$'0:; printf( "(ame tu nom8re) " ); ;ets( nom8re ); printf( "+u nom8re tiene } int strlen(const c7ar s9:) { int i 5 %; >7ile( s9 i : !5 % ) { ??i; } } return i; d letras-"n", strlen( nom8re ) );

"$2$2 Pa!o por re&erencia con!tante


&in embargo, este paso de parmetros no es su iciente cuando se tratan tipos de datos grandes. <or ejemplo, una estructura con "arios campos se podra pasar por "alor tal y como se ha mostrado hasta ahora, pero copiar la longitud entera de la misma con cada paso por "alor supondra una penali#acin demasiado grande. $s, e!iste la posibilidad de utili#ar el paso por re erencia constante, de manera que se a(nan las "entajas del paso por re erencia 1es muy rpido2, y del paso por "alor 1la "ariable no se puede modi icar2. $ continuacin se muestra un ejemplo.
#include <cstdio> #include <cstrin;> const int MaC 5 $'0;

t<pedef struct { c7ar nom8re9MaC:; c7ar apellidos9MaC:; int edad; } 4ersona; =oid mostrar4ersona(const 4ersona *C); =oid inicialiDar4ersona(4ersona *p, const c7ar nom8re9:, const c7ar apellidos9:, int edad); int main() { 4ersona p$; inicialiDar4ersona( p$, "4erico", "4alotes", $0 ); mostrar4ersona( p$ );

=oid inicialiDar4ersona(4ersona *p, const c7ar nom8re9:, const c7ar apellidos9:E { strcp<( p-nom8re, nom8re ); strcp<( p-apellidos, apellidos ); p-edad 5 edad; } =oid mostrar4ersona(const 4ersona *p) { printf( " s, s) d"n", p-apellidos, p-nom8re, p-edad ); }

También podría gustarte