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 :

Fibonacci series in C


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Developer
    Inscrit en
    Janvier 2023
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Developer
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2023
    Messages : 15
    Points : 23
    Points
    23
    Par défaut Fibonacci series in C
    Cette fonction accepte le nombre de termes de la séquence de Fibonacci dans le processus enfant, crée un tableau et redirige la sortie vers le parent via un tube. Le parent doit attendre que l'enfant développe la série de Fibonacci. Le texte reçu affiche toujours -1, bien que le texte transmis affiche le nombre de chiffres saisis *4, ce qui est acceptable.

    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
    #include<stdio.h>
    #include<unistd.h>
    #include<sys/types.h>
    #include<string.h>
     
    int* fibo(int n)
    {
        int* a=(int*)malloc(n*sizeof(int));
        *(a+0)=0;
        *(a+1)=1;
        int i;
        for(i=0;i<n-2;i++)
        {
            *(a+i+2)=*(a+i)+(*(a+i+1));
        }
        return a;
        }
     
     
        int main()
        {
            int* fib;
            int fd[2];
            pid_t childpid;
            int n,nb;
     
            int k=pipe(fd);
            if(k==-1)
            {
            printf("Pipe failed");
            return 0;
        }
     
        childpid=fork();
        if(childpid == 0) 
        {
            printf("Enter no. of fibonacci numbers");
            scanf("%d",&n);
            fib=fibo(n);
            close(fd[0]);
            nb=(fd[1],fib,n*sizeof(int));
            printf("Sent string: %d \n",nb);
            exit(0);
        }
        else
        {
            wait();
            close(fd[1]);
            nb= read(fd[0],fib,n*sizeof(int));
            printf("Received string: %d ",nb);
        }
        return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour à toi aussi.

    Voici mes remarques sur ton code
    1. Pas besoin de caster le malloc (enfin si on n'oublie pas l'include de stdlib.h). Certains prônent le cast systématique du malloc mais je n'en fais pas partie (et de façon générale je considère qu'un cast doit se justifier)
    2. Tu as le droit de mettre des espaces après le "include", cela ne compilera pas moins vite et sera plus lisible. Et de façon plus générale tu as le droit d'aérer ton code.
    3. Pas besoin d'écrire *(a+1), ce n'est pas plus rapide que d'écrire a[1]. Effectivement pour balayer un tableau utiliser un pointeur est plus rapide qu'un index à condition que le pointeur soit déjà positionné sur la bonne case. Si on doit faire une opération sur le pointeur avant d'accéder dessus alors cela revient à faire comme un index. Quant à ton brillant (et tellement utile) a+0...
    4. Je ne suis pas certain de comprendre nb=(fd[1],fib,n*sizeof(int)). Non en fait c'est un euphémisme, je pige que dalle à cette instruction.
    5. La fonction wait() attend un paramètre mais (sauf si tu veux checker la façon dont le fils se termine) n'est pas utile vu qu'un pipe assure la synchronisation
    6. Pas besoin de "else" pour gérer le père vu que le fils se termine via exit()
    7. Finonacci commence à 0. Donc si tu demandes à calculer jusqu'à la valeur 4 (incluse) alors il te faut allouer (et envoyer et lire) 5.
    8. Ce n'est pas parce que le tableau est alloué dans le fils qu'il l'est aussi dans le père.


    Sinon tu es venu ici pour quoi? Tu as une question ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2007, 18h31
  2. Réponses: 5
    Dernier message: 25/03/2003, 19h43
  3. [TP] port série rs232
    Par cyb33 dans le forum Turbo Pascal
    Réponses: 44
    Dernier message: 13/01/2003, 15h49
  4. [Kylix] Composant serie
    Par labyrinth dans le forum EDI
    Réponses: 1
    Dernier message: 13/11/2002, 20h27
  5. [Kylix] Kylix / port serie
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 01/04/2002, 12h07

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