Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tipos
Los Arreglos muchas veces se les determina su tipo y forma
primeramente estableciendo cuantas dimensiones posee como
cuantas serán utilizadas bajo el uso del Arreglo en cualquier
lenguaje de programación, para solamente ser establecidas sus
modalidades de funcionamiento como sus cualidades internas de
forma clara y totalmente objetivas sin entorpecer una sección
especial del programa que se esté realizando.
Los Arreglos que poseen una sola dimensión se les conoce y se les
denomina como “Vectores”, a los que les corresponde dos
dimensiones se les menciona como “Matrices” y por ultimo a los
arreglos cuyas dimensiones sean igual o superior a las 3
dimensiones se les conoce como “Tablas Multidimensionales”, Por
todo lo antes mencionado los tipos de Arreglos en
programación son los siguientes a exponer y explicarle a usted de
forma exhaustiva a continuación:
Arreglos Unidimensionales
Un Arreglo Unidimensional es una estructura de datos organizada
y bien coordinada, que cuenta con una cantidad pequeña de datos,
los cuales deben ser del mismo tipo para ser procesados en dicho
Arreglo, en programación se usa mayormente en la creación de la
estructura de listas en orden natural y totalmente con
elementos similares en su interior.
Arreglos Multidimensionales
Los Arreglos cuya estructura sea de dos o más dimensiones se les
conoce como “Arreglos Multidimensionales”, en ellos el termino
dimensiones se establece a los diferentes números de índices que
los mismo deben llevar en su estructura para poder llevar a cabo
sus funciones, el número de índices a utilizar deben ser
preestablecidos al igual que los datos en la misma forma que los
Arreglos unidimensionales con la diferencia que el presente
contara con una estructura más robusta y con más funciones.
Clasificación
La clasificación de los Arreglos son tres los conocidos y
establecidos en los lenguajes de programación, contando cada uno
con sus cualidades y especificaciones que les hacen únicos en
muchos sentidos siendo una de las mejores como más sofisticadas
secciones de un programa, los mismos son conocidos por ser
usados en programas de sorteos o de lotería los que le da en la
sociedad un uso fuerte que perdura con el tiempo, por todo lo
antes mencionado se clasifican los Arreglos en programación de
la siguiente manera:
Vectores
Los Vectores o también denominados bajo el seudónimo “Tablas
Unidimensionales”, son arreglos que solo poseen una sola
dimensión y no necesitan del uso de múltiples índices para
realizar sus funciones, estableciendo así sus ciclos en
operaciones cortas y poco elaboradas en un periodo de tiempo
módico como sin complicación alguna en su ejecución.
Matrices
Las Matrices son conocidas también bajo el seudónimo definido
como “Tablas Bidimensionales” y dicho seudónimo lo adquiere
gracias a poseer solamente dos dimensiones que componen su
estructura de composición, además comparte cierta cantidad de
similitudes con los vectores.
Tablas Multidimensionales
Al igual que cualquier Arreglo presentan una serie de
características similares, pero con la gran diferencia de que
estos poseen 3 o más dimensiones en su composición, así mismo el
número de pares de subíndices deben ser superiores para
abarcar cada una de las dimensiones que posea dicha tabla,
además el tamaño y la proporción que debe cumplir la Tabla
Multidimensional deben ser declaradas de forma obligatoria como
bien estipulada para evitar problemas referentes a errores de
sintaxis.
Métodos de ordenamiento.
La ordenación o clasificación es el proceso de organizar datos en algún
orden o secuencia específica, tal como creciente o decreciente, para
datos numéricos, o alfabéticos, para datos de caracteres. Los métodos
de ordenación más directos son los que se realizan en el espacio
ocupado por el array. Los más populares son:
Ejemplo Práctico
/*Ordenamiento Burbuja */
#include <stdio.h>
#include <conio.h>
#define TAM 9
int main()
{
int a[TAM] = { 9, 8, 0, 2, 5, 1, 3, 2, 9};
int i, pasada, aux;
Para insertar el elemento 45, habrá que insertar entre 43 y 65, lo que
supone desplazar a la derecha todos aquellos números de valor superior
a 45, es decir, saltar sobre 65 y 84.
5 14 24 39 43 65 84 45
Ejemplo Práctico.
#include <stdio.h>
int arreglo[10] = {3,10,1,8,15,5,12,6,5,4}; /*Declaracion e inicialización
del arreglo. */
Pseudocódigo QuickSort:
Nombre Función: OrdRap
Parámetros:
lista a ordenar (lista)
índice inferior (inf)
índice superior (sup)
// Inicialización de variables
1. elem_div = lista[sup];
2. i = inf - 1;
3. j = sup;
4. cont = 1;
// Clasificamos la sublista
7. while (cont)
8. while (lista[++i] < elem_div);
9. while (lista[--j] > elem_div);
10. if (i < j)
11. temp = lista[i];
12. lista[i] = lista[j];
13. lista[j] = temp;
14. else
15. cont = 0;
// Aplicamos la función
19. OrdRap (lista, inf, i - 1);
20. OrdRap (lista, i + 1, sup);
do {
// se hace la partición del arreglo
while (array[i]<p) i++;
while (p<array[j]) j--;
if (i<=j) {
Métodos de búsqueda.
La búsqueda es una operación que tiene por objeto la localización de un
elemento dentro de la estructura de datos (arreglo). A menudo un
programador estará trabajando con grandes cantidades de datos
almacenados en arreglos y pudiera resultar necesario determinar si un
arreglo contiene un valor que coincide con algún valor clave o buscado.
búsqueda secuencial
Este algoritmo compara uno a uno los elementos del arreglo hasta
recorrerlo por completo indicando si el número buscado existe.
Su implementación es la siguiente:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TAM 10
void main() {
int a[TAM], temp, i, j, num;
Búsqueda binaria
void main(){
int a[TAM], busca, temp, bajo, alto, central;
bajo = 0;
alto = TAM-1;
central = (bajo+alto)/2;
while (bajo < alto && busca != a[central]){
if(busca > a[central])
bajo = central+1;
else
alto = central-1;
central=(bajo+alto)/2;
}
if (busca == a[central])
printf("\n%d encontrado en posicion %d", busca, central);
else
printf("\n%d no existe", busca);
printf ("\n\nEl arreglo ordenado era\n\n");
for (i=0; i< TAM; i++)
printf ("%d ", a[i]);
getch();
}
Estructuras de Regristros.
Definición
int
float
tipo_nodo
El tipo de dato llamado tipo_nodo nos indica que las estructuras de datos
pueden contener tantos datos básicos como datos creados por nosotros
mismos.
Declaración de estructuras.
Donde:
char telefono[10];
char edad;
};
Otra forma sería:
struct agenda_entrada {
char nombre[50];
char apellido[60];
char telefono[10];
char edad;
}familiar, laboral;
Estructura y arreglos.
Donde:
Cadenas de Caracteres.
Cadenas de Caracteres (Definición)
La cadena vacía.
Cadenas de Caracteres.
Funciones Asociadas al Manejo de cadenas de caracteres
int main()
{
char texto1[]="corta";
char texto2[]="mediana";
char texto3[]="larguisima";
strcpy(texto2,texto1);
printf("%s\n",texto2);
strcpy(texto2,texto3);
printf("%s\n",texto2);
getch();
return 0;
}
Resultado:
Resultado:
int main(void)
{
char a[MAXLON+1];
int longitud;
clrscr();
printf ("Introduce una cadena (max. %d caracteres): ", MAXLON);
scanf("%s",&a);
longitud = strlen(a);
printf ("\nLongitud de la cadena: %d\n", longitud);
getch();
return 0;
}
Resultado:
printf( "s1=%s\t", s1 );
printf( "s2=%s\n", s2 );
i = strcmp( s1, s2 );
printf( "s1 es " );
if( i < 0 ) printf( "menor que" );
else if( i > 0 ) printf( "mayor que" );
else printf( "igual a" );
printf( " s2\n" );
return 0;
}
Resultado:
Cadenas de Caracteres.
Operaciones con cadenas:
Entrada/salida de cadenas.
int i;
i = 0;
while (cadena[i] != ’\0’) {
printf ("%c\n", cadena[i]);
i++;
}
return 0;
}
Debe notar que con las cadenas no hay que poner el caracter & del
identificador al usar scanf. Recordar: cadena[0] es un char, pero cadena,
sin mas, es la dirección de memoria en la que empieza el vector de
caracteres. Al ejecutar el programa introduciendo la cadena "una" se
obtiene el siguiente resultado por pantalla.
Hay un problema práctico con scanf: solo lee una (palabra), es decir,
una secuencia de caracteres no blancos. Si al ejecutar el programa
tecleamos un par de palabras (una prueba), sólo se muestra la primera.
Por pantalla se obtendría lo siguiente:
La función gets lee todos los caracteres que hay hasta encontrar un
salto de línea. Dichos caracteres, excepto el salto de línea, se
almacenan a partir de la dirección de memoria que se indique como
argumento y se añade un terminador.
#include <stdio.h>
#define MAXLON 11
int main(void)
{
char a[MAXLON+1], b[MAXLON+1];
Este es el resultado:
Ejemplo:
#include <stdio.h>
#define MAXLON 80
int main(void)
{
char a[MAXLON+1] = "una";
char b[MAXLON+1] = "cadena";
char c[MAXLON+1];
Se Debe notar que el bucle recorre los 10 caracteres que realmente hay
en original pero, de hecho, solo se requieren copiar los caracteres que
hay hasta el terminador, incluyéndole a él.
#define MAXLON 10
int main()
{
char original[MAXLON+1] = "cadena";
char copia[MAXLON+1];
int i;
Concatenación:
Punteros.
Definición:
Un puntero, tambien llamado apuntador, es una variable que contiene
una dirección de memoria, por lo tanto, su valor hace referencia a una
posición dentro de esta.
Declaración:
Para declarar un puntero hay que tener en cuenta que estos deben ir
precedidos de un "*". La forma sería la siguiente:
tipo_dato *puntero;
Donde:
Operadores.
Punteros.
Funciones.
Punteros y estructuras.
Al igual que con el resto de tipos de variables, C permite crear variables
punteros a estructuras. La forma de declarar estas variables es:
struct nombre_estructura *nombre_varible_estructura;
a.x = 5;
a.y = 23;
a.z = 10;
b = a;
p = &b; /* &b nos devuelve la dirección de la estructura b */
p->x = 2;
p->y = a.y;
p->z = a.z;
q = p; /* p y q apuntan a la misma estructura */
ó
struct nombre_estructura *nombre_varible_estructura[N][M];
vector_punteros_coordenadas[4] = &coor1;
vector_punteros_coordenadas[4]->y = 2;
Al igual que ocurría con los punteros a tipos básicos de datos también se
pueden pasar punteros a estructuras en las llamadas a funciones. Así por
ejemplo tendríamos:
struct coordenada coordenada1, *p_coordenada1;
flota distancia;
..................................
coordenada1.x = 5;
coordenada1.y = -11;
p_coordenada1 = &coordenada1;
..................................
cambiar_a_punto_simétrico_en_cuadrante (p_coordenada1);
ó
cambiar_a_punto_simetrico_en_cuadrante (&coordenada1);
..................................
....
....
....
/* La siguiente función intercambia la coordenada x por la y */
void cambiar_a_punto_simétrico_en_cuadrante(struct coordenada *c)
{
int aux;
aux = (*c).x;
(*c).x = (*c).y;
(*c).y = aux;
}
Archivos.
Definición:
Archivos.
Ficheros
fopen
fclose
feof
rewind
Lectura
Un archivo generalmente debe verse como un string (una cadena de
caracteres) que esta guardado en el disco duro. Para trabajar con los
archivos existen diferentes formas y diferentes funciones. Las funciones
que podríamos usar para leer un archivo son:
fgetc
Esta función lee un caracter a la vez del archivo que esta siendo
señalado con el puntero *archivo. En caso de que la lectura sea exitosa
devuelve el caracter leído y en caso de que no lo sea o de encontrar el
final del archivo devuelve EOF.
archivo = fopen("prueba.txt","r");
if (archivo == NULL){
printf("\nError de apertura del archivo. \n\n");
}
else {
printf("\n El contenido del archivo de prueba es \n\n");
while (feof(archivo) == 0){
caracter = fgetc(archivo);
printf("%c",caracter);
}
}
return 0;
}
fgets
Esta función está diseñada para leer cadenas de caracteres. Leerá hasta
n-1 caracteres o hasta que lea un retorno de línea. En este último caso,
el carácter de retorno de línea también es leído.
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
PARAMETROS:
size : Tamaño en bytes de cada elemento (de los que voy a leer).
fscanf
Escritura
Así como podemos leer datos desde un fichero, también se pueden crear
y escribir ficheros con la información que deseamos almacenar, Para
trabajar con los archivos existen diferentes formas y diferentes
funciones. Las funciones que podríamos usar para escribir dentro de un
archivo son:
fputc
Esta función escribe un carácter a la vez del archivo que esta siendo
señalado con el puntero *archivo. El valor de retorno es el carácter
escrito, si la operación fue completada con éxito, en caso contrario
será EOF.
fputs
fwrite