"AVA"

temarioanacleto2

LenguajeDEVC

DEV C ++





Lenguajes de programación hay en gran cantidad, algunos han evolucionado a travez del tiempo y siguen vigentes en el transcurso de muchos años, mientras que otros han sido operativos durante un periodo más o menos largo y actualmente ya no se usan.

Los lenguajes de programación utilizan juegos de caracteres “alfabeto” para comunicarse con las computadoras. Las primeras computadoras solo utilizaban informaciones numéricas digitales mediante el código o alfabeto digital, y los primeros programas se escribieron en este tipo de código, denominado código maquina basado en los dígitos 0 y 1, por ser entendible por la maquina (computadora). La enojosa tarea de programar en código maquina hizo que el alfabeto evolucionase y los lenguajes de programación comenzaran a utilizar códigos o juegos de caracteres similares al utilizado en los lenguajes humanos. Así, Hoy día la mayoría de las computadoras trabajan con diferentes tipos de juegos de caracteres de los que destacan el código ASCII y el EBCDIC.

De este modo, una computadora a través de los diferentes lenguajes de programación utiliza un juego o código de caracteres que serán fácilmente interpretados por la computadora y que puedan ser programados por el usuario.

Al igual que los lenguajes humanos, tales como el inglés o el español, los lenguajes de programación poseen una estructura (gramática o sintaxis) y un significado (semántica). La gramática española trata de los diferentes, modos (reglas) en que pueden ser combinados los diferentes tipos de palabras para formar sentencias o frases aceptables en español. Los lenguajes de computadoras tienen menos combinaciones aceptables que los lenguajes naturales, sin embargo, estas combinaciones deben de ser utilizadas correctamente; ello contrasta con los lenguajes naturales que se pueden utilizar aunque no sigan reglas gramaticales e incluso aunque no sean comprendidos.

Finalmente, un lenguaje de programación lo definiremos, como un conjunto de reglas, símbolos y palabras espaciales que permiten construir un programa.

Los lenguajes de programación ocupan una posición intermedia entre los lenguajes naturales humanos y los precisos lenguajes de máquina.

Gracias a la progresiva complejidad de los lenguajes traductores que permiten convertir las instrucciones de un lenguaje de programación al lenguaje de máquina, la programación puede usar lenguajes de computación que se parecen cada vez más a los lenguajes naturales.



LENGUAJES DE PROGRAMACION

Un lenguaje de programación consiste en un conjunto de órdenes o comandos que describen el proceso deseado. Cada lenguaje tiene sus instrucciones y enunciados verbales propios, que se combinan para formar los programas de cómputo.

Los lenguajes de programación no son aplicaciones, sino herramientas que permiten construir y adecuar aplicaciones.

Existen muchos tipos de lenguajes de programación con características y aptitudes muy diferenciadas. Todo ello se encuentra en dos grandes grupos:
1 lenguajes maquina
2 lenguajes simbólicos

Entre los primeros se encuentran los denominados lenguajes en código máquina. En estos lenguajes, la codificación de estos lenguajes se hace utilizando un lenguaje binario de ceros y unos, que son los únicos símbolos que puede entender cualquier computador. Cada sistema físico tiene su código maquina distinta por lo que un programa escrito en un determinado código maquina solo vale para un sistema físico.
A los lenguajes maquina les sucedieron, los lenguajes simbólicos los cuales utilizan caracteres naturales para escribir las instrucciones de los programas. Los lenguajes simbólicos se dividen en:
* Lenguajes simbólicos de bajo nivel (ensambladores).
** Lenguajes simbólicos de alto nivel

Dentro de los segundos se distinguen a su vez los lenguajes procedurales y los relacionales.

Lenguaje procedural: es aquel lenguaje de programación en el que hay que señalar tanto lo que se quiere hacer como el modo de hacerlo. Los lenguajes de tercera generación son de tipo procedural.

Lenguaje relacional: es aquel lenguaje programación en el que solo hay que especificar lo que se quiere obtener, sin necesidad de especificar a su vez el camino a seguir para obtener los resultados deseados. Estos lenguajes son de muy alta productividad en desarrollo pero muy ineficientes en ejecución.

La diferencia entre uno y otro es que los primeros exige que se diga tanto lo que se quiere hacer como la forma en la que hay que hacerlo mientras que los relacionales solo exigen que se diga lo que se quiere hacer, pero no es necesario que se exprese el camino para realizarlo.

A medida que se va subiendo de nivel los lenguajes son más sencillos y más productivos en desarrollo, pero en contra partida son menos eficientes a la hora de su ejecución.

Los programas escritos en lenguajes simbólicos se denominan programas fuentes y los programas no son directamente ejecutables, su ejecución implica su previa traducción a código máquina para obtener los denominados programas objeto o absolutos. Esta traducción se hace a través de los ensambladores, compiladores o intérpretes, a los lenguajes que de forma genérica se les denomina procesadores de lenguajes.
A los lenguajes maquina se les conoce como primera generación.
A los ensambladores se les conoce como de segunda generación.
A los simbólicos de alto nivel de tipo procedural se denomina tercera generación.
A los relacionales se les denomina de cuarta generación.

A la tercera generación pertenecen los lenguajes conocidos como: FOLTRAN, COBOL, RPG, BASIC, PL1, SIMULA, ALGOL, PASCAL, ADA, C, LISP, PROGOL, etc. Estos lenguajes de tercera generación son de tipo universal.

Lenguaje C++

C++ es un lenguaje de programación, creado a mediados de 1980 por Bjarne Strousstrup,
Como extensión del lenguaje C. Este lenguaje abarca tres paradigmas de la programación:
1. Programación Estructurada
2. Programación Genérica
3. Programación Orientada a Objetos

En la actualidad, C++ es un lenguaje versátil, potente y general. Su ´éxito entre los
Programadores le ha llevado a ocupar el primer puesto como herramienta de desarrollo de
Aplicaciones, ya sea en Windows o GNU Linux, que es el sistema operativo en el cual basaremos
Este tutorial.

 C++ en un entorno Linux

Comenzaremos diciendo que los programas se pueden escribir en cualquier editor de textos
De GNU, entre ellos se encuentran emacs, vim, kate, gedit, nan, guardando dichos archivos
Con extensión .cpp, los cuales serán compilados en GNU/Linux utilizando el compilador GNU
De C++, llamado gcc que puede compilar C, C++, y que además se apega al estándar ANSI,
Permitiendo la portabilidad de estos códigos. Dicho compilador se invoca con el comando
gcc.



INTERPRETACION

En cualquier lenguaje de programación que se escriba un programa, este debe ser traducido a lenguaje maquina antes de que pueda ser ejecutado. Esta conversión de instrucciones de alto-nivel a, instrucciones a nivel maquina se hace por programas de software del sistema, denominados compiladores e intérpretes. Estos programas especiales se denominan en general traductores.

El proceso de traducción y conversión en programa objeto difiere según que el programa sea compilador o interprete.

COMPILADORES

Es un programa que traduce el programa fuente (conjunto de instrucciones de un lenguaje de alto nivel por ejemplo lenguaje C) a programa objeto (instrucciones en lenguaje máquina que la computadora puede interpretar y ejecutar). El compilador efectúa solo la traducción, no ejecuta el programa. Una vez compilado el programa, el resultado en forma de programa objeto será directamente ejecutable.

INTERPRETES

Los lenguajes de programación además de ser compilados pueden ser interpretados. Un intérprete es un programa que procesa los programas escritos en un lenguaje de alto nivel, sin embargo, está diseñado de modo que no exista independencia entre la etapa de traducción y la etapa de ejecución. Un intérprete traduce cada instrucción o sentencia del programa escrito en un lenguaje “X” a código maquina e inmediatamente se ejecuta, y a continuación se ejecuta la siguiente sentencia. Ejemplo de intérprete son las versiones de BASIC.
El intérprete está diseñado para trabajar con la computadora en modo convencional o interactivo, en realidad se le dan órdenes al procesador a través del intérprete con ayuda, por ejemplo de un teclado y un programa denominado editor. El procesador ejecuta la orden una vez que esta es traducida, si no existe ningún error de sintaxis y se devuelve el control al programador con indicación de mensajes (error de sintaxis o error de ejecución)).
El intérprete no traduce todo el programa fuente en un solo paso, sino que ejecuta cada instrucción de programa fuente antes de traducir y ejecutar la siguiente sentencia u orden.

ELEMENTOS DEL LENGUAJE

 Un programa en C++ es una secuencia de caracteres que se agrupan en componentes léxicos (tokens) que comprenden el vocabulario básico del lenguaje. Estos componentes de léxico son:

**  Palabras reservadas

**  Identificadores

 ** Constantes

 ** Constantes de cadena

 ** Operadores y signos de puntuación.

CARACTERES

Los caracteres que se pueden utilizar para construir elementos del lenguaje (componentes léxicos o tokens) son:

a b c d e f g h i j k l m n o p q r s t u v w x y z

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

 0 1 2 3 4 5 6 7 8 9

 + - * / = ( ) { } [ ] < > ´ ” ! @ =/ $ ^ & % - : . , ; ? \

 caracteres espacio (blancos y tabulaciones).  


lDENTIFICADORES

Los identificadores (nombres de variables, constantes, etc.) deben comenzar con una letra del alfabeto (mayúscula o minúscula) o con un carácter subra­yado y pueden tener uno o más caracteres. Los caracteres segundo y posteriores pueden ser letras, dígitos o un subrayado, no permitiéndose caracteres no alfanuméricos ni espacios.

test_prueba                    //legal

X123                             //legal

multi_palabra                  //legal

var25                              //legal

15var                              //no legal

C++ es sensible a las mayúsculas. Las letras mayúsculas y minúsculas se consideran diferentes

Paga_mes es un identificador distinto a paga_mes

Buena práctica de programación aconseja utilizar identificadores significativos que ayudan a documentar un programa.

nombre apellidos salario precio_neto

Edad Longitud Altura Salario_Mes

 PALABRAS RESERVADAS EN C++

Las palabras reservadas o claves no se pueden utilizar como identificadores, debido a su significado estricto en C++; tampoco se pueden redefinir. 

 

Palabras reservadas de ANSI/ISO C++

asm* default for new* sizeof typedef

auto delete* friend* operator* static typename

bool* do goto private* struct unión

break double if protected* switch unsigned

case else inline* public* template* using

catch* enum int register this* virtual*

char explicit* long return throw* void

class* extern mutable* short true* volatile*

const false* namespace* signed try* while

continue float

* Estas palabras no existen en C ANSI

Los diferentes compiladores comerciales de C++ pueden incluirademás, nuevas palabras reservadas. Estos son los casos de Borland, Microsoft y Symantec.

CONSTANTES C++

contiene constantes para cada tipo de dato simple (integer, char, etcétera). Las constantes pueden tener tres sufijos, u, l y f, que indican tipos unsigned, long y float, respectivamente. Asimismo, se pueden añadir los prefijos o y ox que representan constantes octales y hexadecimales.

 456 0456 Ox456               //constantes enteras: decimal, octal,hexadecimal

 1231 123ul                        //constantes enteras: long, unsigned,long

 'B' 'b' '4'                            //constantes tipo char

 3.1415f 3.14159L            //constantes reales de diferente posición

“cadena de caracteres”      //constante de cadena

Las cadenas de caracteres se encierran entre comillas, y las constantes de un solo carácter se encierran entre comillas simples.

 “ ”                                    //cadena vacía, '\0'

 Una constante literal es un valor escrito directamente en el programa siempre que se necesite. Por ejemplo,

int miEdad = 25;

miEdad es una variable de tipo int; 25 es una constante literal.

 CONSTANTES DE PROGRAMACION.

Los datos constantes en la programación, son todos aquellos que tienen un valor fijo durante toda la ejecución del programa. Las constantes son muy utilizadas para valores no efímeros en el contexto del programa.

Declaración de constantes en C++

Existen dos maneras de declarar los valores constantes en c++: mediante una expresión, con #define o mediante el uso de const, que de esta forma se toma como un término.

#define
esta  instrucción nos permite declarar constantes de una manera sencilla de la  siguiente forma:


#define const;

debemos tener en cuenta que la instrucción define nos genera una expresión que no  puede tomarse como tipo de dato en un flujo, por lo que no es la manera correcta de declarar una constante en c++.
Para usar la instrucción define es preferible hacerlo después de las bibliotecas que declaramos y hacerlo antes de comenzar con la función.

const

Esta instrucción nos permite declarar una constante de una mejor manera y mas  en el contexto de término, estas poseen un tipo de dato asociado y por lo tanto es el estándar para declarar en c++.
Los parámetros de const son muy parecidos al de las variables solo que aquí se le agrega la instrucción const al inicio para especificar la naturaleza del dato.

 
const tipo_de_dato nombre_de_la_constante = valor_de_la_constante;

Con ello,  el tipo de dato constante se puede utilizar de manera normal durante el programa, puede notarse que si se intenta cambiar el valor de la constante antes declarada el programa no dejará esta instrucción, a menos que se haga desde la declaración de la constante, esto es por la naturaleza  del dato.

El estándar para la declaración de constantes en C++

Al igual que las variables las constantes solo pueden declararse con números, letras y guión bajo, con la restricción de que esta no puede comenzar con un número.
En las constantes lo único que cambia es que se recomienda que deben declararse con mayúsculas.
Ejemplo: El uso de las constantes en C++


#include<iostream>
          using namespace std;     //este programa nos muestra el valor de la constante
           int main()
          {
    
                      const float E = 2.7183;  
//declaramos la constante con su valor     
                      cout<<"el valor de su constante es e="<<E;
         
                      return 0;

           }

 
 

¿Que es una variable?

una variable es un espacio en la memoria, en el cual el programador asigna un valor determinado por el tipo de dato que el lenguaje de programación va soportar, para declararla es necesario saber que tipo de dato la contiene.

