Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 28-04-2011 14:34:59
- stormin
- Membre
- Inscription : 03-12-2009
- Messages : 124
Déplacement d'un pic
Bonjour tout le monde,
Je voudrais centré une lettre E en fonction de la position du pic de corrélation:
Mais il y a ,un problème dans la compilation que je le vois pas.
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "alloc.h"
main()
{
long int n2,kk,k,ll,ii,jj,nn,coorx,coory;
int dim,i;
char arch0[30], arch1[30]
float huge *ct, huge *cr;
float vmax;
printf("\n\ dimension du fichier:");
scanf("%d",&dim);
n2 = (long)dim * (long)dim ;
ct = farcalloc(n2,4);
cr = farcalloc(n2,4);
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:
farfree(cr);
farfree(ct);
return(0);
}
Merci d'avance
Dernière modification par stormin (28-04-2011 14:48:01)
Hors ligne
#2 28-04-2011 19:14:38
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 947
Re : Déplacement d'un pic
RE,
Quel est le langage de programmation ?
Si c'est MatLab, je ne vais pas perdre mon temps à te redonner une enième fois l'adresse du forum MatLab ici, tu n'auras que très peu de chances d'obtenir une réponse.
On dirait du C ou du C++, mais la présence des GOTO me fait dresser les cheveux sur a tête, donc, j'ai un doute...
Voir ci-dessus.
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#4 29-04-2011 23:03:46
- stormin
- Membre
- Inscription : 03-12-2009
- Messages : 124
Re : 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?
<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;
}
Hors ligne
Pages : 1