Example #1
0
void Linha::desenha()
{
  cout << "[Desenhando " << tipo() << "]\n";
  cout << tipo() << " com ponto inicial = " << p[0].print();
  cout << " , ponto final = " << p[1].print();
  cout << " e vetor diretor = " << v.print() << "\n";
}
Example #2
0
Linha::Linha(istream &is, ostream &os)
{
  cout << "[Criando " << tipo() << "]\n";
  cout << "Para que uma " << tipo() << " exista, precisamos:\n\n\t> Dois pontos\n\t";
  cout << "> Um ponto e um vetor diretor\n\n";
  cout << "Logo,\n\n";

  while (!le(is));

  cout << tipo() << " criada com sucesso.\n";

  if (&os != &cout)
    escreve(os);
}
Example #3
0
Cubo::Cubo(istream &is, ostream &os)
{
  cout << "[Criando " << tipo() << "]\n";
  cout << "Para que um " << tipo() << " exista, precisamos:\n\n";
  cout << "\t> Um ponto central para o cubo (\"centro\")\n";
  cout << "\t> A distancia entre todas as extremidades (\"raio\")\n";
  cout << "Logo,\n\n";

  while (!le(is));

  cout << tipo() << " criado com sucesso.\n";

  if (&os != &cout)
    escreve(os);
}
Example #4
0
void Linha::escreve(ostream &os)
{
  os << tipo() << endl;

  for (int i = 0; i < max_coord; i++)
    os << p[i].print() << endl;
}
Example #5
0
bool Cubo::move()
{
  try
  {
    cout << "[Movendo " << tipo() << "]\n";

    double x, y, z;
    Coord *new_c = new Coord();

    cout << "Digite as novas coordenadas para o \"centro\" = ";
    cin >> x >> y >> z;
    new_c->set(x, y, z);

    if (*new_c == c)
      throw Error(3);

    c = *new_c;

    delete[] new_c;

    return true;
  }
  catch (Error &e)
  {
    e.what();
    return false;
  }
}
Example #6
0
bool Linha::move()
{
  try
  {
    cout << "[Movendo " << tipo() << "]\n";
    double x, y, z;
    Coord *aux = new Coord[2];
    int it = 0;

    while (it < max_coord)
    {
      cout << "Digite as novas coordenadas para o ponto " << it + 1 << " = ";
      cin >> x >> y >> z;
      aux[it].set(x, y, z);
      it++;
    }

    if (aux[0] == aux[1])
      throw Error(3);

    for (int i = 0; i < max_coord; i++)
      p[i] = aux[i];

    v = p[1] -  p[0];

    delete[] aux;

    return true;
  }
  catch (Error &e)
  {
    e.what();
    return false;
  }
}
Example #7
0
void primeiraLinha(pixel *linha, int largura, float limiteMargens, int fluxoDesejado, int distanciaEntreIlhas, float probIlha) {
    /* Insere os valores da primeira linha do programa */
    
    int tamanhoDaMargemEsquerda;
    int tamanhoDaMargemDireita;
    
    int i = 0;
    float v;
    
    aleatorizaPrimeiraMargem (linha, largura, limiteMargens);
    
    tamanhoDaMargemEsquerda = margemEsquerda(linha);
    tamanhoDaMargemDireita = margemDireita(linha, largura);
    
    insereIlha(linha, distanciaEntreIlhas, probIlha, tamanhoDaMargemEsquerda, tamanhoDaMargemDireita, largura);
    
    for (i = tamanhoDaMargemEsquerda; i < largura - tamanhoDaMargemDireita; i++) {  /* Insere a velocidade água */
        if (linha[i-1].tipo == TERRA || tipo(&linha[i]) == TERRA || linha[i+1].tipo == TERRA)
            setaVelocidade(&linha[i],0);
        else{
            v = velocidadeDaAguaPrimeiraLinha (linha[i-1].velocidade);
            setaVelocidade(&linha[i], v);
        }
    }
    
    suavizaVelocidades(linha, largura);
    
    /* Consideramos a probabilidade de a primeira linha ter ilhas */
    normaliza(linha, largura, fluxoDesejado);
}
Example #8
0
/*** Função que confere declaração de variaveis ***/
int variaveis() {
    int var_ini,var_fin;
    char *tipo_v;
    while(match(VAR)) {
        flagDeclara = 1;
        var_ini = n_var;
        if(lista_ident()) {
            var_fin = n_var;
            flagDeclara = 0;
            if(match(DOISPONTOS)) {
                tipo_v = lookahead->lexeme;
                def_tipo_var(var_ini,var_fin,tipo_v);
                if(tipo()) {
                    if(match(PONTOVIRGULA)) {
                        continue;
                    } else return 0;
                } else return 0;
            } else if(match(PONTOVIRGULA)) {
                return 1;
            } else return 0;
        } else return 0;
    }
    gerLstVar();
    return 1;
}
void outputLine (pixel *linha, int largura) { /* Imprime a linha */
  int i = 0;
    
  for (i = 0; i < largura; i++){
    printf( "%c" , /*velocidade(&linha[i])*/ tipo(&linha[i]));
  }
  printf("\n");
}
Example #10
0
int margemEsquerda (pixel *linha) {     /* Retorna o tamanho da margem esquerda da linha */
    int n = 0;
    
    while ( tipo(&linha[n]) == TERRA)
        n++;
    
    return n;
}
Example #11
0
void normaliza(pixel *linha, int largura, int fluxoDesejado) {  /* Normaliza a linha para ter o fluxo desejado */
    int i = 0;
    float fluxoObtido = 0;
    float novaVel, vel;
    
    for (i = 0; i < largura; i++)       /* O fluxo obtido é a soma de todas as velocidades */
        if (tipo(& linha[i] ) != TERRA)
            fluxoObtido += velocidade(&linha[i]);
    
    for (i = 0; i < largura; i++) {     /* Transforma a linha numa que tenha o fluxo desejado */
        if (tipo(&linha[i]) != TERRA){
            vel = velocidade(&linha[i]);
            novaVel = 1.0*vel*fluxoDesejado/fluxoObtido;
            setaVelocidade(&linha[i], novaVel);
        }
    }
}
Example #12
0
int margemDireita (pixel *linha, int largura) {     /* Retorna o tamanho da margem direita da linha de tamanho 'largura' */
    int n = largura-1;
    
    while ( tipo(&linha[n]) == TERRA)
        n--;
    
    n++;
    
    return largura-n;
}
Example #13
0
void velocidadeProximaLinha (pixel *linha, pixel *linhaAnterior, int fluxoDesejado, int largura) {
    int i = 0;
    
    int tamanhoDaMargemEsquerda = margemEsquerda(linha);
    int tamanhoDaMargemDireita = margemDireita(linha, largura);
    
    for (i = tamanhoDaMargemEsquerda; i < largura-tamanhoDaMargemDireita; i++) {
        if (tipo(&linha[i-1]) == TERRA || tipo(&linha[i]) == TERRA || tipo(&linha[i+1]) == TERRA) {
            setaVelocidade(&linha[i], 0);
        }
        else {
            float velocidadeAnterior = velocidade(&linhaAnterior[i]);
            float aleatorio = realRandomico(0.9, 1.1);
            float velocidadeNova = velocidadeAnterior*aleatorio;
            if (velocidadeNova == 0) {
                velocidadeNova = aleatorio*fluxoDesejado/(largura*8);
            }
            setaVelocidade(&linha[i], velocidadeNova);
        }
    }
    
}
int calculaVariacoes(pixel **grade, int largura, int altura, int fluxoDesejado,
                     float *velMin, float *velMedia, float *velMax,
                     int *margEsqMin, float *margEsqMedia, int* margEsqMax,
                     int *margDirMin, float *margDirMedia, int *margDirMax){
    
    
    int i, j;
    int pixelsDeAgua = 0;
    float velMed = 0;
    float velAux = 0;
    int margDirAux = 0;
    int margEsqAux = 0;
    int linhasComFluxoCorreto = 0;
    
    for(i = 0; i < altura; i++){
        
        margEsqAux = margemEsquerda(grade[i]);
        margDirAux = margemDireita(grade[i], largura);
        
        if (margEsqAux > *margEsqMax) *margEsqMax = margEsqAux;
        if (margEsqAux < *margEsqMin) *margEsqMin = margEsqAux;
        if (margDirAux > *margDirMax) *margDirMax = margDirAux;
        if (margDirAux < *margDirMin) *margDirMin = margDirAux;
        
        *margEsqMedia += 1.0* margEsqAux/altura;
        *margDirMedia += 1.0* margDirAux/altura;
        
        linhasComFluxoCorreto += testaCorrecao( grade[i], fluxoDesejado, largura );
        
        for(j = 0; j < largura; j++){
            
            velAux = velocidade(&grade[i][j]);
            
            if (velAux > *velMax) *velMax = velAux;
            if (velAux < *velMin) *velMin = velAux;
            
            if (tipo(&grade[i][j]) == AGUA) {
                velMed += velAux;
                pixelsDeAgua++;
            }
            
        }
        
        velMed /= pixelsDeAgua;
        *velMedia += velMed;
    }
    
    return linhasComFluxoCorreto;
    
}
Example #15
0
bool Linha::pontoNaForma(Coord &c)
{
  try
  {
    cout << "[Verficicando se " << c.print() << " pertence a " << tipo() << "]\n";

    Coord t_real = (p[1] - p[0]) / v;
    Coord t = (c - p[0]) / v;

    /* Boolean equation for multiply 't' */
    bool t_equals = (t_real == t);

    /* Boolean equation for check limits */
    bool lim_x, lim_y, lim_z;

    if (p[0].get<Coord::x>() < p[1].get<Coord::x>())
      lim_x = (c.get<Coord::x>() >= p[0].get<Coord::x>() && c.get<Coord::x>() <= p[1].get<Coord::x>());
    else
      lim_x = (c.get<Coord::x>() >= p[1].get<Coord::x>() && c.get<Coord::x>() <= p[0].get<Coord::x>());

    if (p[0].get<Coord::y>() < p[1].get<Coord::y>())
      lim_y = (c.get<Coord::y>() >= p[0].get<Coord::y>() && c.get<Coord::y>() <= p[1].get<Coord::y>());
    else
      lim_y = (c.get<Coord::y>() >= p[1].get<Coord::y>() && c.get<Coord::y>() <= p[0].get<Coord::y>());

    if (p[0].get<Coord::z>() < p[1].get<Coord::z>())
      lim_z = (c.get<Coord::z>() >= p[0].get<Coord::z>() && c.get<Coord::z>() <= p[1].get<Coord::z>());
    else
      lim_z = (c.get<Coord::z>() >= p[1].get<Coord::z>() && c.get<Coord::z>() <= p[0].get<Coord::z>());

    if ((lim_x && lim_y && lim_z) == false) /* t has no type t(1,1,1)*/
      throw Error(4);
    else if (t_equals == false) /* Off limits */
      throw Error(5);
    else
      return true;
  }
  catch (Error &e)
  {
    e.what();
    return false;
  }
}
Example #16
0
bool Cubo::pontoNaForma(Coord &c1)
{
  try
  {
    cout << "[Verficicando se " << c1.print() << " pertence ao " << tipo() << "]\n";

    if ((c1.get<Coord::x>() < (c.get<Coord::x>() - r)) || (c1.get<Coord::x>() > (c.get<Coord::x>() + r)))
      throw Error(9);
    if ((c1.get<Coord::y>() < (c.get<Coord::y>() - r)) || (c1.get<Coord::y>() > (c.get<Coord::y>() + r)))
      throw Error(9);
    if ((c1.get<Coord::z>() < (c.get<Coord::z>() - r)) || (c1.get<Coord::z>() > (c.get<Coord::z>() + r)))
      throw Error(9);

    return true;
  }
  catch (Error &e)
  {
    e.what();
    return false;
  }
}
void outputArray (pixel **array, int altura, int largura, int indice, int player_x, int player_x2, int player_y, int player_y2, int tamPixel) {
    ALLEGRO_COLOR terra = al_map_rgb(110, 60, 40);      /* Cores */
    ALLEGRO_COLOR agua = al_map_rgb(51, 153, 255);
    ALLEGRO_COLOR ilha = al_map_rgb(6, 96, 0);
    ALLEGRO_COLOR canoa = al_map_rgb(51, 51, 51);
    
    int i, j;
    int ilha0 = 999999, ilhaf = 0;      /* Variáveis que guardam o começo de uma ilha e o final dela */
    
    
    int playerSize = tamPixel + largura*0.1;
    if(playerSize > 30) playerSize = 30;
    
    al_clear_to_color(agua);
    
    for (i = 0; i < altura; i ++) { /* Imprime uma linha de cada vez */
        
        int TMargemEsquerda = margemEsquerda(array[(i+indice)%altura]);         /* Os tamanhos das margens */
        int TMargemDireita = margemDireita(array[(i+indice)%altura], largura);
        
        /* Desenha a margem esquerda */
        al_draw_filled_rectangle(0, tamPixel*i, tamPixel*(TMargemEsquerda - 2), tamPixel*(i+1), terra);
        
        j = TMargemEsquerda - 2;
        
        
        /* Desenha o encontro da terra com a água, criando triângulos ou retângulos conforme necessário */
        if (tipo(&array[(i+indice+1)%altura][j+2]) == TERRA) {          /* Se a linha de baixo era maior */
            al_draw_filled_rectangle(tamPixel*j, tamPixel*i, tamPixel*(j+1), tamPixel*(i+1), terra);
            j++;
            al_draw_filled_triangle(tamPixel*j, tamPixel*i, tamPixel*j, tamPixel*(i+1), tamPixel*(j+1), tamPixel*(i+1), terra);
        }
        else if (tipo(&array[(i+indice+1)%altura][j+1]) == TERRA) {     /* Se era igual */
            al_draw_filled_rectangle(tamPixel*j, tamPixel*i, tamPixel*(j+1), tamPixel*(i+1), terra);
            j++;
        }
        else {      /* Se era menor */
            al_draw_filled_triangle(tamPixel*j, tamPixel*i, tamPixel*(j+1), tamPixel*i, tamPixel*j, tamPixel*(i+1), terra);
            j++;
        }
        
        
        
        /* Descobre onde começa e termina a ilha */
        for (j = TMargemEsquerda; j < largura - TMargemDireita - 2; j++)
            if (tipo(&array[(i+indice)%altura][j]) == TERRA) {
                if (j < ilha0)
                    ilha0 = j;
                if (j > ilhaf)
                    ilhaf = j;
            }
        
        
        if (ilhaf != 0)         /* Se existe uma ilha, desenha primeiro as duas partes de água, depois ela em cima */
            al_draw_filled_rounded_rectangle(tamPixel*ilha0,tamPixel*i,tamPixel*(ilhaf+1),tamPixel*(i+1),3,3, ilha);
        ilha0 = 999999;         /* Reseta os valores */
        ilhaf = 0;
        
        /* Desenha o segundo encontro da água com a terra */
        if (tipo(&array[(i+indice+1)%altura][j+2]) == AGUA) {
            j++;
            al_draw_filled_triangle(tamPixel*j, tamPixel*i, tamPixel*(j+1), tamPixel*i, tamPixel*(j+1), tamPixel*(i+1), terra);
        }
        else if (tipo(&array[(i+indice+1)%altura][j+1]) == AGUA) {
            j++;
            al_draw_filled_rectangle(tamPixel*j, tamPixel*i, tamPixel*(j+1), tamPixel*(i+1), terra);
        }
        else {
            al_draw_filled_triangle(tamPixel*(j+1), tamPixel*(i+1), tamPixel*(j+1), tamPixel*i, tamPixel*j, tamPixel*(i+1), terra);
            j++;
            al_draw_filled_rectangle(tamPixel*j, tamPixel*i, tamPixel*(j+1), tamPixel*(i+1), terra);
        }
        
        
        /* Desenha a margem direita */
        al_draw_filled_rectangle(tamPixel*(largura - TMargemDireita), tamPixel*i, tamPixel*(largura), tamPixel*(i+1), terra);

    }
    
    /* Desenha o jogador na posição correta */
    /*al_draw_filled_ellipse(player_x, player_y, playerSize/3, playerSize, canoa);*/
    al_draw_line(player_x, player_y, player_x2, player_y2, canoa, 5.0);
    /* Coloca tudo o que foi desenhado na tela */
    al_flip_display();
}
Example #18
0
void Cubo::escreve(ostream &os)
{
  os << tipo() << "\n";
  os << c.print() << "\n";
  os << r << "\n";
}
Example #19
0
void Cubo::desenha()
{
  cout << "[Desenhando " << tipo() << "]\n";
  cout << tipo() << " com o \"centro\" = " << c.print();
  cout << " e \"raio\" = " << r << "\n";
}
int main()
{
    scanf("%d",&n);

    for(int i=0;i<n;i++)
    {
        int m;
        scanf("%d %s",&m,Lista[i].Name);
        for(int j=0;j<m;j++)
        {
            scanf("%s",phone);

            switch(tipo())
            {
                case 1:
                    Lista[i].T++;
                    break;
                case 2:
                    Lista[i].P++;
                    break;
                case 3:
                    Lista[i].G++;
                    break;
            }

        }
    }



    for(int i=0;i<n;i++)
    {
        MAX[1]=std::max(MAX[1],Lista[i].T);
        MAX[2]=std::max(MAX[2],Lista[i].P);
        MAX[3]=std::max(MAX[3],Lista[i].G);
    }

    for(int i=0;i<n;i++)
    {
        if(Lista[i].T == MAX[1])
        {
            memcpy(LF[0][ind[0]],Lista[i].Name,21);
            ind[0]++;
        }
        if(Lista[i].P == MAX[2])
        {
            memcpy(LF[1][ind[1]],Lista[i].Name,21);
            ind[1]++;
        }
        if(Lista[i].G == MAX[3])
        {
            memcpy(LF[2][ind[2]],Lista[i].Name,21);
            ind[2]++;
        }
    }

    printf("If you want to call a taxi, you should call: ");

    for(int i=0;i<ind[0];i++)
    {
        printf("%s",LF[0][i]);
        if(i+1<ind[0])
        {
            printf(", ");
        }
        else
        {
            printf(".");
        }
    }


    printf("\nIf you want to order a pizza, you should call: ");

    for(int i=0;i<ind[1];i++)
    {
        printf("%s",LF[1][i]);
        if(i+1<ind[1])
        {
            printf(", ");
        }
        else
        {
            printf(".");
        }
    }

    printf("\nIf you want to go to a cafe with a wonderful girl, you should call: ");

    for(int i=0;i<ind[2];i++)
    {
        printf("%s",LF[2][i]);
        if(i+1<ind[2])
        {
            printf(", ");
        }
        else
        {
            printf(".");
        }
    }



    return 0;
}