SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
Sesión 4
Programación Estructurada en ANSI C
Rafael Menéndez de Llano Rozas
DEPARTAMENTO DE INFORMÁTICA Y ELECTRÓNICA
Este material se publica bajo licencia:
Creative Commons BY-NC-SA 4.0
Índice
Universidad de Cantabria. Grado de Informática. RMЯ 73
1. Introducción.
1. Elementos lexicográficos y estructura.
1. Datos escalares, expresiones y
entrada/salida básica.
2. Selección.
2. Iteración.
3. Funciones, punteros y estructuración.
4. Datos estructurados.
5. Otros aspectos.
4. Datos estructurados
 Existen en C dos tipos de datos estructurados:
 Colección del mismo tipo de datos: array.
 Colección de distinto tipo de datos: struct.
 Para la definición del array se utiliza el operador primario [ ] con
el número total de elementos:
int array_de_enteros[100];
 Los elementos del array se recorren con un índice que siempre
empieza en cero (ojo) y es entero:
array_de_enteros[25] = 321;
 En C99 se pueden hacer arrays con asignación dinámica que
se crean en tiempo de ejecución. Muy cómodo.
 También se pueden inicializar con llaves (no hace falta static):
static int dias[] = {31,28,31,30,31,30,31,31,30,31,30,31};
 Se puede omitir el límite. Si se pone puede coincidir, o no. Si es menor se
ponen a cero, si es mayor da error.
Universidad de Cantabria. Grado de Informática. RMЯ 74
4. Comparación de arrays
 Las siguientes declaraciones de arrays en
Java:
final int MAX=8;
float[ ] v1; //índice va de 0 a MAX-1
v1=new float[MAX]; // tamaño puesto en la creación
short[ ] [ ] c=new short[MAX][MAX];
 Tienen el siguiente equivalente en C:
#define MAX 8 // constante en C
float v1[MAX]; //índice va de 0 a MAX-1array
// creado al declararlo
short int c [MAX][MAX];
 En C los arrays de números NO se inicializan a cero.
Universidad de Cantabria. Grado de Informática. RMЯ 75
4. Datos estructurados: arrays
 El nombre de un array en C es sinónimo de su dirección de
comienzo, por lo tanto es como un puntero constante.
 Las direcciones de los arrays no se pueden cambiar, son
constantes.
 Las operaciones con punteros son (algunas ya vistas):
 Asignación.
 Comparación.
 Dirección e Indirección.
 Incremento y Decremento.
 Adicción y Diferencia.
 Ejercicio 17: bájate el programas 23.c y guárdalo en tu directorio.
1. Ábrelo con un editor, examínalo y compréndelo.
2. Observa la equivalencia entre punteros y arrays.
3. Mira las operaciones con punteros.
Universidad de Cantabria. Grado de Informática. RMЯ 76
4. Datos estructurados: arrays
#include <stdio.h>
#define TAM 3
int main ()
{
int fechas[TAM]={1,4,7}, *pun, indice, suma;
double facturas[TAM]={1.0,5.0,8.0}, *punf;
pun = fechas; /* asignacion de punteros */
// fechas=pun; /* array = array + 3; <=> 5 = 5 + 3; */
punf = facturas;
printf("tamaños %lu %lu %lu n", sizeof(int), sizeof(double), sizeof(fechas));
for (indice = 0; indice < TAM; indice++)
printf("punteros + %d: %10p %10p n", indice, pun + indice, punf + indice);
for (indice = 0; indice < TAM; indice++)
printf("indice %d: %d %d %lf %lfn", indice, fechas[indice],
*(pun+indice), facturas[indice], *(punf+indice));
for (indice = 0, suma = 0; indice < TAM; indice++)
suma += *(pun + indice);
printf("Suma: %d n", suma);
printf("Diferencia de dos punteros enteros distancia 2: %ld n",
&facturas[2]-&facturas[0]);
return(0);
}
Programación en C - Rafael Menéndez de Llano Rozas 77
4. Datos estructurados: arrays dobles
 También se pueden hacer de varias dimensiones:
int matriz[4][5]; //almacenados por filas
 Se pueden inicializar:
int matriz[2][2] = { {1,2}, {2,4} };
int matriz[2][2] = { 1, 2, 2, 4 };
 Si se omite una dimensión (slice) nos estamos refiriendo a toda la
