function[clas, nCl, X, R, moyX, moyY, CV, A, y] = traitDonnees(tableau, nObs, nVar, methode, regTot, nuReg);

    [tCl] = zeros(100,1);
    for i=1:nObs
        clas(i) = tableau(i,2);
        k = clas(i);
        tCl(k) = 1;
    end
    nCl = ones(1,100)*tCl;

//  Cr\'eation des tableaux des donn\'ees pour l'analyse de donn\'ees

    for i = 1:nObs
        for j =3:nVar+2
            X(i,j-2) = tableau(i,j);
        end
    end;

//  Adaptation des tableaux des donn\'ees pour la r\'egression

//    if (methode == 1) & (regTot > 1) then y = X(:,1); end;
//    if (methode == 1) & (regTot == 1) then
//        y = X(:,nuReg);
//        if (nuReg > 1) then
//           k = nuReg;
//           for j = 2:nuReg
//               X(:,k) = X(:,k-1);
//               k = k - 1;
//           end;
//           X(:,1) = y;
//       end;
//    end;
     y = X(:,1);

    if ( methode ~= 3) then

//  Calcul des sommes et des moyennes des variables

        [sX] = ones(nObs,1);
        sX = X' * sX;
        moyX = sX / nObs;
//        moyX = mean(X,"c");

//  Calcul des sommes et des moyennes des observations

        [sY] = ones(1,nVar);
        sY = X * sY';
        moyY = sY / nObs;
//        moyY = mean(X,"r");

//  Matrice de dispersion A, matrice de variances - covariances CV
//  et de corr\'elation R

        A = (X' * X - sX * sX' /nObs)
        CV = A / nObs;
//         CV = nObs * CV / (nObs - 1);  // Correction pour l'estim de la variance sans biais
        dv = zeros(nVar, nVar);
        for i = 1:nVar
            dv(i,i) = 1/sqrt(CV(i,i));
        end
        R = dv * CV * dv;

    end;

//  Cr\'eation des tableaux des donn\'ees pour l'AFC

    if (methode == 3) then

//  Passage aux tableaux des fr\'equences

        Xmin = min(X);
        if (Xmin < 0) then X = X + (0.1-Xmin); end;
        [cl] = ones(1,nObs);
        [lg] = ones(nVar,1);
        moyX = X * lg;
        moyY = cl * X;
        Xtot = moyY * lg;
        X = X/Xtot;
        moyX = moyX/Xtot;
        moyY = moyY/Xtot;
        c = diag(sqrt(moyX));
        A = (1/c) * X;
        c = diag(sqrt(moyY));
        A = A * (1/c);

//  Calcul de la matrice de travail

        R = A' * A;
        CV = 1;
    end;

endfunction      

//===========================================================================

function[valProp, vectProp, info, lblValProp, lblInfo] = valvecP(R, nVar, methode);


//  Calcul des valeurs et vecteurs propres orthogonaux

//    [P,Q] = schur(R);
    [Q,P] = bdiag(R);
    Q = diag(Q);
    valProp = gsort(Q);
    vectProp = P;
    for i = 1:nVar
        if (valProp(i) <> Q(i)) then
            for j = 1:nVar
                if (valProp(i) == Q(j)) then vectProp(:,i) = P(:,j); end;
            end;
        end;
    end;

//  Si AFC, alors suppression de la 1e valeur propre

    if (methode == 3) then
        for i = 1:(nVar-1)
            valProp(i) = valProp(i+1);
            vectProp(:,i) = vectProp(:,i+1);
        end;
        valProp(nVar) = 0;
    end;


//  Part d'inertie vehicul\'e par chaque axe

    info = (100 /(valProp' * ones(nVar,1))) * valProp;

//  Passage des valeurs num\'eriques en cha\^\ine des caract\`eres

    for i = 1:nVar
        lblValProp(i) = val2str(valProp(i), 4);
        lblInfo(i) = val2str(info(i), 1);
//        lblInfo(i) = string(info(i));
  end;
  
endfunction      
  
