Professional Documents
Culture Documents
org
En C++
1#include<iostream>
2
3using namespace std;
4
5int main()
6{
7
cout << "Hola mundo";
8
return 0;
9}
Tomado de http://codigoc.org
En C
1 #include<stdio.h>
2
3 int main()
4 {
5
int radio;
6
float area, perimetro;
7
8
// SALIDA: mensaje un pantalla
9
printf("Introduce el radio del circulo: ");
10
11
//ENTRADA: recibir dato desde teclado
12
scanf("%d", &radio);
13
14
// calculos
15
area = 3.1416 * radio * radio;
16
perimetro = 3.1416 * radio * 2;
17
18
//SALIDA: resultado en pantalla
19
printf("El area es %.2f y el perimetro %.2f", area, perimetro);
20
getch();
21
22
return 0;
23}
En C++
1 #include<iostream>
2 using namespace std;
3
4 int main()
5 {
6
int radio;
7
float area, perimetro;
8
9
// SALIDA: mensaje un pantalla
10
cout << "Introduce el radio del circulo: ";
11
12
//ENTRADA: recibir dato desde teclado
13
cin >> radio;
14
15
// calculos
16
area = 3.1416 * radio * radio;
17
perimetro = 3.1416 * radio * 2;
18
19
//SALIDA: resultado en pantalla
20
cout << "El area es " << area << " y el perimetro " << perimetro;
21
cin.get();cin.get();
22
23
return 0;
24}
Tomado de http://codigoc.org
Lo que not al hacer estos dos programitas es que pedir un dato en C++ es mucho mucho ms
simple que en C. Sin embargo, el asunto de los << y >> puede llegar a asustar a los recin
iniciados en la programacin.
Pedir un dato en C
scanf("modificador", &nombre de la variable);
Mostrar un dato en C
printf("Dato: modificador", nombre de la variable);
Los modificadores son los siguientes: %d para int, %f para float, %s para string, %c para char.
Libreras en C++
Por simple convencin las libreras en C terminan en .h (punto hache). Todas las libreras
de C sirven para C++, sin embargo, tambin por convencin, se elimina la terminacin .h y
mejor se agrega c al principio.
Libreria en C
Librera en C++
math.h
cmath
string.h
cstring
time.h
ctime
etcetera.
El namespace
C como lenguaje tiene un conjunto de palabras reservadas, como por ejemplo: if, for, while,
int, float, C++ es una ampliacin, por lo tanto tiene que agregar nuevas palabras
reservadas. stas palabras reservadas estn en un namespace ( espacio de nombres). En
especfico cout y cin estn el namespace std (standard).
Si no declararamos que vamos a usar el namespace std (using namespace std;), cada vez que
quisieramos usar cout, tendramos que escribir std::cout.
Tomado de http://codigoc.org
int altura=0;
Para declarar una variable numrica llamada distancia que inicie con un valor de 2.67,
escribimos esto:
float distancia=2.67;
Para declarar una variable de caracter llamada inicial, con un valor de R, escribimos esto:
char inicial='R';
Para declarar una variable boolean llamada terminado, que empiece como falso, escribimos
esto:
bool terminado=false;
En resumen:
Para
Para
Para
Para
variables
variables
variables
variables
Como ven, el valor de la variable aparece en lugar de %i, cada tipo de dato tiene su propio
caracter de sustitucin.
Tomado de http://codigoc.org
Otros ejemplos:
#include<stdio.h>
#include<conio.h>
int main()
{
int edad=17;
float altura=1.67;
printf("Edad: %i aos, altura: %f metros", edad, altura);
//Esto mostrar en pantalla: Edad: 17 aos, altura: 1.670000 metros
getch();
}
%f mostrar 0.000000
%.2f mostrar 0.00
%.1f mostrar 0.0
%.f mostrar 0
Posts Relacionados
Tomado de http://codigoc.org
Sirven para relacionar dos o ms operaciones lgicas. Al usar && (y), las dos operaciones
tienen que ser verdaderas para que arroje un resultado verdadero, si no, es falso. Al usar ||
(o), las dos operaciones tienen que ser falsas para que arroje un resultado falso, si no, es
verdadero.
Ejemplos
Si a=4 y b=5 entonces,
a==b es false
a>b es false
a!=b es true
a==b && a<b es false
a==b || a<b es true
Operaciones en C++
Bien, ya sabemos declarar y mostrar variables, ahora solo falta saber cmo hacer
operacionesmatemticas con ellas. Una suma sera as:
#include<stdio.h>
#include<conio.h>
int main()
{
int num1=5, num2=10, resultado=0;
resultado=num1+num2;
printf("El resultado es: %i", resultado);
//Esto mostrar en pantalla: El resultado es: 15
getch();
}
Como ven, siempre hay que tener una variable para guardar el resultado de cualquier
operacin. En algunos casos se puede usar la misma variable:
#include<stdio.h>
#include<conio.h>
int main()
{
int num1=5;
num1=num1+6;
printf("El resultado es: %i", num1);
//Esto mostrar en pantalla: El resultado es: 11
getch();
}
Tomado de http://codigoc.org
() Tambin indican multiplicacin
Sabemos que eso no es vlido porque una suma retorna un valor ( el resultado) y ese valor
tiene que ser almacenado en una variable. En el cdigo anterior ese valor no se almacena en
ninguna variable, por lo tanto ERROR. Sabiendo esto ltimo podemos escribir esto:
mivar = mivar + 3;
En la variable mivar, guardamos el contenido de esa misma variable ms tres. Todo bien no?
eso es perfectamente vlido y normal, sin embargo los operadores compuestos nos permiten
hacer lo mismo con menos cdigo:
mivar += 3;
=
=
=
=
mivar
mivar
mivar
mivar
+
*
/
3;
3;
3;
3;
es
es
es
es
lo
lo
lo
lo
mismo
mismo
mismo
mismo
que
que
que
que
mivar
mivar
mivar
mivar
+=
-=
*=
/=
3;
3;
3;
3;
Tomado de http://codigoc.org
Bueno, para ver un poco de la utilidad de estos operadores y hacindole un favor a un tal
Victor, vamos a ver un programa que imprima los mltiplos de un cierto nmero (introducido
por el usuario) que haya desde 1 hasta otro cierto nmero (introducido por el usuario):
#include<iostream>
using namespace std;
int main()
{
int num, lims, m=0;
cout << "Numero?: "; cin >> num;
cout << "Limite superior?: "; cin >> lims;
while(lims >= (m+=num))
{
cout << m << ", ";
}
}
Primero pedimos el nmero del cual queremos obtener mltiplos ( num), luego el lmite
superior (lims).m obtendr el valor de los mltiplos y lo tenemos que igualar a 0 al inicio.
Luego tenemos un ciclo while. En espaol dice: Me mantendr ejecutando mientras
el lims sea mayor o igual a m ms num. Dentro del ciclo mostramos la variable m.
Si, por ejemplo, num = 3, entonces la instruccin n+=num se desarrolla as:
m
m+=num;
----->
m+=num;
----->
m+=num;
----->
etc, etc.
m=
m=
m=
m
m
m
+
+
+
num;
num;
num;
=
-----> m
-----> m
-----> m
=
=
=
0
3
6
+
+
+
3;
-----> m
3;
-----> m
3;
----->
m
=
=
=
0;
3;
6;
9;
Aqu podra poner un otro programa an ms til para usar los operadores compuestos, pero
mejor lo dejo para el siguiente post. Ah y si t eres Victor, entonces tal vez te interese este
post: Cmo contar el nmero de veces que sucede algo.
Tomado de http://codigoc.org
Instrucciones de control
La estructura condicional if... else
En la gran mayora de los programas ser necesario tomar decisiones sobre qu acciones
realizar. Esas decisiones pueden depender de los datos que introduzca el usuario, de si se ha
producido algn error o de cualquier otra cosa.
La estructura condicional if... else es la que nos permite tomar ese tipo de decisiones.
Traducida literalmente del ingls, se la podra llamar la estructura "si...si no", es decir, "si se
cumple la condicin, haz esto, y si no, haz esto otro".
Un ejemplo sencillo sera el siguiente (no se trata de un programa completo, sino tan slo
una porcin de cdigo):
if (edad < 18)
printf("No puedes acceder.\n");
else
printf("Bienvenido.\n");
Este cdigo de ejemplo dice que si el valor de la variable edad es menor que 18 se imprimir
"No puedes acceder.\n", mientras que en caso contrario se imprimir "Bienvenido.\n".
Como se ve en el ejemplo, la estructura de un condicional es bastante simple:
if (condicin) {
sentencias_si_verdadero;
} else {
sentencias_si_falso;
}
La condicin, encerrada entre parntesis, es una expresin que puede dar como resultado 0
(interpretado como falso) o cualquier valor distinto de 0 (interpretado como verdadero).
Cuando la condicin sea verdadera, se ejecutarn las sentencias dentro del primer bloque de
cdigo, cuando la condicin sea falsa, se ejecutarn las sentencias del segundo bloque de
cdigo. Las expresiones y valores de tipo verdadero/falso son tambin llamados valores
lgicos o booleanos.
La indentacin o sangra (los espacios al comienzo de las lneas) no es necesaria, pero ayuda
a la claridad del cdigo. La utilizacin de las llaves {...} es obligatoria cuando se quiere
utilizar ms de una instruccin por bloque, y optativa cuando slo se quiere escribir una
instruccin. Por claridad, sin embargo, es recomendable utilizarlas an cuando slo vaya a
haber una instruccin.
El bloque del else es opcional. Si no se lo encuentra, slo se realizar la accin
correspondiente al bloque if.
Tomado de http://codigoc.org
A continuacin, un ejemplo con una funcin, que devuelve el mayor de dos nmeros:
int mayor(int a, int b)
{
if (b > a) {
return b;
}// No posee especificacin de la parte "else", ya que no es
necesaria.
return a; // Finaliza la funcin retornando el valor de "a".
}
Operadores lgicos
Los operadores && ("y"), || ("o") y ! ("no") son operadores lgicos. Permiten operar con
expresiones lgicas para generar expresiones ms complejas.
Por ejemplo: determinar si un ao es bisiesto o no. Los aos son bisiestos si son divisibles por
4, pero no si son divisibles por 100, a menos que tambin sean divisibles por 400.
if ( (!(a % 4) && ((a % 100))) || !(a % 400) )
printf("es un ao bisiesto.\n");
} else {
printf("no es un ao bisiesto.\n");
}
Adems, como a cada rama del if le sigue una nica instruccin, podemos expresar la
expresin anterior del siguiente modo:
if ( !(a % 4) && (a % 100) || !(a % 400) )
printf("es un ao bisiesto.\n");
else
printf("no es un ao bisiesto.\n");
En este caso, se utiliza el operador mdulo (%), que obtiene el resto de la divisin entera de
un nmero por otro. Cuando un nmero es divisible por otro, el resto de su divisin entera
ser cero. Siendo que cero es equivalente a falso, y cualquier valor distinto de cero es
equivalente a verdadero, podemos usar el operador % para verificar si el nmero es mltiplo
de 4, de 100 o de 400.
10
Tomado de http://codigoc.org
Evaluacin de cortocircuito
La evaluacin en corto circuito es una caracterstica del lenguaje C que se utiliza para
optimizar la ejecucin de programas. Consiste en que el programa puede verificar si una
expresin es verdadera o falsa antes de haber evaluado toda condicin.
Por ejemplo, si se tiene una condicin como la siguiente:
if ((a > 2) || (b < 4)) {
...
}
11
Tomado de http://codigoc.org
case 5 :
printf("Vie, Viernes");
break;
case 6 :
printf("Sab, Sabado");
break;
case 7 :
printf("Dom, Domingo");
break;
default :
printf("No existe");
}
return 0;
}
La condicin debe de ser una expresin lgica, similar a la de la sentencia if. Primero se
evala la condicin. Si el resultado es verdadero, se ejecuta el bloque de cdigo. Luego se
vuelve a evaluar la condicin, y en caso de dar verdadero se vuelve a ejecutar el bloque. El
bucle se corta cuando la condicin da falso.
12
Tomado de http://codigoc.org
Ejemplo: imprimir los nmeros de 0 a 99:
int i = 0;
while (i < 100) {
printf("%d\n", i);
i = i + 1;
}
El bucle for
El bucle for es un bucle muy flexible y a la vez muy potente ya que tiene varias formas
interesantes de implementarlo, su forma ms tradicional es la siguiente:
for (/* inicializacin */; /* condicin */; /* incremento */)
{
/* cdigo a ejecutar */
}
Inicializacin: en esta parte se inicia la variable que controla el bucle y es la primera
sentencia que ejecuta el bucle. Slo se ejecuta una vez ya que solo se necesita al principio
del bucle.
Expresin condicional: al igual que en el bucle while, esta expresin determina si el bucle
continuar ejecutndose o no.
Incremento: es una sentencia que ejecuta al final de cada iteracin del bucle. Por lo
general, se utiliza para incrementar la variable con que se inicio el ciclo. Luego de ejecutar
el incremento, el bucle revisa nuevamente la condicin, si es verdadera tiene lugar una
ejecucin ms del cuerpo del ciclo, si es falsa se termina el ciclo y as.
Aqu se muestra el mismo ejemplo visto para el bucle while, pero implementado con un
bucle for:
int i;
for (i=0; i < 100; i = i + 1)
{
printf("%d\n", i);
}
13
Tomado de http://codigoc.org
El bucle do...while
El bucle do...while es un bucle que, por lo menos, se ejecuta una vez. Do significa
literalmente "hacer", y while significa "mientras"
Su forma es esta:
do {
/* CODIGO */
} while (/* Condicin de ejecucin del bucle */)
La verdad es que este ejemplo puede resultar un poco absurdo, pero es bastante intuitivo. El
cdigo del bucle asigna un valor aleatorio a la variable definida anteriormente, y mientras
esa variable no tenga el valor 25, el bucle sigue ejecutndose.
La sentencia goto
La sentencia goto sirve para indicar al programa que continue ejecutndose desde la lnea de
cdigo indicada. Su sintaxis es ms o menos as:
/* Cdigo */
ETIQUETA:
/* Cdigo */
goto ETIQUETA;
/* Cdigo */
14
Tomado de http://codigoc.org
Debe recibir como entrada la cantidad de dar a cambio. Ejemplo: para $40.50 ser 4 de 10, 0
de 5, 0 de 2, 0 de 1 y 1 de 50 centavos.
As que el primer problema se presenta con la entrada cmo hacer que el usuario introduzca
slo cantidades como $50 o $43.50 y no cantidades como $23.45 o $9.70?
Lo que se me ocurri es pedir la cantidad en una variable float ( cambio), en otra variable
convertir esa cantidad a tipo int (cambioint). En ese proceso se perder la parte decimal del
nmero, as que si la resta cambio cambioint es igual a 0 o igual a 0.50, la cantidad que
introdujo el usuario es correcta.
La otra parte es sencilla, slo se necesita ver si la variable cambio es mayor que 10. Si si, se
le restan 10 a la variable y se aumenta un contador. Luego se hace lo mismo con las dems
monedas.
Pero bueno, el programa es este:
1 #include<iostream>
2 using namespace std;
3
4 int main()
5 {
6
float cambio; int cambioint, m10=0, m5=0, m2=0, m1=0, m50c=0;
7
do
8
{
9
cout << "Cambio?: "; cin >> cambio;
10
cambioint = (int)cambio;
11
}while((cambio - cambioint) != 0 && (cambio - cambioint) != 0.50);
12
while(cambio != 0)
13
{
14
if(cambio>=10)
15
{
16
m10++;
17
cambio-=10;
18
}
19
else if(cambio>=5)
20
{
21
m5++;
22
cambio-=5;
15
Tomado de http://codigoc.org
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41}
}
else if(cambio>=2)
{
m2++;
cambio-=2;
}
else if(cambio>=1)
{
m1++;
cambio-=1;
}
else if(cambio>=0.5)
{
m50c++;
cambio-=0.5;
}
}
cout << m10 << ", " << m5 << ", " << m2 << ", " << m1 << ", " << m50c;
Solo le faltara darle un poco de formato a la salida, pero pues ya es cuestin de gustos y ya
saben, cualquier duda aqu estn los comentarios abajo.
16
Tomado de http://codigoc.org
if(n!=7 & n%7==0)
cout << "No es primo";
else
{
if(n!=11 & n%11==0)
cout << "No es primo";
else
{
cout << "Es primo";
}
}
}
}
}
}
&
&
Pero pues de eso no se trata, los ciclos son para evitar las cantidades interminables de ifs,
as que usmoslos.
Ah y recuerden que si corren un programa y su compilador no se pausa solo, tienen que
agregar cin.get();cin.get(); al final del programa, antes de la llave de cierre del main.
Si llegaste aqu buscando un programa para saber si un nmero es primo o no, sigue el link
que est al principio del post
17
Tomado de http://codigoc.org
18
Tomado de http://codigoc.org
#include<stdio.h>
#include<conio.h>
int main()
{
float total=0,ciclo=0,conta_h=0,conta_m=0,porc_h=0,porc_m=0;
char mof;
gotoxy(5,5);printf("Cuantos alumnos hay en este grupo?: ");scanf("%f",&total);
for(ciclo=1;ciclo<=total;ciclo++)
{
clrscr();
PREG:
gotoxy(10,6);printf("Sexo
de
alumno
%.f?
(M
o
F):
",ciclo);scanf("%c",&mof);
if(mof=='m' || mof=='M')
conta_h++;
else if(mof=='f' || mof=='F')
conta_m++;
else
goto PREG;
}
//Calculos
porc_h=conta_h/total*100;
porc_m=conta_m/total*100;
//
gotoxy(5,5);printf("El
porcentaje
de
hombres
es
%.1f
(%.f
de
%.f)",porc_h,conta_h,total);
gotoxy(5,6);printf("El
porcentaje
de
mujeres
es
%.1f
(%.f
de
%.f)",porc_m,conta_m,total);
getch();
}
19
Tomado de http://codigoc.org
if ( condicion )
{
instrucciones
}
}
else
{
if ( condicion )
{
instrucciones
}
else
{
instrucciones
}
instrucciones
}
Y como para qu? Pues hay algunas situaciones que as lo requieren. Por ejemplo:
Si un alumno tiene un promedio mayor o igual a 9 se le hara un 20% de descuento en la
colegiatura, si tiene un promedio mayor o igual a 8 pero menor que 9 el descuento ser del
10%, si su promedio es menor que 8 pero mayor o igual a 7 el descuento ser del 5% y si
promedia con 7 o menos no tendr descuento.
La solucin de este problema en c++ sera as:
#include<stdio.h>
#include<conio.h>
int main()
{
float calif_1=0,calif_2=0,calif_3=0,promedio=0;
printf("\nIntroduce tu primera calificacion: ");scanf("%f",&calif_1);
printf("\nIntroduce tu segunda calificacion: ");scanf("%f",&calif_2);
printf("\nIntroduce tu tercera calificacion: ");scanf("%f",&calif_3);
20
Tomado de http://codigoc.org
promedio=(calif_1+calif_2+calif_3)/3;
if(promedio<6)
{
printf("\n\tLo siento, tu promedio de %.2f no es aprobatorio",promedio);
}
else
{
printf("\n\tFelicidades, pasaste con un %.2f",promedio);
}
getch();
}
Aqu estamos asumiendo que la calificacin mnima aprobatoria es de 6, pero y si quiero que
este dato tambin sea variable? Entonces el programa quedara as:
21
Tomado de http://codigoc.org
//Pedir los datos
printf("TIPOS DE TRIANGULOS");
printf("\nIntroduce el lado 1: ");scanf("%i",&lado1);
printf("\nIntroduce el lado 2: ");scanf("%i",&lado2);
printf("\nIntroduce el lado 3: ");scanf("%i",&lado3);
//Hacer comparaciones
if(lado1==lado2 && lado2==lado3)
{ printf("\n\tEs equilatero"); }
if(lado1==lado2 && lado2!=lado3 || lado2==lado3 && lado3!=lado1 || lado3==lado1
&& lado1!=lado2)
{ printf("\n\tEs isosceles"); }
if(lado1!=lado2 && lado2!=lado3 && lado3!=lado1)
{ printf("\n\tEs escaleno"); }
//Pausa
getch();
}
22
Tomado de http://codigoc.org
if(edad>=18)
{
printf("Eres mayor de edad");
}
else
{
printf("Eres menor de edad");
}
getch();
}
Un if no tiene que tener un else a fuerzas, es opcional. Es muy importante que se fijen muy
bien en las llaves, cada if tiene su llave de apertura y de cierre, al igual que el else.
Funciones en C++
Supongo que ya es hora de retomar el blog y ponerme a hablar de funciones en c++. Una
funcin es un pedazo de cdigo fuera del main, con un nombre y que puede ser llamado
desde otra parte de nuestro programa.
Imagnense que estn entrenando a su perro a hacerse el muertito. Cada vez que ustedes
dicen muertito, el perro se tira de espaldas en el suelo, cierra los ojos y saca la lengua. En
programacin, el contenido de la funcin sera tirarse de espaldas, cerrar los ojos y sacar la
lengua; el nombre de la funcin sera muertito; y cada vez que nosotros decimos muertito
estamos llamando a la funcin.
Nuestra funcin sera algo as:
void muertito()
{
Perro.Tirarse(posicion='espalda');
Perro[OjoDer].Cerrar();
Perro[OjoIzq].Cerrar();
Perro[Lengua].Sacar();
}
Jajaja, bueno, bueno. Ya en serio vamos a hacer un clsico Hola Mundo pero usando una
funcin:
#include<iostream>
using namespace std;
void hola()
{
cout << "Hola Mundo!";
}
23
Tomado de http://codigoc.org
int main()
{
hola();
}
Como ven, esta funcin es muy estpida. No nos beneficia en nada y nos hace escribir ms
cdigo del necesario, pero nos sirve para ver cmo acta una funcin: al momento de llamar
a la funcin, el compilador se brinca a la funcin, la ejecuta y cuando termina, vuelve al
punto desde donde brinc.
Si pudieran leerle la mente a un compilador, este dira:
Linea
1.
Incluir
la
librera
iostream.
OK
Linea
2.
Usar
el
namespace
estndar.
OK
Linea
3.
Oh!
una
funcin
llamada
hola,
la
recordar.
Linea
4.
Llave.
Parte
de
la
funcin.
Ignorar
Linea
5.
Imprimir
Hola
Mundo!.
Parte
de
la
funcin.
Ignorar
Linea
6.
Llave.
Parte
de
la
funcin.
Ignorar
Linea
7.
Por
fin
el
main!
Linea
8.
Llave.
Entrar
Linea 9. Esta funcin se me hace conocida oh s ya recuerdo. Ejecutar lineas 4, 5 y 6
Linea 10. Llave. Salir
Ahora veamos una funcin que s nos es til:
#include<iostream>
using namespace std;
void hola(char nombre[50])
{
cout << "Hola " << nombre << "!";
}
int main()
{
char nombre[50];
cout << "Cual es tu nombre?: "; cin.getline(nombre, 50, '\n');
hola(nombre);
}
24
Tomado de http://codigoc.org
Una funcin, como les deca, puede hacer (o no) dos cosas: 1 Recibir datos y 2 Retornar
datos. De esto surgen los cuatro tipos de funciones:
1.
2.
3.
4.
No reciben ni retornan
Reciben y no retornan
No reciben y retornan
Reciben y retornan
Vamos a hacer un programa que sume dos nmeros, usando los cuatro tipos de funciones:
No reciben ni retornan
Las ms sencillas. Para usarlas slo tenemos que saber cmo crearlas y cmo llamarlas. Una
funcin se crea de esta forma general:
tipo nombre(){}
El tipo se refiere al tipo de dato (int, float, void, char) y en las funciones que no retornan
siempre es void.
El nombre es el nombre de la funcin: cualquiera que empiece con una letra, que sea
significativo y que no sea una palabra reservada.
Para llamarlas slo hay que escribir el nombre de la funcin seguido de sus parntesis y un
punto y coma (;).
nombre();
Como ven, todo lo que habramos puesto en nuestro main mejor los pusimos en una funcin y
desde el main la llamamos. Una funcin siempre, siempre, siempre tiene que ir antes del
main.
Una funcin de este tipo que hemos usado muchas veces es getch();
25
Tomado de http://codigoc.org
Reciben y No Retornan
Cmo haramos para pedir los dos nmeros en el main y que la funcin haga la suma? Para
eso tenemos que hacer una funcin capaz de recibir datos, entonces la sintaxis cambia un
poco:
tipo nombre(tipo_var1 nombre_var1, tipo_var2 nombre_var2){}
Pedimos los dos nmeros en el main, los enviamos a la funcin, sta los suma y los muestra.
Una funcin de este tipo que hemos usado muchas veces es el odiado por muchos, amados
por otros, gotoxy(x,y);
26
Tomado de http://codigoc.org
Retornan y No Reciben
Y si ahora queremos lo contrario? Pedir los nmeros en la funcin, pero mostrar el resultado
en el main. Para eso necesitamos una funcin que retorne.
Recibir es enviar datos del main a la funcin. Retornar es enviar datos de la funcin al main.
Para retornar datos hay que hacer dos cosas: no usar void como tipo y usar return.
De forma general:
tipo nombre() { return var; }
El tipo tiene que ser del tipo de variable que queremos retornar, si nuestra variable
retorna una variable int, pues el tipo de la funcin es int.
Para indicar qu variable estamos retornando usaremos la palabra return seguido de la
variable. Usualmente esto va al final de la funcin.
Para llamar a la funcin hay que preparar un colchn en donde caiga la variable que est
retornando.
var = nombre();
La variable que est retornando nuestra funcin se va a almacenar en la variable var. Este
es un buen momento para recordarles que las variables declaradas entre dos llaves {}
nicamente existen entre esas dos llaves. O sea que la variable var de la funcin no es la
misma que la variable var de la funcin; sin embargo la var del main est adquiriendo el
valor de la var del main. Un poco confuso lo se, no se preocupen.
Nuestro programa quedara as:
#include<iostream>
using namespace std;
int sumar()
{
int num1, num2, r;
cout << "Numero 1: "; cin >> num1;
cout << "Numero 2: "; cin >> num2;
r = num1 + num2;
return r;
}
int main()
{
int r;
r = sumar();
cout << "La suma es " << r;
}
27
Tomado de http://codigoc.org
Reciben y Retornan
Ahora queremos que nuestra funcin nicamente sume, el main se va a encargar de pedir los
nmeros y sumar los resultados. Para eso necesitamos que nuestra funcin reciba las
variables y adems retorne el resultado. Wow! Es acaso eso posible? Claro que s.
Es slo cuestin de combinar las funciones que reciben y no retornan con las que retornan y
no reciben.
Nuestro programa quedara as:
#include<iostream>
using namespace std;
int sumar(int num1, int num2)
{
int r;
r = num1 + num2;
return r;
}
int main()
{
int num1, num2, r;
cout << "Numero 1: "; cin >> num1;
cout << "Numero 2: "; cin >> num2;
r = sumar(num1, num2);
cout << "La suma es " << r;
}
Las funciones de la librera math.h son en su mayora de este tipo. sqrt(); pow(); sin();
En principio puede parecer que las funciones sirven nicamente para organizar el cdigo, lo
cual es cierto, pero no slo eso. Se imaginan si tuviramos que escribir todo el cdigo detrs
de un simple gotoxy();? Ah verdad
Bueno, no me iba a quedar tranquilo si no les mostraba la versin optimizada de la ltima
funcin:
#include<iostream>
using namespace std;
int sumar(int num1, int num2)
{
return num1 + num2;
}
int main()
{
int num1, num2;
cout << "Numero 1: "; cin >> num1;
cout << "Numero 2: "; cin >> num2;
cout << "La suma es " << sumar(num1, num2);
}
28
Tomado de http://codigoc.org
29