Exemplo n.º 1
0
void Scriefisier(Rez* a,char* out)
{
	FILE* f;
	f=fopen(out,"wt");
	if(!f) return;
	while (a)
	{
		fprintf(f,"\n%s\n",a->nume_exp);
		fprintf(f,"%s=%5.2f\n",a->reprez,a->rezultat);
		AfiArb(a->arbore,f);
		a=a->urm;
	}
	fclose(f);
	return;
}
Exemplo n.º 2
0
int main(int argc, char*argv[])
{ TArb arb=NULL,arb2=NULL,arb3=NULL,arbaux=NULL;                  /* Declaratii */
  int p,i,in,k,k1,ind=0,j,alpha,rezultat,i2,ok,t=0,arbcon=0;
  char sir[100],sir2[5],sir3[5],sir4[5],sir5[5];
  char numef[20];
  VctArb varb;
  FILE* f;
  VctStr siro[50],sirn[50];
  Tabela tab[50],tab2[50];
  
  
  f=fopen(argv[1],"rt");               /*Deschidere fisier si verificare */
  if (!f)
     {printf("\nNu s-a putut deschide fisierul!");
      return 0;
     }
  else
      printf("\n\n\nFisierul %s s-a deschis cu succes !\n\n\n",argv[1]);
      
  while ( fgets(sir,100,f) != 0 )            /* Cat timp se citeste ecuatie din fisier */
        {printf("\nArborele pentru :  %s",sir);   
        
         k=0;                      
         in=0;
         p=0;
         
         for (i=0;i<=strlen(sir);i++)      /* Separare prin spatii si construirea unui vector de strings */  
             {if (sir[i]!= ' ' )
                {sir2[in]=sir[i];
                 in++;
                 sir2[in]='\0';
                
                }
              else
                  {     
                   siro[k].str=(char*)malloc(sizeof(sir2)+1);
                   strcpy(siro[k].str,sir2);
                   sir2[0]='\0';             /* Resetare sirurui */
                   sir2[1]='\0';
                   sir2[2]='\0';
                   sir2[3]='\0';
                   sir2[4]='\0';
                   in=0;
                   k++;
                  }
             }
    
          k1=k;
          k=0;
          for(i=0;i<k1;i++)           /* Construirea unui vector de strings CORECT. Daca cel anterior putea avea pe o pozitie
          ceva de genul acesta: (a+ , acest vector va avea doar nume de variabile, operanzi sau paranteze */
            if ( ( strlen(siro[i].str) != 1 ) && (ispunct(siro[i].str[0])) )
               { 
                  sir3[0]=siro[i].str[0];
                  sir3[1]='\0';
                  sir4[0]=siro[i].str[strlen(siro[i].str)-1];
                  sir4[1]='\0';
                  sir4[2]='\0';
                  sirn[k].str=(char*)malloc(6);
                  strcpy(sirn[k].str,sir3);  
                  k++;
               
                  for ( j=1;j<strlen(siro[i].str)-1;j++)
                      {sir5[j-1]=siro[i].str[j];
                       sir5[j]='\0';
                       alpha=1;
                      }
                      
                  if (alpha == 1 )
                  {sirn[k].str=(char*)malloc(6);
                  strcpy(sirn[k].str,sir5);
                
                  k++;
                  alpha=0;
                  }
                  sirn[k].str=(char*)malloc(6);
                  strcpy(sirn[k].str,sir4);
                  
                  
                  sir3[0]='\0';        /* Resetare sirurui */
                  sir3[1]='\0';
                  sir4[0]='\0';
                  sir4[1]='\0';
                  sir5[0]='\0';
                  sir5[1]='\0';
                  sir5[2]='\0';
                  sir5[3]='\0';
                  sir5[4]='\0';
                  k++;
               }
            else
                 {sirn[k].str=(char*)malloc(6);
                  strcpy(sirn[k].str,siro[i].str);
                  k++;
                 }
            if( strlen(siro[i-1].str) == 2)
                {sir3[0]=sir[strlen(sir)-3];
                sir3[1]='\0';
                sirn[k].str=(char*)malloc(6);
                strcpy(sirn[k].str,sir3);
                k++;
                }
            sir4[0]=sir[strlen(sir)-2];
            sir4[1]='\0';
         
            sirn[k].str=(char*)malloc(6);
            strcpy(sirn[k].str,sir4);
        /* Termninare construire vector strings */
        
        
        /*-----------------------------------------------------------------*/
                        
         if ( arbcon == 0 )  /* Daca nu s-a construit arbore pentru aceasta ecuatie */
         for(i2=0;i2<k;)     /* Verificare prefixata. Varianta BONUS: verific daca sir[i] e operant */
                        if ( (ispunct(sirn[i2].str[0] )) && (sirn[i2].str[0] != '+' ) && (sirn[i2].str[0] != '-' ) && (sirn[i2].str[0] != '*' ) && (sirn[i2].str[0] != '/' )  )
                            i2++;
                        else
                                if (( sirn[i2].str[0] == '+' ) || (sirn[i2].str[0] == '-' ) || (sirn[i2].str[0] == '*' ) || (sirn[i2].str[0] == '/' ) || ( strcmp( sirn[i2].str, "sqrt") == 0 ) || ( strcmp( sirn[i2].str, "pow") == 0 ) || ( strcmp( sirn[i2].str, "sum") == 0 ) || ( strcmp( sirn[i2].str, "prod") == 0 ) )
                                  {
                                   ConstrArbPref(&(varb[t]),sirn,&p,&k);
                                   printf("\n");
                                   AfiArb(varb[t]);
					printf("cost = %i\n",*(varb[t]->cost));
					PrelucrareArbore(varb[t]);
                                   printf("%lf\n",*(varb[t]->rez));

                                   t++;
                                   
                                   arbcon=1;
                                   break;
                                   }    
                                 else
                                     break;
            
          sir3[0]='\0';        /* Resetare siruri */
          sir3[1]='\0';
          sir4[0]='\0';
          sir4[1]='\0';
             k=0;
          printf("\n\n\n--------------------------------\n\n\n");
       arbcon=0;
        }   
  
  return 1;
}