- Code: Select all
#include <iostream>
#include <deque>
#include <math.h>
struct region {
float x,y,x1,y1;
char nombre;
region(float a,float b,float c,float d,char e){
x=a; y=b; x1=c; y1=d;
nombre=e;;
}
};
struct icono{
float x,y;
int nombre;
icono(int a,int b,int c){x=a; y=b; nombre=c;}
};
typedef std::deque<region*> regiones;
typedef std::deque<icono*> iconos;
typedef std::deque<region*>::iterator it_regiones;
typedef std::deque<icono*>::iterator it_iconos;
regiones m_regiones;
iconos m_iconos;
it_regiones it_m_regiones;
it_iconos it_m_iconos;
char lista[30]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main (int argc, char * const argv[]) {
float alfa,beta,gama,delta;
float max_iconos=sqrt(pow(499,2)+pow(499,2));
int resultados=0;
int contador_r=0;
int contador_i=1;
bool final=0;
char cod[60];
std::deque<int> resul_iconos;
bool x=1;
scanf("%s",cod);
while(std::strcmp(cod,"#")!=0){
if(final) strcpy(cod,"M");
if (strcmp(cod,"R")==0) {
scanf("%f",&alfa);
scanf("%f",&beta);
scanf("%f",&gama);
scanf("%f",&delta);
region *temp=new region(alfa,beta,gama,delta,lista[contador_r]);
m_regiones.push_front(temp);
contador_r++;
}
if (strcmp(cod, "I")==0) {
scanf("%f",&alfa);
scanf("%f",&beta);
icono *temp1=new icono(alfa,beta,contador_i);
m_iconos.push_back(temp1);
contador_i++;
}
if (strcmp(cod,"M")==0) {
final=1;
resultados++;
region*t1=0;
scanf("%f",&alfa);
scanf("%f",&beta);
for (it_m_regiones=m_regiones.begin();it_m_regiones!=m_regiones.end();it_m_regiones++) {
if((*it_m_regiones)->x<=alfa&&(*it_m_regiones)->x1>=alfa &&(*it_m_regiones)->y<=beta&&(*it_m_regiones)->y1>=beta){
t1=*it_m_regiones;
//m_regiones.erase(it_m_regiones);
//m_regiones.push_front(*it_m_regiones);
printf("%s \n",&(t1->nombre));
x=false;
break;
}
}
if (x) {
for (it_m_iconos=m_iconos.begin();it_m_iconos!=m_iconos.end(); it_m_iconos++) {
float t2=sqrt(pow((*it_m_iconos)->x-alfa,2)+pow((*it_m_iconos)->y-beta,2));
if (max_iconos==t2) {
resul_iconos.push_back((*it_m_iconos)->nombre);
}
if (max_iconos>t2) {
max_iconos=t2;
resul_iconos.clear();
resul_iconos.push_back((*it_m_iconos)->nombre);
}
}
for (std::deque<int>::iterator it=resul_iconos.begin();it!=resul_iconos.end();it++) {
printf("%3d",(*it));
}
std::cout<<std::endl;
}
x=1;
max_iconos=sqrt(pow(499,2)+pow(499,2));
}
scanf("%s",cod);
}
for (it_m_iconos=m_iconos.begin();it_m_iconos!=m_iconos.end(); it_m_iconos++) {
delete (*it_m_iconos);
}
for (it_m_regiones=m_regiones.begin();it_m_regiones!=m_regiones.end();it_m_regiones++) {
delete (*it_m_regiones);
}
return 0;
}
Regards
