Example #1
0
/* pour 5 bateaux de taille respectives 1, 2, 2, 3, 4, demande au joueur de rentrer une position et une direction qui sera représentée par un entier (0 pour horizontal et 1 pour vertical), plaçant automatiquement les positions correspondantes dans la listeMorceaux de chaque bateau et ajoute le bateau dans la flotte du joueur */
Joueur placerBateau(Joueur J)
{
    int i = 0;
    int j = 0;
    int sortDeBoucle=0;
    while (i < 5)
    {
      sortDeBoucle=0;
      Bateau BateauCourant = tableauBateaux(flotte(J))[i];

      printf("\n[Placement] Bateau %d taille: %d\n",(i+1),taille(BateauCourant));

      j=0;
      /* Prompt de position */
      Position pos1 = choixPosition();
      /* Prompt de direction */
      int D;
      printf("\nEntrez une direction (0 horizontal - 1 vertical): ");
      scanf("%d",&D);
      if (!(D == 0 || D == 1))
      {
        printf("[ERREUR] Direction non valide !\n");
        /* Pour refaire la dernière saisie ? */
        i=i-1;
      }
      /* Générer toutes les positions et les tester (estValide(Position))*/
      while (j < taille(BateauCourant) && sortDeBoucle == 0)
      {
         /* Sélection des morçeaux de bateaux un par un */
         /* Ajouts positions dans la liste des morçeaux */
         if (!(aLaPosition(flotte(J),pos1)))
         {
           /*printf("\n[Placement] Bateau %d, Morceau %d\n",i,j);*/
           /* CAS D'ERREURS ? */
           BateauCourant=ajoutMorceau(BateauCourant,pos1);
           /*printf("[Info] Le bateau %d, Morceau %d a bien été placé\n",i,j);*/

           if (D == 0){
             pos1.X = pos1.X+1;
           }
           else
           {
             pos1.Y = pos1.Y+1;
           }
         }
         else
         {
           printf("ERREUR: Case déjà occupée !\n");
           i=i-1;
           sortDeBoucle=1;
         }
         j=j+1;
      }


      /* Ajouts du bateau dans la flotte */
      i=i+1;
    }
    return J;
}
Example #2
0
liste interclasse(liste l1, liste l2) {
	// liste resultat
	liste l_result = nouvListe();
	
	// indice courant l1 et l2
	int ind1 = 0, ind2 = 0;
	int t1 = taille(l1), t2 = taille(l2);
	 
	// tq fin d'une des listes non atteinte
	while (ind1 < t1 && ind2 < t2) {
		if (elt(ind1, l1) < elt(ind2, l2)) {
			adjq(elt(ind1, l1), l_result); 
			++ind1;
		} else {
			adjq(elt(ind2, l2), l_result); 
			++ind2;
		}
	}
	
	// on est arrive a la fin d'une des deux listes, dans la suite, on entre dans un seul while
	
	while (ind1 < t1) { 
		adjq(elt(ind1, l1), l_result); 
		++ind1;
	}
	
	while (ind2 < t2) { 
		adjq(elt(ind2, l2), l_result); 
		++ind2;
	}
	
	return l_result;
}
Example #3
0
int taille(sabr *a)
	{
		if (a == NULL)
		{ return 0; }
		else
		{
			return (taille(a -> g) + taille(a -> d) + 1);
		}

	}
