Estructuras y uniones Programacin Definicin de estructura Una

  • Slides: 49
Download presentation
Estructuras y uniones Programación

Estructuras y uniones Programación

Definición de estructura Una estructura (también llamada registro) es un tipo de datos que

Definición de estructura Una estructura (también llamada registro) es un tipo de datos que agrupa varios datos de tipo simple en un solo objeto. Las estructuras se declaran con la palabra reservada struct nombre{ campos; }; Cada campo esta formado por la declaración de una o más variables de algún otro tipo. Ejemplo: persona struct persona{ char nombre[30]; nombre (cadena) int edad; }; Campos edad (int)

Variables de tipo estructura Una vez definida la estructura se pueden declarar variables de

Variables de tipo estructura Una vez definida la estructura se pueden declarar variables de ese tipo: struct persona{ char nombre[30]; int edad; }; persona juan, maria; o TAMBIEN struct persona{ char nombre[30]; int edad; }juan, maria; struct persona juan, maria; La asignación se hace mediante el operador “. ” gets(juan. nombre); juan. edad = 23; gets(maria. nombre); maria. edad = 17;

Ejemplo #include <stdio. h> #include <conio. h> #include <string. h> struct persona{ char nombre[30];

Ejemplo #include <stdio. h> #include <conio. h> #include <string. h> struct persona{ char nombre[30]; int edad; }; main(){ persona per 1, per 2; strcpy(per 1. nombre, "pedro"); strcpy(per 2. nombre, "maria"); per 1. edad = 23; per 2. edad = 17; printf("nombre: %snedad: %dn", per 1. nombre, per 1. edad); printf("nombre: %snedad: %dn", per 2. nombre, per 2. edad); getch(); }

Otros ejemplos Carta de baraja numero palo Libro titulo autor editorial anyo Polígono regular

Otros ejemplos Carta de baraja numero palo Libro titulo autor editorial anyo Polígono regular nombre area lados longitud. Lado struct carta{ int numero; char palo; } struct libro{ char titulo[40]; char autor[30]; char editorial[20]; int anyo; } struct poligono{ char nombre[20]; int lados; float longitud. Lado, area; }

struct carta c 1; c 1. numero = 3; c 1. palo = ‘D’;

struct carta c 1; c 1. numero = 3; c 1. palo = ‘D’; struct libro L 1; strcpy(L 1. titulo, ”Piensa en C”); strcpy(L 1. autor, ”Osvaldo Cairó”); strcpy(L 1. editorial, ”Pearson”); L. anyo = 2006; struct poligono p; strcpy(p. nombre, ”hexagono”); p. lados = 6; p. longitud. Lado = 5; p. area = p. lados*p. longitud. Lado/2. 0/ tan(PI/p. lados);