es representada por un nombre que es asignado por el programador, y se nombra justo después de su tipo de dato, los siguientes son los tipos de datos esenciales:

int; es numérico sirve para números enteros sin punto decimal  (1,2,3,4.. )

float; es numérico y sirve para números con parte fraccionaria, es decir con punto decimal ( 1.2, 1.3, 1.4, ….)

char; es de tipo carácter y cadena de caracteres, es decir que puedes asignar desde una letra, símbolo o numero hasta una palabra o serie de caracteres ( a, 2, !, &, hola, etc.)

bool; es de tipo verdadero o falso, este tipo de dato mostrara en pantalla un “1” en caso de ser true o “0” en caso de ser false.

Como declarar una variable en lenguaje de programación C++

primero como ya dijimos antes se especifica el tipo de dato, después se nombra, y si se asigna un valor debe ir después de un signo de igualdad (” = “) , si se van a declarar varias variables solo se separan con comas (” , “) dentro de la misma linea del tipo de dato especificado y al finalizar escribir punto y coma (” ; “). ejemplos:

Ejemplos de asignación de contenidos son estos:

Declaración
Ejemplo asignación contenidos
int A;
A = 123;
float A;
A = - 3323.57;
char A;
A = 'p';
char A;
A = '1';
int salario;
salario = 30500;
float salario;
salario = 30500;
int A, B, suma;
A = 5 + 2;
B = 32;
suma = A + B; [suma valdrá 39]
int A, B, C, D, E;
A = 5;
B = 32;
C = A * B; [C toma el valor 160]
D = A + C; [D toma el valor 165]
E = D; [E toma el valor 165]
int agotamiento;
agotamiento = 0; [Usamos un entero para simular un booleano]
 

¿Qué  es  un  OPERADOR?

 

 Un operador es un elementdprogramque se aplica a uno o variooperandos en unexpresión o instrucciónLooperadores qurequieren uoperandocomo el operadode incremento se conocen comoperadores unarios.

Looperadores qurequieren dooperandos, comlooperadores aritmético(+,-,*,/) se conocen comoperadorebinarios. Un operador, el operador condicional (?:), utiliza treoperandos y es el únicoperador ternario de C++” .

 

Existen 6 tipodoperadores según sufunciónque son aritméticos, relacionales, deasignación, lógicos, de dirección y demanejo de Bits.
 

 OPERADORES  DE  ASIGNACIÓN

  

Tal  y  como  su  nombre  lo  indica,  este  tipde  operadores  permiten  la  asignación  de  uvalor especifico a unvariable. En C++se encuentran disponibles los siguientes operadores:

 
Operador
Acción
Ejemplo
Resultado
=
Asignación Básica
X = 6
X vale6
*=
Asigna Producto
X
*=
5
X vale 30
/=
Asigna División
X
/=
2
X vale3
+=
Asigna Suma
X
+=
4
X vale 10
-=
Asigna Resta
X
-=
1
X vale5
%=
Asigna Modulo
X
%=
5
X vale1
<<=
Asigna Desplazamiento Izquierda
X
<<=
1
X vale 12
>>=
Asigna Desplazamiento Derecha
X
>>=
1
X vale3
&=
Asigna AND entre Bits
X
&=
1
X vale0
^=
Asigna XOR entre Bits
X
^=
1
X vale7
|=
Asigna ORentre Bits
X
|=
1
X vale7

 
 

Todos elloson operadores binarios, dlos cuales,  “=”  es el únicdasignación simple, lodemás  sooperadores de asignaciócompuestos, puestque están conformadopomás dun símbolo, por ejempl+=” se compone  del operado+“ y eoperador “=.

 

Los seis primeros aceptan operandos de distinto tipomientras que los cinco últimos: <<=, >>=, &=, ^=  y |=, implican manejo dbitspolque sus operandodeben ser numero int en sus distintas variantes. El funcionamientde estooperadores sencuentrdescrito en la secciódoperadores dbits.

 