Example #4
0
//OK
//Même règle que pour l'affichage. Parcourt sous arbre gauche, on compte, puis sous arbre droit
int taille(Arbre* racine)
{
    //Static permet d'instancier une seule fois la variable 
	static int nbnoeud=0;
	if(racine!=NULL)
	{
		taille(racine->gauche);
		nbnoeud++;
		taille(racine->droit);
	}
	return nbnoeud;
}
Example #5
0
liste trie(liste l) {
	liste l_result=nouvListe();

	// pour chaque element de l
	int i, ind, cur;
	for(i=0; i < taille(l); ++i) {
		cur = elt(i, l);  // l'element a placer
		// recherche dans l_result l'indice ou placer cur
		ind=0;
		while(ind < taille(l_result) && elt(ind, l_result) < cur) { ++ind; }
		
		insert(cur, l_result, ind);
	}
	return l_result;
}
Example #6
0
int main(void) {
  ListeChainee maliste = LISTE_VIDE;
  type_el un_element = 3;
 
  printf("J'insere (en tete) "); affiche_el(un_element); putchar('\n');
  insere_entete(&maliste, un_element);
 
  printf("J'insere (en tete) 2, puis 1, 0 et -1.\n");
  insere_entete(&maliste, 2);
  insere_entete(&maliste, 1);
  insere_entete(&maliste, 0);
  insere_entete(&maliste, -1);
 
  printf("Voici la liste : \n\t");
  affiche_liste(maliste); putchar('\n');
 
  printf("Je supprime la tete de liste.\n");
  supprime_tete(&maliste);
  printf("Voici la liste : \n\t");
  affiche_liste(maliste); putchar('\n');
 
  printf("Je supprime le 4e element.\n");
  supprime_suivant(maliste->suite->suite);
  printf("Voici la liste : \n\t");
  affiche_liste(maliste); putchar('\n');
 
  printf("J'insere 156 en 3e position.\n");
  insere_apres(maliste->suite, 156);
  printf("Voici la liste : \n\t");
  affiche_liste(maliste); putchar('\n');
 
  printf("de taille %u.\n", taille(maliste));
 
  return 0;
}
Example #7
0
File: 3.c Project: SimonColin/IN301
void main()
{
	srand(time(NULL));
	Liste l = vide();
	Liste m = vide();
	Liste n = vide();
	int t, i;
	for(i = 0; i < 10; i++)
	{
		t = rand()%100;
		l = ajouttri(t, l);
		t = rand()%100;
		m = ajouttri(t, m);
		affiche(l);
		affiche(m);
		t = rand()%100;
		printf("\n %d, %d\n", t, src(l, t));
	}
	triBulle(l);
	affiche(l);
	l = flip(l, vide());
	affiche(l);
	l = triFusion(l);
	affiche(l);
	t = testtri(l);
	printf("\ntri = %d \n", t);
	printf("\ntaille = %d \n", taille(l));
}
Example #8
0
File: tp4.c Project: Spectus97/C
void trierListe(intervalle t[], int n) {
	int boolean;
	int cpt;
	intervalle tmp;
	do {
	  boolean = 0;
	  for(cpt=0; cpt<n-1; cpt++){
	    if(taille(t[cpt]) > taille(t[cpt+1])){
	       tmp=t[cpt];
	       t[cpt]=t[cpt+1];
	       t[cpt+1]=tmp;
	       boolean = 1;
            }
	  }
	} while(boolean==1);
}
Example #9
0
void affiche(liste l) {
	int i;
	
	for(i=0; i < taille(l); ++i) {
		printf("%d ", elt(i, l));
	}
	printf("\n");
}
Example #10
0
liste concatenation(liste l1, liste l2) {
	liste l_result;
	 
	l_result = nouvListe();
	int i;
	// ajout de chaque element de l1 
	for(i=0; i < taille(l1); ++i) {
		adjq(elt(i,l1), l_result);
	}
	
    // ajout de chaque element de l2
	for(i=0; i < taille(l2); ++i) {
	    adjq(elt(i,l2), l_result);
	}
	 
	return l_result;
}
Example #11
0
int cherche(int nb, liste l) {
	int ind=-1;
	int i;
	 
	for(i=0;i<taille(l) && ind == -1;++i) {
		 if (elt(i, l) == nb) { ind = i; }
	}
	 
	return ind;
}
Example #12
0
File: tp4.c Project: Spectus97/C
void trierListe2(intervalle t[], int ordre[], int n){
	int boolean;
	int cpt;
	int tmp;
	for(cpt=0; cpt<n; cpt++){
	  ordre[cpt]=cpt;
	}
	cpt=0;
	do {
	   boolean = 0;
	   for(cpt=0; cpt<n-1; cpt++){
	      if(taille(t[ordre[cpt]]) > taille(t[ordre[cpt+1]])){
	        tmp=ordre[cpt];
		ordre[cpt]=ordre[cpt+1];
		ordre[cpt+1]=tmp;
		boolean = 1;
	      }
	   }
	 }while(boolean==1);
}
Example #13
0
int nbOccurences(int nb, liste l) {
	int nboccur=0; 	// compteur
	int i;
	 
	// pour chaque element de la liste
	for(i=0;i<taille(l);++i) {
		 if (elt(i, l) == nb) { nboccur++; }
	}
	
	return nboccur;
}
Example #14
0
  /* version iterative */
