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