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; }