Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Concepto de Función
“Una función es una o mas instrucciones que se asocian a un único nombre y que se
ejecutan al invocar dicho nombre”.
Las funciones son útiles cuando se necesita ejecutar cierto grupo de instrucciones varias
veces en un mismo programa, solo hace falta asociar el grupo a un nombre e invocar dicho
nombre todas las veces que necesitemos ejecutar el citado grupo
Ejemplo de función:
Rc
{
funcion calcular(x,y,z)
calcular(Vcc,Vce,Rc)
I
calcular(12,8,1200)
w=( x - y )/z
Vcc=10
W
Rc=2200
F
calcular(Vcc,7,Rc)
F
Llamamos “parámetros de la función“ a las variables
intermedias ubicadas entre entre el programa principal y en interior de la función. En nuestro
caso los parámetros son x, y y z las que corresponde a Vcc, Vce y Rc del programa
principal.
En el programa principal se invoca tres veces a la función, una entrando los datos por
teclado y copiando el contenido de la variables del programa principal a los parámetros, esto
se hace colocando en la función dichas variable en la posición del parámetro
correspondiente, Otra uso de la función se hace pasando directamente constantes a los
parámetros y finalmente en la última se mezclan constantes con variables asignadas y
reemplazadas en la posición del parámetro correspondiente.
Página 1 de 22
El uso de funciones nos ahorra escritura de programa pues en este caso en lugar de repetir
el cálculo de la corriente de colector y su impresión en pantalla tres veces, se asocia las
instrucciones deseadas a la función y se repite tres veces la invocación a la misma
escribiendo menos código en el programa. Tenga en cuenta que podemos crear funciones
no solo con dos instrucciones sino con mucha más dado como consecuencia un ahorro en
la cantidad de instrucciones que tiene nuestro programa.
Este concepto fue introducido porque el lenguaje C se basa en funciones tal que el programa
principal es una función
zona 1
{ zona inclusiones,
definiciones
y declaraciones globales
Función
main( ) { principal
declaraciones locales main
I1
I2 programa
zona 2 principal
i3
...
Ii
}
zona 3
{ zona de funciones definidas
por el usuario
Zona 1:
Aquí se encuentran las declaraciones locales, es decir variables que se pueden utilizar
solamente dentro de esta zona y las instrucciones que conformar en programa principal.
Vemos que está encabezada por la palabra main( ) en la cual los paréntesis de apertura y
cierre indican que main es una función y siendo que main significa principal en ingles la
misma representa a la “función principal” o “programa principal”. Mas adelante explicaremos
el concepto de función
Zona 3:
En esta zona creamos a las “funciones definidas por el usuario”. Por ejemplo las funciones
Standard tales como borrar la pantalla, entrar datos desde el teclado, imprimir datos hacia la
pantalla, calculo de funciones matemáticas tales como logaritmo, seno, coseno, raíz c.
Concepto de variable:
En una zona de memoria se puede cambiar el contenido para una dirección dada, por lo
tanto se denomina “variable” de dicho contenido e “identificador de variable” a la
dirección de la misma o al nombre simbólico que se la asoció a dicha dirección
variable
21 54
22 54 R
23
identificador de
variables
“Declarar una variable significa vincular la dirección de la posición que ocupan en memoria
a un nombre, establecer su tamaño y el tipo de datos que va a contener”.
Antes de explicar como se crean variables en lenguaje C se debe conocer cuales son
los tipos de datos que utiliza el mismo y los nombres que le corresponden
Página 3 de 22
Tipos de datos en lenguaje C
Una de las cualidades que hizo famoso al lenguaje C es que los caracteres simples se pueden tratar como números, es decir
‘a’ +1 da como resultado a ‘b’ porque en lenguaje trabaja en realidad con los códigos ASCII de los mismos y el código ASCII del carácter
‘b’ es el que sigue al del carácter ‘a’. Además vemos que el tipo de dato para caracteres simples tienen en mismo nombre, (char) que el de
los datos numéricos con signo de 8 bits de tamaño
El cuadro anterior es válido para entornos de programación de 16 bits de datos tal como los microcontroladores. En la PC que hoy en día
es 32 bits el tipo de datos int también es de 32 bits de tamaño y es igual que el long. Si queremos utilizar el int tradicional debemos
utilizar el el modificador short aplicado a int creando el tipo de datos short int que es de 16 bits de tamaño
Página 4 de 22
Ejemplos de declaración de variables:
Ejercicio:
Declarar variables con el tamaño y tipo de dato más adecuado para contener los siguientes
datos y efectuar la asignación correspondiente
1. -23
2. 62000
3. -25000
4. ‘1’
5. -37.247
c out
18.7
18.7
Rt
Los archivos de cabecera son archivos de texto que contienen declaraciones y definiciones
de órdenes y constantes utilizadas habitualmente. El nombre del archivo de cabecera se
vería así:
xxxxxxx.h
Página 6 de 22
tiene cualquier nombre y la extensión h que viene de header que significa cabecera en
ingles.
Dichos archivo se incluyen al programa utilizando la macroordén #include de la siguiente
forma:
#include <xxxxxxx.h>
Pero hace lo anterior obliga a habilitar un namespace para hacer una programación mas
sencilla
Un namespace es un archivo que contiene nombres y símbolos y este caso el que
utilizaremos es el namespace std. El ejemplo 3 nos quedaría así
#include<iostream>
using namespace std;
int main()
{
float r1,r2;
float Rt;
r1=7.5;
r2=11.2;
Rt=r1+r2;
cout << Rt;
return(0);
}
Página 7 de 22
Esto implica que la función main al terminar debe retornar un valor que en este caso es 0,
(return(0))
Por ejemplo la app que instalar el Ide para C++ para ANDROID cxxdroid exige que el
programa tenga la forma descripta anteriormente.
#include<iostream>
int main()
{
float r1,r2;
float Rt;
r1=7.5;
r2=11.2;
Rt=r1+r2;
std::cout << Rt;
return(0);
}
//ejemplo 4
El ejemplo soluciona en problema anterior pero si el
problema se ejecuta varias veces se la impresión
#include<iostream.h> de la salida en pantalla tantas veces como
#include<conio.h> ejecutamos en programa.
main() Esto se solucionaría con una función para borrado
{ de pantalla
float r1,r2,Rt;
r1=7.5;
r2=11.2;
Rt=r1+r2;
cout << Rt;
getch();
}
Página 8 de 22
//ejemplo 5
#include<iostream.h>
#include<conio.h>
main()
{
float r1,r2,Rt;
clrscr();
r1=7.5;
r2=11.2;
Rt=r1+r2;
cout << Rt;
getch();
}
c in
12.3
r1
cin r1;
<<
Página 9 de 22
//ejemplo 6
En este ejemplo no se le indica al operador que
está ingresando por teclado y que representa en
#include<iostream.h> número que se muestra en pantalla.
#include<conio.h> Para ello debemos utilizar los mensajes de ayuda al
main() operador
{
float r1,r2,Rt;
clrscr();
cin >> r1;
cin >>r2;
Rt=r1+r2;
cout << Rt;
getch();
}
//ejemplo 7
#include<iostream.h>
#include<conio.h>
main()
{
float r1,r2,Rt;
clrscr();
cout<<"Ingrese R1:";cin >> r1;
cout<<"Ingrese R2:";cin >>r2;
Rt=r1+r2;
cout <<"Rt vale "<< Rt<<" ohms";
getch();
}
Veamos ahora como podemos utilizar todo lo que aprendimos en diagramacion logica para
resolver nuestros problemas y luego codificar dicho diagrama a lenguaje C/C++.
En el ejemplo que sigue se indica que sentencia de lenguaje C/C++ corresponde a cada
elemento de diagrama visto anteriormente.
En color rojo se ponen las ordenes que no se pueden diagramar pero son necesarias.
En color verde se ponen las ordenes que no se pueden diagramar pero no son necesarias.
Tomaremos como base a anterior ejemplo 7)
Página 10 de 22
Página 11 de 22
Posicionamiento del cursor en pantalla, la función gotoxy
(para usarla incluir la cabecera conio.h):
sintaxis
En modo texto Standard la pantalla tiene la coordenada x que va desde 1 a 80, (80
columnas) y la coordenada y que va desde 1 a 20, (25 filas)
cout <<”Rt”;
25
//ejemplo 8
#include<iostream.h>
#include<conio.h>
main()
{
float r1,r2,Rt;
clrscr();
gotoxy(10,7);
cout<<"Ingrese R1:";cin >> r1;
gotoxy(10,9);
cout<<"Ingrese R2:";cin >>r2;
Rt=r1+r2;
gotoxy(12,12);
cout <<"Rt vale "<< Rt<<" ohms";
getch();
}
Página 12 de 22
Elevación a potencias y extracción de raíces en lenguaje C, la función pow
(para usarla incluir math.h)
sintaxis:
las variables res, base y exponente deben ser del tipo double como máximo aunque
también pueden ser del tipo float
//ejemplo 9
#include<iostream.h>
#include<conio.h>
#include<math.h>
main()
{
double b,e,r;
clrscr();
gotoxy(9,7);
cout<<"Ingrese numero a elevar:";cin >> b;
gotoxy(9,10);
cout<<"Ingrese exponente:";cin >>e;
r=pow(b,e);
gotoxy(12,12);
cout <<"elevaci¢n="<<r;
getch();
}
Página 13 de 22
//ejemplo 10
#include<iostream.h>
#include<conio.h>
#include<math.h>
main()
{
float R,i,P;
clrscr();
gotoxy(9,7);
cout<<"Resistencia=";cin >> R;
gotoxy(9,10);
cout<<"Corriente=";cin >>i;
P=R*pow(i,2);
gotoxy(12,12);
cout <<"Potencia="<<P<<" watts";
getch();
}
Uso de textcolor:
Sintaxis: textcolor(COLOR);
HelpTopic Search
Lo que nos hace aparecer la ayuda de textcolor. Luego navegamos en dicha
ayuda hasta encontrar el link “simbolic solor constants” , finalmente entramos
en el mismo y navegando obtenemos la siguiente tabla
Página 14 de 22
COLORS (text mode)
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀│Back-│Fore-
Constant │Value│grnd?│grnd?
══════════════Ï═════Ï═════Ï═════
BLACK │ 0 │ Yes │ Yes
BLUE │ 1 │ Yes │ Yes
GREEN │ 2 │ Yes │ Yes
CYAN │ 3 │ Yes │ Yes
RED │ 4 │ Yes │ Yes
MAGENTA │ 5 │ Yes │ Yes
BROWN │ 6 │ Yes │ Yes
LIGHTGRAY │ 7 │ Yes │ Yes
DARKGRAY │ 8 │ No │ Yes
LIGHTBLUE │ 9 │ No │ Yes
LIGHTGREEN │ 10 │ No │ Yes
LIGHTCYAN │ 11 │ No │ Yes
LIGHTRED │ 12 │ No │ Yes
LIGHTMAGENTA │ 13 │ No │ Yes
YELLOW │ 14 │ No │ Yes
WHITE │ 15 │ No │ Yes
──────────────┼─────┼─────┼──────
BLINK │128 │ No │
Uso de textbackground
Sintaxis: textbackcolor(COLOR);
//ejemplo 11
cout<<"R1=";cin >>r1;
gotoxy(10,5);
cout<<"R2=";cin >>r2;
Rt=r1+r2;
gotoxy(10,7);
cout<<"R total vale"<< Rt<<” ohms”;
getch();
}
Si nuestro objetivo es que alguna de las líneas de texto esté en algún color diferente al
principal, no se puede cambiar al mismo como lo vimos anteriormente porque al invocar a
clrscr() para borrar la pantalla se borra también el texto anterior. Para ello borraremos solo la
línea a la cual le queremos cambiar el color utilizando la función clreol(); la que también
está definida en conio.h. Esta función borra toda la línea a partir de la posición del cursor y
hasta el fin de la misma estableciendo para ella el color de letra y fondo que corresponde a
las últimas invocaciones de textcolor y textbackground. El el siguiente ejemplo se muestra
como se hace esto:
//ejemplo 12
Luego de que gotoxy(10,7); coloca las coordenadas
en x=10 e y=7 se cambia el color de fondo a azul,( con
#include<iostream.h> textbackground(BLUE); y luego se borra la línea .
#include<conio.h> A continuación se imprime el texto y para que solo esta
main() última impresión salga con el nuevo color se cambia de
{ nuevo el color de fondo al original y se borra
float r1,r2,Rt; nuevamente la línea para el l resto de la misma se
textcolor(RED); imprima con el color de fondo original
textbackground(GREEN);
clrscr();
gotoxy(10,3);
cout<<"R1=";cin >>r1;
gotoxy(10,5);
cout<<"R2=";cin >>r2;
Rt=r1+r2;
gotoxy(10,7);
textbackground(BLUE);
clreol();
cout<<"R total vale"<< Rt<<” ohms”;
textbackground(GREEN);
clreol();
getch();
}
Página 16 de 22
Para cambiar el tamaño del texto utilizamos la función textmode la que también está
definida en conio.h. El único parámetro que tiene está definido en la ayuda e indica en nuevo
tamaño de la pantalla en columnas y líneas, los valores más destacables para probar son el
que establece la constante C40 que fija la pantalla a 40 columnas y el C4350 que establec
la pantalla a 50 líneas. Textmode siempre se debe ejecutar antes de cambiar el color con
textcolor y textbackground
//ejemplo 13
#include<iostream.h>
#include<conio.h>
main()
{
float r1,r2,Rt;
textmode(C40);
textcolor(RED);
textbackground(GREEN);
clrscr();
gotoxy(10,3);
cout<<"R1=";cin >>r1;
gotoxy(10,5);
cout<<"R2=";cin >>r2;
Rt=r1+r2;
gotoxy(10,7);
textbackground(BLUE);
clreol();
cout<<"R total vale"<< Rt<<” ohms”;
textbackground(GREEN);
clreol();
getch();
}
Ejercicio:
Se propone modificar el ejemplo anterior para cambiar el modo de texto y los colores de
impresión
Página 17 de 22
Codificación en C/C++ de la estructura repetitiva
while
for
do while
AccionV1 AccionV1
AccionV2 AccionV2
...
AccionVi AccionVi
“mientras la pregunta sea verdad (Si), repetir las Acciones que están dentro de las llaves.
Cuando la pregunta sea falsa (No), continuar con las sentencias que siguen a la llave de
cierra de el while actual”.
Mayor: >
Mayor o igual >=
Menor <
Menor o igual <=
Igual ==
desigual !=
Operadores lógicos
AND: &&
OR: I I
NOT !
I #include<conio.h>
#include<iostream.h>
c=0 main()
{ float v; int c;
clrscr();
c<5 c=0;
No while( c < 5)
SI {
cin >> v;
V
cout << v;
V
c=c+1;
c=c+1 }
getch();
}
Página 19 de 22
c = c + 1;
valor nuevo de la variable c valor actual de la variable c + 1
Es decir que cada vez que el programa ejecute dicha sentencia se le sumará 1 a la variable
c y de este modo la pregunta del while, ( while(c<5) ) será verdadera mientras c valga 4 y
sera falsa cuando c valga 5. De este modo se logra procesar 5 tensiones tal como lo pide el
problema, (mientras c valga 0,1,2,3 y 4)
…
c = 0;
while(c < 100000)
{
c = c +1;
}
...
vemos que el while solo contiene la sentencia que incrementa el contador c = c +1, por lo
tanto lo que hace este tramo de código detener el programa hasta que c valga 100000.
En lenguaje C la expresión c = c +1, puede escribirse también como c++; o ++c;.
utilizadas así no hay diferencia entre ambas, la diferencia se podría apreciar si las utilizamos
de esta forma:
Página 20 de 22
b =++c; aquí tanto b como c terminan conteniendo el valor 6
Como se ve no es necesario usar la forma anterior en rutinas de retardo utilizando solo las
expresiones c++ o ++c; . Entonces nuestro tramo de código de retardo nos queda así:
…
c = 0;
while(c < 100000)
{
c++;
}
...
#include <xc.h>
#include "confbits.h"
main()
{ unsigned char b;
//declaraciones de variables
Se observa que la pregunta del while, b == 47, ( que pregunta si b es igual a 47), será
siempre verdadera por tener b asignado 47 previamente. Lo que no hay que hacer es
modificar a la variable b dentro del while.
De este modo logramos que el while no termine nunca.
Página 21 de 22
Esto se debe hacer porque el microcontrolador no tiene Sistema Operativo y así se controla
dentro dentro del while el estado de los puertos de entrada o de sus bits individuales y
actualizando el estado de los puertos de salida o solamente de bits individuales de los
mismos, o también interaccionar sobre unidades funcionales del microcontrolador. Dicho
control se debe realizar permanentemente por eso corresponde
utilizar un ciclo while que no termine nunca
En lenguaje C todo número distinto de 0 dentro de la pregunta del while significa verdadero
y el 0 significa falso, por lo tanto el programa anterior podría escribirse también así
#include <xc.h>
#include "confbits.h"
main()
{
//declaraciones de variables
while(47)
{
//Código de programa que interacciona con los puertos
#include <xc.h>
#include "confbits.h"
main()
{
//declaraciones de variables
while(1)
{
//Código de programa que interacciona con los puertos
}
Página 22 de 22