Lparte izquierda (que tiene quser una variablnconstante) adquiere el valoseñalado en la expresióde la derecha, pero se mantiene el tiporiginal de la variable de la parte izquierda. En caso necesari se realizunconversióde tipo (copérdiddprecisión en su casodel izquierdo al derecho.

 

Es necesariresaltar que el operadoC+de asignación simple (=) se distingude otros lenguajes comPascal quutilizan el símbolo :para este operador. Observtambién que la asignación simple (=)  utiliza  un  símbolo  distinto  del  operadorelacional  de  igualdad  (==)”. Además,  en  los operadores compuestndebe haber espaciodlform+=” y que el igual siemprva a la derecha del resto de operandos.

 

OPERADORES ARITMÉTICOS

 

Looperadores  aritméticos  se  usan  para  realizar  cálculos  y  operaciones  con  meros  reales  y punteros. Básicamentpermiten hacer cualquier operación aritméticque se necesite. Los operadores más comunes son:
 
 
 
Operador                          Acción                                Ejemplo                   Resultado
-
Resta           X = 5 - 3      X vale2
+
Suma            X = 5 + 3      X vale8
*
Multiplicación       X = 2 * 3      X vale6
/
División          X = 6 / 3      X vale2
%
Módulo           X = 5 % 2      X vale1
--
Decremento        X = 1; X--     X vale0
++
Incremento        X = 1; X++     X vale2
 
 

Loperaciómodulcorresponde a obtener el residude la divisióndmodque al dividir 5 entrtendremocomresultado 2 y comresidu1potanto 5 % 2 corresponde al 1 qusobrdla división exacta.

Es necesarihacer unobservación acercde los operadores de incremento y decrementoyqudependiendde su ubicaciócorespecto a la variable, se tienen acciones diferentes. Si el operador precede a la variable, se conoccompre-incremento o pre-decremento y se dice que el operador está en su formprefija. Por el contrario, si el operador esposterior a la variable se encuentra en la forma posfija y se lel lampos-incremento o pos-decrementsegún el caso.

 

Cuando  uoperadode incremento o  decremento  precede  a su  variable, se  llevará a  cabo  la operacióde incremento o ddecremento antes dutilizar el valor del operando, tal y comse muestren el siguientejemplo:

  
intx,y;
x=2004;
y=++x;
/*x e y valen 2005.*/
 
 

En el caso de los post-incrementos y post-decrementos pasa lo contrario: se utilizará evalor actual del operando y luegsefectuará la operación de incremento o decremento”.

 

intx,y
x=2004;
y=x++;
/*y vale 2004 y x vale 2005*/
 
 

Tal y como se presentó anteriormente, también existen peradorepara lopunteros, sin embargo  estosolo aplican para aquellos apuntadores a matrices, arreglos o listas de elementos, y aunque se muestran a continuaciónsexplicaran duna mejoforma en el material de apuntadores opunteros en c++.

 
 
 
Operador                                                     Acción                                                       Ejemplo
-
Desplazamiento descendente            pt1 - n
+
Desplazamiento ascendente            pt1 + n
-
Distancia entre elementos           pt1 - pt2
--
Desplazamientodescendente de1 elemento     pt1--
++
Desplazamiento ascendente de1 elemento      pt1++

 

OPERADORERELACIONALES

 

Looperadores relacionales, también denominadooperadores binarios lógicos y dcomparación, se utilizan parcomprobar la veracidad o falsedad ddeterminadas propuestas drelació(en realidad  se  trata  respuestas a preguntas). Las expresiones que los contienen se denominan expresiones relacionales. Aceptan diversos tipodargumentos, y el resultadoque es la respuesta a la pregunta, es siemprdel tipo cierto/falsoes decirproducen  un resultadbooleano.

 

Si la propuesta es cierta, eresultadetru(un valodistintde cero), si es falsa será false (cero). C+disponde los siguientes operadores relacionales:

 
 
 
Operador                    Relación                                 Ejemplo                        Resultado
< 
Menor
X = 5; Y = 3;      X vale 5 if(x< y)x+1;     Y vale 3
> 
Mayor
X = 5; Y = 3;      X vale 6 if(x> y)x+1;     Y vale 3
<=
Menor o igual
X = 2; Y = 3;      X vale 3 if(x<= y) x+1;     Y vale 3
>=
Mayor o igual
X = 5; Y = 3;      X vale 6 if(x>= y) x+1;     Y vale 3
==
Igual
X = 5; Y = 5;      X vale 6 if(x== y) x+1;     Y vale 5
¡=
Diferente
X = 5; Y = 3;      X vale 5 if(x¡= y) y+1;     Y vale 4
 
 
 
 

Compuedverse, todos ellosooperadores binarios (utilizan dooperandos), dlos cualesdode ellosode igualda:== y !=, y sirven parverificar la igualdad o desigualdad entre valores aritméticos o punteros.   Estodooperadores puedecomparar ciertos tipodpunteros, mientras que el resto de looperadores relacionales no pueden utilizarse con ellos.

 

Cualquierque sea el tipo de looperandos, podefiniciónuoperadorelacional, produce ubool (trufalsecomresultado, aunque en determinadas circunstancias puedproducirse una conversión  automática de tipo a valores in(si la expresiónes cierta y si es falsa).

 

En las expresiones relacionales E1 <operador> E2,  los operandodeben cumplir algunde las condiciones siguientes

 

·    E1 y Eson tipos aritméticos.

 

·    E1 y Eson punteros a versiones cualificadas o no cualificadas de tipocompatibles.

  

·    Unde ellos es upuntero a uobjetomientras que el otro es upuntero a unversión  cualificada o no cualificaddvoid.

·    Uno de los dos es un punteromientras que el otreun puntero nulconstante.

  

OPERADORELÓGICOS

 

Looperadores lógicoproducen uresultadbooleano, y sus operandos sotambién valores  lógicos o asimilables a ellos (los valores numéricoson asimilados acierto o falso según su valor sea cero o distinto de cero). Por el contrario, las operaciones entrbits producen valores arbitrarios.

 Looperadores lógicos son tresdos de ellos son binarios y el últim(negación) es unario:

  
 
Operador                   Acción                        Ejemplo                                     Resultado
&&
AND Lógico       A &&B
Si ambos son verdaderos se obtiene verdadero(true)
||
OR gico        A ||B   Verdaderosi algunoes verdader
!
Negación Lógica       !A              Negación de a
 
 

 AND lógico

 

Devuelvuvalológico true si ambooperandos son ciertos. En caso contrario el resultado es false. Loperatoria ecomo sigue: El primer operando (de la izquierda) es convertido a bool. Para ello, si es unexpresión, se evalúparobtener el resultado (estcomputaciópuede tener ciertoefectos  laterales). A continuación, el valor obtenido es convertido a bool cierto/falso siguiendo las reglas de conversión estándar.Si el resultado es false, el processdetiene y este es el resultado,sin que en estcaso sea necesarievaluar la expresióde la derecha (recuérdesque en el diseño dC+prima la velocidad).

 


Si el resultado del operando izquierdo es ciertoscontia con la evaluacióde la expresiódlderecha, qutambién es convertida a bool. Si el nuevresultado es true,entonces el resultaddel operadoes true. En caso contrarieresultades false.

 

El valom,que es interpretadcomupuntero al primer elementde la matriz, es transformado a ubool. Como es distinto de cero (neupunternulo) el resultado es cierto. A continuaciónevalor x es convertidtambién a bool. En estcaso la conversióproduce falsocon lo que estes el resultado del paréntesis de la sentencia if”.

 

 OR Lógico

 

Este operadobinaridevuelve true si algundlooperandos es cierto.  En cascontraridevuelve false. Este operador siguun funcionamiento análogo al anterior. El primer operando (izquierdo) es convertido  a  bool.  Para  ello,  si  es  una  expresión,  se  evalúa  para  obtener  el  resultado  (esta computaciópuedtener ciertoefectos laterales). Acontinuación el valor obtenido es convertido a bool cierto/falso siguiendo las reglas dconversión  estándar. Si el resultades true, el processe detiene y este es el resultado, sin que en estcaso senecesarievaluar la expresióde la derecha (recuérdese que en el diseño de C++ prima la velocidad).

 

Si el resultaddel operando izquierdo es false, se conticon la evaluación de la expresióde la derecha, qutambién es convertida a bool. Si el nuevresultado es true, entonces el resultaddel operadoes true. En caso contrariel resultades false.

  

  Negación Lógica

 

Este operador es denominadtambién Nlógico y srepresenta en el textescritpor la palabra inglesa NO(otros  lenguajes utilizan directamentestpalabrpara representar el operador en el código). El operando (qupuede ser una expresióque se evalúa a uresultado) es convertido a tipo bool, colque solpuede ser unde lovalores cierto/falso. Acontinuación el operadocambia su valor; Si es ciertes convertido a falso y viceversa.

 

Resultpotantoque el resultaddeste operador es siemprun tipbool, aunque al existir unconversión estándar por la quucero es convertido a false, y cualquier valodistintdcero a true, coloquialmente  se dicque estoperadoconvierte uoperando 0 en 1 y unno-cero en 0. En otras palabras: estoperadodevuelve cierto (true) sila expresión se evalúa a distintde cero,en caso contrario devuelvfalso (false).
S
E” es una expresión!E” es equivalente a(0==E)Comconsecuencia, las expresiones que siguen son equivalentes dos a dos:

   

STDIO.H

 Que significa "estándar entrada / salida " encabezado, es la encabezamiento en el C biblioteca estándar que contiene macro definiciones, constantes, y las declaraciones de funciones y tipos usados para la entrada de varios estándar y operaciones de salida. La funcionalidad que desciende de un "portátil / paquete de O ", escrita por Mike Leks en los Laboratorios Bell en la década de 1970. C + +, por razones de compatibilidad, incluye stdio.h así como un encabezado equivalentes en lo esencial, stdio, Que declara la stdio.h funciones y tipos dentro de la std espacio de nombres.

Las funciones declaradas en stdio.h son muy populares, ya que como parte de la biblioteca estándar de C, Se garantiza que funcione en cualquier plataforma que soporte aplicaciones de C. sobre una plataforma en particular puede , sin embargo, tienen razones para usar la plataforma de I / O rutinas , en lugar de la stdio.h rutinas.

Los programadores tienen que incluir la stdio.h cabecera en el código fuente para poder usar las funciones declaradas en el mismo:

Ejemplo:

 
# Include <stdio.h>
          Int principal (vacío)
          {
                   Int ch;
                   Mientras que ((ch = getchar ())! = FEO)
                              putchar (ch);
                              putchar ('\ n');
                              Volver 0;
          }

 conio.h

 

Es una C archivo de cabecera utilizado en la antigua MS- DOS compiladores para crear interfaces de usuario de texto. No se describe enEl lenguaje de programación C libro, y no es parte de la librería estándar de C, ISO C ni es requerido por POSIX.

Este encabezado declara varias funciones útiles para realizar la colección de " consola de entrada y salida "de un programa. La mayoría de los compiladores de C que se dirigen a DOS, Windows 3.x, Phar Lap, Dosx, OS / 2O Win3 tienen esta cabecera y el suministro de las funciones de librería asociada en la librería de C por defecto. La mayoría de los compiladores de C que se dirigen a UNIX y Linux No cuentan con el encabezado y no proporcionan las funciones de librería.

 

Funciones miembro

kbhit int (void ):

 

Determina si una tecla del teclado fue presionado.

 int getch (void ):

 

Lee un carácter directamente desde la consola sin tampón, y sin eco.

 getche int (void ):

 

Lee un carácter directamente desde la consola sin tampón, pero con eco.

ungetch int (int c ):

 

Pone el carácter c de nuevo en el buffer del teclado.

  cgets char * ( char * buffer ):

 

Lee una cadena directamente desde la consola.

  cscanf int ( char * formato , arg0 , argn ... ):

 

 

Lee formato valores directamente desde la consola.

 

Putch int (int c ):

 

Escribe un carácter directamente a la consola.

 

cputs int (string const char *):

 

Escribe una cadena directamente a la consola.

 

La iostream

La iostream es la biblioteca estándar en C++ para poder tener acceso a los dispositivos estándar de entrada y/o salida. En sus programas, si usted desea hacer uso de los objetos cin, cout, cerr y clog tendrá que incluir ( por medio de la directiva #include ) el uso de la biblioteca iostream. En la iostream se encuentran definidas las clases ios ( misma que es la base para las clases que implementen operaciones de entrada y/o salida de datos ), istream ( para operaciones de entrada ) y ostream ( para operaciones de salida ). Aparte de las clases mencionadas, en la iostream se encuentra una lista de variables y constantes ( atributos ) que son accesibles por el usuario a través del operador de ámbito ( :: ).
Streams automáticos
Si usted usa la directiva #include <iostream.h> o #include <iostream> en sus programas, automáticamente la iostream pone a su disposición los objetos cin, cout, clog y cerr en el ámbito estándar (std), de tal manera que usted puede comenzar a enviar o recibir información a través de los mismos sin siquiera preocuparse de su creación. Asi, un sencillo ejemplo del uso de los objetos mencionados se muestra en seguida.
// De nuevo con el hola mundo...
#include <iostream>
int main()
{
    std::cout << "Hola mundo";    // imprimir mensaje (en la pantalla)
    std::cin.get();    // lectura ( entrada del teclado )
    return 0;
}
Operadores de direccionamiento
Los operadores de direccionamiento son los encargados de manipular el flujo de datos desde o hacia el dispositivo referenciado por un stream específico. El operador de direccionamiento para salidas es una pareja de símbolos de "menor que" <<, y el operador de direccionamiento para entradas es una pareja de símbolos de "mayor que" >>. Los operadores de direccionamiento se colocan entre dos operandos, el primero es el Stream y el segundo es una variable o constante que proporciona o recibe los datos de la operación. Por ejemplo, en el siguiente programa y en la instrucción cout << "Entre su nombre: "; la constante "Entre su nombre: " es la fuente o quien proporciona los datos para el objeto cout. Mientras que en la instrucción cin >> nombre la variable nombre es el destino o quien recibe los datos provenientes del objeto cin.
// De nuevo con el hola mundo...
#include <iostream>
int main()
{
    char nombre[80];
    cout << "Entre su nombre: ";
    cin  >> nombre;
    cout << "Hola," << nombre;
    cin.get();
    return 0;
}
Observe que si en una misma línea de comando se desea leer o escribir sobre varios campos a la vez, no es necesario nombrar más de una vez al stream. Ejemplos:
cout << "Hola," << nombre;
cin >> A >> B >> C;
 

Cómo usar #include en C y C++

 La directiva de preprocesador #include se usa en los lenguajes C y C++para “incluir” las declaraciones de otro fichero en la compilación. Esta directiva no tiene más misterio para proyectos pequeños. En cambio, puede ayudar aprovechar bien esta directiva en proyectos con un gran número de subdirectorios.

El efecto de #include

Cuando el preprocesador encuentra una línea #include "fichero", entonces reemplaza esta línea por el fichero incluido. Así procede con todas las directivas de inclusión – también en aquellas anidadas en los fichero ya a su vez incluidos. Es decir, existe un sólo fichero grande tras la precompilación.

No obstante, esta unión de varios ficheros no tiene lugar físicamente. Lo que sucede es que se interrumpe la compilación del fichero actual, se compila el fichero incluido y, tras compilarlo, se continúa con el primero. Por eso, el compilador puede decirnos, en qué fichero tuvo lugar un error de compilación.

En cambio, conviene tener esta idea del fichero único en mente, porque a veces ayuda a encontrar errores. Uno muy típico es olvidarse el punto y coma tras la declaración de una clase.

En este caso hay una declaración de clase en el fichero incluido:

class MiClase {}
En el segundo puede haber algo así:
1
2
#include "mi_clase.h"
MiClase miInstancia;

En este ejemplo, el compilador se quejará de que aquí no se puede definir un nuevo tipo en la línea de MiClase miInstancia aunque esta línea es correcta. El error verdadero es la falta del ; en el fichero incluido. Lo que el compilador realmente ve es
class MiClase {} MiClase miInstancia;
No obstante, el programador no lo ve, porque el código está distribuido sobre dos fichero y el error se produce en el correcto.
La precompilación sólo modifica el código a nivel textual. No entiende del sintaxis del lenguaje. Por eso es posible distribuir el código de forma arbitraria. Por ejemplo, el siguiente ejemplo compilaría.
Fichero incluido


{
    int
Fichero principal




void main(void)
#include "fichero_incluido"
    a;
}
Esto es así porque el compilador ve el conjunto





void main(void)
{
    int
    a;
}

La posición del #include

Lo habitual es posicionar las inclusiones al inicio de cada fichero. Esto tiene sentido, porque se suele requerir declaraciones básices antes de declarar clases más complejas. Mi lugar preferido en los ficheros de cabecera es tras el guardián de inclusión múltiple.

1
2
3
4
5
6
7
// Guardian de inclusión múltiple
#ifndef FICHERO_YA_INCLUIDO
#define FICHERO_YA_INCLUIDO
 
#include "declaraciones_basicas.h"
 
#endif

Así se evita que un compilador poco sofisticado abre otra vez el mismo conjunto de ficheros cuando se inluye un fichero de cabecera dos o más veces.

En los ficheros de definición (los .c o .cpp), los guardianes de inclusión múltiple no hacen falta. No obstante, puede haber una restricción importante cuando se usan cabeceras precompiladas. En este caso, todos los ficheros fuente deben incluir primero el mismo fichero de cabecera – que es aquello que define la cabecera precompilada. El compilador de C++ de Borland permite varios ficheros de cabecera para la definición de una cabecera precompilada. Estas inclusiones deben ser lor primeros ficheros incluidos y se deben incluir en el mismo orden.

Puede darse el caso de no poner las inclusiones en el inicio de un fichero. Esto es frecuente en los fichero que se podrían denominar “programados en directivas de precompilación”. Normalmente se trata de ficheros de cabeceras con definiciones muy básicas como ajustes a la plataforma empleada. Por ejemplo, en medio de un fichero “definiciones_basicas.h” puede haber unas líneas

1
2
3
4
5
6
7
8
9
#if PLATAFORMA_ES_LINUX
#include "funcionalidad_gratis.h"
#elif PLATAFORMA_ES_MICROSOFT_WINDOWS
#include "funcionalidad_cara.h"
#elif PLATAFORMA_ES_APPLE
#include "funcionalidad_muy_cara.h"
#else
#error Esta plataforma no está soportada
#endif
La diferencia entre “” y <>

La directiva #include existe en dos versiones. En una se pone el nombre de fichero entre comillas, en la otra entre paréntesis angulares (el signo menor y mayor como “comillas”).

1

2

#include "fichero_con_comillas.h"

#include <fichero_entre_menor_y_mayor.h>

La versión con los paréntesis angulares busca los ficheros en todos los directorios que se han especificado en la llamada al compilador – normalmente con la opción “-I”. Estos directorios se suelen rastrear por el fichero incluido en el orden en que aparecen en la línea de comando.

Cuando se incluye un fichero entre comillas, entonces el compilador busca este fichero primero en el mismo directorio que el fichero actualemente compilado y después en los demás directorios. Es decir, la versión con comillas se diferencia de la versión con paréntesis angulares únicamente por buscar primero en el directorio del fichero compilado. Tras no encontrarlo ahí actúa igual.

Esto muchas veces no es ninguna diferencia, ya que se suelen especificar todos los directorios en la línea de comando del compilador. Así no se suele dar el caso que se puede incluir un fichero con comillas pero no con paréntesis angulares.

Más significativo es el comportamiento ante ficheros con el mismo nombre en distintos directorios. En este caso la versión con comillas da preferencia sobre el fichero en el mismo directorio y esto suele ser el mejor acertado. Aunque sea preferible nombrar ficheros de forma única en un proyecto, es posible que no se pueda evitar tener dos ficheros con el mismo nombre cuando se incluyen varias bibliotecas de terceros.

De ahí se puede deducir que es imperativo incluir cabeceras de la misma biblioteca con comillas. De esta forma se puede asegurar que las cabeceras de una biblioteca se incluyan entre si aunque haya otros con el mismo nombre en uno de los directorios especificados en la línea de comandos.

Además, incluir con comillas puede dar al programador un significado adicional: que este fichero está bajo la custodia de mi equipo de desarrollo. Las cabeceras incluidas con paréntesis angulares son de bibliotecas de terceros. Los primeros ficheros puedo modificar si hace falta, los segundos no.

El orden de las inclusiones

El orden de las directivas #include no importa cuando todos los identificadores del programa son únicos. No obstante, a veces no lo son yconviene generar el error “este identificador ya existe” en nuestro código y no en el código de una biblioteca estándar.

Esto se consigue incluyendo primero las caberas de terceros. Si aparece un error de identificador doble, entonces aparece en la segunda definición – que es la nuestra – y ahí podemos cambiar el nombre del objeto sin problema.

En proyectos realmente grandes puede haber varias bibliotecas de distintas dependencias. Por la misma razón de generar los errores de identificadores dobles en el código más fácilmente modificable, conviene incluir las bibliotecas más básicas primero. Dentro del mismo nivel podemos ordenar los ficheros incluidos de forma alfabética. Esto ayuda a encontrar inclusiones que faltan o sobran.

El siguiente código muestra una secuencia de inclusiones para un fichero “definicion_de_mi_clase.cpp”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Primero se debe incluir la cabecera de precompilación
#include "cabecera_de_precompilacion.h"
 
// Segundo, incluir la cabecera correspondiente
// a este fichero de implementación.
// Esto deja más claro, que es la
// clase que se implementa aquí.
#include "definicion_de_mi_clase.h"
 
// A continuación inclusiones de la biblioteca estándar.
// Se usan paréntesis angulares.
#include <vector>
 
// Inclusiones de otras bibliotecas de terceros
#include <wx.h>
#include <gl.h>
 
// Inclusiones de subbibliotecas básicas de
// mi proyecto con comillas
#include "mis_definiciones_basicas.h"
 
// Luego las demás inclusiones de mi proyecto
#include "clases_auxiliares.h"
#include "más_definiciones_para_mi_clase.h"
 
 
 
USING NAMESPACE STD;
El namespace en C++ para espacios de nombres
El lenguaje de programación C utiliza palabras reservadas, como por ejemplo: if, for, while, int, float, … etc las cuales se encuentran dentro del lenguaje.
Al ser C++ una ampliación del lenguaje C, es necesario agregar nuevas palabras reservadas. Éstas palabras reservadas están en un “namespace” (espacio de nombres). Para ser mas específicos, las palabras reservadas cout y cin están el namespace std (standard).
En caso de que no declaremos el uso del namespace std cada vez que quisieramos usar cout, tendríamos que escribir
1
std::cout << "Hola mundo";
El modo correcto para la declaración del uso del namespace es:
1
using namespace std;
Quedando nuestro programa en la forma:
1
2
3
4
5
6
7
8
9
#include <iostream>
 
usging namespace std;
 
int main()
{
    cout << "Hola mundo";
    return 0;
}
 
 
 
 


Estructura de un programa en C++
Para darnos una idea chequemos el siguiente programa
 
 
//Mi primer programa en C++
 
# include <iostream>
 
using namespace std;
 
int main (){
 
count << "hello World";
 
return 0;
}
 
El programa anterior es t´ıpico de los programadores aprendices, el resultado de su impresion
en pantalla es la frase:
”hello World”
Es uno de los m´as simples programas que pueden estar escritos en C + +, pero ya contiene
los componentes fundamentales que todos los programas escritos en C + +. Vamos a ver
l´ınea por l´ınea en el c´odigo lo que hemos escrito:
 
//Mi primer programa en C++
Se trata de una l´ınea de comentario. Todas las l´ıneas que comiencen con dos signos barra
se consideran comentarios y no tienen ning´un efecto sobre el comportamiento del programa.
El programador puede usar para incluir breves explicaciones o alegaciones dentro del c´odigo
fuente en s´ı. En este caso, la l´ınea es una breve descripci´on de lo que es nuestro programa.
 
# include <iostream>
Las l´ıneas que comienza con un s´ımbolo de sostenido # son directivas para el preprocesador.
En este caso, la directiva # include <iostream>le dice al preprocesador que incluya
el iostream est´andar de archivo. Este archivo espec´ıfico (iostream) incluye las declaraciones
de la norma b´asica de entrada y salida de la biblioteca de C++.
 
using namespace std;
Todos los elementos del modelo de librer´ıa de C++ se declaran dentro de lo que se denomina
un espacio de nombres. Por lo tanto, para poder acceder a su funcionalidad declaramos
con esta expresi´on que vamos a utilizar estas entidades. Esta l´ınea es muy frecuente en los
programas que utilizan la biblioteca est´andar, y de hecho ser´a incluido en la mayor´ıa de los
c´odigos.
 
int main ()
Esta l´ınea se corresponde con el comienzo de la definici´on de la funci´on principal. La
funci´on principal es el punto por donde todos los programas inician su ejecuci´on, independientemente de su ubicaci´on dentro del c´odigo fuente. No importa si hay otras funciones con otros nombres definidos antes o despu´es de las instrucciones que figuran dentro de esta funci´on, ya que por definici´on ser´a siempre la primera en ser ejecutada. Por esa misma raz´on, es esencial que todos los programas tengan una funci´on principal.
 
{ }
Lo que se contiene dentro de las llaves que delimitan la funci´on es lo que hace cuando se ejecuta. En un programa los limites son marcados por el simbolo “ las llaves “, es decir { }
 
count <<"hello World";
Esta l´ınea es una declaraci´on de C++, en t´erminos simples es una expresi´on que produce
alg´un efecto. De hecho, esta declaraci´on lleva a cabo la ´unica acci´on que genera un efecto
visible en nuestro programa. Representa el flujo de salida y su objetivo es insertar una
secuencia de caracteres ( ”hello World”) en el flujo de salida est´andar (pantalla)
 
return 0;
Esta declaraci´on hace que la funci´on pricipal termine. Un c´odigo de retorno es 0, cuando
la funci´on principal interpreta de manera general que el programa trabaj´o como se esperaba,
sin ning´un error durante su ejecuci´on. Esta es la forma m´as habitual para poner fin a un
programa C++ en la consola.
 
Signos de puntuación.
 Conocidos también como puntuadores, son los que se citan a continuación. La mayoría de ellos tienen un doble uso y en ocasiones funcionan también como operadores
[ ] ( ) { } , ; : ... * = # ! % ^ & – + | ~ \ ' " < > ? . / 

 
 
Signos de puntuación o puntuadores
Corchetes 

Los corchetes indican subíndices de matrices uni y multi dimensionales.
char ch, str[] = "Cadena de caracteres";
int mat[3][4]; // Matriz de 3 x 4
ch = str[3]; // cuarto elemento
Paréntesis

Los paréntesis sirven para agrupar expresiones; alterar la precedencia normal de los operadores y su asociatividad; aislar expresiones condicionales; indicar llamadas a funciones, y señalar los parámetros de estas. La sintaxis de C++ exige indefectiblemente el uso de paréntesis en múltiples ocasiones. En los ejemplos que siguen se muestran algunos usos.
d = c * (a + b); // modifica la precedencia normal
if (d == z) ++x; // imprescindible en la sentencia if
for (x =1; x<10; x++) // imprescindible en la sentencia for
func(); // señala llamada a función
int func(); // declara función
int (*fptr)(); // declara puntero a función
fptr = func; // asigna valor al puntero.
Observe que en el último caso, la ausencia de paréntesis equivale a &func 
Se recomienda el uso de paréntesis en las macro-definiciones para evitar problemas potenciales en la expansión. Por ejemplo:
#define CUBO(x) ((x) * (x) * (x))
Llaves

Los pares de llaves { } señalan el comienzo y final de una sentencia compuesta, es decir, bloques de código (grupos de sentencias que son tratadas como una unidad). Constituyen el segundo paso (después de las sentencias) en la estructuración y compartimentación del código C++:
Un bloque es una sentencia compuesta, se trata de una sucesión (que puede estar vacía) de sentencias delimitadas por un par de corchetes { }.
Desde el punto de vista sintáctico, un bloque puede ser considerado como una sola sentencia. Juega un papel importante en el ámbito (scope) de los identificadores, puesto que un identificador declarado dentro de un bloque tiene un ámbito que comienza en el punto de la declaración y termina en el corchete final.
Sin embargo, el mismo identificador puede ser ocultado por otro del mismo nombre declarado en un bloque interior al primero.
Dentro de las posibilidades de memoria, los bloques pueden ser anidados a cualquier nivel (profundidad).
Después del corchete de cierre} no se necesita el punto y coma; de fin de sentencia
if (statement)
{...}; // punto y coma ilegal !!
else
Nota: las llaves sirven también en 
C++ para otros usos distintos de la pura delimitación de bloques de código. Por ejemplo, en la definición de estructuras, uniones y clases, en cuyo caso si puede ser necesaria la inclusión del punto y coma después de la llave de cierre}. 
Coma

La coma como puntuador se utiliza para separar los elementos en las listas de parámetros de una función:
void func(int n, float f, char ch);
La coma se usa también como un operador en las expresiones con coma. Es posible mezclar los dos usos (separador en lista de parámetros y operador), pero deben usarse paréntesis para distinguirlos.
Punto y coma

El punto y coma; es el signo de fin de sentencia. Cualquier expresión legal C++ terminada por un punto y coma (incluyendo la expresión vacía - un punto y coma aislado-) es interpretado como una sentencia, conocidas como sentencia-expresión. La expresión se evalúa y el resultado se descarta; si no tiene efectos colaterales, C++ la ignora.
a + b; // evalúa a + b, descarta el resultado
++a; // efecto lateral en 'a', se descarta el valor ++a
; // expresión vacía = sentencia nula
El punto y coma se usa a veces para crear sentencias nulas:
for (i = 0; i < n; i++) 
{
 ; // sentencia nula (hacer nada)
}
Dos puntos

Los dos puntos se utilizan para señalar sentencias etiquetadas
comienzo: x=0; // comienzo es la etiqueta
goto comienzo;
Puntos suspensivos
Los puntos suspensivos, también llamados elipsis, son tres puntos, seguidos y sin espacios intermedios; tienen varios usos enC++.
Se utilizan en las relaciones de argumentos formales de las funciones, cuando estas pueden aceptar un número variable de argumentos o pueden ser de 
tipo variable. Por ejemplo:
void func(int n, char ch,...);
Este prototipo de función declara que func está definida de modo que debe ser llamada con, al menos, dos argumentos: un int y un char. Además puede tener un cierto número de argumentos adicionales (puede omitirse la coma antes de la elipsis).
Se utiliza también para indicar que un manejador de excepciones ("handler") puede capturar una excepción de cualquier tipo.
Asterisco
El asterisco * puede ser utilizado en C++ de tres formas: como una declaración de tipo de variable (variable de puntero); como operador de indirección (también llamado operador de referencia y como operador de multiplicación.
Ejemplos:
char* char_ptr; // declara puntero a carácter
x = *int_ptr; // operador de indirección
l = 2 * 3.14 * r; // operador multiplicación
Signo igual
El signo igual = separa la declaración de variables de las listas de inicialización:
char array[5] = { 1, 2, 3, 4, 5 };
Recordemos que, al contrario que en 
C, donde las declaraciones no pueden estar precedidas por ningún código, deben ir al principio, en C++, las declaraciones de cualquier tipo pueden aparecer en cualquier punto del código (con algunas restricciones).
En la lista de argumentos de una función, el signo igual indica el valor por defecto para un parámetro:
int f(int i = 0) { ... } // el valor por defecto de k es cero
El signo igual es también utilizado como operador de asignación 
Ejemplo:
x = y;
z += 5;
Almohadilla
Si la almohadilla # aparecen en el primer carácter (distinto de espacio en blanco) de una línea, señala directivas de preproceso. En este caso, es un operador específico de la fase de preproceso del código fuente. Significa una opción del preprocesador que no tiene porqué estar asociada necesariamente a generación de código.
Las directivas se sitúan generalmente al comienzo del programa, aunque legalmente pueden aparecer en cualquier punto.
Ejemplos de directivas de preproceso:
# (null directive)
#define NULO \0
#include <stdio.h>
 
Peculiaridades de C

Una de las cosas importantes de C que debes recordar es que es Case Sensitive (sensible a las mayúsculas). Es decir que para C no es lo mismo escribir Printf que printf.

Conviene indicar también que las instrucciones se separan por ";". 
 
 

VARIABLES Y TIPOS DE DATOS.

 Una variable es un espacio de memor´ıa reservado en el ordenador para contener valores que pueden cambiar   durante la ejecucio´n  de un programa. Los tipos  que se le asignen  a estas determinan co´mo se manipular´a la informaci´on contenida en ellas.

 Cada  variable  necesita un identificadoque la distingue de las dema´sUidentificador v´alido es una secuencia de una o m´as letras, d´ıgitos o guiones bajosrecordando que no deben coincidir con palabrareservadas   del lenguaje, deben comenzapor una letra y adem´as tomar en cuenta que C++ hace diferencia entre mayu´sculas y minu´sculas.

 Lavariables  que se pueden  presentar en un programa  son de losiguientes tipos:

 1.Variables Locales. Se definen solo en bloque en el que svayan  a ocupar, de esta manera evitamos tener variables  definidaque luego no se utilizan.

 2.Variables GlobalesNson lo m´as recomendable, pues su existencia atenta contra la comprensio´n del coodigo y su encapsulamiento.

 3.  Variables Est´aticas. Se tienen que inicializar  en el momento en que se declaran,  de manera  obligatoria.

 Ahora hablemos de los tipos de datos que reconoce C++Estos definen el modo en que se usa el espacio (memoria)   en los programasAl especificar un tipo de datos, estamos indicando al compilador   como crear un espacio de almacenamiento en particular, y tambi´en como manipular este espacio. Un tipo de dato define el posible rango de valores que una variable  puede tomaal momento de ejecucio´n del programa  y a  lo largo de toda la vida u´til  del propio programa.

 Los tipos de datos pueden  ser predefinidos o abstractosUn tipo de dato predefinido es intr´ınsecamente comprendido por el compilador.  En contraste, un tipo de datos definido por el usuario es aquel que usted o cualquier  otro programador crea como una  clase, que comu´nmente son llamados  tipos de datoabstractos.

  Los tipos de datos m´as comunes en C+son:

 
TipdDato
unsigned  char
EspacieMemoria
8bits
Rango
0a255
char
8bits
-128a127
shortint
16bits
-32,768a32,767
unsigned  int
32bits
0a4,294,967,295
int
32bits
-2,147,483,648a2,147,483,647
unsigned  long
32bits
0a4,294,967,295
enum
16bits
-2,147,483,648a2,147,483,647
long
32bits
-2,147,483,648a2,147,483,647
float
32bits
3.4x10-38a3.4x10+38(6dec)
double
64bits
1.7x10-308a1.7*10+308(15dec
longdouble
80bits
3.4x10-4932a1.1x10+4932
void
sinvalor
 
 
 
 
 
Conversi´on  de  Tipos
 
 
Cuando nuestro programa contiene operaciones binarias cooperandos de distintos tipos, estose  convierten a un tipo en comu´n, en general para conversiones expl´ıcitas C++ hace uso del casting, lo que nopermite tener m´as presicioon en aquellos casoen loque el resultado de la operacio´n no es un int y la variuable  receptors´ı lo es.
 
Algunareglaque controlan estas conversiones son lasiguientes:
 
 
 
1.  Cualquier  tipo enterpequen˜o como char o shorser´a convertido a int o unsigned  int.
 
2.  Si algu´operando  es de tipo longdouble, el otrse convertir´a a longdouble.
 
3.  Si algu´operando  es de tipo double, el otrse convertiraa a double.
 
4.  Si algu´operando  es de tipo float, el otrse convertira a float.
 
5.  Si algu´operando  es de tipo unsigned  long long,el otrse convertira a unsigned  long long.
 
6.  Si algu´operando  es de tipo long long, el otrse convertir´a a long long.
 
7.  Si algu´operando  es de tipo unsigned  long, el otrse convertir´a a unsigned  long.
 
8.  Si algu´operando  es de tipo long, el otrse convertir´a a long.
      9.  Si algu´operando  es de tipo unsigned  int, el otrse convertir´a a unsigned  int.
 
 
 
Sentencias
 
Las expresiones de C son unidades o componentes elementales de unas entidades de rango superior que son las sentencias. Las sentencias son unidades completas, ejecutables en sí mismas. Ya se verá que muchos tipos de sentencias incorporan expresiones aritméticas, lógicas o generales como componentes de dichas sentencias.
 
 
 
SENTENCIAS SIMPLES
 
Una sentencia simple es una expresión de algún tipo terminada con un carácter (;). Un caso típico son las declaraciones o las sentencias aritméticas. Por ejemplo:
 
 
float real;
espacio = espacio_inicial + velocidad * tiempo;
 
 
 
SENTENCIA VACÍA Ó NULA
 
En algunas ocasiones es necesario introducir en el programa una sentencia que ocupe un lugar, pero que no realice ninguna tarea. A esta sentencia se le denomina sentencia vacía y consta de un simple carácter (;). Por ejemplo:
 
;

SENTENCIAS COMPUESTAS O BLOQUES
 
Muchas veces es necesario poner varias sentencias en un lugar del programa donde debería haber una sola. Esto se realiza por medio de sentencias compuestas. Una sentencia compuesta es un conjunto de declaraciones y de sentencias agrupadas dentro de llaves {...}. También se conocen con el nombre de bloques. Una sentencia compuesta puede incluir otras sentencias, simples y compuestas. Un ejemplo de sentencia compuesta es el siguiente:
{
   int i = 1, j = 3, k;
   double masa;
   masa = 3.0;
   k = y + j;
}
 
Entrada estándar (cin)
C++ permite la entrada de datos a través del flujo de entrada cin.      El objeto cin es un objeto predefinido que corresponde al flujo de entrada estándar. Este flujo representa los datos que proceden del teclado. El operador ">>" se denomina de extracción o de lectura. Toma el valor del objeto flujo de su izquierda y lo sitúa en la variable situada a su derecha.
por ejemplo:
 
Int años;
Cin >> años;
 
 
La primera declaración declara una variable de tipo int llamada años, y el segundo espera una entrada de cin (desde el teclado) para almacenarlo en esta variable entera.
Cin solo puede procesar la entrada del teclado una vez que la entrada de la return haya sido presionada. Por lo tanto, incluso si usted solicita un solo carácter,  la extracción del cin no tratara la entrada hasta que el usuario presione la tecla del return después que el carácter haya sido ingresado.. Usted siempre debe considerar el tipo de la variable que estee usando como un contenedor de las extracciones cin. Si usted solicita un número entero deberá recibir un número entero, si usted solicita un carácter y si solicita una cadena de caracteres usted deberá ingresar una cadena de caracteres ejemplo:
 
#include<iostream>
using namespace std;
int main()
{
//delaracion de variables    
    const float pi=3.1416;
    float L, Radio;
//solicitar datos
    cout<<"Ingresa el Radio: ";
    cin>>Radio;
//efectuar operación
    L=2*pi*Radio;
//mostrar datos
    cout<<"La Longitud es "<<L<<endl;
    system("pause");
}

Salida estándar (cout)
Los valores de variables se pueden enviar a la pantalla empleando cout. Es posible enviar a la pantalla cualquier combinación de variables y cadenas.
Cout es usado conjuntamente con el operador de inserción, que es escrito como << (dos signos menores).
 
 Ejemplo:

Cout << "sentencia de salida "; // imprime sentencia de salida cout << 18; // imprime 18 en pantalla
Cout << x; // imprime el contenido de x

Note que la sentencia en la primera instrucción está incluida entre dobles comillas (") porque es una cadena de caracteres. Por ejemplo, estas dos sentencias tienen resultados muy diferentes:

 Cout << "te quiero"; // imprime te quiero
Cout << te quiero; // imprime el contenido de la variable te quiero

Note que la sentencia que la sentencia en la primera instrucción está incluida entre (“) porque es una cadena de caracteres
 
El operador de inserción (<<) puede ser usado más de una vez en una sentencia simple:

Cout << "Hola " << "yo soy " << "una sentencia C++";

(Y la pantalla muestra hola yo soy una sentencia c++.)
 
 
 Algunas secuencias de escape:
\n nueva línea
\t tabulación horizontal.
\\ Diagonal invertida
\” comillas dobles
Ejemplo:
// Envía una línea en blanco a la salida estándar
//(pantalla)
Otra forma de enviar un salto de línea es la utilización de endl.
// Envia una línea en blanco a la salida estándar (pantalla)
Cout << endl;

Ejemplo:

#include<iostream>
Using namespace std;
Int main ()
{
//declaración de variables    
     String nombre;
     Int edad;
     Float estatura;
     Float peso;
     String correo;
//solicitar datos
Cout<<"Ingresa tu nombre: ";
Cin>>nombre;
Cout<<"Ingresa tu edad: ";
Cin>>edad;
Cout<<"Cuanto mides: ";
Cin>>estatura;
Cout<<"Cuanto pesas: ";
Cin>>peso;
Cout<<"Cuál es tu correo: ";
Cin>>correo;
//mostrar datos
cout<<"Hola "<<nombre<<" como te va"<<endl;
cout<<"Tu edad es "<<edad<<" años"<<endl;
cout<<"Tu estatura es "<<estatura<<" m"<<endl;
cout<<"Tu peso es "<<peso<<" kg"<<endl;
cout<<"Tu correo es "<<correo<<endl;
cout<<(8<10)<<endl;
     system("pause");
}
 
 
 
Usos de printf() y scanf()
 
La funcion PRINTF()
se usa para la salida; en forma similar, la funcion SCANF() se usa para la entrada. En sentido tecnico, estas funciones no son parte del lenguaje C, sino del sistema C; residen en una biblioteca estandar y estan disponibles para usarlas donde quiera que haya un sistema C. Ambas funciones tienen una lista de parametros con dos partes:
 
        string_de_control    y     lista_de_argumentos
La primera es un string y puede contener especificaciones de conversion o formatos. Una especificacion de conversion se inicia con un caracter % y termina con un caracter de conversion; por ejemplo, en el formato %d la letra d es el caracter de conversion y permite imprimir el valor de una expresion como un entero decimal. Para imprimir las letras ABC en la pantalla, podria usarse la proposicion
        printf("ABC");
Otra manera de hacer esto es mediante la proposicion
        printf("%s", "ABC");
El formato %s hace que el argumento "ABC" se imprima en el formato de un string de caracteres. Esto mismo puede realizarse tambien con la proposicion
        printf("%c%c%c", 'A', 'B', 'C');
Los apostrofos que encierran cada letra se emplean para designar constantes de caracteres; de acuerdo con esto, `A` es la constante de caracter que corresponde a la letra A mayuscula. El formato %c imprime el valor de una expresion como un caracter. Por ejemplo
        char c1, c2, c3;
 
        c1 = 'A';
        c2 = 'B';
        c3 = 'C';
        printf("%c%c%c", c1, c2, c3);
imprimira de nuevo las letras ABC en la pantalla.
Ahora veamos los caracteres de conversion:
 
        c   caracter
        d   decimal
        e   número de punto flotante en notación científica
        f   número de punto flotante
        g   en el formato-e o el formato-f, el que sea más corto
        s   string
 
La funcion scanf()
es analoga a la funcion printf(), pero se usa para la entrada. Su primer argumento es un string de control con formatos que corresponden a las diferentes formas en que pueden interpretarse los caracteres en la entrada como valores para los diferentes tipos de variables. La lista de argumentos esta formada por DIRECCIONES de variables. El simbolo & representa al operador de direccion; por ejemplo, la proposicion
        scanf("%d", &x);
contiene el formato %d, el cual provoca que scanf() interprete los caracteres de entrada como un entero decimal y que coloque el valor en la direccion x. La funcion scanf() puede usarse para convertir cadenas de digitos decimales en valores enteros y almacenarlos en el lugar apropiado.
Ahora veamos los caracteres de conversion:
 
        c   caracter
        d   decimal
        f   número de punto flotante (float)
       lf   numero de punto flotante (double)
        s   cadena de caracteres (string)

Veamos un ejemplo.

        #include <stdio.h> /* Estándar Input/Output */
        main() {
            int    x;
            char   c;
            float  y;
            double z;
             printf("\nIngrese un caracter : ");
 
            scanf("%c", &c);
            printf("\nIngrese un int : ");
            scanf("%d", &x);
            printf("\nIngrese un float : ");
            scanf("%f", &y);
            printf("\nIngrese un double : ");
            scanf("%lf", &z);
            printf("\n\nLos datos que ud. ingreso fueron :\n");
            printf("%c  %d  %e  %e\n\n", c, x, y, z);
         }
 
 
Sentencia  if
 
 
La sentencia if elige entre varias  alternativas en base al valor de una  o m´as expresiones booleanas.
 
Sintaxis:
 
if( <expresio´on booleana>)
<bloque a ejecutar cuando  la expresi´on es verdadera>
 
else
 
<bloque a ejecutar cuando  la expresi´on es falsa>
 
La sentencia else es opcional,  puede  utilizarse o no. En el caso de no utilizarlo, cuando la  expresi´on evaluada   sea  falsa  la  ejecucio´n continuara´ con  la  sentencia inmediatamente posterior al if.
 
 
 
 
Comparaciones en  C++
 
 
En C++ las comparaciones  se especifican mediante el operador  ==, en primera  posici´on la  constante y como segundo  mienbro  de la igualdad  la  variable.  Dicha  comparacio´n nos regresar´aun booleano.
 
 
 
if ( constante  == variable){  }
 
 
 
En las asignaciones  se debe evitar la conversio´n expl´ıcita de tipos de datos. Se aconseja no hacer asignaciones mu´ltiples, ya que estas dan a lugar a actuaciones err´oneas. En general las sentencias de asignaci´on tienen la forma:
 
 
tipo  variable;
variable  = expresi´on;
 
 
 
   Sentencia  Switch
 
 
En casos en los que el programa  presenta varias elecciones despu´es de checar un expresi´on mu´ltiple o multialternativa, donde el valor de una expresi´on determina qu´e sentencias ser´an ejecutadas es mejor utilizar una sentencia switch.
 
Esta estructura ocupa la palabra reservada  break que permite que el flujo del programa se detenga justo  despu´es de la ejecucio´n de la sentencia anterior a ese break,  pidiendo  que se ejecuten las sentencias correspondientes a las siguientes alternativas de switch.
 
Por  otro lado default es opcional  y engloba un conjunto  de sentencias que se ejecutan en caso de que  ninguna  de las alternativas del switch tenga un  valor  que  coincida  con el resultado de evaluar  la expresi´on del selector.
 
 
switch(var  int  o  char)
{
case const1:  instrucciones;
break;
 
case const2:  instrucciones;
break;
 
default:  instrucciones;
};
 
Sentencia For
 
La sentencia for se usar´a para  definir un ciblo en el que una  variable  se incrementa de manera  constante en cada  iteracio´n y la finalizaci´on del ciblo se determina mediante una expresi´on constante. Como contador en for se utilizar´an preferiblemente variables de un solo caracter como i, j, k, declarandolas dentro del mismo ciclo.
 
Su formato general es:
 
 
for  (inicializacio´n;  condici´on;  incremento)
{  instruccio´n(es);  };
 
 
 
 Sentencias  While y do  While
 
 
Al comenzar  un  ciclo while o  do...while la expresi´on de control debe  tener un  valor claramente definido, para  impedir  posibles indeterminaciones o errores de funcionamiento.
 
La sentencia while se usar´a para  definir un ciclo en el que la condici´on de terminacio´n se evalu´a al principio  del mismo.
 
Su formato general es :
 
 
cargar  o  inicializar  variable  de  condici´on;
 
while(condicio´n)
{
 
grupo  cierto  de  instrucciones;
instruccio´n(es)  para  salir  del  ciclo;
 
};
 
 
La sentencia do...while se usar´a para  definir un ciclo en el que la condici´on de termina- ci´on se evaluara´ al final del mismo.
 
Su formato general es:
 
 
cargar  o  inicializar  variable  de  condici´on;
 
do  {
 
grupo  cierto  de  instruccio´n(es);
instruccio´n(es)  de  rompimiento  de  ciclo;
 
}  while  (condicio´n);
 
 
 
   Sentencia  exit  y return
 
 
La sentencia exit finaliza la ejecucio´n de un proceso de manera  inmediata, forzando  la vuelta al sistema operativo. No se aconseja su utilizacio´n en cualquier parte del co´digo, siendo preferible controlar el flujo en el proceso mediante bucles condicionales y devolver el control mediante la sentencia return.
 
La sentencia return se utiliza para  salir de una  funcio´n o procedimiento, volviendo  al punto en el cual se llamo´ a dicha funcio´n o procedimiento. En el co´digo hay que minimizar la utilizacio´n de return, s´olo tendr´ıa que aparecer  una vez en cada funcio´n o procedimiento, al final del mismo, de manera  que se tenga un s´olo punto de entrada a la funcio´n y un solo punto de salida de la misma.
 
 
 
   Algunos ejemplos
 
 
A continuaci´on te presentamos algunos ejemplos en donde se implementan las sentencias del lengua je C++.
 
  
1.  Este programa  cuenta numeros  en intervalos de ocho
 
 
#include  <iostream>
#include  <stdlib.h>
 
using  namespace  std;
 
int  main()
{
int  numero,contador,sumador;
sumador=contador=0;
do
{
cout  << "Introduzca  un  n´umero  mayor  que  0  y  menor  que  500:  ";
cin  >> numero;
}while(numero  < 0  || numero  > 500);
// La  condici´on  controla  el  intervalo  establecido.
 
//Controla  que  no  entren  n´umeros  con  diferencia  inferior  a  ocho  hasta  500  y  no  superior. if(numero<=492)
{
for(numero;numero<500;numero+=8)
{
sumador  = sumador  + numero; contador  = contador  + 1; cout  << numero  << " , " ;
}
}
cout  << "\nEsta  es la  suma:  " << sumador  << endl;
cout  << "El  n´umero  total  hasta  500  separado  ocho  posiciones  es:  " <<
contador  << endl; system("PAUSE"); return  0;
}
 
  
 
2.  La  salida  de  este  programa  es una  calculadora  de  operaciones  ba´sicas,  mediante  la implemenatacio´n de la sentencia Switch.
 
#include<iostream>
 
using  namespace  std;
 
int  main(int  argc,  char  *argv[])
{
int  a,  b;
char  oper;
 
cout  << "Introduzca  la  operacion  a  realizar  usando espacios:\n\n";
cin  >> a  >> oper  >> b;
 
switch(oper)
{
case ’+’:  cout  << a  << oper  << b  << " = " << a  + b  << endl;
break;
case ’-’: cout  << a  << oper  << b  << " = " << a  - b  << endl;
break;
case ’*’:  cout  << a  << oper  << b  << " = " << a  *  b  << endl;
break;
case ’/’: cout  << a  << oper  << b  << " = " << a  / b  << endl;
break;
case ’%’:  cout  << a  << oper  << b  << " = " << a  %   b  << endl;
break;
 
default:  break;
}
 
return  0;
}
 
 
LOS ENUNCIADOS BREAK Y CONTINUE
 
 Se utilizan para modificar el flujo de control
Cuando se utiliza break en una estructura while(), for(),  do-while() o switch:
            1. causa la salida inmediata de dicha estructura
            2. ejecuciÓn programa continua con el primer enunciado después de la estructura
 
Cuando se utiliza continue en una estructura while(), for(), do-while():
            1. salta los enunciados restantes del cuerpo de la estructura
            2. la ejecución continua con la siguiente iteración del ciclo
 
 
Comparación efectos break y continue en los ciclos
 
Bloque 0                                         Bloque 0                                                 Bloque 0
for(A; <c.1> ; B)                             while ( <c.1>)                                       do
        Bloque 1                                         Bloque 1                                                 Bloque 1
Bloque 2                                         Bloque 2                                                 while ( <c.1>)
                                                                                                                           Bloque 2
 
Recordatorio funcionamiento ciclos:
 
a) Bloque 0.                                             a) Bloque 0.                                         a) Bloque 0.
b) A.                                                          b) si <c.1> es verdad                        b) Bloque 1.
c) si <c.1> es verdad                                entonces                                         c) si <c.1> es verdad entonces
        entonces                                                     b.1) Bloque1.
                c.1) Bloque 1.                                      b.2) ir a b)                                             regresar a b)
                c.2) B.                                            si-no                                                       si-no
                c.3) ir a c)                                             ir a c)                                                     ir a d)
        sino                                                     c) Bloque 2.                                        d) Bloque 2.
                ir a d).