fila.
 En C no se puede usar matriz[2,2] ya que es usar el operador “,”.
 También son equivalentes a varias formas de punteros:
 Una array de punteros.
 Un puntero doble.
 …
Universidad de Cantabria. Grado de Informática. RMЯ 78
Ejercicio 18: Arrays dobles
 Bájate los programas 24.c, 25.c y 26.c guárdalos en
tu directorio.
1. Ábrelos con un editor.
2. Observa como se accede a una matriz doble.
3. Observa como se accede a un puntero doble.
4. Y comprende las equivalencias entre punteros y que
asignaciones están bien y mal.
Universidad de Cantabria. Grado de Informática. RMЯ 79
4. Datos estructurados: string
 El string en C es un array (puntero) de caracteres terminados
en uno especial (marca de fin de string) que es el carácter nulo
'0‘, para el que también se reserva espacio.
 El string nulo es NULL (en stdio.h).
 La inicialización se hace con comillas (string constante):
 char tira[20] = "esto es un mensaje";
 char otra[ ] = "esto es otro mensaje";
 char *pun_tira = “Llevamos 9 horas";
 Los elementos son caracteres:
 tira[12] = 's';
 Para entrada/salida se utiliza el conversor %s o las funciones
puts() y gets() –esta última está obsoleta y es peligrosa– :
char tira[81]; /* declaracion de array */
pun_tira = gets(tira);
puts(tira);
Universidad de Cantabria. Grado de Informática. RMЯ 80
4. Datos estructurados: string
 Hay cosas que no se pueden hacer:
char tira[], *pun;
…
tira = “esto no se puede hacer”; // es igual que hacer 23=15
pun = “esto si”; // var = 15;
 Existe una librería para trabajar con string a la que se accede a través
de string.h. Las funciones más usuales son:
 strcpy(): toma como argumentos dos tiras de caracteres y copia la segunda
en la primera, es decir sus contenidos, no sus direcciones. Hay que
comprobar que la primera tiene espacio suficiente.
 strlen(): toma una tira como argumento y devuelve un entero con su longitud
sin contar el carácter nulo.
 strcat(): toma como argumentos dos tiras de caracteres y devuelve en la
primera la unión de ambas. Para ello debe asegurarse que en la primera tira
caben las dos unidas.
 strcmp(): toma como argumentos dos tiras de caracteres y compara sus
contenidos, no sus direcciones. Devuelve un entero que indica si las tiras son
iguales o no. En el primer caso devolverá un 0, en el segundo un entero
positivo o negativo dependiendo de si la primera tira es mayor o menor que la
segunda. El valor absoluto será la diferencia de código ASCII.
Universidad de Cantabria. Grado de Informática. RMЯ 81
Ejercicio 19: Strings
 Bájate los programas 27.c , 28.c y 29.c guárdalos en
tu directorio.
1. Ábrelos con un editor.
2. Observa como se trabaja con strings y las inicializaciones.
3. Cambia la función gets por fgets.
4. Usa la librería de manejo de strings .
5. Date cuenta que el algoritmo es importante.
Universidad de Cantabria. Grado de Informática. RMЯ 82
4. Datos estructurados: arrays y funciones
 Se pueden pasar arrays a funciones como argumentos. Por
ejemplo un array de enteros (se puede poner la dimensión):
 Prototipo: int media(int array[ ], int);
 Llamada: entero = media(array, n);
 Definición: int media(int array[ ], int n) { … }
 Al ser direcciones siempre se pasan por referencia salvo uso
de const.
 No pueden devolverse array pero si punteros (o por argumento).
 Pasar como argumento un array de dos dimensiones es como
pasar un puntero a un array. Al menos hay que dar una
dimensión (se pueden dar las dos):
 Dos: función(int matriz [2][3]) …
 Una: función(int matriz [ ][3]) …
 Puntero: función(int (*matriz)[3]) …
Universidad de Cantabria. Grado de Informática. RMЯ 83
4. Datos estructurados: struct
 Es una colección de datos de distinto tipo. Parecido a la clase
Java sin operaciones (sólo con datos).
 Primero hay que definir una plantilla (template), por ejemplo:
struct estructura /* hace de tipo */
{
char nom_miembro1; /* los campos de la struct */
int nom_miembro2; /* cualquier tipo */
... /* mas tipos … */
char array[81];
} ;
 Y después la declaración de una variable:
