// Pas fini void crible_eratosthene(int n) { int t[2], tprec[2],i,pid; for(i = 0 ; i < n ; i++) { pipe(t); if((pid =fork())) { if(i == 0) { close(1); close(t[0]); copie(0,t[1]); close(0); close(t[1]); exit(EXIT_SUCCESS); } else { close(t[0]); close(tprec[1]); copie(tprec[0],t[1]); close(tprec[0]); close(t[1]); exit(EXIT_SUCCESS); } } else { close(t[1]); tprec[0] = t[0]; } } copie(t[0],1); close(t[0]); close(1); for(i = 0 ; i < n ; i++) wait(NULL); }
Rationnel::Rationnel(const QString& s) { QString copie(s); num=(copie.section('/', 0,0)).toInt(); denom=(copie.section('/', 1,1)).toInt(); if (denom==0) throw ExceptionCooCoo("Division par 0"); simplifier(); }
//copie de 2 listes ListeCouple *copie(ListeCouple *tete1) { ListeCouple *courant = tete1 ; ListeCouple *Copie = NULL ; if(courant != NULL) { Copie = newList(copieArbre(courant->noeud)) ; Copie->suivant = copie(courant->suivant) ; return Copie ; } else return NULL ; }
int main() { int tableau1[3]={1,2,3}; int tableau2[3]; copie(tableau1,tableau2,3); int i; for (i=0;i<3;i++) { printf("%d\n",tableau2[i]); } return 0; }
int passerTour(int table[8][8], int couleur) { int i, j; int copieTable[8][8]; for ( i=0; i<8; i++ ) { for ( j=0; j<8; j++ ) { copie(table, copieTable); if ( positionnement(copieTable, couleur, i, j)==kcorrect ) return 0; } } return 1; }
void ordinateur(int table[8][8]) { int arbre(int table[8][8], int couleur, int x); int i, j, n, m, x=0; int copieTable[8][8], tableDefinitive[8][8]; for ( i=0; i<8; i++ ) { for ( j=0; j<8; j++ ) { copie(table, copieTable); if ( positionnement(copieTable, knoire, i, j)==kcorrect ) { x++; n=arbre(copieTable, knoire, 0); if ( x==1 || n>m ) { m=n; copie(copieTable, tableDefinitive); } } } } copie(tableDefinitive, table); return; }
Structure Structure::cloner(Structure const& modele, TechnologieStructure techS) { Structure copie(modele.getVieMax() + (modele.getVieMax() * 0.5 * techS.getNiveauVie()), modele.getBouclierMax() + (modele.getBouclierMax() * 0.5 * techS.getNiveauBouclier()), modele.getBouclierTaux() + (0.05 * techS.getNiveauBouclier()), modele.getVisibilite() + (modele.getVisibilite() * 0.5 * techS.getNiveauVisibilite()), modele.getAttaque() + (modele.getAttaque() * 0.5 * techS.getNiveauAttaque()), modele.getRayonAttaque(), modele.getPrixEnergie() - (modele.getPrixEnergie() * 0.5 * techS.getNiveauMateriaux()), modele.getPrixMateriaux() - (modele.getPrixMateriaux() * 0.5 * techS.getNiveauMateriaux()) ); return copie; }
int main(int argc, char *argv[]) { int tableau[4] = {150, 5, 55, 7}; int tableauoriginal[4]; int i; for (i = 0 ; i < 4 ; i++) { tableauoriginal[i] = tableau[i]; } affiche(tableau, 4); sommeTableau(tableau, 4); moyenneTableau(tableau, 4); ordonnerTableau(tableau, 4); copie(tableau, tableau, 4); //does not work right now return 0; }
int arbre(int table[8][8], int couleur, int x) { int total(int table[8][8]); int i, j, n=0; int copieTable[8][8]; if ( x<4 ) { x++; for ( i=0; i<8; i++ ) { for ( j=0; j<8; j++ ) { copie(table, copieTable); if ( positionnement(copieTable, couleur, i, j)==kcorrect ) n+=arbre(copieTable, !couleur, x); } } } else return total(table); return n/4; }
/* Fais appel à toutes les fonctions de base contenues dans gestionImg.c, dans affichage.c et dans lecture.c */ void testFonctionsDeBase() { image img1 = NULL, img2 = NULL, img3 = NULL, img4 = NULL, img5 = NULL; /* L'image 1 est lue au clavier */ img1 = lireClavier(); printf("\n"); /* L'image 2 est copiée est mis en négatif */ img2 = copie(img1); negatif(&img2); /* L'image 3 est un négatif de la 2 est doit donc être identique à la 1*/ img3 = copie(img2); negatif(&img3); /* On regarde la différence entre la 1 et la 2 */ img4 = difference(img1 , img2); /* On regarde la différence entre la 1 et la 3 */ img5 = difference(img1 , img3); /* Affichage des résultats */ printf("Voici votre image 1 :\n"); affichageNormal(img1); printf("\n"); affichageProfondeur(img1); printf("\n"); printf("Voici votre image 2 (negatif de la 1) :\n"); affichageNormal(img2); printf("\n"); affichageProfondeur(img2); printf("\n"); printf("Voici votre image 3 (negatif de la 2) :\n"); affichageNormal(img3); printf("\n"); affichageProfondeur(img3); printf("\n"); printf("Voici votre image 4 (différence entre 1 et 2) :\n"); affichageNormal(img4); printf("\n"); affichageProfondeur(img4); printf("\n"); printf("Voici votre image 5 (différence entre 1 et 3) :\n"); affichageNormal(img5); printf("\n"); affichageProfondeur(img5); printf("\n"); printf("\n"); /* Test memeImage() */ memeImage(img1, img3) ? printf("La 1 et la 3 sont identiques.\n") : printf("ERREUR : La 1 et la 3 sont differentes.\n"); (!memeImage(img1, img2)) ? printf("La 1 et la 2 sont differentes.\n") : printf("ERREUR : La 1 et la 2 sont identiques.\n"); printf("\n"); /* Test memeDessin() */ memeDessin(img1, img3) ? printf("La 1 et la 3 ont le meme dessin.\n") : printf("ERREUR : La 1 et la 3 n'ont pas le meme dessin.\n"); memeDessin(img1, img2) ? printf("La 1 et la 2 ont le meme dessin.\n") : printf("ERREUR : La 1 et la 2 n'ont pas le meme dessin.\n"); (!memeDessin(img1, img4)) ? printf("La 1 et la 4 n'ont pas le meme dessin.\n") : printf("WARNING : La 1 et la 4 ont le meme dessin.\n"); printf("\n"); /* Test estBlanche() et estNoire() */ (estNoire(img4) == true) ? printf("La 4 est noire.\n") : printf("ERREUR : La 4 n'est pas noire.\n"); (estBlanche(img5) == true) ? printf("La 5 est blanche.\n") : printf("ERREUR : La 5 n'est pas blanche.\n"); printf("\n"); /* Test aireNoire() */ printf("Aire en noire image 1 : %f\n", aireNoire(img1)); printf("Aire en noire image 2 : %f\n", aireNoire(img2)); printf("Aire en noire image 3 : %f\n", aireNoire(img3)); printf("Aire en noire image 4 : %f\n", aireNoire(img4)); printf("Aire en noire image 5 : %f\n", aireNoire(img5)); printf("\n"); /*Affichage en mode 2k*/ printf("Affichage en mode 2k\n"); printf("Voici votre image 1 (Profondeur : 0) :\n"); affichage2k(img1, 0); printf("\n"); printf("Voici votre image 1 (Profondeur : 1) :\n"); affichage2k(img1, 1); printf("\n"); printf("Voici votre image 1 (Profondeur : 2) :\n"); affichage2k(img1, 2); printf("\n"); printf("Voici votre image 1 (Profondeur : 3) :\n"); affichage2k(img1, 3); printf("\n"); printf("Voici votre image 1 (Profondeur : 4) :\n"); affichage2k(img1, 4); printf("\n"); printf("Voici votre image 1 (Profondeur : 5) :\n"); affichage2k(img1, 5); printf("\n"); printf("Voici votre image 1 (Profondeur : 6) :\n"); affichage2k(img1, 6); printf("\n"); if(img1 != NULL) rendMemoire(img1); if(img2 != NULL) rendMemoire(img2); if(img3 != NULL) rendMemoire(img3); if(img4 != NULL) rendMemoire(img4); if(img5 != NULL) rendMemoire(img5); }
//cree une table de longueur pachageMerge a partir d'une liste chainee unsigned char *creeTableLongueurMerge(ListeCouple *tete,int longMax){ ListeCouple *Ajouts = NULL ; //liste des symboles + regroupements ListeCouple *Liste ; ListeCouple *Copie ;//copie de la Liste pour pouvoir supprimer des elts int nombreSymboles = taille(tete) ; int iteration = 2 ; //variable pour la recherche dans Ajouts ListeCouple *Symbolecourant = tete ; ListeCouple *AjoutCourant ; unsigned char *tableLongueur = initialiserTableauChar(TAILLE) ; unsigned char charCourant ; //int inferieurNMoins2 ; while(/*taille(Ajouts)*/ iteration <= longMax){ //tant qu'il que l'on a pas fait N-2 regroupements Liste = copie(tete) ; //Ajout des regroupements dans la liste et supprimer ceux ci de Ajouts while(Ajouts!=NULL) { ajout(Ajouts->noeud,&Liste) ; supprimeTete(&Ajouts) ; } Copie = copie(Liste) ; //calcul de tous le Ajouts possibles while(Copie != NULL) { //au moins 2 elts dans dans Copie -> on ne groupe pas quand 1 seul elt regroupement(&Copie,&Ajouts); } iteration++ ; } //on a suffisament de regroupement il faut donc compter pour chaque caracteres, //le nombre d'apparission dans Ajouts AjoutCourant = Ajouts ; // printf("nb symbole = %d\nnb elt dans Ajouts = %d\n",taille(tete),taille(Ajouts)) ; //inferieurNMoins2 = 1 ; while(/*inferieurNMoins2 <= nombreSymboles &&*/ Symbolecourant != NULL) { //courant contient toujours des feuilles //on ne prend que les N-2 premiers elts de Ajouts charCourant = Symbolecourant->noeud->value ; tableLongueur[(int)charCourant] = 1 + nbOccurences(charCourant, Ajouts, nombreSymboles-2) ; // printf("long(%c) = %d\n",charCourant,tableLongueur[(int)charCourant]) ; Symbolecourant = Symbolecourant->suivant ; //inferieurNMoins2++ ; } return tableLongueur ; }
void RT_secondOrder(Pnum* m,Pnum* velocity,unsigned nb_row, unsigned nb_col, unsigned* f, unsigned nb_points_front){ printf("Algorithm Rouy-Tourin : problem %d x %d with finite difference second order\n",nb_row,nb_col); FILE *ft = gnudata_open("time_so"); FILE *fiter = gnudata_open("iter_so"); double time_start = give_time(), time_end = 0; Pnum* m_0 = (Pnum*) malloc(nb_col*nb_row*sizeof(Pnum)); //Initialisation des noeuds int i,j; for (i = 0; i<nb_row; i++) { for (j = 0; j<nb_col; j++) { m_0[ind(nb_col,i,j)] = INF; } } //Initialisation des noeuds sources for (i = 0; i<2*nb_points_front; i+=2) { m_0[ind(nb_col,f[i], f[i+1])] = 0.0; } int s = 0, fi = 0, nb_iter = 0, convergence = 1; do{ convergence = 1; copie(m_0, m, nb_row, nb_col); for (i = 0; i<nb_row; i++) { for (j = 0; j<nb_col; j++) { if (isInObstacle(velocity, nb_col, i,j)){ m_0[ind(nb_col, i, j)] = INF; continue; } Pnum x_m1 = (i-1 >= 0) ? m[ind(nb_col, i-1, j)] : INF; Pnum x_m2 = (i-2 >= 0) ? m[ind(nb_col, i-2, j)] : INF; Pnum x_p1 = (i+1 < nb_col) ? m[ind(nb_col, i+1, j)] : INF; Pnum x_p2 = (i+2 < nb_col) ? m[ind(nb_col, i+2, j)] : INF; Pnum y_m1 = (j-1 >= 0) ? m[ind(nb_col, i, j-1)] : INF; Pnum y_m2 = (j-2 >= 0) ? m[ind(nb_col, i, j-2)] : INF; Pnum y_p1 = (j+1 < nb_row) ? m[ind(nb_col, i, j+1)] : INF; Pnum y_p2 = (j+2 < nb_row) ? m[ind(nb_col, i, j+2)] : INF; Pnum sol, Tx, Ty, Tx_m , Tx_p, Ty_m, Ty_p, f; f = velocity[ind(nb_col, i, j)]; if (x_p2 < INF && x_m2 < INF && y_m2 < INF && y_p2 < INF ){ s++; Tx_m = fmaxf((4*x_m1-x_m2)/3.0, 0); Tx_p = fminf((4*x_p1-x_p2)/3.0, 0); Ty_m = fmaxf((4*y_m1-y_m2)/3.0, 0); Ty_p = fminf((4*y_p1-y_p2)/3.0, 0); sol = solveEquation_2(Tx_m,Tx_p, Ty_m, Ty_p, h, f); }else{ fi++; Tx = fminf(x_m1, x_p1); Ty = fminf(y_m1, y_p1); sol = solveEquation_1(Tx,Ty,h,f); } Pnum sol_min = fminf(m[ind(nb_col, i, j)],sol); m_0[ind(nb_col, i, j)] = sol_min; convergence = convergence && (fabsf( m[ind(nb_col,i, j)] - m_0[ind(nb_col, i, j)] ) <= epsilon); } } nb_iter++; } while (!convergence); time_end = give_time(); dput_xy(ft, nb_row, time_end-time_start); dput_xy(fiter, nb_row, nb_iter); calculDistance(2,m, nb_col/2, nb_row/2, nb_row, nb_col); free(m_0); printf("%d itérations\n",nb_iter); printf("TIME : %f sec\n\n",time_end-time_start); }
void RT_firstOrder(Pnum* m,Pnum* velocity,unsigned nb_row, unsigned nb_col, unsigned* f, unsigned nb_points_front){ printf("Algorithm Rouy-Tourin : problem %d x %d with finite difference fisrt order\n",nb_row,nb_col); FILE *ft = gnudata_open("time_fo"); FILE *fiter = gnudata_open("iter_fo"); double time_start = give_time(), time_end = 0; Pnum* m_0 = (Pnum*) malloc(nb_col*nb_row*sizeof(Pnum)); //Initialisation des noeuds int i,j,nb_iter = 0,convergence = 1; for (i = 0; i<nb_row; i++) { for (j = 0; j<nb_col; j++) { m_0[ind(nb_col,i,j)] = INF; } } //Initialisation des noeuds sources for (i = 0; i<2*nb_points_front; i+=2) { m_0[ind(nb_col,f[i], f[i+1])] = 0.0; } do{ convergence = 1; copie(m_0, m, nb_row, nb_col); for (i = 0; i<nb_row; i++) { for (j = 0; j<nb_col; j++) { if (isInObstacle(velocity, nb_col, i,j)){ m_0[ind(nb_col, i, j)] = INF; continue; } Pnum x_m1 = (i-1 >= 0) ? m[ind(nb_col, i-1, j)] : INF; Pnum x_p1 = (i+1 < nb_col) ? m[ind(nb_col, i+1, j)] : INF; Pnum y_m1 = (j-1 >= 0) ? m[ind(nb_col, i, j-1)] : INF; Pnum y_p1 = (j+1 < nb_row) ? m[ind(nb_col, i, j+1)] : INF; Pnum Tx = fminf(x_m1, x_p1); Pnum Ty = fminf(y_m1, y_p1); Pnum f = velocity[ind(nb_col, i, j)]; Pnum sol = solveEquation_1(Tx,Ty,h,f); Pnum sol_min = fminf(m[ind(nb_col, i, j)],sol); m_0[ind(nb_col, i, j)] = sol_min; convergence = convergence && (fabsf( m[ind(nb_col,i, j)] - m_0[ind(nb_col, i, j)] ) <= epsilon); } } if (PRINT) { printf("\n----\n"); print_matrice(m, nb_row, nb_col); } nb_iter++; } while (!convergence); time_end = give_time(); dput_xy(ft, nb_row, time_end-time_start); dput_xy(fiter, nb_row, nb_iter); calculDistance(1,m, nb_col/2, nb_row/2, nb_row, nb_col); free(m_0); printf("%d itérations\n",nb_iter); printf("TIME : %f sec\n\n",time_end-time_start); }