Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tipos de datos
Especificación de TDAs
Implementación de TDAs
Resumen
Laboratorio Semana 2: Preliminares
de los a los
PROBLEMAS PROGRAMAS
REALIDAD
Análisis de la
Necesidad Diseño de la Pruebas y
Problema ALGORITMO Codificación puesta en
(Formulación y Especificado
solución FORMAL
PROGRAMA
FASE
Para cada TDA se elige una representación (struct) y se
ESTRUCTURAS reemplaza por sentencias en lenguaje C.
DE DATOS CODIFICACIÓN
PROGRAMA
Programa en C
Laboratorio Semana 2: Preliminares
Proceso de abstracción en el desarrollo de
programas
• Modelo: Descripción o representación de la realidad (hechos,
situaciones, fenómenos, procesos, estructuras y sistemas, entre
otros). Dicha representación es una construcción racional de un
campo de estudio concreto, y suele presentarse en diferentes grados
de abstracción(Sierra; 1978:39).
• Los modelos se construyen como un medio de ayuda para estudiar la
realidad.
• El desarrollo de programas utiliza modelos matemáticos ¿por qué?
Laboratorio Semana 2: Preliminares
¿Dónde se
almacenan los
7808670 María 05/06/2020 1.500.000 20.000.000 datos?
García
TIPOS DE DATOS: Representa a datos del mundo real y a las operaciones que se pueden realizar
sobre esos datos.
Laboratorio Semana 2: Preliminares
✔ Declaración se enuncia las propiedades de una variable, e indica que en alguna otra
parte (otro archivo) será definida
extern int a;
extern float F[100];
✔ Debe existir sólo una definición de cada variable, pero la declaración puede estar
muchas veces (debe coincidir con la definición) en distintos ámbitos.
Funciones
• El uso de archivos header, permite la utilización de varias funciones
predefinidas.
• Se pueden construir archivos propios con definiciones que serán incluidas en
el código.
✔ Útil para implementar una serie de funciones asociadas a un TDA específico
• Las definiciones de las bibliotecas de funciones y variables de ANSI C pueden
ser consultadas acá:
✔ https://www.tutorialspoint.com/c_standard_library/index.htm
Funciones
• Funciones recursivas:
✔ Función se llama a si misma durante la ejecución
salida algRec(entrada n)
…
if (condición(n)) Caso base
Condición de término
return valor
end if
…
…
valor = algRec(entrada modificada)
return valor
15
Funciones
• Ejemplo:
✔ Calcular el factorial de un número positivo n:
• F(n) = n*n-1*n-2*n-3*….*2*1
• F(n) = n*F(n-1); F(1) = 1; F(0)=0
• Donde:
✔ p es la variable que almacena una dirección de memoria, y
✔ Tipo_dato corresponde al Tipo de Dato que se almacena en esa
dirección de memoria
Punteros en C
Dir Contenido
• Es posible definir en C un tipo de dato puntero, que
almacena una dirección de memoria en la cual se @10
encuentra un dato de cierto tipo. Ejemplo: @11
int *p=NULL; //crea un puntero a entero p @12 NULL
@20
@13
• Existen dos operadores para una variable tipo puntero: @14
✔ *p: indica el contenido de la dirección indicada por p @15
✔ &a: indica la dirección de la variable a @16
@17
• Ejemplo: @18
int x = 450; @19
p = &x; //se dice que “p apunta a x” x @20 450
300
printf(“%d”, *p); @21
@22
*p = 300;
@23
printf(“%d”, x); @24
Punteros en C
• En resumen:
int *x;
• Estructuras : Agrupa en un tipo de dato definido por el programador una cantidad fija de
campos. Estos campos pueden ser del mismo o de distinto tipo de dato. Estos tipos de datos
a su vez puede ser primitivo o compuesto.
Punteros y arreglos en C
Dir Contenido
• Arreglos y asignación de memoria
@10
• Cuando se crea un arreglo (int a[5]) se reservan 5 espacios @11
de memoria consecutivos para almacenar enteros @12
a[0] @13
• La asignación *p1 = &a[1] (suponiendo p1 puntero a a[1] @14
entero), hará apuntar p1 a la dirección @14 a[2] @15
• p1 + 1, indica el siguiente elemento en el arreglo a[3] @16
a[4] @17
✔ p1 + i: referencia a i elementos después de p1 @18
✔ p1 – i: referencia a i elementos antes de p1 @19
@20
@21
@22
@23
@24
Punteros y arreglos en C
Dir Contenido
• Ejercicio:
1 int a[10]={12,4,65,3,23,45,87,6,9,10}// desde @11 @10
2 int *p1, i;//suponga se crea en @23 @11
3 p1 = &a[0]; @12
4 for(i=0;i<10;i++) @13
5 printf(“%d ”, *(p1+i)); @14
6 @15
7 for(i=0;i<9;i++){ @16
8 if(*p1 > *(p1+1)) @17
9 swap(p1, (p1+1)) // definida antes @18
10 p1 = p1 + 1; @19
11 } @20
12 @21
13 for(i=0;i<10;i++) @22
14 printf(“%d ”, a[i]); @23
@24
Punteros en C
Dir Contenido
… …
… …
a = sumar (a,b) sumar (&a,&b)
Punteros en C
Dir Contenido
• Ejemplo: ¿cómo hacer una función que intercambie el
@10
valor de dos variables?. Es decir: swap(a ,b)
@11
temp = a; @12
a = b; @13
@14
b = temp
@15
void swap(int *v1, int *v2){ @16
int temp; @17
@18
temp = *v1;
@19
*v1 = *v2; @20
*v2 = temp; @21
} @22
@23
El llamado a la función será swap(&a, &b) @24
Recordemos que…
ALTERNATIVA 1 ALTERNATIVA 2
Tipos de Datos Abstracto
Ejemplo - Especificación del TDA matriz de enteros
• Dominio:
Número de parámetros
argc=4 argv[]
0 “programa.exe”
1 “10”
2 “datos.txt”
3 “3.4”
• Al ser de tipo char * (cadenas de caracteres), ¿qué debo hacer para usar los
valores de entrada?