liste renverse_iter(liste l) {
	liste l_result = nouvListe();
	
	int i=0, fin = taille(l);
	
	while(i < fin) {
		adjt(elt(i, l), l_result);
		++i;
	}
	
	return l_result;
}
Example #15
0
  /* version iterative */
int palindrome_iter(liste l) {
	int result = 1; // par defaut l est un palindrome (jusqu a preuve du contraire)
	// ind1 : indice de debut, ind2 : indice de fin
	int ind1 = 0, ind2 = taille(l)-1;
	
	result = 1;
	while (ind1 < ind2 && result == 1) {
		if (elt(ind1, l) != elt(ind2, l)) {
			result = 0;
		}
		++ind1;
		--ind2;
	}
	return result;
}
Example #16
0
Image imageCollee (Image image1, Image image2, ListePoints decalage)
{
	Image imageFinale;
	int teinteMax;
	int* size;
	int** matImageFinale;
	char* type;
	if(strcmp(image1.type,"P2")==0 && strcmp(image2.type,"P2")==0) type="P2";
	if(strcmp(image1.type,"P3")==0 && strcmp(image2.type,"P3")==0) type="P3";
	teinteMax=max(image1.teinteMax,image2.teinteMax);
	size=taille(&decalage,image1.height,image2.height,image1.width,image2.width);
	matImageFinale=fusion(&decalage, size[0], size[1],image1,image2);
	imageFinale=creationImage(type,size[0],size[1],teinteMax, matImageFinale);
	
	return(imageFinale);
}
Example #17
0
File: 3.c Project: SimonColin/IN301
Liste triFusion(Liste l)
{
	int i;
	Liste res = vide();
	Liste tmp1 = l;
	Liste tmp2;
	if(l->nxt == NULL)
	{
		return(l);
	}
	for(i = 0; i < taille(l)/2 - 1; i++)
	{
		tmp1 = tmp1->nxt;
	}
	tmp2 = tmp1->nxt;
	tmp1->nxt = NULL;
	affiche(l);
	affiche(tmp2);
	return(concattri(triFusion(l),triFusion(tmp2), res));
}
Example #18
0
t_graphe	*parcours_profondeur(t_graphe* graphe, char *n_s)
{
  int			*visite;
  int			*names;
  t_pile		*pile;
  int			s;
  int			u;
  int			v;
  int			i;
  int			succ;
  int			size;
  t_ch_int		*tmp;
  t_ch_ch_int		*ttmp;
  t_graphe		*T;
  void			*data;

  u = 0;
  v = 0;
  data = 0;
  succ = 0;
  size = taille(graphe);
  visite = xmalloc(sizeof(*visite)*size);
  names = xmalloc(sizeof(*names)*size);
  pile = xmalloc(sizeof(*pile));
  pile->pile = xmalloc(sizeof(*pile->pile)*size);
  pile->taille_pile = 0;
  T = init(GO);
  empiler(name_to_number(graphe, n_s), pile);
  for (i = 0, ttmp = graphe->graphe; i < size; i++, ttmp = ttmp->next)
    names[i] = ttmp->number;
  inserer(get_index(s, names, size), visite);
  while (pile->taille_pile != 0)
    {
      u = sommet(pile);
      succ = 0;
      for (ttmp = graphe->graphe; ttmp != NULL; ttmp = ttmp->next)
	if (ttmp->number == u)
	  break;
      for (tmp = ttmp->liste; tmp != NULL; tmp = tmp->next)
	if (!visite[get_index(tmp->number, names, size)])
	  succ++;
      if (succ != 0)
	{
	  for (ttmp = graphe->graphe; ttmp != NULL; ttmp = ttmp->next)
	    if (ttmp->number == u)
	      break;
	  for (tmp = ttmp->liste; tmp != NULL; tmp = tmp->next)
	    if (!visite[get_index(tmp->number, names, size)])
	      {
		v = tmp->number;
		data = tmp->data;
		break;
	      }
	  ajouterArc(T, number_to_name(graphe, u), number_to_name(graphe, v), data);
	  empiler(v,pile);
	  inserer(get_index(v, names, size), visite);
	}
      else
	depiler(pile);
    }
  return (T);
}
Example #19
0
//OK
//No comment
int moyenne(Arbre* racine)
{
	return somme(racine)/taille(racine);
}
Example #20
0
//Donne le nombre de noeud présent dans l'arbre
int taille (arbre a)
{
	if (a == NULL) return 0;
	else return 1+(taille(a->gauche))+(taille(a->droit));
}
Example #21
0
int main()
{
	arbre a,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7,tmp8,tmp9;

	tmp1 = (arbre)malloc(sizeof(struct noeud));
	tmp1->val = 1;
	tmp1->gauche = NULL;
	tmp1->droit = NULL;

	tmp2 = (arbre)malloc(sizeof(struct noeud));
	tmp2->val = 3;
	tmp2->gauche = NULL;
	tmp2->droit = NULL;

	tmp3 = (arbre)malloc(sizeof(struct noeud));
	tmp3->val = 7;
	tmp3->gauche = NULL;
	tmp3->droit = NULL;

	tmp4 = (arbre)malloc(sizeof(struct noeud));
	tmp4->val = 9;
	tmp4->gauche = NULL;
	tmp4->droit = NULL;

	tmp5 = (arbre)malloc(sizeof(struct noeud));
	tmp5->val = 2;
	tmp5->gauche = tmp1;
	tmp5->droit = tmp2;

	tmp6 = (arbre)malloc(sizeof(struct noeud));
	tmp6->val = 6;
	tmp6->gauche = NULL;
	tmp6->droit = tmp3;

	tmp7 = (arbre)malloc(sizeof(struct noeud));
	tmp7->val = 10;
	tmp7->gauche = tmp4;
	tmp7->droit = NULL;

	tmp8 = (arbre)malloc(sizeof(struct noeud));
	tmp8->val = 4;
	tmp8->gauche = tmp5;
	tmp8->droit = NULL;

	tmp9 = (arbre)malloc(sizeof(struct noeud));
	tmp9->val = 8;
	tmp9->gauche = tmp6;
	tmp9->droit = tmp7;

	a = (arbre)malloc(sizeof(struct noeud));
	a->val = 5;
	a->gauche = tmp8;
	a->droit = tmp9;


	printf("La hauteur de 10 est %d\n",hauteur(a,10));
	printf("Taille de l'arbre a = %d\n",taille(a));
	
	printf("Affiche prefixe : ");
	affiche_prefixe (a);
	inserer (&a,1);
	printf("\n");
	printf("Affiche infixe  : ");
	affiche_infixe (a);
	inserer (&a,11);
	printf("\n");
	printf("Affiche suffixe : ");
	affiche_suffixe (a);
	printf("\n");

	printf ("Recherche de 2 = %d\n",recherche(a,2));
	printf ("Recherche de 12 = %d\n",recherche(a,12));
	printf ("Recherche de 2 = %d\n",recherche(a,5));
	printf ("Recherche de 12 = %d\n",recherche(a,0));
	
	detruit(&a);

	printf("Affiche suffixe : ");
	affiche_suffixe (a);
	printf("\n");
	
	return 0;

}
Example #22
0
         /* fonction auxiliaire */