d) Bloque 2.
 
 
Efectos del break y del continue :
 
        La acción de un break en el bloque 1 es:
        ir a d).                         ir a c).                             ir a d).
 
        La acción de un continue en el bloque 1 es:
        ir a c.2).                     ir a b).                             ir a c).
 
 
 
 Ejemplo uso break
 
/* Ejemplo uso break en un enunciado for() */
 
#include <stdio.h>
 
int main()
{
 
                    int i;
 
                    for (i=0; i!10; i++)
                        {
                            if (i == 5)
                                    break;
                            printf(''%d'',i);
                        }
                    printf (''\n Fuera del ciclo con valor i: %d \n'',i);
}
 
Salida ejecución:
0 1 2 3 4
 
 
 
Fuera del ciclo con valor de i: 5
 Ejemplo uso continue
 
/* Ejemplo uso continue en un enunciado for() */
/* Objetivo: saltarse la impresion del numero 5 */
 
#include <stdio.h>
 
int main()
{
                    int i;
 
                    for (i=0; i!10; i++)
                          {
                            if (i == 5)
                                    continue;
                            printf(''%d'',i);
                          }
                    printf(''\n Fuera del ciclo con valor i: %d \n'',i);
}
 
Salida ejecución:
0 1 2 3 4 6 7 8 9
 
