• No se han encontrado resultados

ALGORITMOS Y ESTRUCTURAS DE DATOS FUNDAMENTALES

N/A
N/A
Protected

Academic year: 2020

Share "ALGORITMOS Y ESTRUCTURAS DE DATOS FUNDAMENTALES"

Copied!
6
0
0

Texto completo

(1)

Prof. Ing. Octavio César Escobar Jaramillo [email protected]

1 /6

ALGORITMOS Y ESTRUCTURAS DE DATOS FUNDAMENTALES

La importancia de las computadoras radica fundamentalmente en su capacidad para procesar información. Esta característica les permite realizar actividades que antes solo realizaban los humanos.

Con el propósito de que la inforación sea procesada, se reqioere que ésta se almacene en la memoria de la computadora. De acuerdo con la forma en que los datos se organizan, se clasifican en:

Tipos de datos simples. Tipos de datos estructurados.

La principal característica de los tipos de datos simples consiste en que ocupan sólo una casilla de memoria; por lo tanto, una variable simple hace referencia a un único valor a la vez. En este grupo de datos se encuentran por ejemplo: números enteros, números reales, caracteres, y booleanos.

Por otra parte, los tipos de datos estructurados se caracterizan por el hecho de que con un nombre – identificador de la variable estructurada- se hace referencia a un grupo de casillas de memoria. Es decir, un tipo de dato estructurado tiene varios componentes. Cada uno de estos puede ser un tipo de dato simple o estructurado. Sin embargo, los componentes básicos, los del nivel más bajo, de cualquier tipo de datos estructurado son siempre tipos de datos simples.

El estudio de las estructuras de datos constituye una de las principales actividades para llegar al desarrollo de grandes sistemas de software. Las estructuras de datos básicos que son útiles para la mayorái de lengüajes de progamación son: arreglos y registros.

Arreglos en programación C

Con frecuencia se presentan en la práctica problemas cuya solución no resulta fácil –a veces imposible- si se utilizan tipos de datos simples.

Para ilustrar esta dificultad observemos el siguiente problema:

Consideremos que en una universidad se conocen las calificaciones de un grupo de alumnos. Se necesita saber cuántos de éstos tienen una calificación superior al promedio del grupo. ¿Cómo resolver este problema?

Solución con tipos de datos simples: Doble lectura

{ Este algoritmo resuelve el problema realizando dos veces la lectura de datos} {I y CONT son variables de tipo entero. AC, PROM y C son variables de tipo real}

1. Hacer AC ç0 e I ç1 2. Mientras (I <= 50 ) Repetir

Escribir “Ingrese la calificación”, I Leer C

(2)

2 /6 3. {Fin del ciclo del paso 2}

4. Hacer PROM çAC/50

{Como se necesita indicar cuántos alumnos obtuvieron calificación superior al promedio se releerán las 50 calificaciones para comparar cada una con el promedio calculado en el paso 4}

Hacer CONT ç0 e I ç1 5. Mientras (I <= 50 ) Repetir

Escribir “Ingrese la calificación”, I Leer C

5.1 SI C > PROM entonces Hacer CONT çCONT + 1 5.2 {Fin del condicional del paso 5.1} Hacer I çI + 1

6. {Fin del ciclo del paso 5} 7. Escribir CONT

Problema a esta solución:

1. Se tiene que realizar doble lectura de las calificaciones. 2. Puede haber diferenciaentre la primera y segunda lectura

Los tipos de datos estructurados que ayudan a resolver problemas como éste son lso arreglos. Un arreglo unidimendional se define como una colección finita, homogénea y ordenada de elementos.

Finita: Todo arreglo tiene un límite; es decir, se debe determinar cuál será el número máximo de elementos que formarán parte del arreglo.

Homogénea: Todos los elementos de un arreglo son del mismo tipo.

Ordenada: Se puede determinar cuáles son el primero, el segundo, el tercero,… y el enésimo elemento. Los arreglos son una colección de variables del mismo tipo que se referencian utilizando un nombre común. Un arreglo consta de posiciones de memoria contigua. La dirección más baja corresponde al primer elemento y la más alta al último. Un arreglo puede tener una o varias dimensiones. Para acceder a un elemento en particular de un arreglo se usa un índice.

El formato para declarar un arreglo unidimensional es: tipo nombre_arr [ tamaño ]

Por ejemplo, para declarar un arreglo de enteros llamado listanum con diez elementos se hace de la siguiente forma:

int listanum[10];

En C, todos los arreglos usan cero como índice para el primer elemento. Por tanto, el ejemplo anterior declara un arreglo de enteros con diez elementos desde listanum[0] hasta listanum[9].

La forma como pueden ser accesados los elementos de un arreglo, es de la siguiente forma: listanum[2] = 15; /* Asigna 15 al 3er elemento del arreglo listanum*/

(3)

Prof. Ing. Octavio César Escobar Jaramillo [email protected]

3 /6

El lenguaje C no realiza comprobación de contornos en los arreglos. En el caso de que sobrepase el final durante una operación de asignación, entonces se asignarán valores a otra variable o a un trozo del código, esto es, si se dimensiona un arreglo de tamaño N, se puede referenciar el arreglo por encima de N sin provocar ningún mensaje de error en tiempo de compilación o ejecución, incluso aunque probablemente se provoque el fallo del programa. Como programador se es responsable de asegurar que todos los arreglos sean lo suficientemente grandes para guardar lo que pondrá en ellos el programa. C permite arreglos con más de una dimensión , el formato general es:

tipo nombre_arr [ tam1 ][ tam2 ] ... [ tamN];

