Déplacement d'un pic

nomadstorm
Déplacement d'un pic

Bonsoir,
Mon programme se bloque ici:i=disco(arch0,dim,dim,1,cr,4);

Avec cet erreur:
cannot convert `float*' to `char*' for argument `5' to `int disco(char*, int, int, int, char*, int)'

Je dois utiliser char*,dans le paramètre 5,tandis que j'ai la variable cr comme float*.

Est ce qu'il y a une solution pour que je garde char* et en même temps prendre l'information qui arrive de float.sinon comment je ferai pour résoudre cet erreur?

#include  
<math.h>
   #include  <stdio.h>
   #include  <stdlib.h>

 
int disco  (char fichero[], int nfil, int ncol, int control,char *a, int tipo);
int main(void)
  {
      long int n2,kk,k,ll,ii,jj,nn,coorx,coory; 
      int dim,i;
      char arch0[30], arch1[30];
      float  *ct,*cr;
      float vmax;

      printf("\n\ dimension du fichier:");
      scanf("%d",&dim);
      n2 = (long)dim * (long)dim ;
      
      ct = (float*)calloc(n2, sizeof(float));
      cr = (float*)calloc(n2, sizeof(float));

      if ( cr == NULL || ct == NULL ) { printf ( "\n Memory error."); exit(0); }

      printf("\n\n Introduire Cross-correlation matrice:");
      scanf("%s",arch0);
      
      
      


      i=disco(arch0,dim,dim,1,cr,4);
      if (i!=1) goto fin;

      printf("\n\n Introduire la matrice a translat‚:");
      scanf("%s",arch1);
      i=disco(arch1,dim,dim,1,ct,4);
      if (i!=1) goto fin;

      vmax=cr[0];
      for (ii=0; ii < dim; ii++)
       {
	   ll =(long)dim * (long)ii;
	   for (jj=0; jj < dim; jj++)
	   {
	   nn=ll+jj;
	   if( cr[nn] > vmax )
	       {
	       vmax = cr[nn];
	       coorx = ii;
	       coory = jj;
	       }
	   }
	}

	for ( kk=0 ; kk < n2 ; kk++)
	    {
	     cr[kk] = 0;
	    }
	 coorx = coorx - dim/2;
	 coory = coory - dim/2;



       for (ii=abs(coorx); ii < dim-abs(coorx); ii++)
	   {
	   ll =(long)dim * (long)ii;
	   for (jj=abs(coory); jj < dim-abs(coory); jj++)
	     {
	    cr[(long)dim*(ii-coorx)+jj-coory]= ct[(long)dim * (long)ii+jj];
	     }

	    }

      printf("\n\nIntroduire le nom de la matrice centr‚:");
      scanf("%s",arch1);
      i=disco(arch1,dim,dim,2,cr,4);
      if (i!=1) goto fin;

fin:
free(cr);
free(ct);
return 0 ;
}

 /*********************************************************************\
 *                                                                     *
 *                                                                     *
 *                            DISCO.C                                  *
 *                            =======                                  *
 *                                                                     *
 *         Rutina para trasladar n£meros de cualquier tipo desde       *
 *         una  variable  de la memoria a un disco o de un disco       *
 *         a una variable de la memoria.                               *
 *                                                                     *
 *                          ---------                                  *
 *                                                                     *
 *      Par metros:                                                    *
 *                                                                     *
 *      fichero         -  Nombre del fichero del disco.               *
 *      nfil, ncol      -  N£mero de filas y columnas.                 *
 *      control         -  1 para leer del fichero.                    *
 *                         2 para grabar en el fichero.                *
 *      a               -  puntero que indica la variable.             *
 *      tipo            -  n§ de bytes por elemento de la variable.    *
 *                                                                     *
 *                                                                     *
 \*********************************************************************/


int disco  (char fichero[], int nfil, int ncol, int control,char *a, int tipo)

{
        long int n, cont, ng;
        int unidad, j, cociente, resto;

        if (control == 1)  {
                if ((unidad = open (fichero,1))  == -1)  {
                        return (-1);
                }
                cont = (long) nfil * (long) ncol * tipo;
                resto = cont % 32768;
                cociente = cont / 32768;
                for (j = 0, n = 0; j < cociente; j++,n += 32768)
                        _read (unidad, &a[n], 32768);
                _read (unidad, &a[n], resto);
                close (unidad);
                return 1;
        }
        if (control == 2)  {
                if ((unidad = creat (fichero, 200))  == -1)  {
                        return -1;
                }
                cont = (long) nfil * (long) ncol * tipo;
                resto = cont % 32768;
                cociente = cont / 32768;
                ng = 0;
                for (j = 0, n = 0; j < cociente; j++, n += 32768)
                     ng = ng + (unsigned) _write (unidad, &a[n], 32768);
                ng = ng + (unsigned) _write (unidad, &a[n], resto);
                if (ng != cont)   {
                        return 0;
                }

                close (unidad);
                return 1;
        }
        return 0;
}
fredericmazue
Re: Déplacement d'un pic

Bonjour,

Plutôt que dire que le programme se bloque, je pense qu'il ne compile pas
Regarde la fonction sprintf pour générer une chaine (char *) à partir de ton float