Exemple #1
0
int declaration_tab(char * nom_tab)
{
		char str[100], str2[100];
		int i,j=0;
		int typage_var, relative_ou_absolue ;
		//On ajoute dans la table des symboles une variable qui va contenir la dimension et les valeurs de chaque crochet
		if ( ajouter_Var_spec(nom_tab,1,0,0,1,get_nivPtr(), 1)==-1 )  
		{
			return -1;
		} 
		else
		{
			int addr_tab=recherchet_spec(nom_tab, &relative_ou_absolue , &typage_var);
			//Si la variable précédente a bien été ajoutée, on génère la ligne assembleur suivante et
			// on fera pointer cette variable sur la première case du tableau (adresse get_indice())
			if(relative_ou_absolue==0)
			{
				printf( "AFC @@%d %d\n", addr_tab , get_indice());
			}
			else
			{
				printf( "AFC @%d %d\n", addr_tab, get_indice());
			}
			incrementerPC();
			modifierChampInitialiserVariable(nom_tab);
			init_adresse_pointee(addr_tab+getNombredevariableglobale()+1, addr_tab+getNombredevariableglobale()+2);
			//On récupère l'adresse de la var précédente pour avoir le nombre total d'éléments dans le tableau
			int a=get_indice()-1;
			for(i=0; i<getTotalDim(a); i++)
			{
				//On crée des noms de variables du type nomTableauIndice, pour tab[2], on aura tab0 tab1.
				sprintf(str, "%d", i);
				strcpy(str2, nom_tab);
				//On ajoute chacune de ces var dans la table des symboles, on vérifie que des variables
				//de même noms n'existaient pas déjà
				if(ajouter_Var_spec(strcat(str2,str) ,1,0,0,0,0,1)==-1) 
				{
					return -2;
				}
				//printf("adresse pointée : %d\n", get_adresse_pointee(addr_tab+getNombredevariableglobale()+1));
			}
			return 0;	
		}
		
}
/**
 * Gets the minimum indice of a point.
 * (returns j if j is the closest point from pt)
 */
const int get_minimum_index(float * mtx, int pt, int size) {
  float min_dist = -1;
  int closest_pt = -1 ,i;

  for (i = 0 ; i < size ; i++) {
    if (i != pt) {
      float cur_dist = get_indice(mtx, pt,i, size);
      // initialization
      if ((closest_pt == -1) && (cur_dist > 0)) {
        min_dist = cur_dist;
        closest_pt = i;
      }
      // Already initialized, but a closer point is found
      else if (((cur_dist < min_dist) && (cur_dist > 0))) {
        min_dist = cur_dist;
        closest_pt = i;
      }
    }
  }
  return closest_pt;
}