Por ejemplo un arreglo de enteros bidimensionales se escribirá como: int tabladenums[50][50];

Observar que para declarar cada dimensión lleva sus propios paréntesis cuadrados.

Para acceder los elementos se procede de forma similar al ejemplo del arreglo unidimensional, esto es, tabladenums[2][3] = 15; /* Asigna 15 al elemento de la 3ª fila y la 4ª columna*/

num = tabladenums[25][16];

A continuación se muestra un ejemplo que asigna al primer elemento de un arreglo bidimensional cero, al siguiente 1, y así sucesivamente.

main() {

int t,i,num[3][4]; for(t=0; t<3; ++t) for(i=0; i<4; ++i) num[t][i]=(t*4)+i*1; for(t=0; t<3; ++t) {

for(i=0; i<4; ++i)

printf("num[%d][%d]=%d ", t,i,num[t][i]); printf("\n");

} }

En C se permite la inicialización de arreglos, debiendo seguir el siguiente formato: tipo nombre_arr[ tam1 ][ tam2 ] ... [ tamN] = {lista-valores};

Por ejemplo:

int i[10] = {1,2,3,4,5,6,7,8,9,10};

(4)

4 /6

Manejo de estructuras en programación C

Al contrario que los arrays, las estructuras nos permiten agrupar varios datos, que mantengan algún tipo de relación, aunque sean de distinto tipo, permitiendo manipularlos todos juntos, usando un mismo identificador, o cada uno por separado.

Las estructuras son llamadas también muy a menudo registros, o en inglés records. Tienen muchos aspectos en común con los registros usados en bases de datos. Y siguiendo la misma analogía, cada objeto de una estructura se denomina a menudo campo, o field.

Sintaxis:

struct [<identificador>] {

[<tipo> <nombre_objeto>[,<nombre_objeto>,...]]; } [<objeto_estructura>[,<objeto_estructura>,...];

El identificador de la estructura es un nombre opcional para referirse a la estructura.

Los objetos de estructura son objetos declarados del tipo de la estructura, y su inclusión también es opcional. Sin bien, aún siendo ambos opcionales, al menos uno de estos elementos debe existir. En el interior de una estructura, entre las llaves, se pueden definir todos los elementos que consideremos necesarios, del mismo modo que se declaran los objetos.

Las estructuras pueden referenciarse completas, usando su nombre y también se puede acceder a los elementos definidos en el interior de la estructura, usando el operador de selección (.), un punto.

Una vez definida una estructura, es decir, si hemos especificado un nombre para ella, se puede usar igual que cualquier otro tipo de C++. Esto significa que se pueden declarar más objetos del tipo de estructura en cualquier parte del programa. Para ello usaremos la forma normal de declaración de objetos, es decir:

[struct] <identificador> <objeto_estructura> [,<objeto_estructura>...];

En C++ la palabra struct es opcional en la declaración de objetos, al contrario de lo que sucede en C, en el que es obligatorio usarla.

Ejemplo: struct Persona { char Nombre[65]; char Direccion[65]; int AnioNacimiento; } Fulanito;

(5)

Prof. Ing. Octavio César Escobar Jaramillo [email protected]

5 /6 Resultado de la ejecución del programa aterior:

dame matricula :4928635 dame nombre :Luis Daniel Perez dame edad :10

MATRICULA =4928635 NOMBRE =Luis Daniel Perez MESES =120

(6)

6 /6

Desarrollo de la practica

1. Desarrollo los siguientes algoritmos:

Ejercicio 1: Codificar una estructura para control de 4 datos relacionados a una

persona. Llenar valores preguntando a consola

Ejercicio 2: Codificar una estructura para control de 6 datos relacionados a salón de

clases. Llenar valores preguntando a consola

Ejercicio 3: Codificar un algoritmo usando ‘for’ que realice un conteo decreciente

del 1200 al 0 pero restando de 2

Ejercicio 4: Codificar un algoritmo usando ‘while’ que realice un conteo

decreciente del 1200 al 0 pero restando de 2

Ejercicio 5: Codificar una estructura de datos para llenar información de 10

números. Determinar cual de ellos es el menor

Ejercicio 6: Codificar una estructura de datos para llenar información de 10

números. Determinar cuantos de estos son pares

2. Contadores: Realizar un programa que almacene un arreglo de 10 localidades.

Deberá indicar de los 10 valores obtenidos cuantos de ellos son menores o iguales a

50. Cuantos tiene valor mayor a 50 y menor o igual a 1000 y cuantos son mayores a

1000

3. Acumuladores: Realizar un programa que almacene un arreglo de 10 localidades.

Deberá regresar el total de la suma de los números pares contenidos en el arreglo y

el total de los nones.

Referencias

Documento similar

If certification of devices under the MDR has not been finalised before expiry of the Directive’s certificate, and where the device does not present an unacceptable risk to health

In addition to the requirements set out in Chapter VII MDR, also other MDR requirements should apply to ‘legacy devices’, provided that those requirements

The notified body that issued the AIMDD or MDD certificate may confirm in writing (after having reviewed manufacturer’s description of the (proposed) change) that the

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

«Aunque esta Sala ha declarado, entre otras, en sus Sen- tencias de 29 marzo 1989, 26 octubre 1993, 21 marzo 1994, 29 marzo 1994 y 30 abril 1994 que el justiprecio es un valor

El Tratado de Maastricht introduce como elemento fundamental de la Unión Europea la cooperación en los ámbitos de la justicia y en los asuntos de interior (JAI) y establece la doble