Fuera del ciclo con valor de i: 10
 Ejemplo uso break y continue
 
/* Cálculo cantidad de 0's, 1's y caracteres diferentes a uno o a ceros.*/
/* Con la secuencia 00 se imprime el número parcial de 0 y de 1; y */
/* con la secuencia 11 se da el resultado final */
 
#include  <stdio.h>
 
int main()
{
 
                    int n0,n1,nA;
                    char c;
                    n0=0; n1=0; nA=0 ;
 
                    scanf(''%c'',&c);
                    while (c!='nr')
                              {
                                if (c == '0')
                                        {
                                            n0 = n0+1;
                                            scanf(''%c'',&c);
                                            if(c=='0')
                                                {
                                                    n0 = n0+1;
                                                    printf(''n0=%d'',n0);
                                                    printf(''n1=%d \n'',n1);
                                                    scanf(''%c'',&c);
                                                    continue;
                                                }
                                        }
                                if (c=='1')
                                        {
                                            n1 = n1+1;
                                            scanf(''%c'',&c);
                                            if (c=='1')
                                                {
                                                     n1 = n1+1;
                                                     break;
                                                }
                                            else
                                                    continue;
                                            nA = nA+1;
                                            scanf(''%c'',&c);
                                        }
                    } /* del while */
                    printf(''n0=%d,n1=%d'',n0,n1);
                    printf('',nA=%d \n'',nA);
} /* del main() */
 
 
 Ejemplo break y continue dentro for y while
 
