IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

problème fonction fprintf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Par défaut problème fonction fprintf
    Bonsoir Bonsoir,
    Pour faire court je travaille sur un programme permettant de calculer un déphasage entre 2 signaux. Pour le moment le programme génère des centaines de signaux, je dois maintenant entrer une formule afin de calculer le déphasage, cependant cette formule étant compliqué à employer en C j'ai pensé la faire sur Excel, pour cela je dois copier les résultats de mes boucles dans un fichier excel, on m'a parlé d'une fonction fprintf permettant de copier les résultats vers un fichier mais je n'y arrive pas. Pourriez vous m'aider ?
    Merci d 'avance.
    Voici l 'esquisse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    #define As 0.54819                 // On définit la constante As
    #define ws (2*3.14)/128.0           // On définit la constante ws
    #define u 0.01          // On définit la constante u
     
     
     
     
     
    float random()                       // Fonction qui va générer le bruit
    {
        float j,i; 
        srand(time(NULL));              // initialisation de random par rapport à l'horloge
                                                    //afin de toujours obtenir des valeurs différentes 
     
        j=((rand()%1001)/(float)1000);  // Calcul d'un nbr compris entre 0 et 1
     
        printf("%f \n",j);
     
        return j;                       
    }
     
    int main ()
    {
     
        float sk, sd, irandom, x1, x2, Ts,D;
        int k;
     
     
        printf(" Saisir la periode du signal sk en seconde \n");
        scanf("%f",&Ts);                      // Période du signal
        irandom = random();
     
     
            for(k=201; k<=400; k++)           // Phase 3: On génère la boucle avec un balayage de 201 a 400
                 {
                 D=10*Ts*((400-(k-1))/200.0);
                 sk = As*sin(ws*k)+As*(1/sqrt(3))*sin(2*ws*k)+As*(1/sqrt(2))*sin(3*ws*k);                                   // Formule du signal
                 sd= As*sin(ws*(k-D))+As*(1/sqrt(3))*sin(2*ws*(k-D))+As*(1/sqrt(2))*sin(3*ws*(k-D));                 // Formule du signal decalé
                 x1 = irandom + sk;                                                                // On ajoute le bruit au signal
                 x2 = irandom + sd;                                                           // On ajoute le bruit au signal decalé
     
                 printf("Pour n = %d sk%d= %f sd%d = %f \n",k,k,x1,k,x2);
     
                 } 
     
           for(k=401; k<=500; k++)           // Phase 4: On génère la boucle avec un balayage de 401 a 500
                    {
     D = 0;
    sk = As*sin(ws*k)+As*(1/sqrt(3))*sin(2*ws*k)+As*(1/sqrt(2))*sin(3*ws*k);                                  
     // Formule du signal
     sd= As*sin(ws*(k-D))+As*(1/sqrt(3))*sin(2*ws*(k-D))+As(1/sqrt(2))*sin(3*ws*(k-D));
     // Formule du signal decalé
                 x1 = irandom + sk;                                                               //On ajoute le bruit au signal
                 x2 = irandom + sd;      
      // On ajoute le bruit au signal decalé
     
                 printf("Pour n = %d sk%d= %f sd%d = %f \n",k,k,x1,k,x2);
     
                 }
     
     
                 system("pause");
    return 0;
    }

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Par défaut
    d'après ce que j'ai compris la fonction copie et envoi les résultats en sortie dans un fichier dont l'adresse et précisé , mais je ne vois pas comment faire

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Par défaut
    Salut,

    man fprintf

    Cette fonction permet d'insérer du texte à la manière de printf mais dans un fichier préalablement ouvert. Un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int main (int argc, char** argv) {
      FILE* f = fopen ("mon_fichier.txt", "a+") ; /* Ouverture du fichier mon_fichier */
      fprintf (f, "2 + 2 font %d", 2 + 2) ; /* Insère "2 + 2 font 4" dans le fichier, à la position courante. */
      fclose (f) ; /* Fermeture du fichier */
      return 0 ;
    }
    N'hésite pas à regarder les pages de manuel concernant les fonctions de la même famille (fseek, etc.) si tu as besoin de travailler sur des fichiers.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Par défaut
    cela fonctionnerait si je remplace simplement le format texte par un format tableur, mais comment faire comprendre au programme que je veux placer une série de résultats dans une colonne et une autre série dans une autre colonne ? ( et non tout dans la même colonne voir la même cellule)
    Par ailleurs, les valeurs copiés sont considérées comme des chaines de caractères non ?

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Par défaut
    J'ai pas trop compris ce que tu cherches à faire mais si tu souhaites créer un fichier au format Excel depuis ton programme C il faut que tu respectes la dite syntaxe des fichier Excel lors de tes appels à fprintf

    Je ne connais pas Excel donc je ne sais pas si c'est possible (le format est-il ouvert ?)

    Très rapidement j'ai trouvé ça sur google tu peux jeter un œil dessus.

  6. #6
    Membre expérimenté Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Par défaut
    Citation Envoyé par leatri Voir le message
    cela fonctionnerait si je remplace simplement le format texte par un format tableur, mais comment faire comprendre au programme que je veux placer une série de résultats dans une colonne et une autre série dans une autre colonne ? ( et non tout dans la même colonne voir la même cellule)
    Par ailleurs, les valeurs copiés sont considérées comme des chaines de caractères non ?
    Écrit ton fichier texte en format csv. Séparer par des point-virgules genre:
    Pour avoir des cellules vide suffit de mettre 2 ; ou plus selon le cas. Une fois copié dans Excel tu fais convertir.


  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Les fichiers CSV s'ouvrent dans Excel et tu peux travailler dessus directement, je ne crois même pas qu'il y ait besoin de faire une quelconque conversion

    En revanche, je m'interroge sur cette démarche :
    cependant cette formule étant compliqué à employer en C j'ai pensé la faire sur Excel, pour cela je dois copier les résultats de mes boucles dans un fichier excel,
    Pour des soucis de simplicité d'écriture, je peux comprendre que tu souhaites le faire avec Excel. Mais pour des soucis de simplicité d'utilisation du programme, je ne suis pas sûr que ce soit la meilleure démarche. Comment ferait quelqu'un qui n'a pas Excel ? Si tu souhaites utiliser le résultat de ce calcul pour faire un calcul suivant, comment vas-tu faire ? Réfléchis bien à ce genre de problématique

    Il faut comprendre que fprintf() fonctionne comme printf() sauf que tu lui donnes un argument supplémentaire : une variable FILE* décrivant un fichier préalablement ouvert avec fopen(). La fonction écrira dans ce fichier et non sur stdoutcomme printf().

    Bon courage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec la fonction fprintf
    Par Flaherty Mc Coillean dans le forum MATLAB
    Réponses: 2
    Dernier message: 01/05/2008, 16h13
  2. Problème fonction SDL
    Par seeme dans le forum SDL
    Réponses: 2
    Dernier message: 06/11/2005, 20h22
  3. Problème fonction PL/SQL
    Par SSJ17Vegeta dans le forum PL/SQL
    Réponses: 2
    Dernier message: 29/10/2005, 21h14
  4. Problème fonction et trigger sous 7.2
    Par anoukhan dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/06/2005, 22h53
  5. Réponses: 2
    Dernier message: 20/08/2004, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo