Пример #1
0
void Busca(AB *Ptab, char item, AB **pt)
{
    if(*Ptab == NULL || *pt != NULL)
        return;

    if(*Ptab->info != item){
        Busca(Ptab->esq, item, pt);
        Busca(Ptab->dir, item, pt);
    }
    else *pt = Ptab;
    return;
}
Пример #2
0
int main (int Narg, char *Arg[])
  {
  contador i;
  entero Lista[N];
  cadena Camino[N];
  logico Exito;

  for ( i=0 ; i<N ; i++ )
    { Lista[i] = CadenaAEntero (Arg[i+1]); }
  Meta = CadenaAEntero (Arg[N+1]);

  Nod_Ordena (Lista);
  for ( i=0 ; i<N ; i++ )
    { Cad_ConvierteEntero(Camino[i],Lista[i]); }

  CambiaMejor (Lista[0],Camino[0]);
  Nod_Total = -1;
  Nod_Visto = -1;

  if ( Diferencia )
    { Exito = Busca (Lista,Camino); }
  else
    { Exito = SI; }

  printf ( "%d\n%d\n%lu", Nod_Visto+1, Nod_Total+1, Mejor);
  printf ( "\n" );
  Explica (MejorCamino);
  printf ( "\n" );

  return (0);
  }
Пример #3
0
   void MochilaDinMem (int k, int VolDisp, TSolucion *SolOptima, TObjeto Objetos[], int N,
                       TMemoria *Mem) {

      TSolucion SolMeterlo, SolNOMeterlo;
      int Enc;

      if (VolDisp < 0) SolOptima->Beneficio = -INFINITO;
      else if (k == N) SolOptima->Beneficio = 0;
           else {
              Enc = Busca (Mem,N,k,VolDisp,SolOptima);
              if (!Enc) {
                 /* Metemos el objeto en la mochila */
                 MochilaDinMem (k+1,VolDisp-Objetos[k].Volumen,&SolMeterlo,Objetos,N,Mem);
                 SolMeterlo.Beneficio += Objetos[k].Beneficio;
                 SolMeterlo.Objeto[k] = TRUE;
                
                 /* NO Metemos el objeto en la mochila */
                 MochilaDinMem (k+1,VolDisp,&SolNOMeterlo,Objetos,N,Mem);
                 SolNOMeterlo.Objeto[k] = FALSE;
                
                 if (SolMeterlo.Beneficio > SolNOMeterlo.Beneficio) *SolOptima = SolMeterlo;
                 else *SolOptima = SolNOMeterlo;
              }
              Almacenar(Mem,N,k,VolDisp,*SolOptima);
           }
   }
