Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#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 "math.h"
#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

#3 28-04-2011 20:24:20

stormin
Membre
Inscription : 03-12-2009
Messages : 124

Re : Déplacement d'un pic

RE,

Le langage de programmation C.

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?


#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;
}

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
onze plus quatre-vingt treize
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums