Esempio n. 1
0
void methode3 (retour * monRetour, int * T, int paramk, int paraml, bool verb) {
// diviser pour régner Diviser la sequence en 2, calculer la sous sequence gauche puis droite puis une qui contient l'élement du milieu puis prendre le max des 3
// implémentation du cours "Structures de données et algorithmes" de Pierre Geurts diapo 33 http://www.montefiore.ulg.ac.be/~geurts/Cours/sda/2011/06-resolution-a.pdf
// methode 3 = O(nlogn)
	bool subverb = verb;
	if(DEBUG == true){printf("METHODE 3\n");}
	moitie(monRetour, T, paramk, paraml, subverb); 
	if (verb == true) {
		printRetour(monRetour);
	}
}
Esempio n. 2
0
void moitie (retour * monRetour, int * T, int paramk, int paraml, bool verb) {
	bool subverb = verb;
	if (paramk == paraml) {
		monRetour->k = paramk;
		monRetour->l = paraml;
		monRetour->somme = T[paramk];
	} else {
		int mid = (int) ((paramk + paraml)/2);
		retour retourGauche;
		moitie(&retourGauche, T, paramk, mid, subverb);
		retour retourDroit;
		moitie(&retourDroit, T, mid + 1, paraml, subverb);
		retour retourMid;
		milieu(&retourMid, T, paramk, mid, paraml, subverb);
		
		if (retourGauche.somme >= retourDroit.somme && retourGauche.somme >= retourMid.somme) {
			monRetour->k = retourGauche.k;
			monRetour->l = retourGauche.l;
			monRetour->somme = retourGauche.somme;
			if (DEBUG == true) {printf("moitie gauche, somme : %d\n", monRetour->somme);}
		}
		else if (retourDroit.somme >= retourGauche.somme && retourDroit.somme >= retourMid.somme) {
			monRetour->k = retourDroit.k;
			monRetour->l = retourDroit.l;
			monRetour->somme = retourDroit.somme;
			if (DEBUG == true) {printf("moitie droite, somme : %d\n", monRetour->somme);}
		}
		else {
			monRetour->k = retourMid.k;
			monRetour->l = retourMid.l;
			monRetour->somme = retourMid.somme;
			if (DEBUG == true) {printf("moitie milieu, somme : %d\n", monRetour->somme);}
		}
	}
	if (verb == true) {
		printf("Moitié ");
		printRetour(monRetour);
	}
}
Esempio n. 3
0
/* Donne dans le tp. Par la suite, on n'utilise plus cette fonction */
int copier_bmp(int de, int vers){
	unsigned char *pixels;	
	entete_bmp entete;
	/* lecture du fichier source */
	lire_entete(de, &entete);
	pixels = allouer_pixels(&entete);
	lire_pixels(de, &entete, pixels);
	/* écriture du fichier destination */
	rouge(&entete, pixels);
	negatif(&entete, pixels);
	moitie(&entete, pixels,1);
	sepia(&entete, pixels);
	noir_et_blanc(&entete, pixels);
	ecrire_entete(vers, &entete);
	ecrire_pixels(vers, &entete, pixels);	
	/* on libère les pixels */
	free(pixels);
	return 1; /* on a réussi */
}
Esempio n. 4
0
int main(int argc, char **argv)
{

	/* Pas d'argument */
	if (argc == 1)
		usage(argv[0]);

    /* Initialisation */
	int c;
	char *nom = NULL;
	int de = open("lena.bmp", O_RDONLY);
	entete_bmp entete;
	unsigned char *pixels;

	if (de < 0){
		printf("erreur fichier entree\n");
		exit(EXIT_FAILURE);
	}else{
    /* Lecture du fichier source */
		lire_entete(de, &entete);
		pixels = allouer_pixels(&entete);
		lire_pixels(de, &entete, pixels);
	}

	while ((c = getopt(argc, argv, "rnbmia")) != -1) {
		switch (c) {
			case 'r':
			rouge(&entete, pixels);
			break;
			case 'n':
			negatif(&entete, pixels);
			break;
			case 'b':
			noir_et_blanc(&entete, pixels);
			break;
			case 'm':
			moitie(&entete, pixels, 1);
			break;
			case 'i':
			moitie(&entete, pixels, 0);
			break;
			case 'a':
			sepia(&entete, pixels);
			break;
			default :
			tuto(argv[0]);
			break;
		}
	}

	/* Lecture de l'option facultative (nom fichier) */
	int index;
	for (index = optind; index < argc; index++) {
		if (nom == NULL)
			nom = argv[index];
		else
			printf ("L'option %s a été ignoré.\n", argv[index]);
	}

    /* On écrit dans le fichier de destination */
	int vers;
	if (nom == NULL)
		vers = open("lena_out.bmp", O_WRONLY | O_CREAT, 0644);
	else 
		vers = open(nom, O_WRONLY | O_CREAT, 0644);

	if (vers < 0){
		printf("erreur fichier sortie\n");
		exit(EXIT_FAILURE);
	}else{
    /* Écriture du fichier destination */
		ecrire_entete(vers, &entete);
		ecrire_pixels(vers, &entete, pixels);
	}
    /* On libère les pixels */
	free(pixels);

	return EXIT_SUCCESS;
}