viernes, 26 de noviembre de 2010

ARREGLOS O ARRAYS

Un array o arreglo en C++ es un grupo de instrucciones que se guardan en memoria
 
Un arreglo en C++ es un conjunto de datos que se almacenan en memoria de manera seguida con el mismo nombre. Es una colección de variables del mismo tipo, todas las variables que pertenecen a un arreglo se denominan elementos.
Para diferenciar los elementos de un arreglo se utilizan índices detrás del nombre del arreglo y encerrados por []. El elemento 5° (quinto) de un arreglo, es representado por el índice [4], ya que los índices comienzan en 0. Esto significa que un arreglo de 10 elementos tendría los índices del 0 al 9: [0...9]
Ejemplos:

EJEMPLO DE CÓDIGO DONDE SE VISUALIZA UN ARREGLO

/Uso de arreglos en C++
#include
using std::cout;
using std::cin;
using std::endl;
int main()
{
int arregloEntero[10] = {0};
//Arreglo entero de 10 elementos inicializados todos en 0.
cout << "Arreglo recien declarado: \n" << endl;
for (int i = 0 ; i < 10 ; i++)
//Notar el menor estricto (<) para ir desde 0 hasta 9
cout << "ArregloEntero["<cout << "\nIntroduzca 10 nuevos valores " << endl;
for (int i = 0 ; i < 10 ; i++)
//Notar el menor estricto (<) para ir desde 0 hasta 9
{ cout << "Introduzca nuevo valor para arreglo Entero["<> arregloEntero[i];
}
cout << "\nLuego de los valores introducidos, el arreglo quedo asi: " << endl;
for (int i = 0 ; i < 10 ; i++)
//Notar el menor estricto (<) para ir desde 0 hasta 9
cout << "arreglo Entero["<

return 0;}

EN RESUMEN ES UN ARREGLO

*No es una variable, es un grupo de variables agrupadas conocidas como elementos.
*Cada elemento ocupa una posición dentro del grupo.
*Todos los elementos son del mismo tipo de dato.
*El nombre del arreglo indica donde se localiza el grupo en la memoria de la computadora.
*Los arreglos se clasifican de acuerdo a las dimensiones que tengan.
*Las dimensiones no tienen relación con el plano cartesiano, nada que ver con la matemática.
*Las dimensiones indican como están organizados los elementos dentro del grupo.
*Los arreglos de dos dimensiones pueden visualizarse con tablas.
*Los valores que se guarden en el arreglo se almacenan en los elementos ya que los elementos son variables.

VECTORES
Un vector, también llamado array(arreglo) unidimensional, es una estructura de datos que permite agrupar elementos del mismo tipo y almacenarlos en un solo bloque de memoria juntos, uno después de otro. A este grupo de elementos se les identifica por un mismo nombre y la posición en la que se encuentran. La primera posición del array es la posición 0.

Podríamos agrupar en un array una serie de elementos de tipo enteros, flotantes, caracteres, objetos, etc. Crear un vector en c++ es sencillo, seguimos la siguiente sintaxis: Tipo nombre[tamaño];

EJEMPLO DE CODIGO DE UN VECTOR

#include
using namespace std;
int main()
{
int dim;
cout << "Ingresa la dimension del vector" << endl;
cin >> dim; // Supongamos que ingrese 10
int vector[dim]; // mi vector es de tamaño 10

for(int i=0;i < dim;i++){

vector[i] = i * 10;
cout << vector[i] << " ";
}
return 0;
}

MATRICES

Una matriz es un vector de vectores o un también llamado array bidimensional. La manera de declarar una matriz es c++ es similar a un vector:
1
int matriz[fils][cols];
int es el tipo de dato, matriz es el nombre del todo el conjunto de datos y debo de especificar el numero de filas y columnas. Las matrices también pueden ser de distintos tipos de datos como char, float, double,etc.
Las matrices en c++ se almacenan al igual que los vectores en posiciones consecutivas de memoria. Usualmente uno se hace la idea que una matriz es como un tablero. Pero internamente el manejo es como su definicion lo indica, un vector de vectores, es decir, los vectores estan uno detras del otro juntos.
La forma de acceder a los elementos de la matriz es utilizando su nombre e indicando los 2 subindices que van en los corchetes. Si Coloco int matriz[2][3]=10; //estoy asignando al cuarto elemento de la tercera fila el valor 10. No olvidar que tanto filas como columnas se enumeran a partir de 0.

EJEMPLO DE CODIGO DE UNA MATRIZ

#include
#include
using namespace std;

