sábado, 19 de mayo de 2012

ARREGLOS EN C++


Arreglos.
Un Arreglo es una estructura de datos que almacena bajo el mismo nombre (variable) a una colección de datos del mismo tipo.

                Los arreglos se caracterizan por:

·            Almacenan los elementos en posiciones contiguas de memoria
·           Tienen un mismo nombre de variable que representa a todos los elementos. Para hacer referencia a esos elementos es necesario utilizar un índice que especifica el lugar que ocupa cada elemento dentro del archivo.

Tipo de Arreglos:
Unidimensionales (Vectores).
Bidimensionales (Matrices).

Vectores.
Es un arreglo de “N” elementos organizados en una dimensión donde “N” recibe el nombre de longitud o tamaño del vector. Para hacer referencia a un elemento del vector se usa el nombre del mismo, seguido del índice (entre corchetes), el cual indica una posición en particular del vector. Por ejemplo:

                Vec[x]

Donde:
Vec…………Nombre del arreglo
x……………       Numero de datos que constituyen el arreglo

Representación gráfica de un vector.
       Vec[1] 7
       Vec[2] 8
         Vec[3] 9
       Vec[4] 10
Llenado de un Vector.
·                          ·           Hacer para I = 1 a 10
     Leer vec[I]
Fin-para

·           ·           Hacer mientras I <= 10
     Leer vec[I]
Fin-mientras

·           ·           I=1
Repetir
      Leer vec[I]
       I = I + 1
Hasta-que I>10

Matriz.

Es un arreglo de M * N elementos organizados en dos dimensiones donde “M” es el numero de filas o reglones y “N” el numero de columnas.
Donde R indica el renglón y C indica la columna, donde se encuentra almacenado el dato.

Para representar una matriz se necesita un nombre de matriz se necesita un nombre de matriz acompañado de dos índices.

                Mat [R,C]
Donde R indica el renglón y C indica la columna, donde se encuentra almacenado el dato.
 Llenado de una matriz. 
·                          ·           Por renglones
·           Hacer para R= 1 a 5
·                Hacer para C= 1 a 5
          Leer Mat [R,C]
    Fin-para
Fin-para

·           ·           Por columnas
·           Hacer para C= 1 a 5
·                Hacer para R= 1 a 5
          Leer Mat [R,C]
    Fin-para
Fin-para

Nota: Para hacer el llenado de una matriz se deben de usar dos variables para los índices y se utilizan 2 ciclos uno para los renglones y otro para las columnas; a estos ciclos se les llama ciclos anidados (un ciclo dentro de otro ciclo).


EJEMPLO
suma de dos matrices