struct estructura tuya; /* normal */
struct estructura {...} tuya; /* todo en uno */
struct estructura mia = {'a', 23, …, "pepe"}; /* inicial */
struct estructura mia[100]; /* array de estructura */
struct estructura *deaquel; /* puntero a estructura */
Universidad de Cantabria. Grado de Informática. RMЯ 84
Puede ir la variable directa
4. Datos estructurados: struct
 Puede ser muy práctico usar typedef:
typedef struct estructura Estructura;
typedef float complejo[2];
 Las operaciones permitidas con las structs son:
 Tener acceso a sus miembros.
 Obtener su dirección.
 Asignarlas (copiarlas). Esto no estaba permitido en C clásico K&R.
 Para acceder a los campos se utiliza el operador “.” o “->”:
mia[32].nom_miembro1 = '2';
tuya.miembro2 = 13;
deaquel->array[5] = ‘3’; /* -> para punteros para evitar
(*deaquel).array[5]
 Las dos últimas implican que se pueden pasar como argumentos a
funciones (por valor) y se pueden devolver:
 Prototipo: struct comp suma(struct pri, struct seg);
 Llamada: complejo=suma(A,B);
 Definición: struct comp suma (struct comp uno,
struct comp dos) { … }
Universidad de Cantabria. Grado de Informática. RMЯ 85
Ejercicio 20: arrays, funciones y structs
 Bájate los programas 30.c y 31.c guárdalos en tu
directorio.
1. Ábrelos con un editor.
2. Observa como se pasan arrays a funciones. Y como son
equivalentes a punteros.
3. Como por defecto se pasan por referencia pero también se
puede hacer análogo a por valor.
4. Analiza como se hacen las plantillas de los structs.
5. Como se pueden pasar y devolver a/de funciones.
6. Cambia el programa 31 y usa typedef.
7. Descubre como se almacenan los campos de una struct.
8. Prueba a poner entre dos campos otro de tipo char.
Universidad de Cantabria. Grado de Informática. RMЯ 86

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Informatica
InformaticaInformatica
Informatica
 
Matlab
MatlabMatlab
Matlab
 
TIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLABTIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLAB
 
diapositivas de matlab
diapositivas de matlabdiapositivas de matlab
diapositivas de matlab
 
cap12.pdf
cap12.pdfcap12.pdf
cap12.pdf
 
cap11.pdf
cap11.pdfcap11.pdf
cap11.pdf
 
Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)
 
Intro matlab msantos
Intro matlab msantosIntro matlab msantos
Intro matlab msantos
 
Diapositivas matlab
Diapositivas matlabDiapositivas matlab
Diapositivas matlab
 
Programacion matlab
Programacion matlabProgramacion matlab
Programacion matlab
 
Matlab
MatlabMatlab
Matlab
 
Programacion En Mat Lab
Programacion En Mat LabProgramacion En Mat Lab
Programacion En Mat Lab
 
Matlab (1)
Matlab (1)Matlab (1)
Matlab (1)
 
Numpy y Scipy
Numpy y ScipyNumpy y Scipy
Numpy y Scipy
 
Matlab principios
Matlab principiosMatlab principios
Matlab principios
 
Programacion en matlab
Programacion en matlabProgramacion en matlab
Programacion en matlab
 
2.4 tipo de dato entero
2.4 tipo de dato entero2.4 tipo de dato entero
2.4 tipo de dato entero
 
Matlab scientific scilab_mathematics
Matlab scientific scilab_mathematicsMatlab scientific scilab_mathematics
Matlab scientific scilab_mathematics
 
Apuntesmatlab
ApuntesmatlabApuntesmatlab
Apuntesmatlab
 
Apuntesmatlab
ApuntesmatlabApuntesmatlab
Apuntesmatlab
 

Similar a Sesion 5

Descomposicion funcional parte ii 2013 2
Descomposicion funcional parte ii 2013 2Descomposicion funcional parte ii 2013 2
Descomposicion funcional parte ii 2013 2IngEsquivel
 
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)José Antonio Sandoval Acosta
 
Tutorial de matrices c#
Tutorial de matrices c#Tutorial de matrices c#
Tutorial de matrices c#elidetjc
 
Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)José Antonio Sandoval Acosta
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaJhosse Ant Siilva
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matricesJohanna Marin
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matricesJohanna Marin
 
Aplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionalesAplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionalesmarigelcontreras
 
Guia8 programacion
Guia8 programacionGuia8 programacion
Guia8 programacionEdwin Ortega
 
principales datos simples
principales datos simplesprincipales datos simples
principales datos simplesedgarcr717
 
Capitulo i modelos_matematicos_y_errores,_parte_1[1]
Capitulo i modelos_matematicos_y_errores,_parte_1[1]Capitulo i modelos_matematicos_y_errores,_parte_1[1]
Capitulo i modelos_matematicos_y_errores,_parte_1[1]chinop7
 

Similar a Sesion 5 (20)

06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C
 
Tema 5 - Estructuras de datos.pdf
Tema 5 - Estructuras de datos.pdfTema 5 - Estructuras de datos.pdf
Tema 5 - Estructuras de datos.pdf
 
Descomposicion funcional parte ii 2013 2
Descomposicion funcional parte ii 2013 2Descomposicion funcional parte ii 2013 2
Descomposicion funcional parte ii 2013 2
 
Tutorial descilab
Tutorial descilabTutorial descilab
Tutorial descilab
 
arrays
arraysarrays
arrays
 
Sesion 4
Sesion 4Sesion 4
Sesion 4
 
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
 
Tutorial de matrices c#
Tutorial de matrices c#Tutorial de matrices c#
Tutorial de matrices c#
 
Tutorial de matrices c#
Tutorial de matrices c#Tutorial de matrices c#
Tutorial de matrices c#
 
Xxxxxxxxxxxxxx
XxxxxxxxxxxxxxXxxxxxxxxxxxxx
Xxxxxxxxxxxxxx
 
Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matrices
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matrices
 
Aplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionalesAplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionales
 
Guia8 programacion
Guia8 programacionGuia8 programacion
Guia8 programacion
 
2 punteros y lenguaje c
2 punteros y lenguaje c2 punteros y lenguaje c
2 punteros y lenguaje c
 
principales datos simples
principales datos simplesprincipales datos simples
principales datos simples
 
Arreglos
ArreglosArreglos
Arreglos
 
Capitulo i modelos_matematicos_y_errores,_parte_1[1]
Capitulo i modelos_matematicos_y_errores,_parte_1[1]Capitulo i modelos_matematicos_y_errores,_parte_1[1]
Capitulo i modelos_matematicos_y_errores,_parte_1[1]
 

Último

Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajasjuanprv
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdfCristhianZetaNima
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfvladimirpaucarmontes
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingKevinCabrera96
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfs7yl3dr4g0n01
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesgovovo2388
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
Ejemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - EjerciciosEjemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - EjerciciosMARGARITAMARIAFERNAN1
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralsantirangelcor
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfannavarrom
 
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASPersonalJesusGranPod
 
clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinosDayanaCarolinaAP
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 

Último (20)

Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards Deming
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitales
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
Ejemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - EjerciciosEjemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - Ejercicios
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integral
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
 
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
 
clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinos
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 

Sesion 5

  • 1. Sesión 4 Programación Estructurada en ANSI C Rafael Menéndez de Llano Rozas DEPARTAMENTO DE INFORMÁTICA Y ELECTRÓNICA Este material se publica bajo licencia: Creative Commons BY-NC-SA 4.0
  • 2. Índice Universidad de Cantabria. Grado de Informática. RMЯ 73 1. Introducción. 1. Elementos lexicográficos y estructura. 1. Datos escalares, expresiones y entrada/salida básica. 2. Selección. 2. Iteración. 3. Funciones, punteros y estructuración. 4. Datos estructurados. 5. Otros aspectos.
  • 3. 4. Datos estructurados  Existen en C dos tipos de datos estructurados:  Colección del mismo tipo de datos: array.  Colección de distinto tipo de datos: struct.  Para la definición del array se utiliza el operador primario [ ] con el número total de elementos: int array_de_enteros[100];  Los elementos del array se recorren con un índice que siempre empieza en cero (ojo) y es entero: array_de_enteros[25] = 321;  En C99 se pueden hacer arrays con asignación dinámica que se crean en tiempo de ejecución. Muy cómodo.  También se pueden inicializar con llaves (no hace falta static): static int dias[] = {31,28,31,30,31,30,31,31,30,31,30,31};  Se puede omitir el límite. Si se pone puede coincidir, o no. Si es menor se ponen a cero, si es mayor da error. Universidad de Cantabria. Grado de Informática. RMЯ 74
  • 4. 4. Comparación de arrays  Las siguientes declaraciones de arrays en Java: final int MAX=8; float[ ] v1; //índice va de 0 a MAX-1 v1=new float[MAX]; // tamaño puesto en la creación short[ ] [ ] c=new short[MAX][MAX];  Tienen el siguiente equivalente en C: #define MAX 8 // constante en C float v1[MAX]; //índice va de 0 a MAX-1array // creado al declararlo short int c [MAX][MAX];  En C los arrays de números NO se inicializan a cero. Universidad de Cantabria. Grado de Informática. RMЯ 75
  • 5. 4. Datos estructurados: arrays  El nombre de un array en C es sinónimo de su dirección de comienzo, por lo tanto es como un puntero constante.  Las direcciones de los arrays no se pueden cambiar, son constantes.  Las operaciones con punteros son (algunas ya vistas):  Asignación.  Comparación.  Dirección e Indirección.  Incremento y Decremento.  Adicción y Diferencia.  Ejercicio 17: bájate el programas 23.c y guárdalo en tu directorio. 1. Ábrelo con un editor, examínalo y compréndelo. 2. Observa la equivalencia entre punteros y arrays. 3. Mira las operaciones con punteros. Universidad de Cantabria. Grado de Informática. RMЯ 76
  • 6. 4. Datos estructurados: arrays #include <stdio.h> #define TAM 3 int main () { int fechas[TAM]={1,4,7}, *pun, indice, suma; double facturas[TAM]={1.0,5.0,8.0}, *punf; pun = fechas; /* asignacion de punteros */ // fechas=pun; /* array = array + 3; <=> 5 = 5 + 3; */ punf = facturas; printf("tamaños %lu %lu %lu n", sizeof(int), sizeof(double), sizeof(fechas)); for (indice = 0; indice < TAM; indice++) printf("punteros + %d: %10p %10p n", indice, pun + indice, punf + indice); for (indice = 0; indice < TAM; indice++) printf("indice %d: %d %d %lf %lfn", indice, fechas[indice], *(pun+indice), facturas[indice], *(punf+indice)); for (indice = 0, suma = 0; indice < TAM; indice++) suma += *(pun + indice); printf("Suma: %d n", suma); printf("Diferencia de dos punteros enteros distancia 2: %ld n", &facturas[2]-&facturas[0]); return(0); } Programación en C - Rafael Menéndez de Llano Rozas 77
  • 7. 4. Datos estructurados: arrays dobles  También se pueden hacer de varias dimensiones: int matriz[4][5]; //almacenados por filas  Se pueden inicializar: int matriz[2][2] = { {1,2}, {2,4} }; int matriz[2][2] = { 1, 2, 2, 4 };  Si se omite una dimensión (slice) nos estamos refiriendo a toda la fila.  En C no se puede usar matriz[2,2] ya que es usar el operador “,”.  También son equivalentes a varias formas de punteros:  Una array de punteros.  Un puntero doble.  … Universidad de Cantabria. Grado de Informática. RMЯ 78
  • 8. Ejercicio 18: Arrays dobles  Bájate los programas 24.c, 25.c y 26.c guárdalos en tu directorio. 1. Ábrelos con un editor. 2. Observa como se accede a una matriz doble. 3. Observa como se accede a un puntero doble. 4. Y comprende las equivalencias entre punteros y que asignaciones están bien y mal. Universidad de Cantabria. Grado de Informática. RMЯ 79
  • 9. 4. Datos estructurados: string  El string en C es un array (puntero) de caracteres terminados en uno especial (marca de fin de string) que es el carácter nulo '0‘, para el que también se reserva espacio.  El string nulo es NULL (en stdio.h).  La inicialización se hace con comillas (string constante):  char tira[20] = "esto es un mensaje";  char otra[ ] = "esto es otro mensaje";  char *pun_tira = “Llevamos 9 horas";  Los elementos son caracteres:  tira[12] = 's';  Para entrada/salida se utiliza el conversor %s o las funciones puts() y gets() –esta última está obsoleta y es peligrosa– : char tira[81]; /* declaracion de array */ pun_tira = gets(tira); puts(tira); Universidad de Cantabria. Grado de Informática. RMЯ 80
  • 10. 4. Datos estructurados: string  Hay cosas que no se pueden hacer: char tira[], *pun; … tira = “esto no se puede hacer”; // es igual que hacer 23=15 pun = “esto si”; // var = 15;  Existe una librería para trabajar con string a la que se accede a través de string.h. Las funciones más usuales son:  strcpy(): toma como argumentos dos tiras de caracteres y copia la segunda en la primera, es decir sus contenidos, no sus direcciones. Hay que comprobar que la primera tiene espacio suficiente.  strlen(): toma una tira como argumento y devuelve un entero con su longitud sin contar el carácter nulo.  strcat(): toma como argumentos dos tiras de caracteres y devuelve en la primera la unión de ambas. Para ello debe asegurarse que en la primera tira caben las dos unidas.  strcmp(): toma como argumentos dos tiras de caracteres y compara sus contenidos, no sus direcciones. Devuelve un entero que indica si las tiras son iguales o no. En el primer caso devolverá un 0, en el segundo un entero positivo o negativo dependiendo de si la primera tira es mayor o menor que la segunda. El valor absoluto será la diferencia de código ASCII. Universidad de Cantabria. Grado de Informática. RMЯ 81
  • 11. Ejercicio 19: Strings  Bájate los programas 27.c , 28.c y 29.c guárdalos en tu directorio. 1. Ábrelos con un editor. 2. Observa como se trabaja con strings y las inicializaciones. 3. Cambia la función gets por fgets. 4. Usa la librería de manejo de strings . 5. Date cuenta que el algoritmo es importante. Universidad de Cantabria. Grado de Informática. RMЯ 82
  • 12. 4. Datos estructurados: arrays y funciones  Se pueden pasar arrays a funciones como argumentos. Por ejemplo un array de enteros (se puede poner la dimensión):  Prototipo: int media(int array[ ], int);  Llamada: entero = media(array, n);  Definición: int media(int array[ ], int n) { … }  Al ser direcciones siempre se pasan por referencia salvo uso de const.  No pueden devolverse array pero si punteros (o por argumento).  Pasar como argumento un array de dos dimensiones es como pasar un puntero a un array. Al menos hay que dar una dimensión (se pueden dar las dos):  Dos: función(int matriz [2][3]) …  Una: función(int matriz [ ][3]) …  Puntero: función(int (*matriz)[3]) … Universidad de Cantabria. Grado de Informática. RMЯ 83
  • 13. 4. Datos estructurados: struct  Es una colección de datos de distinto tipo. Parecido a la clase Java sin operaciones (sólo con datos).  Primero hay que definir una plantilla (template), por ejemplo: struct estructura /* hace de tipo */ { char nom_miembro1; /* los campos de la struct */ int nom_miembro2; /* cualquier tipo */ ... /* mas tipos … */ char array[81]; } ;  Y después la declaración de una variable: struct estructura tuya; /* normal */ struct estructura {...} tuya; /* todo en uno */ struct estructura mia = {'a', 23, …, "pepe"}; /* inicial */ struct estructura mia[100]; /* array de estructura */ struct estructura *deaquel; /* puntero a estructura */ Universidad de Cantabria. Grado de Informática. RMЯ 84 Puede ir la variable directa
  • 14. 4. Datos estructurados: struct  Puede ser muy práctico usar typedef: typedef struct estructura Estructura; typedef float complejo[2];  Las operaciones permitidas con las structs son:  Tener acceso a sus miembros.  Obtener su dirección.  Asignarlas (copiarlas). Esto no estaba permitido en C clásico K&R.  Para acceder a los campos se utiliza el operador “.” o “->”: mia[32].nom_miembro1 = '2'; tuya.miembro2 = 13; deaquel->array[5] = ‘3’; /* -> para punteros para evitar (*deaquel).array[5]  Las dos últimas implican que se pueden pasar como argumentos a funciones (por valor) y se pueden devolver:  Prototipo: struct comp suma(struct pri, struct seg);  Llamada: complejo=suma(A,B);  Definición: struct comp suma (struct comp uno, struct comp dos) { … } Universidad de Cantabria. Grado de Informática. RMЯ 85
  • 15. Ejercicio 20: arrays, funciones y structs  Bájate los programas 30.c y 31.c guárdalos en tu directorio. 1. Ábrelos con un editor. 2. Observa como se pasan arrays a funciones. Y como son equivalentes a punteros. 3. Como por defecto se pasan por referencia pero también se puede hacer análogo a por valor. 4. Analiza como se hacen las plantillas de los structs. 5. Como se pueden pasar y devolver a/de funciones. 6. Cambia el programa 31 y usa typedef. 7. Descubre como se almacenan los campos de una struct. 8. Prueba a poner entre dos campos otro de tipo char. Universidad de Cantabria. Grado de Informática. RMЯ 86