Programa en C para manejo de puntos en R2
TheTortillasTarea12 de Mayo de 2021
1.652 Palabras (7 Páginas)81 Visitas
//Programa desarrollado por Sebastian Morales Palacios
//Grupo 1CV13
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
struct Distancias{
double X1, Y1, X2, Y2;
double tam;
}DISTA[100][100];
struct punto{
int ID;
double X;
double Y;
double modulo;
double angulo;
}coordenada[100];
int acum=0;
char PuntoX[100], PuntoY[100], identificador[100];
FILE * fp;
void Imprimir();
void Modulo();
void Angulo();
void DistanciaEntrePuntos();
void SumaDosPuntos();
void RestaDosPuntos();
void MultiplicacionDosPuntos();
void DivisionDosPuntos();
void Compendio();
void DistanciaMaxMin();
void DistanciaEntreDosPuntos();
int main(){
srand(time(NULL));
setlocale(LC_CTYPE, "Spanish");
int n, opc, opc1, detalles, detalles2, puntito, pmaxX, pminX, pmaxY, pminY, i, j;
int x;
double max, min, x1, y1, x2, y2, a1, b1, a2, b2;
FILE *archivo;
printf("\n\n ****Bienvenido a la Calculadora de puntos en R2****\n\n");
printf(" - Ingrese la cantidad de puntos a manejar: ");
scanf(" %d", &n);
printf("\n ¿De que forma desea llenar los puntos?:\n");
printf(" 1. Manualmente.\n");
printf(" 2. Pseudoaleatoria(Generado por Computadora).\n");
printf(" 3. Leer un documento de texto.\n");
scanf(" %d", &opc1);
switch (opc1) {
case 1:
for(x=0; x<n; x++){
acum++;
coordenada[x].ID = acum;
printf("\n");
printf("\n");
printf("****PUNTO [%d]****",x);
fflush(stdin);
printf("\n- Valor de X: ");
scanf("%lf", &coordenada[x].X);
fflush(stdin);
printf("- Valor de Y: ");
scanf("%lf", &coordenada[x].Y);
printf("\n");
}
system("cls");
Imprimir();
Modulo();
Angulo();
DistanciaEntrePuntos();
Compendio();
printf("\n\n¡Puntos leídos correctamente!\nPresione cuakquier tecla para avamzar al menú\n");
system("pause");
system("cls");
break;
case 2:
for(x=0; x<n; x++){
acum++;
fflush(stdin);
coordenada[x].X = rand () % (-200-200+1) - 200;
fflush(stdin);
coordenada[x].Y = rand () % (-200-200+1) - 200;
}
system("cls");
Imprimir();
Modulo();
Angulo();
DistanciaEntrePuntos();
Compendio();
printf("\n\n¡Puntos generados correctamente!\n Presione cualquier tecla para avamzar al menú\n");
system("pause");
system("cls");
break;
case 3:
fp = fopen("PUNTOS.txt", "r");
fclose(fp);
system("cls");
Imprimir();
Modulo();
Angulo();
DistanciaEntrePuntos();
printf("\n\n¡Puntos leidos correctamente! Presione cualquier tecla para avamzar al menú\n");
system("pause");
system("cls");
break;
default: puts("Error");
}
do
{
printf("\n\n ****Bienvenido a la Calculadora de puntos en R2****\n\n");
printf(" - ¿Qué desea hacer con los puntos que ingresó?\n\n ");
printf(" 1.- Sumar puntos\n");
printf(" 2.- Restar puntos\n");
printf(" 3.- Multiplicar puntos\n");
printf(" 4.- Dividir puntos\n");
printf(" 5.- Determinar distancia entre puntos\n");
printf(" 6.- Determinar la mayor y menor distancia entre puntos\n");
printf(" 7.- Imprimir detalles de puntos\n");
printf(" 8.- Salir\n");
scanf("%d",&opc);
switch (opc) {
case 1:
system("cls");
SumaDosPuntos();
system("pause");
system("cls");
break;
case 2:
system("cls");
RestaDosPuntos();
system("pause");
system("cls");
break;
case 3:
system("cls");
MultiplicacionDosPuntos();
system("pause");
system("cls");
break;
case 4:
system("cls");
DivisionDosPuntos();
system("pause");
system("cls");
break;
case 5:
system("cls");
printf("\n\n 1.- Calcular distancia entre todos los puntos");
printf("\n 2.- Calcular distancia entre dos puntos especificos\n\n ");
scanf(" %d", &detalles2);
if(detalles2 == 1){
system("cls");
DistanciaEntrePuntos();
system("pause");
system("cls");
}
else if(detalles2 == 2){
system("cls");
DistanciaEntreDosPuntos();
system("pause");
system("cls");
}
else{
printf("\n NO EXISTE ESTA OPCION\n\n");
}
break;
case 6:
system("cls");
max = 0;
min = 100000;
for(i=0;i<acum;i++){
for(j=0;j<acum;j++){
if (DISTA[i][j].tam > max){
x1 = DISTA[i][j].X1;
y1 = DISTA[i][j].Y1;
x2 = DISTA[i][j].X2;
y2 = DISTA[i][j].Y2;
max = DISTA[i][j].tam;
pmaxX = i;
pmaxY = j;
}
if (DISTA[i][j].tam < min && DISTA[i][j].tam != 0){
a1 = DISTA[i][j].X1;
b1 = DISTA[i][j].Y1;
a2 = DISTA[i][j].X2;
b2 = DISTA[i][j].Y2;
min = DISTA[i][j].tam;
pminX = i;
pminY = j;
}
}
}
printf("\n- Distancia Máxima es: %.2lf ", DISTA[pmaxX][pmaxY].tam);
printf("\n- Del punto: ( %.2lf , %.2lf ) al punto ( %.2lf , %.2lf ) ", x1, y1, x2, y2);
printf("\n\n- Distancia Mínima es: %.2lf ", DISTA[pminX][pminY].tam);
printf("\n- Del punto: ( %.2lf , %.2lf ) al punto ( %.2lf , %.2lf ) ", a1, b1, a2, b2);
archivo = fopen("resultadosDeDistancias.txt.","w+");
fprintf(archivo, " DISTANCIAS\n\n");
fprintf(archivo, "\n- Distancia Máxima es: %.2lf ", DISTA[pmaxX][pmaxY].tam);
fprintf(archivo, "\n- Del punto: ( %.2lf , %.2lf ) al punto ( %.2lf , %.2lf ) ", x1, y1, x2, y2);
fprintf(archivo, "\n\n- Distancia Mínima es: %.2lf ", DISTA[pminX][pminY].tam);
fprintf(archivo, "\n- Del punto: ( %.2lf , %.2lf ) al punto ( %.2lf , %.2lf ) ", a1, b1, a2, b2);
fprintf(archivo,"\n\n");
printf("\n");
printf("\n");
for(i=0;i<acum;i++){
for(j=0;j<acum;j++){
fprintf(archivo,"\n- Distancia entre [%.2lf , %.2lf] y [%.2lf , %.2lf] = %lf",coordenada[i].X, coordenada[i].Y, coordenada[j].X, coordenada[j].Y ,DISTA[i][j].tam);
}
}
rewind(archivo);
fclose(archivo);
system("pause");
system("cls");
break;
case 7:
system("cls");
printf("\n\n 1.- Imprimir detalles de todos los puntos");
printf("\n 2.- Imprimir detalles de un punto especifico\n\n ");
scanf(" %d", &detalles);
int i;
if(detalles == 1){
system("cls");
for(i=0;i<acum;i++) {
printf("\n\n");
printf(" ****PUNTO [%d]**** ",i);
printf("\n - X: %.2lf",coordenada[i].X);
printf("\n - Y: %.2lf",coordenada[i].Y);
printf("\n");
printf("\n - Módulo: %.2lf",coordenada[i].modulo);
printf("\n - Ángulo: %.2lf°",coordenada[i].angulo);
printf("\n");
}
...