int main (){
int matrix[50][50];
int tamano=0, i=0, j=0;
cout<<"Tamano de la matriz"< cin>>tamano;
cout<
for(i=0; i for(j=0; j matrix[i][j]=0;
}
}

for(i=0; i for(j=0; j
if(i if((i+j) >= ceil(tamano/2))
matrix[i][j]=1;

if(iceil(tamano/2))
if((j-i) <= ceil(tamano/2))
matrix[i][j]=2;

if(i>ceil(tamano/2) && j>ceil(tamano/2))
if((i+j) <= ceil(tamano/2 + tamano - 1))
matrix[i][j]=3;

if(i>ceil(tamano/2) && j if((i-j) <= ceil(tamano/2))
matrix[i][j]=4;

if(i==ceil(tamano/2))
matrix[i][j]=5;
if(j==ceil(tamano/2))
matrix[i][j]=5;
}
}

for(i=0; i for(j=0; j if(matrix[i][j]==0)
cout<<" ";
else
cout< }
cout< }

cin.get();
cin.get();
return 0;
}

FUENTES CONSULTADAS

http://codigomaldito.blogspot.com/2005/11/arreglos-o-arrays-en-c.html
http://ronnyml.wordpress.com/2009/07/04/vectores-matrices-y-punteros-en-c/
http://www.kernelpanic.org.ve/site/2009/12/03/programa-de-matrices-en-c/

Publicado por JOSE ALBERTO PARRA PEÑA

jueves, 25 de noviembre de 2010

VECTORES Y MATRICES

ENTRADAS Y SALIDAS


En c++ hay varias formas de ingresar y sacar un dato,esto depende en gran parte de las librerías que utilizaremos y la IDE que estemos trabajando, podemos ver algunas librerías como: iostream.h y sodio.h.



Se podría decir que esta libreria es una de las mas usadas en c++, que es la estandar, las operacionesde entrada y salida no forman parte del conjunto de sentencias de C++, sino que pertenecen al conjunto de funcionesy clases de la biblioteca estándar de C++.contienen archivos de cabecera iostream.h por lo que siempre que queramos utilizarlas deberemos introducir la línea de código
#include

Esta biblioteca es una implementación orientada a objetos y está basada en el concepto de flujos.
Los objetos de flujo que vienen predefinidos son:
1.cin, entrada estándar (teclado);
2.cout, la salida estándar (pantalla);
3.cerr y clog ponen mensajes de error en la salida estándar.

Estos objetos se utilizan mediante los operadores << y >>. El operador << se denomina operador de inserción; y apunta al objeto donde tiene que enviar la información. Por lo tanto la sintaxis de cout será: cout << variable1; Las cadenas de texto son variables y se ponen entre " " (comillas dobles). Por su parte >> se denomina operador de extracción, lee información del flujo cin (a la izquierda del operador) y las almacena en las variables que indica a la derecha).
La sintaxis sería la siguiente:

cin>>variable1 >>...>>variable n;
Un ejemplo basico de código es el siguiente:
#include

main ()
{
int i;
cout<<"digite un número"; cin>>i;

}

Mostrara por pantalla la frase "digite un número" y posteriormente almacenaría el valor introducido por teclado en la variable i.




Operaciones de salida.

Printf: Imprimir en pantalla
Para utilizar la función printf en nuestros programas debemos incluir la directiva:
#include
Si sólo queremos imprimir una cadena basta con escribir la siguiente línea de código.
printf( "Cadena" );
Como resultado muestra en pantalla:
Cadena
Lo que pongamos entre las comillas es lo que vamos a sacar por pantalla.
Si volvemos a usar otro printf, por ejemplo:

#include
void main()
{
printf( "Cadena" );
printf( "Segunda" );
}

Obtendremos:
CadenaSegunda

Este ejemplo nos muestra cómo funciona printf. Para escribir en la pantalla se usa un cursor que no vemos. Cuando escribimos algo el cursor va al final del texto. Cuando el texto llega al final de la fila, lo siguiente que pongamos irá a la fila siguiente. Si lo que queremos es sacar cada una en una línea deberemos usar "\n". Es el indicador de retorno de carro. Lo que hace es saltar el cursor de escritura a la línea siguiente:

#include
void main()
{
printf( "Cadena\n" );
printf( "Segunda" );
}

y tendremos:
Cadena
Segunda

También podemos poner más de una cadena dentro del printf:
printf( "Primera cadena" "Segunda cadena" );
Lo que no podemos hacer es meter cosas entre las cadenas:
printf( "Primera cadena" texto en medio "Segunda cadena" );
esto no es válido. Cuando el compilador intenta interpretar esta sentencia se encuentra "Primera cadena" y luego texto en medio, no sabe qué hacer con ello y da un error.
Pero ¿qué pasa si queremos imprimir el símbolo " en pantalla? Por ejemplo imaginemos que queremos escribir:
Esto es "extraño"
Si para ello hacemos:
printf( "Esto es "extraño"" );
obtendremos unos cuantos errores. El problema es que el símbolo " se usa para indicar al compilador el comienzo o el final de una cadena. Así que en realidad le estaríamos dando la cadena "Esto es", luego extraño y luego otra cadena vacía "". Pues resulta que printf no admite esto y de nuevo tenemos errores.
La solución es usar \". Veamos:
printf( "Esto es \"extraño\"" );

Operaciones de entrada

Scanf

El uso de scanf es muy similar al de printf con una diferencia, nos da la posibilidad de que el usuario introduzca datos en vez de mostrarlos. No nos permite mostrar texto en la pantalla, por eso si queremos mostrar un mensaje usamos un printf delante. Un ejemplo:

#include
void main()
{
int num;
printf( "Introduce un número " );
scanf( "%i", &num );
printf( "Has tecleado el número %i\n", num );
}


El scanf no mueve el cursor de su posición actual, así que en nuestro ejemplo queda:
Introduce un número _ /* La barra horizontal indica dónde esta el cursor */
Esto es porque en el printf no hemos puesto al final el símbolo de salto de línea '\n'. Además hemos dejado un espacio al final de Introduce un número: para que así cuando tecleemos el número no salga pegado al mensaje. Si no hubiésemos dejado el espacio quedaría así al introducir el número 120 (es un ejemplo):
Introduce un número120
Veamos cómo funciona el scanf. Lo primero nos fijamos que hay una cadena entre comillas. Esta es similar a la de printf, nos sirve para indicarle al compilador qué tipo de datos estamos pidiendo. Como en este caso es un integer usamos %i. Después de la coma tenemos la variable donde almacenamos el dato, en este caso 'num'.
Fíjate que en el scanf la variable 'num' lleva delante el símbolo &, este es muy importante, sirve para indicar al compilador cual es la dirección (o posición en la memoria) de la variable.
Podemos preguntar por más de una variable a la vez en un sólo scanf, hay que poner un %i por cada variable:

#include
void main()
{
int a, b, c;
printf( "Introduce tres números: " );
scanf( "%i %i %i", &a, &b, &c );
printf( "Has tecleado los números %i %i %i\n", a, b, c );
}

De esta forma cuando el usuario ejecuta el programa debe introducir los tres datos separados por un espacio.

También podemos pedir en un mismo scanf variables de distinto tipo:

#include
void main()
{
int a;
float b;
printf( "Introduce dos números: " );
scanf( "%i %f", &a, &b );
printf( "Has tecleado los números %i %f\n", a, b );
}

A cada modificador (%i, %f) le debe corresponder una variable de su mismo tipo. Es decir, al poner un %i el compilador espera que su variable correspondiente sea de tipo int. Si ponemos %f espera una variable tipo float.

Getch y getche

Si lo que queremos es que el usuario introduzca un carácter por el teclado usamos las funciones getch y getche. Estas esperan a que el usuario introduzca un carácter por el teclado. La diferencia entre getche y getch es que la primera saca por pantalla la tecla que hemos pulsado y la segunda no
Ejemplos:

#include
void main()
{
char letra;
printf( "Introduce una letra: " );
fflush( stdout );
letra = getche();
printf( "\nHas introducido la letra: %c", letra );
}

Resultado:
Introduce una letra: a
Has introducido la letra: a

¿Qué es el fflush( stdout )?. Pues bien, cuando usamos la función printf, no escribimos directamente en la pantalla, sino en una memoria intermedia (lo que llaman un bufer). Cuando este bufer se llena o cuando metemos un carácter '\n' es cuando se envía el texto a la pantalla. En este ejemplo yo quería que apareciera el mensaje Introduce una letra: y el cursor se quedara justo después, es decir, sin usar '\n'. Si se hace esto, en algunos compiladores el mensaje no se muestra en pantalla hasta que se pulsa una tecla (probar). Y la función fflush( stdout ) lo que hace es enviar a la pantalla lo que hay en ese bufer.
Y ahora un ejemplo con getch:

#include
void main()
{
char letra;
printf( "Introduce una letra: " );
fflush( stdout );
letra = getch();
printf("\n has introducido la letra :%c", letra );
}

Resultado:
Introduce una letra:
Has introducido la letra: a
Como vemos la única diferencia es que en el primer ejemplo se muestra en pantalla lo que escribimos y en el segundo no.

Podemos decir que en los casos de entrada y salida que se quieran aplicar, depende del programador si las quiere utilizar, por otra parte es bueno saber que hay varias formas de ingresar y imprimir un dato, puesto que no se sabe cuando se va a necesitar.

pstd:los ejemplos ya expuestos fueron bajados de internet junto con algunas explicaciones ya dichas.