Пример #4
0
Файл: ab.c Проект: jlessa/AVB
TAB *Busca(TAB* x, int ch){
  int i;
  TAB *resp = NULL;
  if(!x) return resp;
  i = 0;
  while(i < x->nchaves && ch > x->chave[i]) i++;
  if(i < x->nchaves && ch == x->chave[i]) return x;
  if(x->folha) return resp;
  return Busca(x->filho[i], ch);
}
Пример #5
0
int InserirFilhoaEsquerda(AB* Ptab, char itempai, char itemfilho){
	AB *pai, *pt;
	pai == NULL;
	Busca(Ptab, itempai, &pai);
	if(pai == NULL && pai->esq == NULL){
		if(pt == NULL)
			return 0;
		pt->esq=NULL;
		pt->info = itemfilho;
		pt->dir = NULL;
		pt->esq = pt;
		return 1;

	}

}
Пример #6
0
int InserirFilhoaDireita(AB* Ptab, char itempai, char itemfilho){
	AB *pai, *pt;
	pai == NULL;
	Busca(Ptab, itempai, &pai);
	if(pai != NULL && pai->dir == NULL){
		pt = (AB*)malloc(sizeof(AB));
		if(pt == NULL)
			return 0;

		pt->esq = NULL;
		pt->info = itemfilho;
		pt->dir=NULL;
		pt->dir = pt;
		return 1;
	}
    else return 0;
}
Пример #7
0
Файл: ab.c Проект: jlessa/AVB
TAB *Insere(TAB *T, int k, int t){
  if(Busca(T,k)) return T;
  if(!T){
    T=Cria(t);
    T->chave[0] = k;
    T->nchaves=1;
    return T;
  }
  if(T->nchaves == (2*t)-1){
    TAB *S = Cria(t);
    S->nchaves=0;
    S->folha = 0;
    S->filho[0] = T;
    S = Divisao(S,1,T,t);
    S = Insere_Nao_Completo(S,k,t);
    return S;
  }
  T = Insere_Nao_Completo(T,k,t);
  return T;
}
Пример #8
0
int main(void) {
	Lista l = CriaLista(10);
		
	InsereInicio(&l, 1);	
	InsereFim(&l, 116);
	InsereFim(&l, 62);
	InsereInicio(&l, 145);	
	InsereInicio(&l, 5);	
	InsereFim(&l, 662);
	InsereFim(&l, 696);
	InsereFim(&l, 6);
	
	Imprime(l);
	printf("\n");
		
	RemoveInicio(&l);		
	RemoveInicio(&l);	
	RemoveFim(&l);
	
	Imprime(l);
	printf("\n");
	
	InsereInicio(&l, 1);	
	InsereInicio(&l, 5);	
	InsereFim(&l, 662);
	InsereFim(&l, 696);
	
	Imprime(l);
	printf("\n");
	
	printf("Comprimento: %d\n", Comprimento(l));
	printf("Posicao de 62: %d\n", Busca(l, 62));
	
	Libera(&l);
	
	return 0;
}
Пример #9
0
Файл: ab.c Проект: jlessa/AVB
TAB* retira(TAB* arv, int k, int t){
  if(!arv || !Busca(arv, k)) return arv;
  return remover(arv, k, t);
}
Пример #10
0
   int main(int argc, char* argv[])
   {
      long    data, x, y, contador, menor_cont, nivel_cinza_inf, nivel_cinza_sup, nivel_mat_decisao;
      char    vetor[1000];
      long    lin, col, num_linhas = 0, Janela, lim_jan;
      long    i,j;
      float   **matDecisao;
      int     **matImagem, **matImagem2;
      float  dado, Media, Variancia, Skewness, Curtosis, DesvioPadrao, Lacunaridade, distancia, menor_dist, dist_ant, menor_dist2, menor_dist3, dist_aux, m_variancia, m_var_lido, fator_k;
      float  MaxMedia, MaxVariancia, MaxSkewness, MinSkewness, MaxCurtosis, soma_Media, Media_Aprendizagem;
      long    menor_cont2, menor_cont3, menor_cont_aux;
      int     soma0, soma255, somadist0, somadist255, iclas, kmed, kvar, kske, kcur, klac, kCorrecaoMedia, knn, FatCorrecao;
      struct    {
         float distancia;
         int  classe;
      } classificacao[15]; 
   
      ini = clock();

      BYTE *ImgIn, ImgOut;
      CDIB DIBIn, DIBOut;
      short int var1;
      struct cell *aux;
      inicializa();
      if (argc < 3) 
	  {
		  printf ("Sintaxe: LIM_KNN ImgIn ImOut MatDecisao.txt m v s c l CorrMedia Knn\n");
		  exit(0);
	  }
	  else printf ("LIM_KNN ImgIn ImOut MatDecisao.txt m v s c l CorrMedia Knn\n");
      printf ("Limiarizando a imagem %s em %s\n",argv[1], argv[2]);
      kmed = atoi(argv[4]);
      kvar = atoi(argv[5]);
      kske = atoi(argv[6]);
      kcur = atoi(argv[7]);
      klac = atoi(argv[8]);
      kCorrecaoMedia = atoi(argv[9]);
      knn = atoi(argv[10]);
      DIBIn .LoadBMPFromFile(argv[1]);
      printf("Definindo altura e largura da imagem k=%d \n", knn);
      x = DIBIn.GetImageWidth();
      y = DIBIn.GetImageHeight();
   
      FILE *fpArqMatDecisao;
      if ((fpArqMatDecisao = fopen(argv[3], "r")) == NULL)
         printf("File Read Error MatDecisao.txt");
   
      while (!feof(fpArqMatDecisao))
      {
         fgets(vetor, 1000, fpArqMatDecisao);
         num_linhas++;
      }
      fclose(fpArqMatDecisao);
      num_linhas = num_linhas - 2; 
      matImagem  = (int **) new (int *[y]);
      matImagem2  = (int **) new (int *[y]);
   
      for (i = 0; i < y; i++)
      {
         matImagem[i] = (int *) new (int [x]);
         matImagem2[i] = (int *) new (int [x]);
      }
      printf("Lendo Aprendizagem\n");
      fpArqMatDecisao = fopen(argv[3], "r");
      fscanf(fpArqMatDecisao, " %d %f %d %d %d", &Janela, &Media_Aprendizagem, &col, &col, &i); /*HEADER os ultimos tres sao desprezados*/ 
              
      if (knn == 1) ler(argv[3]);/*Le o arquivo e Monta o vetor - Versao Luciano*/
      else /*Versao Horacio*/
      {
         matDecisao = (float **) new (float *[num_linhas]);
         for (i = 0; i < num_linhas; i++)
            matDecisao[i] = (float *) new (float [6]); 
      
      
         for (lin = 0; lin < num_linhas; lin++)
         {	
            for (col = 0; col < 6; col++)
            {
               fscanf(fpArqMatDecisao, " %f ", &dado);
               matDecisao[lin][col] = dado;
            }
         }
      
      } 
      fclose(fpArqMatDecisao);
      printf("Matriz de Decisao lida e armazenada\n");
      soma_Media = 0.0;
      ImgIn = DIBIn.GetImageBits();
      for (lin=0;lin<y;lin++)
      {
         for (col=0;col<x;col++)
         {
            matImagem[lin][col]=(int)DIBIn.GetPixelG8(col,lin);
            soma_Media = soma_Media + matImagem[lin][col];
         }
      }
      soma_Media = soma_Media / (x*y);
      printf("Imagem convertida para a matriz\n");

      if (kCorrecaoMedia == 1) 
	  {
       FatCorrecao = (int)(Media_Aprendizagem - soma_Media);

	    for (lin = 0; lin < y; lin++) 
           for (col = 0; col < x; col++)
		   {
		     if ((matImagem[lin][col] + FatCorrecao) > 255) matImagem[lin][col] = 255;
			   else 
		        if ((matImagem[lin][col] + FatCorrecao) < 0) matImagem[lin][col] = 0;
			      else  matImagem[lin][col] = matImagem[lin][col] + FatCorrecao;
		    }
	  }
      
	  /********************************/
      /*Aqui calculam-se valores p/normalizacao */

      MaxVariancia = 0.0;
      MaxSkewness = 0.0;
      MaxCurtosis = 0.0;
      MinSkewness = 99999999999999.9;
	  printf ("Normalizando dados...\n");
	  lim_jan = Janela /2;
      for (lin = lim_jan; lin < y-lim_jan; lin++) 
         for (col = lim_jan; col < x-lim_jan; col++)  
         {
            dado = (float)lin/(float)y;
            printf("Processando %.2f %\r", (dado*100));

            Media = 0.0;
            for (i=lin-lim_jan; i<lin+lim_jan+1; i++)
               for (j=col-lim_jan; j<col+lim_jan+1; j++)
                  Media = Media + (float)matImagem[i][j];
         
            Media = (float) Media / (Janela * Janela);
			if (Media > MaxMedia) MaxMedia = Media;
         
            Variancia = 0.0;
	        Skewness = 0.0;
            Curtosis = 0.0;
	    Lacunaridade = 0.0;
            for (i=lin-lim_jan; i<lin+lim_jan+1; i++)
               for (j=col-lim_jan; j<col+lim_jan+1; j++)
               {
		         Variancia = Variancia + (((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media));
                 Skewness = Skewness + (((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media));
                 Curtosis = Curtosis + (((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media));
		 Lacunaridade = Lacunaridade + (Variancia /((Media + (float)matImagem[i][j]) * (Media + (float)matImagem[i][j])));
               }
         
            Variancia = Variancia / (Janela * Janela);
            if (Variancia > MaxVariancia) MaxVariancia = Variancia;
            if (Variancia == 0.0) DesvioPadrao = 0.000001; 
 	     else DesvioPadrao = (float) sqrt (Variancia);
		 
            Skewness = Skewness / (Janela * Janela * DesvioPadrao * DesvioPadrao * DesvioPadrao);
	    if (Skewness > MaxSkewness) MaxSkewness = Skewness;
            if (Skewness < MinSkewness) MinSkewness = Skewness;
	    Curtosis = Curtosis / (Janela * Janela * DesvioPadrao * DesvioPadrao * DesvioPadrao * DesvioPadrao);
	    if (Curtosis > MaxCurtosis) MaxCurtosis = Curtosis;
	    Lacunaridade = (float) Lacunaridade /(Janela * Janela);
            
         }
      printf ("MaxVariancia %f MinSkewness %f MaxSkewness %f MaxCurtosis %f\n", MaxVariancia, MinSkewness, MaxSkewness, MaxCurtosis); 
      /********************************/
      lim_jan = Janela /2;
      printf("Realizando Buscas na Aprendizagem \n");
      for (lin = lim_jan; lin < y-lim_jan; lin++) 
         for (col = lim_jan; col < x-lim_jan; col++)  
         {
            contador = 0;
            dado = (float)lin/(float)y;
            printf("Processando %.2f %\r", (dado*100));            

            Media = 0.0;
            for (i=lin-lim_jan; i<lin+lim_jan+1; i++)
               for (j=col-lim_jan; j<col+lim_jan+1; j++)
                  Media = Media + (float)matImagem[i][j];
         
            Media = (float) Media / (Janela * Janela);
         
            Variancia = 0.0;
            Skewness = 0.0;
            Curtosis = 0.0;
	    Lacunaridade = 0.0;
            for (i=lin-lim_jan; i<lin+lim_jan+1; i++)
               for (j=col-lim_jan; j<col+lim_jan+1; j++)
               {
		         Variancia = Variancia + (((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media));
                 Skewness = Skewness + (((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media));
                 Curtosis = Curtosis + (((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media) * ((float)matImagem[i][j] - Media));
		 Lacunaridade = Lacunaridade + (Variancia /((Media + (float)matImagem[i][j]) * (Media + (float)matImagem[i][j])));
               }
         
            Variancia = Variancia / (Janela * Janela);
            if (Variancia == 0.0) DesvioPadrao = 0.000001;
 	     else DesvioPadrao = (float) sqrt (Variancia);
            Skewness = Skewness / (Janela * Janela * DesvioPadrao * DesvioPadrao * DesvioPadrao);
	    Curtosis = Curtosis / (Janela * Janela * DesvioPadrao * DesvioPadrao * DesvioPadrao * DesvioPadrao);
	    Lacunaridade = (float) Lacunaridade /(Janela * Janela);

            /* Normalizando valores e verificando as caracteristicas a utilizar*/
            Media = kmed * Media;
            Variancia = kvar * 255 * (Variancia / MaxVariancia);
            Skewness = kske * 255 * ((Skewness - MinSkewness) / (MaxSkewness - MinSkewness));
            Curtosis = kcur * 255 * (Curtosis / MaxCurtosis);
	    Lacunaridade = klac * Lacunaridade;

            if (knn == 1) /*Versao do Luciano*/
            {
               aux=Busca(matImagem[lin][col],Media,Variancia,0,Skewness,Curtosis, Lacunaridade);
            	/*nivel_cinza_inf = tom_cinza->dado;
            	nivel_cinza_sup = tom_cinza->dado;*/
            
               matImagem2[lin][col] = aux->c3;
            } /*Fim versao do Luciano*/
            else /*Versao do Horacio para k>1*/
            {
               while ( (matImagem[lin][col] > (int)matDecisao[contador][0]) && (contador < num_linhas-1) )
                  contador++; //Possiciona-se na primeira linha correta da Matriz de Decisao
               nivel_cinza_inf = matDecisao[contador][0];
               nivel_cinza_sup = matDecisao[contador][0];
            
               if (matImagem[lin][col] != (int)matDecisao[contador][0]) /*Nao é igual*/
               {	   
                  if (contador != 0) 
                  {
                     nivel_cinza_inf = matDecisao[contador-1][0];
                     contador = 0;
                     while ( (nivel_cinza_inf != (int)matDecisao[contador][0]) && (contador < num_linhas-1) )
                        contador++; /*Possiciona-se na primeira linha correta da Matriz de Decisao*/
                  }
                  else nivel_cinza_inf = matDecisao[contador][0];
               }
            
            
               for (iclas=0; iclas<knn; iclas++)
               {
                  classificacao[iclas].distancia =  10000000;
                  classificacao[iclas].classe = -1;
               }
            
               menor_dist = 10000000;
               while ((nivel_cinza_inf <= (int)matDecisao[contador][0]) && (nivel_cinza_sup >= (int)matDecisao[contador][0]) && (contador < num_linhas-1) )
               {
                  distancia = (matImagem[lin][col] - matDecisao[contador][0]) + (kmed * ((Media - matDecisao[contador][1]))) + (kvar * ((Variancia - matDecisao[contador][2]) )) + (kske * ((Skewness - matDecisao[contador][4]))) + (kcur * ((Curtosis - matDecisao[contador][5]) )) + (klac * ((Lacunaridade - matDecisao[contador][6])));
               
                  if (distancia < menor_dist)
                  {
                     for (iclas=(knn-2); iclas > -1; iclas--)
                     {
                        classificacao[iclas+1].distancia = classificacao[iclas].distancia;
                        classificacao[iclas+1].classe = classificacao[iclas].classe;
                     }
                  
                     menor_dist = distancia;
                     classificacao[0].distancia = distancia;
                     classificacao[0].classe = matDecisao[contador][3];
                  
                  }
                  contador++;
               
               } 
            
               soma0=0;
               soma255=0;
               somadist0=0;
               somadist255=0;
               for (iclas=0; iclas<knn; iclas++)
               {
                  if (classificacao[iclas].classe == 0) soma0++;
                  if (classificacao[iclas].classe == 255) soma255++;
               }
            
               if (soma0 > soma255) matImagem2[lin][col] = 0;
               if (soma255 > soma0) matImagem2[lin][col] = 255;
               if (soma0 == soma255) //caso especial K= par;
               {
                  for (iclas=0; iclas<knn; iclas++)
                  {
                     if (classificacao[iclas].classe == 0) somadist0 = somadist0 + classificacao[iclas].distancia;
                     if (classificacao[iclas].classe == 255) somadist255 = somadist255 + classificacao[iclas].distancia;
                  }
                  if (somadist0 < somadist255) matImagem2[lin][col] = 0;
                  else matImagem2[lin][col] = 255;
               }
            
            
            } /*Fim versao do Horacio para k>1			*/		
         
         }
      printf("\nFim das Buscas\n");
      DIBOut.CreateImage(x,y,8);
      for (lin=0;lin<y;lin++)
      {
         for (col=0;col<x;col++)
         {
            DIBOut.SetPixelG8(col,lin,BYTE(matImagem2[lin][col]));
         		/*DIBOut.SetPixelG8(lin,col,BYTE(0));
         		//DIBOut.SetPixelG8(lin,col,BYTE(matImagem2[lin][col]);*/
         }
      }	
      printf("Gravando %s\n",argv[2]);
      DIBOut.SaveBMPFromFile(argv[2]);
      limpar();
      printf("Tempo de execucao (ms): %d\n", (clock() - ini)/1000);
      return 0;
   }
Пример #11
0
int main()
{
	int i=0;
	int InfoInserir;
	int x, op=-1, valor;
	deque *d;
	system("cls");
	d=(deque*)malloc(sizeof(deque));
	inicializaDeque(d);

	while(op != 0)
	{
		system("pause");
		system("cls");
		printf("\n\n           DEQUE        \n\n");
		printf("( 1 ) Insere pela Direita.\n");
		printf("( 2 ) Insere pela Esquerda.\n");
		printf("( 3 ) Remove pela Direita. \n");
		printf("( 4 ) Remove pela Esquerda.\n");
		printf("( 5 ) Exibe.\n");
		printf("( 6 ) Busca. \n");
		printf("( 7 ) Organiza. \n");
		printf("( 8 ) Limpa Tudo. \n");
		printf("\nTempo na Busca: %f\n", tempoB/CLOCKS_PER_SEC);
		printf("Tempo no Organizar: %f\n", tempoO/CLOCKS_PER_SEC);
		printf("\nInforme a operacao: ");
		scanf("%d", &op);

		switch(op)
		{
			case 1:
			{
				printf("Diga quantos valores deseja inserir pela Direita <-: ");
				scanf("%d", &InfoInserir);
				for(i=InfoInserir; i>0; i--)
					InsereFrent(d,i);
				break;
			}
			case 2:
			{
				printf("Diga quantos valores deseja inserir pela Esquerda ->: ");
				scanf("%d", &InfoInserir);
				for(i=0; i<InfoInserir; i++)
				InsereFund(d,i);
				break;
			}
			case 3:
			{
				if(taVazio(d))
					RetiraFrent(d);
				break;
			}
			case 4:
			{
				if(taVazio(d))
					RetiraFund(d);
				break;
			}
			case 5:
			{
				printDeque(d);
				break;
			}
			case 6:
			{
				printf("Informe valor para busca :");
				scanf("%d", &valor);
				Busca(d,valor);
				break;
			}
			case 7:
			{
				Ordena(d);
				break;
			}
			case 8:
			{
				ApagaTudo(d);
				break;
			}
			default:
			{
				printf("\nErro: Opcao invalida! Informe novamente.\n");
			}

		}
	}

	system("pause");
	return 0;
}
Пример #12
0
void CurvaFluxVol()
{
  float   far *apt;
  float   far *apt1;
  float volume=0.0,  volumeAlca=0.0;
  int counter,NumSinal, contador,  ContinuaCalculos=FALSE,      SinalAnt=0;

   NumeroSinal = 0;
   moveto(194,115);
   apt = inicFlux1;
   Atendeu = FALSE;
   DisparaContador();
   HabilitaInterrup();
   do {
      DesabilitaInterrup ();
      Help = kbhit() && (ESC == getch());
      HabilitaInterrup();
      if (Help)
         Abortou = TRUE;
      else
         {
         while(!Atendeu);
	 Sinal = Sinal>Zero ? Busca(Sinal,GanhoExp)-512 : Busca(Sinal,GanhoIns)-512;
         Atendeu = FALSE;
         }
      } while((abs(Sinal) < 10)&&(!Abortou));
   if (!Abortou)
      {
      do {
         DesabilitaInterrup ();
         Help = kbhit() && (ESC == getch());
         HabilitaInterrup();
         if (Help)
            Abortou = TRUE;
         else
            {
            while(!Atendeu);
	    Sinal = Sinal>Zero ? Busca(Sinal,GanhoExp)-512 : Busca(Sinal,GanhoIns)-512;
	    if (abs(Sinal-SinalAnt)<120)
	       {
	       SinalAnt=Sinal;
	       volume += Sinal / 6400.0;
	       lineto (volume*41+194 , (Sinal *  -6.25/32) + 115);
	       }
	    Atendeu = FALSE;
            }
	 } while ((!Abortou) && (volume >= (-.5)));
      do {
         DesabilitaInterrup ();
         Help = kbhit() && (ESC == getch());
         HabilitaInterrup();
         if (Help)
            Abortou = TRUE;
         else
            {
            while(!Atendeu);
	    Sinal = Sinal>Zero ? Busca(Sinal,GanhoExp)-512 : Busca(Sinal,GanhoIns)-512;
	    if (abs(Sinal-SinalAnt)<120)
	       {
	       volume += Sinal / 6400.0;
	       if (ContinuaCalculos && Sinal<=0)
		  {
		  ContinuaCalculos=FALSE;
		  apt=inicFlux1;
		  NumeroSinal=0;
		  }
	       if (ContinuaCalculos && (Sinal <= SinalAnt) && (Sinal>0))
		  {
		  ContinuaCalculos=FALSE;
		  apt=inicFlux1;
		  NumeroSinal=0;
		  }
	       if (Sinal>0)
		  {
		  ContinuaCalculos=TRUE;
		  *apt=Sinal;
		  ++apt;
		  ++NumeroSinal;
		  }
               SinalAnt=Sinal;
	       lineto (volume*41+194 , (Sinal * -6.25/32) + 115);
	       }
	    else
	       Sinal = SinalAnt;
	    Atendeu = FALSE;
            }
         } while ((!Abortou) && (Sinal <= 5));

/************************* 2 ALCA ******************************************/

      do {
         DesabilitaInterrup ();
         Help = kbhit() && (ESC == getch());
         HabilitaInterrup();
         if (Help)
            Abortou = TRUE;
         else
            {
            while(!Atendeu);
	    Sinal = Sinal>Zero ? Busca(Sinal,GanhoExp)-512 : Busca(Sinal,GanhoIns)-512;
	    if (abs(Sinal-SinalAnt)<120)
	       {
	       SinalAnt=Sinal;
	       volume += Sinal / 6400.0;
	       *apt = Sinal;
	       ++apt;
	       ++NumeroSinal;
	       lineto (volume*41+194 , (Sinal * -6.25/32) +115);
	       }
	    else
	       Sinal = SinalAnt;
	    Atendeu = FALSE;
	    }
	 } while ((Sinal>=0) && (!Abortou) && (NumeroSinal<=NUMMAXPONTOSINF-2000));

/************************* 3 ALCA ******************************************/


      contador = 0;

      do {
         DesabilitaInterrup ();
         Help = kbhit() && (ESC == getch());
         HabilitaInterrup();
         if (Help)
            Abortou = TRUE;
         else
            {
            while(!Atendeu);
	    Sinal = Sinal>Zero ? Busca(Sinal,GanhoExp)-512 : Busca(Sinal,GanhoIns)-512;
	    if (abs(Sinal-SinalAnt)<120)
	       {
	       SinalAnt=Sinal;
	       volume += Sinal / 6400.0;
	       *apt = Sinal;
	       ++apt;
	       ++contador;
	       volumeAlca += Sinal / 6400.0;
	       lineto (volume*41+194 , (Sinal * -6.25/32) +115);
	       }
	    else
	       Sinal = SinalAnt;
	    Atendeu = FALSE;
            }
	 } while ((Sinal<=0) && (!Abortou) && (contador <= 2000));
      DesabilitaInterrup();

      *(apt-1)=FIM;
      if (!Abortou)
	 {
	 for (apt1 = inicFlux1, counter=0; (*(apt1+1) != FIM) &&
	     (apt1<inicFlux1+NUMMAXPONTOSINF)&&(*apt1>=0); ++apt1, ++counter);
	     if (counter<=200)
		{
		Abortou=TRUE;
		gprintf(160,40,"VEF1 INDEFINIDO; TEMPO < 1s");
		}
	 }
      if (!Abortou)   {
         clearviewport();
	 DesenhaEixos(10,435,10,210,10,75,80,25);
         ScalaFluxOlhe();
	 volume = 0.0;
         moveto (20,210);

	 for (apt=inicFlux1;(*(apt+1)!=FIM)&&(apt<inicFlux1+NUMMAXPONTOSINF);apt++)
             {
             volume += *apt / 6400.0;
	     if ( *apt != 0 )  {
		lineto (volume*40+20, (* apt / 64.0) * (-12.5) + 135);
                }
             }

	 if (FlagIntegridade)
	 ReCalcula();
	 CalculaParamFlux(NumSinal);
         AtivaJanelaGrafica(GRAF1);
         CalculoPercents();
         ExibeParametrosUN(180,5);
	 outtextxy(310,190,PREouPOS);
	 if (teste1Flux)  {
            teste2Flux = TRUE;
            teste1Flux = FALSE;
            }
         else
            teste1Flux = TRUE;
         }
      }
   else
      DesabilitaInterrup();

}        /* CurvaFluxVol */