void renverse_cur(liste l, liste l_result, int ind) {
	if (ind == taille(l)) return;
	adjt(elt(ind, l), l_result);
	renverse_cur(l, l_result, ind+1);
	return;
}
//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 ;
}
Example #24
0
int createArchive(char** files, int nb_fichiers) {
    
    if (strcmp(nom_archive, "") == 0 || nom_archive == NULL)
        nom_archive = files[0];

    int archive = open(nom_archive, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
    if (archive == -1) // si on a pas pu ouvrir le fichier
    {
        printf("L'archive n'a pas pu être ouverte\n");
        return EXIT_FAILURE;
    }

    printf("Création de l'archive %s\n", nom_archive);

    ListeDescripteurs descripteurs; // pour mémoriser les descripteurs de tous les fichiers / dossiers + archive (spécial)
    int nb_descripteurs = 0;

    descripteurs = construireListeVide();
    nb_descripteurs = createFiles(files, nb_fichiers, &descripteurs, archive); // on traite tous nos fichiers en paramètre

    tete(descripteurs);

    uint** all_d = getTousLesDescripteursToInt(descripteurs);
    
    int j;
    
    uint premierDescripteur = (uint) lseek(archive, 0, SEEK_CUR);
    int i;

    if (affiche)
        printf("Ecriture de la configuration de l'archive...... ");

    for (i = 0; i < nb_descripteurs; i++) {
        int nb_int = taille(all_d[i]);
        int dernier_int = taille(all_d[0]);
        all_d[0] = (uint*) realloc(all_d[0], nb_int * sizeof(int) * sizeof(all_d[0]));
        for(j=0 ; j<nb_int ; j++){
          all_d[0][j+dernier_int] = all_d[i][j];
        }
         

        int ecrit = write(archive, &all_d[i], nb_int);

        if ((ecrit < 0) || (ecrit != nb_int))
            printf("Erreur lors l'écriture de la configuration de l'archive !\n");
    }
    
    detruireListeInt(all_d, nb_descripteurs);
    detruireListeDescripteurs(descripteurs);

    write(archive, &premierDescripteur, sizeof(uint));

    if (affiche)
        printf("Done\n");

    if (compresse)
        compression(archive);

    if (close(archive) == -1) {
        printf("Attention, l'archive n'a pas pu être fermée... Possibilité de corruption du fichier !");
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}
Example #25
0
	/* fonction principale */
int palindrome_recur(liste l) {
	return palindrome_recur_aux(l, 0, taille(l)-1);
}
Example #26
0
int main() {
	int i;
	liste li = nouvListe(), li2 = nouvListe();
	
	adjt(1, li);
	adjt(5, li);
	adjt(-7, li);
		
	printf ("liste : "); affiche(li);
	
	printf("taille : %d\n", taille(li));	
	printf("vide ? : %s\n", (estVide(li)?"oui":"non"));	

	for(i=1; i <= 10; ++i) {
		adjq(i*i, li2);
	} 
	printf ("liste : "); affiche(li2);
	printf("tete : %d queue : %d\n", tete(li2), queue(li2));
	printf("====== suppressions =========\n");
	supt(li2);
	printf ("apres supt : "); affiche(li2);
	supq(li2);
	printf ("apres supq : "); affiche(li2);

	// creation de deux listes avec des elements choisis au hasard
	printf("====== tris et renversement =========\n");

	srand(time(NULL));	// initialisation de la suite aleatoire
	printf("liste 11 : ");
	liste l1 = nouvListe();
	for(i=0; i < 15; ++i) {
	  adjt(rand()%30, l1);
	}
	affiche (l1);
	
	printf("liste 12 : ");
	liste l2 = nouvListe();
	for(i=0; i < 10; ++i) {
	  adjt(rand()%30, l2);
	}
	affiche (l2);

	liste l1t = trie(l1);
	liste l2t = trie(l2);
	printf("liste 11 apres trie : "); affiche(l1t);
	printf("liste 12 apres trie : "); affiche(l2t);
	liste l3t = interclasse(l1t,l2t);
	printf("interclassement : "); affiche(l3t);
	
	printf("renversement iter : "); affiche(renverse_iter(l3t));
	printf("renversement recur : "); affiche(renverse_recur(l3t));

	printf("====== palindrome =========\n");

	
	liste lpalin = nouvListe();
	adjt(1, lpalin); 
	adjt(2, lpalin); adjq(2, lpalin);
	adjt(8, lpalin); adjq(8, lpalin);
	printf("liste : "); affiche(lpalin);
	printf("Palindrome (iter) ? %s\n", (palindrome_iter(lpalin)?"oui":"non"));
	printf("Palindrome (recur) ? %s\n", (palindrome_recur(lpalin)?"oui":"non"));
	supt(lpalin);
	printf("liste : "); affiche(lpalin);
	printf("Palindrome (iter) ? %s\n", (palindrome_iter(lpalin)?"oui":"non"));
	printf("Palindrome (recur) ? %s\n", (palindrome_recur(lpalin)?"oui":"non"));
	
	return 0;
}