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"; }
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); }
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); }
void Linha::escreve(ostream &os) { os << tipo() << endl; for (int i = 0; i < max_coord; i++) os << p[i].print() << endl; }
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; } }
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; } }
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); }
/*** 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"); }
int margemEsquerda (pixel *linha) { /* Retorna o tamanho da margem esquerda da linha */ int n = 0; while ( tipo(&linha[n]) == TERRA) n++; return n; }
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); } } }
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; }
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; }
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; } }
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(); }
void Cubo::escreve(ostream &os) { os << tipo() << "\n"; os << c.print() << "\n"; os << r << "\n"; }
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; }