#include<iostream>
using namespace std;
int main()
{int i, j, fi, co, A[10][10], B[10][10], C[10][10];
cout<<"llenado de la matriz A\n";
cout<<"Numero de Filas:";
cin>>fi;
cout<<"Numero de Columnas:";
cin>>co;
for(i=0; i<fi; ++i)
{for(j=0; j<co; ++j){
          cout<<"A["<<i+1<<"]["<<j+1<<"]:";
          cin>>A[i][j];}}
          cout<<"llenado de la matriz B\n";
          for(i=0; i<fi; ++i)
          {for(j=0; j<co; ++j)
          {cout<<"B["<<i+1<<"]["<<j+1<<"]:";
          cin>>B[i][j];C[i][j]=A[i][j]+B[i][j];}}
          cout<<"matriz suma de A+B\n";
          for(i=0; i<fi; ++i)
          {for(j=0; j<co; ++j){
                    cout<<C[i][j]<<"\t";}
                    cout<<"\n";}
system("pause");
return 0;



CICLOS Y SELECCION MULTIPLE EN C++



Ciclos
Es muy común encontrar en los programas operaciones que se deben ejecutar un número repetido de veces en períodos más o menos espaciados. Si bien las instrucciones son las mismas, los datos sobre los que operan varían. A nuestro alrededor, encontramos problemas que presentan esas características, por ejemplo: el cálculo de la nota final de los estudiantes de Programación I, se realizará tantas veces como alumnos hayan inscritos en dicha asignatura, el cálculo del salario de los empleados de una empresa, etc. En estos casos la solución que se diseñe para un solo grupo de datos se debe repetir tantas veces como sea necesario (de acuerdo al número de estudiantes y de empleados para los ejemplos anteriores).
Los cálculos simples o la manipulación de pequeños conjuntos de datos se pueden realizar fácilmente a mano, pero las tareas grandes o repetitivas son realizadas con mayor eficacia por una computadora, ya que estas están especialmente preparadas para ello.
Para repetir varias veces un proceso determinado haremos uso de los ciclos repetitivos, a los cuales se les conoce con el nombre de estructura repetitiva, estructura iterativa, lazo o bucle.
(Tomado de Los guiones de clase de Introducción a la InformáticaUniversidad de El Salvador. Año 2005)
En C, podemos encontrar tres tipos de ciclos:
·         Entrada Asegurada (while)
·         Ciclo Controlado Por Contador (for)
·         Hacer Mientras (do.. while)
Este último, no está lógicamente estructurado, por tanto no haremos mucho hincapié en él.

Funcionamiento de Un Ciclo
Un ciclo, funciona de la siguiente manera: Evalúa una condición de resultar cierta, realiza una acción o bloque de acciones, luego vuelve a evaluar la condición y si nuevamente resulta cierta, realiza la (s) acción (es). Cuando la condición de cómo resultado falso, se sale del ciclo y continúa con la ejecución normal del programa.

Acumulador:
Es una variable, que , como su nombre lo indica se encarga de acumular valores. Esto se vuelve muy útil, por ejemplo, cuando queremos encontrar la suma de los números del 0 al 9, en el acumulador, vamos guardando los valores de dichas cifras. Puede ser tanto real como entera. Su valor inicial, en la mayoría de los casos es cero.

Contador:
Es una variable de tipo entero, que nos ayuda, en el programa a contabilizar el número de ejecuciones de una misma acción, de un grupo de alumnos etc. Un acumulador tiene tres valores distintos:
·         Valor Inicial: es el valor con el cual iniciamos nuestro contador. Generalmente es cero. Esta asignación puede hacerse cuando se declara la variable.
·         Valor Final: después de la ejecución del ciclo, el valor del contador, será distinto a su valor inicial, este puede ser mayo o menor que el mismo, todo depende si fue una cuenta creciente o decreciente.
·         Valor de Cambio: Es el valor Constante, en el cual se irá incrementando nuestro contador, este puede ser positivo o negativo; es decir, si la cuanta se realiza de manera ascendente o descendente.

NOTA: el lector no debe confundirse entre las variables tipo acumulador y tipo contador, estas se diferencian unas de otras en que: los contadores, su valor de cambio es una constante, ya que aumenta y disminuyen en el mismo valor, mientras que los acumuladores su valor de cambio no es constante. Un acumulador necesariamente lo inicializamos con cero (o al menos en la mayoría de los casos). Un contador puede iniciar con cualquier valor.

Bandera:
Las variables tipo bandera son aquellas que sólo admiten dos valores: cierto o falso, true o false, hombre o mujer... etc
Ciclo de Entrada Asegurada
La sintaxis es la siguiente:
while(condición)
Acción;

Funciona de la siguiente manera: primero evalúa la condición, si da como resultado cierta realiza la acción, luego vuelve a evaluar la condición, si su resultado es falso, se sale del ciclo y continúa con la ejecución del programa.
Hay que tener mucho cuidado, cuando trabajamos con ciclos, ya que podemos caer en un ciclo infinito, es decir que nunca se sale de él. Lo cual no es un error de sintaxis sino de lógica. Por lo cual en las acciones debemos siempre colocar algo que haga que se modifique el resultado de la condición, lo cual puede ser una bandera, un contador o un acumulador.

Ejemplo 
Diseñe un Programa que imprima los primeros 10 números.
#include <stdio.h>
#include <conio.h>
main()
{
int i=1; /*Declaramos nuestro contador con su Valor Inicial*/
while(i<=10) /*Mientras i sea menor o igual a 10:*/
{
printf("%d\t", i);/*Imprimir el valor de i*/
i+=1;/*Aumentar el contador en 1*/
}
getch();
return 0;
}

Ciclo Controlado por contador.
En algunas ocasiones, sabemos a ciencia cierta el número de veces que se tiene que repetir una misma acción o bloque de acciones. Y para ello es que nos sirve, esta estructura. Su sintaxis es la siguiente:

for( valor inicial; condición; incremento)
accion;
Donde:
Valor inicial: es el valor con el cual inicializamos nuestra variable de control.
Condición: si la cumple, ejecuta la acción o acciones e incrementa o decrementa la variable de control, sino la cumple la condición, se sale del ciclo.
Incremento; que puede ser positivo o negativo (decremento).

Ejemplo 
Este programa mostrará en pantalla 0 1 2 3 4 5
#include<stdio.h>
#include<conio.h>
int main()
{
  int x=0;
  for(x=0;x<=5;x++)
  {
    printf("%d ",x);
  }
  getch();
}
Ciclo Do... while
Es te ciclo funciona de la siguiente manera, realiza la acción o conjunto de acciones, luego evalúa una condición de resultar cierta vuelve a realizar la/s accion/es. Cuando sea falsa, se sale del ciclo. Esta estructura, no está lógicamente, estructurada, por ello, no hablaremos mucho, sin embargo realizaremos un par de ejemplos, de este ciclo.
Formato :

do {
sentencia;
.
while(<expL>);
La diferencia fundamental, entre el ciclo while y do...while, es que en este ultimo, las sentencias se realizarán por lo menos una vez, en cambio, con while, solo se cumplirán mientras se cumpla la condición, lo cual puede ser nunca.

Ejemplo .
Programa que determina si un año es bisiesto o no. Y un año es bisiesto si es múltiplo de cuatro, pero excluyendo aquellos que son múltiplos de 100 pero no de 400
#include <stdio.h>
#include <conio.h>
main()
{
int anio;
char respuesta;
printf("\n\n\nINICIO DEL PROGRAMA\n\n\n");
printf("\n\nEl programa te pide un anio y te dice exactamente si es bisiesto o no");
do
{
/*ENTRADA DE DATOS*/
printf("\n\nIntroduzca un anio determinado ");
scanf("%d",&anio);
/*PROCESO Y SALIDA DE DATOS*/
if ((anio%4==0 && anio%100!=0)||(anio%400==0)) printf("\n\nEl anio es bisiesto");
else printf("\n\nEl anio no es bisiesto");
printf("\n\nDesea introducir más datos\n\n");
respuesta=getch();
while(respuesta=='S' || respuesta=='s');
printf("\n\n\nFIN DEL PROGRAMA\n\n\n");
}
       SELECCIÓN MÚLTIPLE
Como su nombre lo indica, permite seleccionar entre varios caminos para llegar al final. En este caso se pueden elegir un camino o acción a ejecutar de entre varios posibles que se debe de evaluar, llamada selector. Sintaxis:
switch(selector)
{
case Etiqueta A:
Acción A;
break;
case Etiqueta B:
Acción B;
break;
case Etiqueta n:
Acción n;
break;
default:
Excepción;
break;
}
En donde:
Selector: Variables, expresiones simples de tipo ordinal, (enteros y caracteres –int y char-)

Etiqueta: Tiene que ser del mismo tipo de datos de selecto. Estas deber ser constantes únicas y diferentes de otras.

Excepción: Es opcional.

Ejemplo 
Diseñe un programa en C, que dado un número del 1 al 3, muestre en pantalla y en letras, el mismo número:
include <stdio.h>

#include <conio.h>
main()
{
int n;
printf("El N£mero es:\n");
scanf("%d", &n);
switch(n)
{
case 0: puts("Cero");
break;
case 1: puts("Uno");
break;
case 2: puts("Dos");
break;
case 3: puts("Tres");
break;
default: puts("Dato No valido");
break;
}
getch();
return 0;
}



OPERADORES


OPERADORES
C++ es un lenguaje muy rico en operadores. Se clasifican en los siguientes grupos:
• Aritméticos
• Relacionales y lógicos.
• Asignación.
• Acceso a datos y tamaño.
• Manipulación de bits.
• Varios.
Como consecuencia de la gran cantidad de operadores, se producen también una gran cantidad de expresiones diferentes. por ahora solo hablare de los operadores aritméticos.



Operadores aritméticos
C++ proporciona diferentes operadores que relacionan operaciones aritméticas.



Operador            Nombre         Propósito                      Ejemplo
   +            Más unitario          Valor positivo de x         x = +y,+5
   -             Negación              Valor negativo de x        x = —y;
   +            Suma                   Suma x e y                  z = x + y;
   -             Resta                   Resta y de x                z = x — y;
   *             Multiplicación       Multiplica x por y          y = x * y;
   /             División                Divide x por y               z = x / y;
   %           Módulo                Resto de division           z= x % y;
  

Ejemplo:
-i    // menos unitario
+w; // mas unitario
a * b // multiplicación
b / c  // división
a % t; // modulo
a + b  // suma 
a - b      // resta
int a = 5/2; // a toma el valor 2, porque a es entero
float b = 5/2; // b toma el valor 2.5, porque b es real





Declaracion de variable


Una característica de C++, es la necesidad de declarar las variables que se usarán en un programa. Esto resulta chocante para los que se aproximan al C++ desde otros lenguajes de programación en los que las variables de crean automáticamente la primera vez que se usan. Se trata, es cierto, de una característica de bajo nivel, más cercana al ensamblador que a lenguajes de alto nivel, pero en realidad una característica muy importante y útil de C++, ya que ayuda a conseguir códigos más compactos y eficaces, y contribuye a facilitar la depuración y la detección y corrección de errores y a mantener un estilo de programación elegante.
Uno de los errores más comunes en lenguajes en los que las variables se crean de forma automática se produce al cometer errores ortográficos. Por ejemplo, en un programa usamos una variable llamada prueba, y en un punto determinado le asignamos un nuevo valor, pero nos equivocamos y escribimos prubea. El compilador o interprete no detecta el error, simplemente crea una nueva variable, y continúa como si todo estuviese bien.
En C++ esto no puede pasar, ya que antes de usar cualquier variable es necesario declararla, y si por error usamos una variable que no ha sido declarada, se producirá un error de compilación.
COMO SE DECLARAN LAS VARIABLES

La declaración de variables es uno de los tipos de sentencia de C++. La prueba más clara de esto es que la declaración terminará con un ";". Sintaxis:
<tipo> <lista de variables>;
También es posible inicializar las variables dentro de la misma declaración. Por ejemplo:
int a = 1234;

Declararía las variables aseguir y encontrado; y además iniciaría los valores de a y seguir con los valores 1234 .
En C++, contrariamente a lo que sucede con otros lenguajes de programación, las variables no inicializadas tienen un valor indeterminado (con algunas excepciones que veremos más tarde), y contienen lo que normalmente se denomina "basura". Cuando se declara una variable se reserva un espacio de memoria para almacenarla, pero no se hace nada con el contenido de esa memoria, se deja el valor que tuviera previamente, y ese valor puede interpretarse de distinto modo, dependiendo del tipo.




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.
Ej:

#include<stdio.h>
#include<conio.h>
main(){
int i;
printf("Ingrese el numero que quiere que sea multiplicado por 2: ");
scanf("%d",&i);
i=i*2;
printf("El Resultado es= %d",i);
scanf("%d",&i);
getche();
}
en este ejemplo se puede observar que el programa esta hecho a base de varios caracteres y de signos de puntuación.

Caracteres
Los caracteres que se pueden utilizar para construir elementos del lenguaje (componentes léxicos o tokens) son:
abcdefghi jklmnopqrstuvwxyz
ABCDEFCHIJKLMNOPQRSTUVWXYZ
0123456789
caracteres espacio (blancos y tabulaciones)



Identificadores
Los identificadores (nombres de variables, constantes,...) deben comenzar con una letra del alfabeto (mayúscula o minúscula) o con 
un carácter subrayado, 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.
tescprueba // legal
Xl23 // legal
multi_palabra // legal
var25 // legal
l5var // no legal
C++ es sensible a las mayúsculas.


Paga_mes es un identificador distinto a paga_mes


Una buena práctica de programación aconseja utilizar identificadores significativos que ayudan a documentar un programa.
ejemplo:
nombre apellidos salario precio_neto



TIPOS DE DATOS
Los tipos de datos simples en C++ se dividen en dos grandes grupos. datos integrales (datos enteros) y de coma flotante (datos reales).


char     signed char    unsigned char
short         int           long
usigned short   unsigned   unsigned long
float          double     long double
void

int
Cantidad entera2 bytes o una palabra (varía según compilador).
char
Carácter1 byte.
float
Almacena valores reales en punto flotante.1 palabra (4 bytes).
double
Almacena valores reales en doble precisión.2 palabras (8 bytes).
void
Se utiliza para definir una función que no devuelve ningún valor o declarar punteros genéricos (lo veremos más tarde).




     Estos tipos básicos admiten una modificación del rango de valores, aplicando las siguientes palabras  reservadas:
       
 short (corto).
  
 long (largo).
  

 signed (con signo).
  

 unsigned (sin signo).