#include <stdio.h>
int main()
{
                    int i;
 
/* Ejemplo 1 */
/* El ciclo escribirá: ejemplo 1: 5 6 7 8 9 10 */
 
                    printf(''Ejemplo 1: '');
                    for (i=1; i <= 10; i++)
                     {
                                if(i < 5)
                                        continue;
                                printf(''%d '',i);
                      }
 
/* Ejemplo 2: */
/* Este ejemplo escibirá: ejemplo 2: 1 2 3 4 5 -6 */
 
                    printf(''\n Ejemplo 2:'');
                    for (i=1; i!=10; i=i+1)
                            {
                                if (i > 5)
                                        break;
                                printf('' %d'',i);
                            }
                    printf('' %d'',-i,);
 
/* Ejemplo 3 */
/* Este ejemplo escibirá: ejemplo 3: 3 7 11 -15 */
 
                    printf(''\n Ejemplo 3:'');
                    i=0;
                    do
                     {
                                i=i+3;
                                if( ( i % 2 )==0)
                                     {
                                            i=i-2;
                                            continue;
                                     }
                                if( ( i%5 )==0)
                                    break;
                                    printf(''%d'',i);
                    }
                    while (i !=100 );
                    printf('' %d %d \n'',-i);
}
 
 
 
Uso y maluso de goto
 
La palabra clave goto está soportada en C++, dado que existe en C. El uso de goto a menudo es considerado como un estilo de programación pobre, y la mayor parte de las veces lo es. Siempre que se utilice goto, se debe revisar bien el código para ver si hay alguna otra manera de hacerlo. En raras ocasiones, goto puede resolver un problema que no puede ser resuelto de otra manera, pero, aún así, se debe considerar cuidadosamente. A continuación aparece un ejemplo que puede ser un candidato plausible:
 
 //: C03:gotoKeyword.cpp
// The infamous goto is supported in C++
#include <iostream>
using namespace std;
 
int main() {
  long val = 0;
  for(int i = 1; i < 1000; i++) {
    for(int j = 1; j < 100; j += 10) {
      val = i * j;
      if(val > 47000)
        goto bottom;
        // Break would only go to the outer 'for'
    }
  }
  bottom: // A label
  cout << val << endl;
} ///:~

 
 
La alternativa sería dar valor a un booleano que sea evaluado en el for externo, y luego hacer un break desde el for interno. De todos modos, si hay demasiados niveles de for o while esto puede llegar a ser pesado.
 
 
Arrays y Cadenas en C
 
 
Losarrayssonvariablesestructuradas,dondecadaelementosealmacenadeforma consecutiva en memoria.
 
LascadenasdecaracteressondeclaradasenCcomoarraysdecaracteresypermitenla utilización de un cierto número de notaciones y de funciones especiales.
 
 
 
Arraysdeunadimensión
 
 
Un array (unidimensional, también denominado vector) es una variable estructurada formada de un número "n" de variables simples del mismo tipo que son denominadas los componentes o elementos del array. El número de componentes "n" es, entonces, la dimensión del array. De igual manera que en matemáticas, decimos que "A" es un vector de dimensión "n".
 
  
 
 
El formato para declarar un array unidimensional es:
 
tipo nombre[n];
 
donde: n >=  1
 
Para acceder a un elemento del array:
 
nombre[i];
 
donde: 0 <= i < n
 
 
 
Por ejemplo, la declaración:
 
int A[4];
 
define un array de tipo entero de dimensión 4. Y ya podríamos acceder al primer componente del array por medio de: A[0], al segundo elemento por: A[1] y al último elemento por A[3].
 
En  C,  un  array  se  utiliza  básicamente  cuando  queremos  tener,  por  ejemplo,  una secuencia de números reunidos en una sola variable.
 
Para inicializar un array, podemos hacer lo siguiente:


for (i = 0; i< 4; i++) A[i] = i;
 
Otra manera de inicializar un array es asignándole los valores iniciales entre llaves de la siguiente:
 
int A[4] = {0, 1, 2, 3};
 
Sino se inicializa explícitamente el array no se puede estar seguro del valor que contien en los elementos del mismo.
 
 
 
Arraysdedosdimensiones
 
 
Un array en C puede tener una, dos o más dimensiones. Por ejmplo, un array de dos dimensiones también denominado matriz,es interpretado como un array (umidimensional) de dimensión "f" (número de filas), donde cada componente es un array (unidimensional) de dimensión "c" (número de columnas). Un array de dos dimensiones, contiene, pues, "f*c" componentes.
 
 

 
 
 
 
 
 
 
 
 
 
 
 

El formato para declarar un array multidimensionales:
 
int nombre[f][c]…;
 
donde: f,c...>= 1;
 
Para acceder a un elemento del array multidimensional:
 
nombre[i][j];
 
donde: 0 <= i < f ;  0 <= j < c;


Durante la declaración de un array multidimensional también podemos inicializar sus componentes indicando la lista de los valores entre llaves. En el interior de la lista, los componentes de cada línea del array son encerrados nuevamente entre llaves. Para hacer más cara la visibilidad de los elementos del array, podemos indicarlos en varias líneas.
 
int A[3][4] ={{ 0,1,2,3},
{ 1,2,3,4},
{ 2,3,4,5}};
 
Sin embargo, es mucho más conveniente anidar dos ciclos para inicializar un array de dos dimensiones:
 
for (i = 0; i< 3; i++)
for (j = 0; j< 4; j++) A[i][j] = i+j;
 
 
 
Cadenasdecaracteres
 
 
En C no existe un tipo predefinido para manipular cadenas de caracteres (string). Sin embargo, el estándar de C define algunas funciones de biblioteca para tratamiento de cadenas.
 
Una cadena en C es un array de caracteres de una dimensión (vector de caracteres) que termina con el carácter especial ‘\0’ (cero).
 
El formato para declarar una cadena es:
 
char nombre[n];
 
donde: n >=  1 y representa a la longitud-1 real de la cadena. Un ejemplo de declaración de cadena:
char cadena [5];
 
Debido a que en la representación interna de una cadena de caracteres es terminada por  el símbolo '\0', para un texto de "n" caracteres, debemos reservar "n+1”. El carácter'\0', aunque pertenece a la cadena, no aparece al utilizar funciones como printf.
 
En el caso especial de los arrays de caracteres, podemos utilizar varias formas de inicialización:
 
char cadena[] = "Hola";
char cadena[] = {'H','o','l','a',0};
char cadena[] = {'H','o','l','a','\0'};
 
sin especificar el tamaño de la cadena, o especificando el tamaño:


char cadena[5] = "Hola";
char cadena[5] = {'H','o','l','a',0};
 
 
 
char cadena[5] = {'H','o','l','a','\0'};
 
 
 
 
Durante la inicialización, se reserva automáticamente el número de bytes necesarios para la cadena, esto es, el número de caracteres más uno.  Por ejemplo:
 
  
Para acceder aun elemento de una cadena de caracteres puede hacerse de la misma manera que el acceso al elemento de un array.
 
cadena[i];
 
donde: 0 <=i < n
 
Por ejemplo:
  
 
La biblioteca“string”tiene una gran cantidad de funciones prácticas para trabajar con cadenas de caracteres. Para utilizarlas debemos de incluir el fichero que define los prototipos de dichas funciones:
 
#include <string.h>
 
Algunas de las funciones más importantes son:
 
  strlen(<cadena>):Devuelve la longitud de la cadena sin tomar en cuenta el caracter de final de cadena.
 
  strcpy(<cadena_destino>,  <cadena_origen>)  :Copia    el contenido de  <cadena_origen>en <cadena_destino>.
 
• strcat(<cadena_destino>,<cadena_origen>):Concatena el contenido de <cadena_origen> al final de <cadena_destino>.
 
 
    strcmp(<cadena1>,<cadena2>):Compara  las  dos  cadenas  y devuelve  un  0  si  las  dos  cadenas  son  iguales,  un  número  negativo  si


<cadena1>es  menor  que  (precede  alfabéticamente  a)  <cadena2>y  un número positivo (mayor que cero) si<cadena1>es mayor que <cadena2>.
 
A diferencia de los arrays de tipos de datos numéricos (arrays de enteros, de números  con punto decimal, etc.), en donde cada elemento del array se debe considerar como una variable independiente de los demás, los arrays de caracteres (cadenas) se pueden manipular de dos maneras: de forma conjunta o separada.
 
Por ejemplo, para mostrar en pantalla un array de caracteres podemos hacerlo dentro de un  bucle,  desde  el  primer  caracter  (indice  0)  hasta  el  último  carácter  (lo  que  nos devuelve la función strlen):
 
for(i=0; i<strlen(cadena); i++)
printf("%c",cadena[i]);
 
Existe una mejor manera de mostrar en pantalla una cadena, y es utilizando el carácter de conversión %s:
 
printf("%s",cadena);
 
 
PUTS Y GETS. DIFERENCIA CON PRINTF Y SCANF

Las funciones printf y scanf proporcionan un marco general para mostrar y pedir datos de distintos tipos. En el caso de datos de tipo cadenas de caracteres (coloquialmente Strings) C dispone de instrucciones específicas que simplifican la codificación: puts() y gets(). La función puts recibe un único argumento: la cadena de caracteres a mostrar por pantalla. 

 Escribe este código y comprueba la equivalencia con printf que proporciona puts para cadenas de caracteres:
#include <stdio.h>
#include <stdlib.h>
// Ejemplo aprenderaprogramar.com
int main() {
    char url [] = "https://www.aprenderaprogramar.com";
    printf ("%s\n", url) ;
    puts (url);
    return 0;
}
 
