int main(int argc, char *argv[]) {
    int err;
    err = MPI_Init(&argc, &argv);
    if (err < 0)
        exit(1);
    int probleme = 0;
    int alteration = 0;
    int valeur = 0;
    int rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    if (argc != 4) {
        printf(
                "Utilisation: lab01_partie1 noProbbleme nbAlterations valeurInitiale");
        err = MPI_Finalize();
        return 0;
    }

    probleme = atoi(argv[1]);
    alteration = atoi(argv[2]);
    valeur = atoi(argv[3]);

    if (probleme == 1) {
        if (rank == 0)
            printf("Solution au probleme no 1: \n");
        resoudreProbUn(valeur, alteration);

        afficherMatrice();
        if (rank == 0)
            printf("probleme1 resolu");

    } else if (probleme == 2) {
        if (rank == 0)
            printf("Solution au probleme no 2: \n");
        resoudreProbDeux(valeur, alteration);
        afficherMatrice();
    } else {
        printf("Aucun probleme selectionne, le programme se termine\n");
    }

    err = MPI_Finalize();
    return 0;
}
Example #2
0
/**
 * Permet de remplir la matrice de caractères générés aléatoirement
 * @param Mat Matrice de caractères comprenant les caractères générés ci-dessus
 */
void creaMatrice(char Mat[N][N]){
    int i,j, nbAleatoire;
    srand (time (NULL)); // Obligatoire
    for(i=0;i<N;i++) {
        for(j=0;j<N;j++) {
            nbAleatoire = rand_a_b(0,1533628);
            Mat[i][j] = getLettreRandom(nbAleatoire);
        }
    }
    afficherMatrice(Mat);
}
Example #3
0
int main(int argc, char ** argv){

	double delta;
	int cptIteration = 0;
	
	double T[LARGEUR+2][HAUTEUR+2], T1[LARGEUR+2][HAUTEUR+2];
	
	//INITIALISATION

	delta = MAX;

	int cptI, cptJ;
	for(cptI = 0; cptI < LARGEUR+2; cptI++){
		for(cptJ = 0; cptJ < HAUTEUR+2; cptJ++){
			if(cptI == 0 || cptI == LARGEUR+1 || cptJ == 0 || cptJ == HAUTEUR+1){
				T[cptI][cptJ] = MAX;
				T1[cptI][cptJ] = MAX;	
			}
			else{
				T[cptI][cptJ] = 0;
				T1[cptI][cptJ] = 0;
			}
		}
	}
		
	while(delta >= SEUIL){
		delta = 0;
		
		int i, j;
		for(i = 1; i <= LARGEUR; i++){
			for(j = 1; j <= HAUTEUR; j++){
				T1[i][j] = (T[i][j+1] + T[i][j-1] + T[i+1][j] + T[i-1][j] + T[i][j]) / 5;
				delta = delta + abs(T1[i][j] - T[i][j]);
				
				
				int cptL;
				int cptC;
				for(cptL = 0; cptL <= LARGEUR+1; cptL++){
					for(cptC = 0; cptC <= HAUTEUR+1; cptC++){
						T[cptL][cptC] = T1[cptL][cptC];
					}
				}
			}
		}
		
		if( (cptIteration % K) == 0){
			afficherMatrice(T);
			printf("Delta = %f\n", delta);
		}
		
		cptIteration++;
	}
}
Example #4
0
void jacobi (double** a, double** b, double** xInit, int n, double prec)
{
  int i, j, cpt;
  double residu=2*prec;
  double** xNext= (double**) malloc(n*sizeof(double*));
  double** ax;
  double** axb;
  cpt=0;
  for (i=0; i<n; i++) //initialisation xNext
  {
    xNext[i]= (double*) malloc(sizeof(double));
  }
  while (residu>=prec)
  {
    for (i=0; i<n; i++)
    {
      double somme1=0, somme2=0;
      for (j=0; j<i; j++) //avant l'élément diagonal
      { somme1=somme1+a[i][j]*xInit[j][0]; }
      for (j=i+1; j<n; j++) //après l'élément diagonal
      { somme2=somme2+a[i][j]*xInit[j][0]; }
      xNext[i][0]=(1/a[i][i])*(b[i][0]-somme1-somme2);
    }
    for(i=0; i<n; i++)
    {
      xInit[i][0] = xNext[i][0] ; //copie de xNext dans xInit pour la prochaine itération
    }
    ax=produitMatriciel(a, xNext, n, n, 1); //ax
    axb=difference(ax, b, n, 1); //ax - b
    residu=norme(axb, n); //norme de (ax - b)
    cpt++;
    //affichage
    printf("\nVecteur à l'itération %d :\n", cpt);
    afficherMatrice(xNext, n, 1);
  }
  //libération mémoire
  for (i=0;i<n;i++)
  {
    free(ax[i]); free(axb[i]); free(xNext[i]);
  }
  free(ax); free(axb); free(xNext);
}
Example #5
0
static void buttonAfficherMatrice( GtkWidget *widget,gpointer   data ){
  if(m == NULL)
    afficherMessage("Erreur: Aucune matrice chargee",data);
  else
    afficherMatrice(m);
}
Example #6
0
int main (int argc, char ** argv)
{
  int n, j, g, choice;
  double p;
  double** A;
  int i=1;
  while (i!=0)
  {
    clear();
    printf("Menu principal : Polynome caractéristique, valeurs propres et vecteurs propres\n\n");
    printf("Choisir le mode de saisie de la matrice :\n");
    printf("1- Utiliser le générateur de matrices\n");
    printf("0- Entrer manuellement les valeurs\n");
    printf("Votre choix : ");
    scanf("%d",&g);
    clear();
    if(g)
    {
      printf("MENU : GENERATION DE MATRICES\n\n");
      printf("Choisir un type de matrice à générer :\n");
      printf("1. Creuse à 70%%\n");
      printf("2. A bord\n");
      printf("3. Ding-Dong\n");
      printf("4. Franc\n");
      printf("5. Hilbert\n");
      printf("6. KMS\n");
      printf("7. Lehmer\n");
      printf("8. Lotkin\n");
      printf("9. Moler\n");
      printf("Votre choix : ");
      scanf("%d", &choice);
      printf("Dimension : ");
      scanf("%d", &n);
      switch (choice)
      {
	case 1:
	  A=creuse70(n);
	  break;
	case 2:
	  A=bord(n);
	  break;
	case 3:
	  A=dingDong(n);
	  break;
	case 4:
	  A=franc(n);
	  break;
	case 5:
	  A=hilbert(n);
	  break;
	case 6:
	  printf("Parametre p : ");
	  scanf("%lf", &p);
	  A=kms(n,p);
	  break;
	case 7:
	  A=lehmer(n);
	  break;
	case 8:
	  A=lotkin(n);
	  break;
	case 9:
	  A=moler(n);
	  break;
      }
//    Déplacement de afficher matrice pour l'afficher au-dessus du menu de choix, ainsi elle est systématiquement affichée
    }
    else
    {
      printf("Matrice A :\n");
      printf("Dimension : ");
      scanf("%d",&n);
      A=creerRemplirMatrice(n,n);
    }
      convertMattoLatex(A,n,n);
    i=1;
    while (i!=0 && i!=9)
    {
      clear();
      printf("Matrice :\n");
      afficherMatrice(A, n, n);
      printf("\nQue voulez-vous faire ?\n");
      printf("1- Méthode de Leverrier\n");
      printf("2- Méthode de Leverrier améliorée\n");
      printf("3- Méthode des Puissances Itérées\n");
      printf("9- Nouvelle matrice (Menu principal)\n");
      printf("0- Quitter\n");
      printf("Votre choix : ");
      scanf("%d", &i);
      cleanBuffer(); //vidage buffer
      clear();
      switch (i)
      {
	case 1:
	  printf("Polynome caracteristique par Leverrier... \n");
	  leverrier(A,n);
	  hitToContinue();
	  break;
	case 2:
	  printf("Polynome caracteristique par Leverrier améliorée ... \n");
	  leverrierA(A,n);
	  hitToContinue();
	  break;
	case 3:
	  printf("Méthode des puissances itérées ... \n");
	  printf("Précision souhaitée : ");
	  scanf("%lf", &p);
	  cleanBuffer();
	  puissancesIt(A,n,p);
	  hitToContinue();
	  break;
      }
    }
    
    //libération mémoire
    for (j=0; j<n; j++)
    {
      free(A[j]);
    }
    free(A);
  }
  return 0;
}