Ejemplo de alumnos struct alumno{ int matricula; char nombre[20]; char carrera[20]; float promedio; char

Ejemplo de alumnos struct alumno{ int matricula; char nombre[20]; char carrera[20]; float promedio; char direccion[20]; }; alumno matricula nombre carrera promedio direccion

main(){ struct alumno a 1={120, "Maria", "Contabilidad", 8. 9, "Queretaro"}, a 2; printf("n. Ingrese

main(){ struct alumno a 1={120, "Maria", "Contabilidad", 8. 9, "Queretaro"}, a 2; printf("n. Ingrese la matricula del alumno 2: "); scanf("%d", &a 2. matricula); fflush(stdin); printf("n. Ingrese el nombre del alumno 2: "); gets(a 2. nombre); printf("n. Ingrese la carrera del alumno 2: "); gets(a 2. carrera); printf("n. Ingrese el promedio del alumno 2: "); scanf("%f", &a 2. promedio); fflush(stdin); printf("n. Ingrese la direccion del alumno 2: "); gets(a 2. direccion); printf("n. Datos del alumno 1n"); printf("%dn", a 1. matricula); puts(a 1. nombre); puts(a 1. carrera); printf("%. 2 fn", a 1. promedio); puts(a 1. direccion); printf("n. Datos del alumno 2n"); printf("%dn", a 2. matricula); puts(a 2. nombre); puts(a 2. carrera); printf("%. 2 fn", a 2. promedio); puts(a 2. direccion); getch(); }

Actividad Defina estructuras para los siguientes datos y escriba un ejemplo de inicialización de

Actividad Defina estructuras para los siguientes datos y escriba un ejemplo de inicialización de una variable con llaves y campo por campo. Registro de automóviles CURP marca modelo anyo placa Cliente de videoclub nombre direccion telefono adeuda Licencia de manejo nombres apellido. Paterno apellido. Materno fecha. Desde fecha. Vencimiento nacionalidad grupo. Sanguineo CURPo. RFC restricciones dona. Organos clave direccion Tarjeta de crédito nombre fecha. Vencimiento numero. Tarjeta saldo limite

Copia de estructuras El operador = se puede utilizar para asignar todos los campos

Copia de estructuras El operador = se puede utilizar para asignar todos los campos de una estructura a otra. Ejemplo: struct libro{ char titulo[30], autor[30], editorial[15]; int anyo, edicion; }; main(){ libro a = {“El Quijote”, ”Cervantes”, ”Limusa”, 1987, 2}, b; b = a; //copia todos los datos de a en b }

Estructuras y apuntadores Para acceder a una estructura mediante un apuntador se utiliza la

Estructuras y apuntadores Para acceder a una estructura mediante un apuntador se utiliza la siguiente notación: (*estructura). campo o estructura->campo Es necesario crear mediante new la estructura antes de usarla. Ejemplo: struct alumno{ int matricula; char nombre[20]; char carrera[20]; float promedio; char direccion[20]; }; main(){ alumno *a; a = new(struct alumno); (*a). matricula = 234; a->matricula = 234; strcpy((*a). nombre, "Juan Perez"); strcpy(a->nombre, "Juan Perez"); strcpy((*a). carrera, "Mate"); strcpy(a->carrera, "Mate"); (*a). promedio = 6. 7; a->promedio = 6. 7; strcpy((*a). direccion, "Lomas 34"); strcpy(a->direccion, "Lomas 34"); }

Funciones de tipo estructura #include <stdio. h> #include <conio. h> #include <string. h> struct

Funciones de tipo estructura #include <stdio. h> #include <conio. h> #include <string. h> struct dir{ char calle[20]; Una función puede regresar una int numero; estructura char colonia[20]; int cp; }; dir dame. Dir(){ dir a={"alamo", 43, "lomas", 78000}; return a; } main(){ dir b; b = dame. Dir(); printf("calle: %s %dn", b. calle, b. numero); printf("colonia: %sn", b. colonia); printf("CP: %dn", b. cp); getch(); }

Funciones con parámetros de estructuras Las estructuras se pasan como parámetros a las funciones

Funciones con parámetros de estructuras Las estructuras se pasan como parámetros a las funciones de la misma forma que las variables de tipo simple. Función para escribir datos de un alumno: void escribe. Alumno(struct alumno a){ printf("n. Datos del alumnon"); printf("%dn", a. matricula); puts(a. nombre); puts(a. carrera); printf("%. 2 fn", a. promedio); puts(a. direccion); }

Función para leer un alumno: void lectura(struct alumno *a){ printf("n. Ingrese la matricula del

Función para leer un alumno: void lectura(struct alumno *a){ printf("n. Ingrese la matricula del alumno: "); scanf("%d", &(*a). matricula); fflush(stdin); printf("n. Ingrese el nombre del alumno: "); gets(a->nombre); printf("n. Ingrese la carrera del alumno: "); gets((*a). carrera); printf("n. Ingrese el promedio del alumno: "); scanf("%f", &a->promedio); fflush(stdin); printf("n. Ingrese la direccion del alumno: "); gets(a->direccion); } (*estructura). campo estructura->campo

Números racionales Un número racional se define como el cociente de dos enteros, por

Números racionales Un número racional se define como el cociente de dos enteros, por ejemplo: 3/4, 5/6, 32/40, 7=7/1, etc. Podemos representarlos mediante una estructura como sigue: struct racional{ int num, den; }; Note que no basta con comparar numerador y denominador para determinar la igualdad de dos racionales. Es decir, 4/6 es igual a 2/3, pero 4 2 y 6 3. Para establecer la igualdad de dos racionales debemos asegurar que estén en su forma reducida. Es decir, que numerador y denominador sean primos entre sí.

Algoritmo de Euclides El algoritmo de Euclides permite reducir un número racional. 1. Sea

Algoritmo de Euclides El algoritmo de Euclides permite reducir un número racional. 1. Sea a el mayor y b el menor entre numerador y denominador. 2. Divídase a entre b y sea q el cociente y r el residuo. 3. Hágase a = b y b = r 4. Repítase desde el paso 2 hasta que b sea 0. 5. Divídase numerador y denominador entre a.

Aplicación algoritmo de Euclides num=340, den=45 a b q r 340 45 25 20

Aplicación algoritmo de Euclides num=340, den=45 a b q r 340 45 25 20 7 1 1 25 20 5 5 0 4 0 num=340/5 = 68 den=45/5 = 9

Aplicar algoritmo de Euclides num=140, den=26 num=380, den=44 num=830, den=675

Aplicar algoritmo de Euclides num=140, den=26 num=380, den=44 num=830, den=675

Función reduce void reduce(racional *r){ int a, b, t; if(r->num>r->den){ a = r->num; b

Función reduce void reduce(racional *r){ int a, b, t; if(r->num>r->den){ a = r->num; b = r->den; }else{ a = r->num; b = r->den; } while(b){ t = a % b; a = b; b = t; } r->num = r->num/a; r->den = r->den/a; }

Suma y despliegue de racionales racional suma(racional a, racional b){ racional c; c. num

Suma y despliegue de racionales racional suma(racional a, racional b){ racional c; c. num = (a. num*b. den+b. num*a. den); c. den = a. den*b. den; reduce(&c); return c; } void imprime(racional a){ printf("%d/%dn", a. num, a. den); }

Estructuras anidadas Las estructuras pueden contener a otras estructuras como componentes. Una estructura que

Estructuras anidadas Las estructuras pueden contener a otras estructuras como componentes. Una estructura que tiene componentes de tipo estructura se llama estructura anidada.

Ejemplo de estructuras anidadas struct fecha{ int dia, mes, anyo; }; struct persona{ char

Ejemplo de estructuras anidadas struct fecha{ int dia, mes, anyo; }; struct persona{ char nombre[20]; char apellido[20]; fecha nacimiento; int edad; int sexo; char CURP[19]; char telefono[20]; }; nombre apellido nacimiento dia mes anyo edad sexo CURP telefono

Desplegar una fecha void despliega. Fecha(fecha f){ printf("%d de ", f. dia); switch(f. mes){

Desplegar una fecha void despliega. Fecha(fecha f){ printf("%d de ", f. dia); switch(f. mes){ case 1: printf("ene"); break; case 2: printf("feb"); break; case 3: printf("mar"); break; case 4: printf("abr"); break; case 5: printf("may"); break; case 6: printf("jun"); break; case 7: printf("jul"); break; case 8: printf("ago"); break; case 9: printf("sep"); break; case 10: printf("oct"); break; case 11: printf("nov"); break; case 12: printf("dic"); break; } printf(" de %dn", f. anyo); }

Desplegar una persona void despliega. Persona(persona p){ printf("Nombre: %sn", p. nombre); printf("Apellidos: %sn", p.

Desplegar una persona void despliega. Persona(persona p){ printf("Nombre: %sn", p. nombre); printf("Apellidos: %sn", p. apellido); printf("Fecha de nacimiento: "); despliega. Fecha(p. nacimiento); printf("Edad: %dn", p. edad); if(p. sexo) printf("Sexo: masculinon"); else printf("Sexo: femeninon"); printf("CURP: %sn", p. CURP); printf("Telefono: %sn", p. telefono); }

Leer una fecha void leer. Fecha(fecha *f){ printf("Dia? "); scanf("%d", &(f->dia)); printf("Mes? "); scanf("%d",

Leer una fecha void leer. Fecha(fecha *f){ printf("Dia? "); scanf("%d", &(f->dia)); printf("Mes? "); scanf("%d", &(f->mes)); printf("Anyo? "); scanf("%d", &(f->anyo)); }

Leer una persona void leer. Persona(persona *p){ fflush(stdin); printf("Nombre? "); gets(p->nombre); printf("Apellidos? "); gets(p->apellido);

Leer una persona void leer. Persona(persona *p){ fflush(stdin); printf("Nombre? "); gets(p->nombre); printf("Apellidos? "); gets(p->apellido); printf("Fecha de nacimiento: n"); leer. Fecha(&p->nacimiento); printf("Edad? "); scanf("%d", &p->edad); printf("Sexo (1 -Hombre, 0 -Mujer)? "); scanf("%d", &p->sexo); fflush(stdin); printf("CURP? "); gets(p->CURP); printf("Telefono? "); gets(p->telefono); }

Acceso a estructuras anidadas Se puede acceder a los campos de una estructura anidada

Acceso a estructuras anidadas Se puede acceder a los campos de una estructura anidada mediante el operador “. ”. Por ejemplo: persona per, *per 2; per. nacimiento. dia = 5; per. nacimiento. mes = 7; per. nacimiento. anyo = 1998; per 2 ->nacimiento. dia = 1; per 2 ->nacimiento. mes = 8; per 2 ->nacimiento. anyo = 2005; Note que el campo anidado se accede mediante el operador “. ” y el no anidado mediante “->”.

Ejemplo de empleado y estudiante struct fecha{ int dia, mes, anyo; }; struct direccion.

Ejemplo de empleado y estudiante struct fecha{ int dia, mes, anyo; }; struct direccion. Struct{ char calle[30], colonia[20], ciudad[30], estado[15], pais[20]; int numero, cp; }; struct nombre. Struct{ char nombre[20], apellidos[20]; }; struct nomdir{ nombre. Struct nom; direccion. Struct dir; };

Cont. struct posicion{ char depto[5]; char trabajo[20]; }; struct empleado{ nomdir nombre. Direccion; posicion

Cont. struct posicion{ char depto[5]; char trabajo[20]; }; struct empleado{ nomdir nombre. Direccion; posicion trabajo; float salario; int num. Depto; fecha. Ingreso; }; struct estudiante{ nomdir nombre. Direccion; char carrera[20]; float promedio; int creditos; };

Gráfico de las estructuras fecha dia mes anyo direccion. Struct calle colonia ciudad estado

Gráfico de las estructuras fecha dia mes anyo direccion. Struct calle colonia ciudad estado pais num cp nombre. Struct nombre apellidos nomdir nombre apellidos dir calle colonia ciudad estado pais num cp

posicion depto trabajo empleado nombredireccion nombre apellidos trabajo depto trabajo dir calle colonia ciudad

posicion depto trabajo empleado nombredireccion nombre apellidos trabajo depto trabajo dir calle colonia ciudad salario num. Depto fecha. Ingreso estado pais dia mes anyo num cp estudiante nombredireccion nombre apellidos carrera dir calle colonia ciudad estado pais num cp promedio creditos

main(){ nomdir per = {{"juan", "perez lopez"}, {"olmo", "lomas", "SLP", "Mexico", 32, 78000}}; estudiante

main(){ nomdir per = {{"juan", "perez lopez"}, {"olmo", "lomas", "SLP", "Mexico", 32, 78000}}; estudiante est = {{}, "fisica", 7. 5, 210}; empleado emp = {{}, {"dep 1", "afanador"}, 30000, 2, {5, 5, 2003}}; est. nombre. Direccion = per; emp. nombre. Direccion = per; printf("nombre: %sn", per. nombre); printf("apellidos: %sn", per. nom. apellidos); printf("nombre: %sn", est. nombre. Direccion. nombre); printf("apellidos: %sn", est. nombre. Direccion. nom. apellidos); printf("nombre: %sn", emp. nombre. Direccion. nombre); printf("apellidos: %sn", emp. nombre. Direccion. nom. apellidos); printf("Fecha ingreso: %d/%d/%dn", emp. fecha. Ingreso. dia, emp. fecha. Ingreso. mes, emp. fecha. Ingreso. anyo); getch(); }

Actividad DEFINA UNA VARIABLE DE TIPO estudiante y asígnele su nombre y dirección, de

Actividad DEFINA UNA VARIABLE DE TIPO estudiante y asígnele su nombre y dirección, de también valores para la carrera, el promedio y los créditos. Escriba un sentencia que incremente los créditos en 20. Escriba una sentencia para cambiar la calle de la dirección a olmo. Escriba una sentencia que despliegue el nombre y la carrera del estudiante.

Actividad Escriba una función para imprimir los datos de un empleado y otra para

Actividad Escriba una función para imprimir los datos de un empleado y otra para los datos de un estudiante.

Arreglos de estructuras Un arreglo de estructuras contiene elementos que son estructuras. Ell siguiente

Arreglos de estructuras Un arreglo de estructuras contiene elementos que son estructuras. Ell siguiente ejemplo es un arreglo unidimensional de 50 elementos de tipo alumno. struct estudiante{ nomdir nombre. Direccion; char carrera[20]; float promedio; int creditos; }; main(){ estudiante est[50]; . . .

Pacientes en un hospital La información de los pacientes de un hospital consiste de:

Pacientes en un hospital La información de los pacientes de un hospital consiste de: Nombre y apellidos (cadenas de caracteres) Edad (entero) Sexo (carácter) Condición (entero ) Domicilio(estructura) calle(cadena de caracteres) número (entero) Colonia (cadena de caracteres) Código postal (cadena de caracteres) Ciudad (cadena de caracteres) Teléfono (cadena de caracteres) Donde condición es un entero entre 1 y 5, 1 mínimo de gravedad, 5 máximo de gravedad.

Estructura pacientes struct direccion{ char calle[30], colonia[20], ciudad[30]; int numero, cp; }; struct paciente{

Estructura pacientes struct direccion{ char calle[30], colonia[20], ciudad[30]; int numero, cp; }; struct paciente{ char nombre[30]; int edad; char sexo; direccion dir; int concicion; char telefono[20]; }; main(){ paciente pas[50]; //arreglo para 50 pacientes

Ejemplos Despliega nombre y teléfono de los pacientes con la máxima gravedad. for(i =

Ejemplos Despliega nombre y teléfono de los pacientes con la máxima gravedad. for(i = 0; i<50; i++) if(pas[i]. condicion==5) printf(“Nombre: %s, telefono: %sn”, pas[i]. nombre, pas[i]. telefono); Calcula porcentaje de pacientes hombres y mujeres suma = 0; suma. F = 0; for(i = 0; i<50; i++) if(pas[i]. sexo==‘H’) suma. H++; else suma. F++; printf(“% de Hombres= %. 2 fn”, suma. H/50*100); printf(“% de Mujeres= %. 2 fn”, suma. F/50*100);

Número de pacientes en cada condición int c[5] = {0}; for(i = 0; i<50;

Número de pacientes en cada condición int c[5] = {0}; for(i = 0; i<50; i++) c[pas[i]. condicion-1]++; for(i = 0; i<5; i++) printf(“Pacientes en condicion %d: %dn”, i+1, c[i]); Nombre calle y número de pacientes masculinos en condición de máxima gravedad. for(i = 0; i<50; i++) if(pas[i]. condicion==5&&pas[i]. sexo=‘H’) printf(“Nombre: %s, direccion: %s #%dn”, pas[i]. nombre, pas[i]. dir. calle, pas[i]. dir. numero);

Ejemplo de cartas #include <stdio. h> #include <conio. h> #include <stdlib. h> struct carta{

Ejemplo de cartas #include <stdio. h> #include <conio. h> #include <stdlib. h> struct carta{ int numero; char palo; }; void inicia(carta *b){ int i; for(i=0; i<52; i++){ b[i]. numero = i%13+1; b[i]. palo = i/13+3; } } void revuelve(carta *b){ int i, j; carta temp; for(i=51; i>=0; i--){ j = rand()%(i+1 temp = b[i]; b[i] = b[j]; b[j] = temp; } } void despliega. Carta(carta c){ printf("%d%c", c. numero, c. palo); } void despliega. Baraja(carta *c){ int i; for(i=0; i<52; i++){ despliega. Carta(c[i]); printf(" "); } printf("n"); }

main(){ carta baraja[52]; inicia(baraja); despliega. Baraja(baraja); getch(); revuelve(baraja); despliega. Baraja(baraja); getch(); } 1♥ 2♥

main(){ carta baraja[52]; inicia(baraja); despliega. Baraja(baraja); getch(); revuelve(baraja); despliega. Baraja(baraja); getch(); } 1♥ 2♥ 3♥ 4♥ 5♥ 6♥ 7♥ 8♥ 9♥ 10♥ 11♥ 12♥ 13♥ 1♦ 2♦ 3♦ 4♦ 5♦ 6♦ 7♦ 8♦ 9♦ 10♦ 11♦ 12 ♦ 13♦ 1♣ 2♣ 3♣ 4♣ 5♣ 6♣ 7♣ 8♣ 9♣ 10♣ 11♣ 12♣ 13♣ 1♠ 2♠ 3♠ 4♠ 5♠ 6♠ 7♠ 8♠ 9♠ 10♠ 11♠ 12♠ 13♠ 10♦ 7♥ 7♣ 11♦ 11♣ 3♣ 10♥ 8♦ 9♠ 4♣ 6♣ 9♦ 13♦ 4♠ 5♥ 5♣ 13♣ 3♦ 12♣ 12♥ 2♣ 1♦ 1♥ 2♦ 8♠ 1♠ 4♦ 13♥ 9♥ 3♥ 4♥ 5♠ 7♠ 8♣ 13♠ 8♥ 11♥ 12♠ 6♠ 2♥ 7♦ 10♣ 10♠ 11♠ 6♦ 12♦ 1♣ 5♦ 2♠ 9♣ 6♥ 3♠

Uniones Una unión es una estructura en la que se comparte una región de

Uniones Una unión es una estructura en la que se comparte una región de memoria para almacenar datos de tipos distintos. El tamaño de la unión es igual al del tipo de datos más grande. union prueba{ prueba int a; a float b; a= 5, b= 0. 000000, c= ♣ char c; b a= 1084227584, b= 5. 000000, c= }; a= 1084227637, b= 5. 000025, c= 5 c main(){ prueba x; x. a = 5; printf("a= %d, b= %f, c= %cn", x. a, x. b, x. c); x. b = 5. 0; printf("a= %d, b= %f, c= %cn", x. a, x. b, x. c); x. c = '5'; printf("a= %d, b= %f, c= %cn", x. a, x. b, x. c); getch(); }

Ejemplo struct fecha{ int dia, mes, anyo; }; struct persona{ char nombre[20], apellido[20]; fecha

Ejemplo struct fecha{ int dia, mes, anyo; }; struct persona{ char nombre[20], apellido[20]; fecha nacimiento; char sexo; union{ struct { float peso, estatura; }varon; struct { int medidas[3]; }hembra; }; };

Ejemplo struct fecha{ int dia, mes, anyo; }; struct persona{ char nombre[20], apellido[20]; fecha

Ejemplo struct fecha{ int dia, mes, anyo; }; struct persona{ char nombre[20], apellido[20]; fecha nacimiento; char sexo; union{ struct { float peso, estatura; }varon; struct { int medidas[3]; }hembra; }; };

void escribe. Persona(persona p){ printf("nombre: %s %sn", p. nombre, p. apellido); printf("fecha de nacimiento:

void escribe. Persona(persona p){ printf("nombre: %s %sn", p. nombre, p. apellido); printf("fecha de nacimiento: %d/%d/%dn", p. nacimiento. dia, p. nacimiento. mes, p. nacimiento. anyo); if(p. sexo=='H'){ printf("sexo: masculinon"); printf("peso: %. 1 f, estatura: %. 1 fn", p. varon. peso, p. varon. estatura); } else{ printf("sexo: femeninon"); printf("medidas: %d, %dn", p. hembra. medidas[0], p. hembra. medidas[1], p. hembra. medidas[2]); } }

main(){ persona a = {"Juan", "Perez", {3, 4, 1980}, 'H', 80, 1. 83}, b

main(){ persona a = {"Juan", "Perez", {3, 4, 1980}, 'H', 80, 1. 83}, b = {"Luisa", "Lane", {16, 7, 1990}, 'M', 90, 60}; escribe. Persona(a); escribe. Persona(b); b. hembra. medidas[0]=90; b. hembra. medidas[1]=60; nombre: Juan Perez b. hembra. medidas[2]=90; fecha de nacimiento: 3/4/1980 sexo: masculino escribe. Persona(b); peso: 80. 0, estatura: 1. 8 getch(); nombre: Luisa Lane } fecha de nacimiento: 16/7/1990 sexo: femenino medidas: 1119092736, 1114636288, 0 nombre: Luisa Lane fecha de nacimiento: 16/7/1990 sexo: femenino medidas: 90, 60, 90

Coordenadas rectangulares y polares Un punto en el plano se puede representar en coordenadas

Coordenadas rectangulares y polares Un punto en el plano se puede representar en coordenadas rectangulares o polares. La relación entre ambos sistemas se muestra en la figura. y x = r cosq y = r senq (x, y) y = r senq r q x = r cosq x

Distancia entre dos puntos La distancia entre dos puntos pude calcularse mediante el teorema

Distancia entre dos puntos La distancia entre dos puntos pude calcularse mediante el teorema de Pitágoras o haciendo uso de la ley de los cosenos. struct coordenada{ int tipo; union { struct{double x, y; }rect; struct{double r, theta; }pol; }; }; y a a. x a. y d b. x b coordenada a, b; a. r b. r a. theta b. y x a. rect. x - componente x de a a. rect. y - componente y de a a. pol. r - distancia al origen de a a. pol. theta - ángulo con eje x de a

Cálculo de la distancia double distancia(coordenada a, coordenada b){ double d; switch(a. tipo){ case

Cálculo de la distancia double distancia(coordenada a, coordenada b){ double d; switch(a. tipo){ case CARTESIANA: switch(b. tipo ){ case CARTESIANA: d = sqrt((a. rect. x-b. rect. x)*(a. rect. x-b. rect. x)+ ( a. rect. y-b. rect. y)*(a. rect. y-b. rect. y)); break; case POLAR: d = sqrt((a. rect. x-b. pol. r*cos(b. pol. theta))* ( a. rect. x-b. pol. r*cos(b. pol. theta))+ ( a. rect. y-b. pol. r*sin(b. pol. theta))* ( a. rect. y-b. pol. r*sin(b. pol. theta))); break; }break; case POLAR: switch(b. tipo){ case CARTESIANA: d = sqrt((a. pol. r*sin(a. pol. theta)-b. rect. x)* ( a. pol. r*sin(a. pol. theta)-b. rect. x)+ ( a. pol. r*cos(a. pol. theta)-b. rect. y)* ( a. pol. r*cos(a. pol. theta)-b. rect. y)); break; case POLAR: d = sqrt(a. pol. r*a. pol. r+b. pol. r*b. pol. r 2*a. pol. r*b. pol. r*cos(a. pol. theta -b. pol. theta)); break; } } return d; }