La función gets() recibe como único argumento la variable en la que debe almacenarse una entrada de usuario que va a ser considerada como una cadena de caracteres. Ejecuta este programa.
#include <stdio.h>
#include <stdlib.h>
// Ejemplo aprenderaprogramar.com
int main() {
    char frase [100];
    printf ("Escriba una frase") ;
    gets (frase);
    puts ("Frase introducida:");
    puts (frase);
    return 0;
}
 

gets se diferencia de scanf en que scanf sólo captura una cadena de texto hasta que aparece el primer espacio o fin de línea (desechando todo lo que venga a continuación). De este modo si tratamos de capturar con scanf el texto “Amanece un maravilloso día aquí en Alaska” lo único que capturaremos es “Amanece”, perdiéndose el resto del texto. En cambio con gets se captura todo el texto. Tanto con scanf como con gets se introduce automáticamente un fin de cadena (\0) al final del texto capturado (de ahí que un array de caracteres siempre tenga un carácter adicional además del texto visible, el correspondiente al final de cadena.)

Modifica el programa anterior usando scanf ("%s",frase); en lugar de gets (frase) y comprueba las diferencias cuando introduces frases con espacios intermedios.

Muchas veces no se usan puts y gets porque las funciones printf y scanf son más generales, pero para el tratamiento de cadenas de texto en general resultan ventajosas las instrucciones específicas por la comodidad que aportan.

 
 
FUNCIONES  GENERADAS  POR  EL  USUARIO
 
Las funciones se declaran y se definen exactamente igual que en C, y, al igual que en éste, se puede utilizar prototipo (prototype).
Prototipos
La declaracion de una funcion es el prototipo. El prototipo da un modelo de la interface a la funcion. Veamos un ejemplo:
# include <iostream.h>
void haz_algo (int alas, float pies, char ojos);
 
main() {
int ala = 2;
float pie = 1000.0;
char ojo = 2;
 
haz_algo (3, 12.0, 4);
haz_algo (ala, pie, ojo);
}
 
void haz_algo (int alas, float pies, char ojos) {
cout << 'Hay ' << alas << 'alas.' << 'n';
cout << 'Hay ' << pies << 'pies. ' << 'n';
cout << 'Hay ' << int(ojos) << 'ojos.' << 'n';
}
 
La salida de este programa sera:
Hay 3 alas.
Hay 12 pies.
Hay 4 ojos.
 
Hay 2 alas.
Hay 1000 pies.
Hay 2 ojos.
 
Cada llamada a la funcion haz_algo() debe verificar:
El número de parametros debe ser exactamente tres.
Los tipos deben ser compatibles con los de la declaracion.
Notese que cuando llamamos a la funcion, la comprobacion de tipo la hace el compilador basandose en el prototipo (en la declaracion) puesto que la funcion todavía no ha sido definida.
Los nombres de variables que aparecen en el prototipo son opcionales y actúan casi como comentarios al lector del programa, ya que son completamente ignorados por el compilador.
 
Tipos compatibles
Son compatibles cualquiera de los tipos simples (definidos en C++) que pueden ser convertidos de uno a otro de manera significativa. Por ejemplo, si llamamos con un entero a una funcion que esta esperando un número real como parametro, el sistema lo convertira automaticamente, sin mencionarlo al usuario. Esto también es cierto de float a char, o de char a int.
En cambio, si pasamos un puntero a un entero a una funcion que estaba esperando un entero, no habra conversion de tipo, ya que son dos variables completamente distintas. De la misma forma, un tipo definido por el usuario (estructura o clase) no puede ser convertido automaticamente a un long float, a un array o incluso a otra estructura o clase diferente, porque son tipos incompatibles y no puede realizarse la conversion de manera significativa.
Sin embargo, el tipo devuelto por la funcion, void en el ejemplo anterior, debe ser compatible con el tipo que se espera que devuelva en la funcion de llamada, o el compilador dara un warning.
El uso de prototipos no supone coste alguno en tiempo ni en velocidad de ejecucion. El prototipo se verifica durante la compilacion.

Funciones con void como argumento.

Una funcion sin lista de argumentos como
void func ();
significa en C que no se ha declarado el tipo de la lista de argumentos que recibe la funcion, por lo que el compilador no producira errores respecto al uso impropio de los argumentos. Cuando en C se declara una funcion que no tiene argumentos se utiliza el tipo void:
void func (void);

En C++, ambas expresiones son equivalentes
 
Pasar punteros a funciones.(paso por valor y por referencia)
Cuando se llama a una funcion, todos los parametros con los que la llamamos son copiados y pasados a la funcion (paso por valor). Esto significa que si la funcion cambia el valor de los parametros, solo lo hace dentro del ambito de la funcion. Por ejemplo:

#include <iostream.h>
void change_values(int a,int b) {
a=4;
b=5;
}
main() {
int a, b;
 
a=1;
b=2;
change_values(a,b);
 
cout << 'A is ' << a <<',B is' << b <<'n';
}
 
La salida de programa es: A is 1, B is 2
La llamada a la funcion no ha cambiado el valor de las variables que se le han pasado. La funcion cambia las copias de lo que se le ha pasado.
 
Si queremos pasar parametros por referencia hay que pasar punteros a los datos. Para hacer esto, utilizamos el operador &, que da la direccion de una variable:

#include <iostream.h>
void change_values(int *a,int *b) {
*a=4;
*b=5;
}
main() {
int a, b;
a=1;
b=2;
change_values(&a,&b);
cout << 'A is ' << a <<',B is' << b <<'n';
}
 
Ahora la salida del programa es:
A is 4, B is 5
La funcion main pasa la direccion de a y b, por lo que a la funcion change_values se le pasa una copia de las direcciones. Utilizando las direcciones de a y b, la funcion puede acceder a los datos directamente.
 
Polimorfismo.

En C++ es posible declarar dos funciones diferentes que tengan el mismo nombre. Las funciones deben diferir en la lista de argumentos, bien en el número de variables que se pasan a la funcion, bien en el tipo de argumentos que recibe. Así, por ejemplo, se puede definir una funcion que trabaje, bien con enteros, bien con strings; solo hay que definir dos funciones separadas con el mismo nombre:
 
#include <iostream.h>
void show(int val) {
cout <<' Es un entero :'<< val << 'n';
}
 
void show(char *val) {
cout <<'Es un caracter: '<< val << 'n';
}
 
main() {
show (42);
show ('A');
show (452.2);
}
 
En la primera llamada a la funcion show, se le pasa un entero, por tanto se llama a la primera copia de la funcion show. La segunda vez, el argumento es un caracter, por tanto se utiliza la segunda definicion, aquella que utiliza un caracter. Ahora bien, la tercera llamada utiliza un número real, y no existe una definicion de la funcion para este caso. El compilador utiliza la primer definicion. La salida del programa es:
 
Es un entero :42
Es un caracter: A
Es un entero :452
 
Comentarios sobre la sobrecarga de funciones:
· El uso de mas de una funcion con el mismo nombre pero acciones diferentes debe ser evitado. En el ejemplo anterior, las funciones show() estan relacionadas: imprimen informacion en la pantalla.
· C++ no permite que varias funciones difieran solo en su valor devuelto. Dos funciones de este tipo no podrían ser distinguidas por el compilador.
 
Parametros por defecto
Es una forma de indicar qué valor debe ser pasado a una funcion en el caso en que en la llamada no se pase nada, o se pasen menos argumentos de los definidos. Un ejemplo de definicion de una funcion que tiene parametros por defecto en su lista de argumentos es:
void funcion (int y = 2)
En este caso, estamos definiendo un valor, 2, que tomara la variable y en caso de que no se pase nada en la llamada a la funcion:
funcion ();
 
 

FUNCIONES

Cuando es necesario escribir programas complicados para resolver problemas complejos, una práctica común entre  los programadores es descomponer el algoritmo (el diagrama de flujo) envarias partes. Cada una de éstas partes puede codificarse en forma independiente en la forma de subprogramas. Así,  habrá un cierto número de subprogramas que se encargan derealizar sólo parte de las tareas requeridas para resolverel problema; estos subprogramas  estarán relacionados de forma que su ejecución conjunta permitirá la solución del programa global.

 

Funciones como Subprogramas en C++

 
C+permite ldefinición de este tipo de subprogramas. En algunos lenguajes de programación, las subpartes son llamadas procedimientos o subrutinas. En C++ las subpartes de un programase denominan funciones.

Una de las ventajas de dividir los programas en subprogramas es que diferentes programadores pueden realizar diferentes  tareas. Este tipo de trabajo de equipo es indispensable para la elaboración de programas complicados en un tiempo  razonable.

 FUNCIONES PREDEFINIDAS

El lenguaje C++, como la mayoría de los lenguajes de programación, permite el  uso de “bibliotecas” cofunciones predefinidas que spueden utilizaen cualquier programa. Se discutirá primero como se utilizan estas funciones predefinidas y, posteriormente, se mostrará como un programador puede construir sus propias funciones.

 

 

Uso de Funciones Predefinidas

 

Se utilizará la funcsqrt(squareroot=raízcuadradaparejemplificael uso de funciones predefinidas. La función sqrtoma el valor de un mero, por ejemplo 9.0, y calcula el valor de su raíz cuadrada, en este caso 3.0. El valor  que la función toma como punto de partida (9.0 en el ejemplo) sele conoce como su argumento. Al valor que calcula  sele conoce como valor de regreso o retorno).

Algunas funciones pueden tener más de un argumento, pero todas las funciones tienen un solo valor de retorno. Si se  trata de comparar a una función con los programas que se han analizado hasta ahora, los argumentos soanálogos a los datos,  mientras que los valores de retorno son análogos a los resultados.

 Un ejemplo del uso deuna función es el siguiente:

 

raiz = sqrt(9.0);

 

A la expresión sqrt(9.0se le conoce como llamado a la función (o invocación a la función). El argumento de un
a función puede, como en este caso, ser un valor constante, pero tambn puede ser una variable o una expresión más  complicada. La única restricción en este sentido es que la constante, la variable o la expresión deben de proporcionar un  valor que sea detipo requerido por la función.

 

Las funciones pueden utilizarse como parte de cualquier expresión legaeC++. Por ejemplo, las siguientes son expresiones válidas en C++:

 

 

double venta,beneficio,area;

 

 

venta = 100.50;

 

 

area= 27.5;

 

 

beneficio=sqrt(venta);

 

 

cout<< “Ellado del cuadradoes “ << sqrt(area) <<”\n”;

  

LLAMADO A FUNCIONES

Un llamado a una función consiste en el nombre de una función seguida por la lista de sus argumentos en cerrados  entre paréntesis. Si hay más de un argumento, los argumentos se separan mediante comas. Un llamado a una  función puede ser usado como cualquier otra expresión en C++ siempre y cuando  se  conserve  la  consistencia  entre  los  tipos  de  las  variables  del programa. La sintaxis es la siguiente.

 

Si hay un solo argumento:

 

 

nombre_de_funcion(argumento)


 

si haymás de un argumento:

 

 

nombre_de_funcion(argumento_1, argumento_2,... , ultimo_argumento)

 

 

 

Bibliotecasde Funciones

 

Se  recordará  que,  cuando  se  analizó  la  instrucción  cout,  se  vió  que  era necesario  incluir  en  el  programa  a  la  biblioteca  iostream.h,  dado  que  la definición de cout se encontraba en dicha biblioteca.  De la misma forma, para  utilizar algunas funciones matemáticas será necesario incluien nuestros  programas otras bibliotecas de C++. Esta bibliotecas son, por ejemplo, math.h stdlib.h. Esto significqueeprogramaeloque  sutilicen funciones predefinidas, será necesario utilizarla directiva include para incluir en el  programa la definición de dichas funciones. En el caso dla biblioteca math.h, el programa deberá contenerla instrucción:

 

 

#include <math.h>

 

 

A los archivos que tienen extensión .h seles conoce como archivos de encabezados. Através de la directiva include,los archivos de encabezados proporcionan al compilador la información básica contenida en la biblioteca correspondiente.

 

 

Algunas Funciones Predefinidas

 

Algunas funciones predefinidas se describenenla Tabla siguiente:

 
 
Nombre
Descripción
Tipo de
Argumentos
Tipo de
Valorde
Regreso
Ejemplo
Valor
Biblioteca
sqrt
RaízCuadrada
double
double
sqrt(4.0)
2.0
math.h
pow
Potencia
double
double
pow(2.0,3.0)
8.0
math.h
abs
Valor absoluto
de un int
int
int
abs(-7)
abs(7)
7
stdlib.h
fabs
Valor absoluto
de un double
double
double
fabs(-7.5)
fabs(7.5)
7.5
math.h
ceil
Redondeo hacia
el número inmediato superior
double
double
ceil(3.2)
ceil(3.9)
4.0
math.h


 
floor
Redondeo hacia el número
inmediato inferior
double
double
floor(3.2)
floor(3.9)
3.0
math.h
sin
Seno
double
double
sin(0.0)
0.0
math.h
cos
Coseno
double
double
cos(0.0)
1.0
math.h
tan
Tangente
double
double
tan(0.0)
0.0
math.h
 
 

La más complicada de las funciones de la tabla es la función pow que sirve para obtener la potencia de un  número. Por ejemplo, las siguientes sentencias son un ejemplo de aplicación de la función pow:

 
 
 
 
 
double resultado, x=3.0,y=2.0;
 
 
 
 
resultado = pow(x,y);
 
cout<< resultado;
 
 

Las sentencias anterioresmostraríanen pantalla al número9.0.

  

 

Ejemplos

 

Las siguientes expresiones algebraicas y en C++ son equivalentes:

 
 
 



x+y

sqrt(x+y)


 
 
 


xy+7

pow(x,y+7)


 
 
 


xy

abs(x-y)


 

 

 

sen(angulo)             sin(angulo)

 

 

 

FUNCIONES PARA CADENAS EN LENGUAJE C

C no dispone de un tipo de dato String para trabajar con cadenas de texto como en otros lenguajes. En su lugar, una cadena está representada por un array de caracteres (char) habitualmente terminado con el carácter especial de fin de cadena << \0 >>. Este carácter especial no se visualiza por pantalla, podríamos decir que está pero es "transparente" o "no visible" a través de la pantalla.

 

Comentamos previamente que las funciones para pedir datos al usuario scanf y gets introducen automáticamente un fin de cadena (\0) al final del texto capturado. En estos casos el array de caracteres tiene en C un carácter adicional además del texto visible, el correspondiente al final de cadena. Por ejemplo la longitud en caracteres de la palabra “abc” introducida por el usuario con scanf o gets no es tres, sino cuatro, ya que a los tres caracteres hemos de sumarle el carácter especial de final de cadena representado con \0.

  

 

CONOCER LA LONGITUD DE UNA CADENA CON SIZEOF

Podemos declarar cadenas de varias maneras. Por ejemplo:

char pruebaCadena [3]; pruebaCadena [0]= 'a'; pruebaCadena [1]= 'b'; pruebaCadena [2]= 'c';

char pruebaCadena [] = "abc";

En el primer caso el array es de tres caracteres, el de índice cero es a, el de índice 1 es b, el de índice 2 es c. En el segundo caso el array es de cuatro caracteres al introducir C el carácter de fin de cadena \0.

Llamamos tamaño (length) de un array al número de elementos de que consta. En el caso del array de caracteres “abc” con el carácter de fin de cadena decimos que consta de 4 elementos (contando el carácter especial de fin de cadena). Podemos conocer la longitud de un array de caracteres usando la función sizeof, siendo la sintaxis a emplear: sizeof (nombreDelArray).

Escribe este código, que ya debemos ser capaces de comprender con lo estudiado hasta ahora.

#include <stdio.h>

#include <stdlib.h>

int main() {

    int i = 0; int j=0; char pruebaCadena [] = "abc";

    while (pruebaCadena[i] != '\0') { printf ("%c", pruebaCadena[i]); i=i+1; }

    printf ("%cUsando \\0: ", '\n');

    while (pruebaCadena[j] != '\0') { printf ("Iteracion %d - ", j+1); j=j+1; }

    printf ("%cUsando sizeof: ", '\n');

    j= 0; //Reinicializar j

    while (j < sizeof(pruebaCadena)) { printf ("Iteracion %d - ", j+1); j=j+1; }

    printf ("\nsizeof pruebaCadena es %d", sizeof(pruebaCadena));

    return 0; // Ejemplo aprenderaprogramar.com

}

 

 Aquí mostramos distintas formas de recorrer un array de caracteres. La primera se basa en buscar el carácter de fin de cadena \0. En este ejemplo el bucle while recorre a – b – c (tres iteraciones). La segunda se basa en usar sizeof. En este ejemplo el bucle while recorre a – b – c - \0 (cuatro iteraciones).

  

LIBRERÍA STRING.H FUNCIONES STRCPY, STRLEN, STRCAT, STRCMP

A través de la librería string.h podemos usar distintas funciones relacionadas con cadenas. Para usar estas funciones debemos escribir #include <string.h> en cabecera de nuestro programa. A continuación relacionamos algunas de las funciones disponibles.

Función

Significado y ejemplo aprenderaprogramar.com

strcpy (arg1, arg2)

Copia arg2 en arg1. Ejemplo: strcpy (cadena, “control”);

strlen (arg1)

Devuelve la longitud del texto representado por arg1. Ejemplo: strlen(cadena1)

strcat (arg1, arg2)

Concatena las cadenas representadas por arg1 y arg2. Ejemplo: strcat(cadena1, “ unidades”)

strcmp (arg1, arg2)

Devuelve 0 si las cadenas representadas por arg1 y arg2 son iguales, o un valor menor que cero si arg1 precede alfabéticamente a arg2. Ejemplo: resComparacion = strcmp (cadena4, cadena2);

 Escribe el siguiente código y comprueba los resultados de ejecución.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char cadena1 [] ="aprenderaprogramar.com"; char cadena2 [sizeof(cadena1)];
    char cadena3[] = " ok!";    char cadena4[50];
    int resComparacion;
    printf ("Cadena1 vale %s y Cadena2 vale %s \n", cadena1, cadena2);
    strcpy (cadena2, cadena1); //Copia cadena1 en cadena2
    printf ("Cadena1 vale %s y Cadena2 vale %s \n", cadena1, cadena2);
    printf ("Cadena1 tiene longitud %d (uno mas contando \\0) \n", strlen(cadena1));
    strcpy (cadena4, cadena1) ;
    printf ("Concatenacion %s \n", strcat(cadena4, cadena3));
    resComparacion = strcmp (cadena4, cadena2);
    printf ("Cadena1 vale %s y Cadena2 vale %s \n", cadena1, cadena2);
    printf ("Cadena3 vale %s y Cadena4 vale %s \n", cadena3, cadena4);
    if (resComparacion ==0) {
        puts ("Las cadenas 1 y 2 son iguales");
    }
    resComparacion = strcmp (cadena1, cadena3);
    if (resComparacion >0) {
        puts ("La cadena 1 precede alfabeticamente a la cadena 3");
    }
    return 0; // Ejemplo aprenderaprogramar.com
}

 

FUNCIONES MATEMÁTICAS EN LENGUAJE C

El lenguaje C nos facilita una biblioteca de funciones matemáticas entre las que se incluyen las de uso más habitual como pueden ser: valor absoluto, potencia de un número elevado a otro, raíz cuadrada, funciones trigonométricas (seno, coseno, tangente, etc.), redondeo, exponenciación, logaritmo decimal, logaritmo neperiano y otras.

Para utilizar las funciones matemáticas indicadas a continuación es necesario incluir en la cabecera de nuestros programas la siguiente declaración: #include <math.h>

El resultado de aplicar una función matemática es un valor numérico de tipo double (aunque el resultado puede ser un valor entero, internamente C lo considerará como un valor tipo decimal de doble precisión o tipo double)

Las funciones disponibles de uso más habitual son las siguientes:

Funciones Matemáticas

Significado

Funciones Matemáticas

Significado

fabs (x)

Valor absoluto de x

ceil (x)

Redondeo entero superior

pow (x, y)

Potencia de x elevado a y

floor (x)

Redondeo entero inferior

sqrt (x)

Raíz cuadrada de x

exp (x)

Exponenciación (número e elevado a x, siendo e = 2.71828)

sin (x)

Seno de x

log (x)

Logaritmo neperiano de x

cos (x)

Coseno de x

log10 (x)

Logaritmo decimal de x

tan (x)

Tangente de x

atan (x)

Arcotangente de x

La biblioteca de funciones matemáticas de C es más amplia de lo que hemos expuesto (por ejemplo se dispone de más funciones trigonométricas y de otros tipos que las aquí indicadas), pero con estas funciones quedan cubiertos los cálculos más habituales.

Las funciones relacionadas con ángulos trabajan en radianes. Por tanto para operar con grados habremos de realizar la conversión oportuna.

Vamos a comentar algunas funciones menos habituales. Respecto a ceil y floor, se trata de funciones que devuelven el redondeo entero de un número. La diferencia entre ambas es que ceil redondea al entero superior más próximo y floor redondea al entero inferior más próximo. Tener en cuenta que el entero superior más próximo a un número negativo como – 5.75 es – 5 mientras que el entero superior más próximo a un número positivo como 5.75 es 6. Recordar que aunque estas funciones devuelven enteros, internamente el tipo de datos devuelto por estas funciones en C es double. Si se aplican estas funciones a un número entero, obtenemos ese mismo número pero con formato double.

C incorpora funciones que permiten generar números aleatorios así como funciones de fecha y hora. Por su importancia y extensión no las trataremos ahora.

Escribe y ejecuta el código mostrado a continuación. Crea también nuevas variables y operaciones para comprobar el uso de las funciones matemáticas en C.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Ejemplo aprenderaprogramar.com
int main() {
    double M = -5.75; int N = 7; double Pi = 3.14159; //Equivale a 180 grados sexagesimales
    printf ("El valor absolucto de M es %g y el de N es %g\n", fabs(M), fabs(N));
    printf ("El coseno de Pi es %g\n", cos(Pi));        printf ("2 elevado al cubo vale %g\n", pow(2, 3));
    printf ("El numero pi redondeado con ceil vale %g\n", ceil(Pi));
    printf ("M redondeado con ceil vale %g\n", ceil(M));
    printf ("El numero pi redondeado con floor vale %g\n", floor(Pi));
    printf ("M redondeado con floor vale %g\n", floor(M)); printf ("-M redondeado con floor vale %g\n", floor(-M));
    printf ("El numero e vale %g\n", exp(1)); printf ("El logaritmo neperiano de e vale %g\n", log(exp(1)));
    printf ("El logaritmo decimal de 100 vale %g\n", log10(100));
    printf ("La raiz cuadrada de 81 vale %g\n", sqrt(81));
    return 0;
}

 

Funciones trigonométrica

Función

Propósito

sin

seno

cos

coseno

tan

tangente

asin

arcoseno

acos

arcocoseno

atan

arcotangente

atan2

arcotangente de dos argumentos, usando el signo para determinar el cuadrante

 

Obtención de números aleatorios en C

A veces queremos que nuestro programa obtenga números de forma aleatoria, por ejemplo, para simular una tirada de dados o el reparto de cartas en un juego. En C de linux tenemos varias funciones que nos permiten obtener estos valores aleatorios.

En esta explicación vamos a ver un uso básico de estas funciones. Algunas de las cosas que contamos aquí no son útiles para aplicaciones más serias, en las que se requiere que la secuencia de números aleatorios sea muy aleatoria, impredecible, que no se repita hasta pasado muchos números, etc, etc. Sin embargo, las explicaciones aquí presentadas servirán para la mayoría de nuestros programas. 

LA FUNCIÓN rand()

En C, para obtener números aleatorios, tenemos la función rand(). Esta función, cada vez que la llamamos, nos devuelve un número entero aleatorio entre 0 y el RAND_MAX (un número enorme, como de 2 mil millones).

El primer problema que se nos presenta es que no solemos querer un número aleatorio en ese rango, sería un dado muy curioso el que tenga tantas caras. Podemos querer, por ejemplo, un número aleatorio entre 0 y 10. O de forma más general, entre 0 y N. La cuenta que debemos echar para eso es esta 
 

#include <stdlib.h>
... 
numero = rand() % 11; 
numero = rand() % (N+1);

La operación módulo (%) nos da el resto de dividir rand() entre 11. Este resto puede ir de 0 a 10. De la misma forma, el módulo de rand()entre N+1 va de 0 a N.

¿Y si queremos un rango que no empiece en 0?. Por ejemplo, queremos un rango entre 20 y 30 (de forma más general, entre M y N con Nmayor que M). Pues es fácil, obtenemos un número entre 0 y 10 y le sumamos 20 (un número entre 0 y N-M y le sumamos M
 

numero = rand () % 11 + 20;  // Este está entreo 20 y 30 
numero = rand () % (N-M+1) + M;   // Este está entre M y N

LA FUNCIÓN srand()

Se nos presenta un nuevo problema. Si ejecutamos varias veces nuestro programa, la secuencia de números aleatorios se repite. Imaginemos que tenemos un programa que escribe 3 número aleatorios entre 0 y 10. Lo ejecutamos una vez y sale, por ejemplo 4, 7 y 9. Lo ejecutamos por segunda vez y vuelve a salir 4, 7 y 9. La tercera vez sale lo mismo y cuando ya nos hemos hartado de ejecutar, vuelve a salir lo mismo.

El problema es que rand() "calcula" los números aleatorios. Parte de un número inicial (llamado semilla), echa unas cuentas y saca un número aleatorio. Para el segundo número, echa unas cuentas con el resultado anterior y saca un segundo número y así sucesivamente.

Si volvemos a ejecutar el programa desde el principio, el número inicial (la semilla) que usa rand() es el mismo, con lo que la secuencia de números aleatorios es la misma, ya que las cuentas son las mismas.

Para evitar este problema tenemos la función srand(), a la que se le pasa de parámetro un número que se utilizará como número inicial para las cuentas. A esta función sólo debemos llamarla una vez en nuestro programa.

¿Qué número le ponemos a este srand()?. No podemos ponerle un número fijo, porque entonces no hemos hecho nada. No podemos ponerle un número obtenido con rand(), porque la primera vez siempre nos dará el mismo y el resultado será igual que si le ponemos un número fijo. Debemos buscar la forma de obtener un número que sea distinto en la ejecución de cada programa.

Hay dos números que se utilizan habitualmente para ello:

  • La fecha/hora del sistema. Este valor cambia si ejecutamos el programa en distinto instante de tiempo. Tendriamos que arrancar el programa dos veces en el mismo segundo para obtener la misma secuencia de números aleatorios. En C de linux esta fecha/hora se obtiene con la función time() 

srand (time(NULL));

  • El número de proceso del programa. El primer programa que se arranca cuando se enciende el ordenador con el sistema operativo linux, tiene el número de proceso 1, el segundo el 2, el tercero el 3 y así sucesivamente. Cuando arrancamos nuestro programa, se le asignará el número que le toque, por ejemplo, el 215. Cuando lo volvamos a arrancar, se le asignará el que le toque (puede ser 216 si no hemos ejecutado nada entre medias o 345, si nos hemos entretenido con otras cosas). Después de ejecutar nuestro programa varios miles de veces, el número de proceso puede que se repita, pero ya no nos acordaremos de la secuencia que se sacó la primera vez. El número de proceso se obtiene con getpid()

srand (getpid());

A esta función sólo hay que llamarla una vez al principio de nuestro programa. Cada vez que la llamemos, estaremos reiniciando los calculos de números aleatoriosd desde el principio, con lo que se repetirá todo











 
Hoy habia 19 visitantes (24 clics a subpáginas) ¡Aqui en esta página!
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis