Allocation memoire

Fermé
Amouna29 Messages postés 3 Date d'inscription jeudi 16 octobre 2014 Statut Membre Dernière intervention 17 octobre 2014 - 16 oct. 2014 à 22:20
Amouna29 Messages postés 3 Date d'inscription jeudi 16 octobre 2014 Statut Membre Dernière intervention 17 octobre 2014 - 17 oct. 2014 à 22:01
Bonjour , j'ai un soucis avec mon code C
j'ai une matrice de 4000 ligne et 14000 colonnes dont laquel je veux comparer chaque colonne avec l'autre mais j'arrive pas de la charger en mémoire
y a t-il des astuces pour se faire ?
Merciii d'avance

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 oct. 2014 à 23:12
Bonjour,

Peux-tu montrer ton code ? :-).

Note : merci d'utiliser la balise "code c".
Exemple : <code c>ici tu mets ton code</code>
Cdlt,
0
Amouna29 Messages postés 3 Date d'inscription jeudi 16 octobre 2014 Statut Membre Dernière intervention 17 octobre 2014
17 oct. 2014 à 10:43

#include <stdlib.h> 
#include <string.h> 
#include <stdint.h> 
#include <stdio.h>     
// les focnction et les procedure
//la fonction combainaison
// la fonction factoriel  
 



/////////////////////// main /////////////////////////////////

int main(int argc, char *argv[])
{
  int n=4026 ; int nbc=14700;
  int m1[n][nbc]; int repeter[nbc];
  int i=0; int j=0; 
 FILE *filee;
  filee=fopen("base.txt", "r");// pour charger la matrice de données 

 for(i = 0; i < n; i++)
  {
      for(j = 0; j <nbc; j++) 
      {
  //Use lf format specifier, %c is for character
       if (!fscanf(filee, "%d",&m1[i][j])) 
           break;
      // mat[i][j] -= '0'; 
       //printf("%6d",m1[i][j]); //Use lf format specifier, \n is for new line
      // m1[ii][jj]=mat1[ii][jj];
}//printf("\n");

  }
  fclose(filee);
//////////////////////////////////////////////////////
int occurence[3]={0}; 

  for(j=0;j<nbc;j++)
{
  for(i=0;i<n;i++)
    {
      
    if (m1[i][j]==0)
       occurence[0]=occurence[0]+1;// nombre d'occurence de zero
     else 
       if  (m1[i][j]==1)
           occurence[1]=occurence[1]+1;// nombre d'occurence de 1
       else 
          occurence[2]=occurence[2]+1;// nombre d'occurence de -1


    } 

 //printf("%6d",occurence[0]);printf("%6d",occurence[1]);printf("%6d",occurence[2]);printf("\n");

//////////// trouver l'occurence maximal
int max=occurence[0]; int valmax=0;int k=0;
//printf("%6d",max);printf("\n");

  if (occurence[1]>max) {max=occurence[1]; valmax=1;}
  if (occurence[2]>max) {max=occurence[2]; valmax=2;}
 ////////////////////////////// min 
int min=occurence[0]; int valmin=0;
//printf("%6d",max);printf("\n");

  if (occurence[1]<min) {min=occurence[1]; valmin=1;}
  if (occurence[2]<min) {min=occurence[2]; valmin=2;}

/////////////////////////////////////trouver la moyenne 
int val=0;
if(valmin==0){
              if(valmax==1) val=2;
               else val=1;
             }

if(valmin==1){
              if(valmax==0) val=2;
               else val=0;
             }
 
if(valmin==2){
              if(valmax==1) val=0;
               else val=1;
             }
// val pour la moyenne
if(val==0) repeter[j]=0;
if(val==1) repeter[j]=1;
if(val==2) repeter[j]=-1;
//printf("\n");
//printf("%6d",max);printf("\n");
//printf("%6d",val);printf("\n");

occurence[0]=0;occurence[1]=0;occurence[2]=0;
}// fin du parcour de la collonne 
int kk=0;
printf("\n");
printf("\n");
for(kk=0;kk<nbc;kk++)printf("%6d",repeter[kk]);printf("\n");



}// fin main

0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
17 oct. 2014 à 21:48
Bonjour,

int m1[n][nbc]; int repeter[nbc];
Ce n'est pas bon.. n et nbc sont des int, tu dois mettre des nombres dans les tableaux. Donc soit en dur, soit avec #define.

Tu as un oublié un return 0;

Sinon, pour le problème, je te conseille de passer par malloc()... Et si ça ne fonctionne pas, tu peux peut-être passer par des tableaux de pointeurs...
0
Amouna29 Messages postés 3 Date d'inscription jeudi 16 octobre 2014 Statut Membre Dernière intervention 17 octobre 2014
17 oct. 2014 à 22:01
Merci fiddy pour la réponse je vais essayer
0