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

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2015
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2015
    Messages : 143
    Points : 80
    Points
    80

    Par défaut Fonction qui renvoie un tableau

    Bonjour,
    Bonjour,
    J'essaye d'écrire une fonction qui retourne un tableau que je vais l'utiliser après, mais je n'y arrive pas.
    Quelqu'un pourrait-il m'aider ?
    Merci
    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
     
    #include <stdlib.h>
    #include<stdio.h>
    #include<math.h>
    int *tailleprob()
    {
    float nbl=0;
    float nbc=0;
    float L=10,l=10,dx=2,dy=2;
    float tableau[2]; 
    nbl=(l/dy);
    nbc=(L/dx);
    tableau[1] = nbl;
    tableau[1] = nbc;
     return tableau;
    }
     
    int main()
    {
    int tailleprob();
    int *t=tailleprob();
    printf("%lf\n%lf\n",t[1],t[2]);
    return 0;
    }

  2. #2
    Membre habitué Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2016
    Messages : 82
    Points : 183
    Points
    183

    Par défaut

    Bonjour,

    le problème ici c'est que tu essaies de retourner un tableau local, sans compter que le prototype de ta fonction est int *tailleprob(); et que ton tableau local est de type float.

    ce post pourrait t'aider --> https://www.developpez.net/forums/d5...ner-tableau-c/

  3. #3
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    mars 2009
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : mars 2009
    Messages : 520
    Points : 376
    Points
    376
    Billets dans le blog
    3

    Par défaut

    cette ligne ne signifie rien ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int *t=tailleprob();
    Tu initialises une variable censée contenir l'adresse d'un tableau d'entier alors que
    tu retournes un pointeur vers un tableau de float dans ta fonction tailleprob() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    float tableau[2]; 
    .....
    ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tableau[1] = nbl;
    tableau[1] = nbc;
    De plus ,tu veux sûrement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tableau[0] = nbl;
    tableau[1] = nbc;
    et aussi ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%lf\n%lf\n",t[1],t[2]);
    doit te causer des soucis car ton tableau ne contient que 2 éléments qui sont :
    tableau[0] et tableau[1] ; il n'existe donc pas de tableau[2] !,

    Attention aux indices des tableaux !!

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2015
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2015
    Messages : 143
    Points : 80
    Points
    80

    Par défaut fonction qui renvoie un tableau

    Merci beaucoup pour vos réponses.
    @ exe2bin oui effectivement je veux dire tableau[0] et tableau[1].

    est ce possible de me corriger le code pour mieux comprendre.

    Merci

  5. #5
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    mars 2009
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : mars 2009
    Messages : 520
    Points : 376
    Points
    376
    Billets dans le blog
    3

    Par défaut

    Citation Envoyé par conanran Voir le message
    Merci beaucoup pour vos réponses.
    @ exe2bin oui effectivement je veux dire tableau[0] et tableau[1].

    est ce possible de me corriger le code pour mieux comprendre.

    Merci
    Il me semble déjà l'avoir fait ; à part l'en tête de ta fonction qui devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float *tailleprob()
    Bon courage pour la suite .

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    809
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 809
    Points : 4 209
    Points
    4 209

    Par défaut

    sauf que : une fonction ne peut pas ni recevoir en paramètre ni retourner un tableau. Des scalaires ou des structures oui, mais pas des tableaux.
    Une fonction peut au mieux recevoir un pointeur (pour y lire un tableau, ou pour y écrire un tableau) ou retourner un pointeur mais qui ne devra jamais, non jamais, correspondre à une variable ou un tableau local à la fonction. Le compilateur détecte normalement cela et sanctionne par un Warning qui faut lire.
    Ce que l'on peut faire est indiqué dans le lien donné par zancrows, et il y a des tas d'exemples sur ce forum.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    6 644
    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 : 6 644
    Points : 18 778
    Points
    18 778
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par conanran Voir le message
    est ce possible de me corriger le code pour mieux comprendre.
    Bonjour

    Déjà quand on veut faire du C, on le fait entièrement. Fais-le ou ne le fais pas mais il n'y a pas d'essai. Et faire du C c'est écrire un code propre et lisible c'est à dire au-moins indenté (ne serait-ce que pour montrer qu'on aime ce qu'on fait).

    Sinon en C il est impossible de retourner un tableau car c'est un type trop lourd, trop complexe pour le langage. En revanche tu peux parfaitement retourner l'adresse d'une case mémoire. Et si cette case mémoire est la première case d'un tableau, alors à partir de cette case tu pourras passer à la suivante et à la suivante et ainsi de suite traiter tout le tableau.
    Le seul détail c'est que tu ne peux pas retourner l'adresse d'une variable locale à une fonction car quand la fonction se termine, la variable est alors "libérée" et son contenu réutilisé pour autre chose (tu récupères alors l'adresse d'un truc qui n'existe plus). La seule façon de faire est alors de commencer par allouer une zone mémoire, zone qui se comporte comme un tableau. Ensuite tu peux retourner l'adresse de cette zone allouée (car l'allocation se fait dans un espace en quelque sorte "global" donc indépendant des fonctions qui y accèdent).
    Et quand tu as fini de traiter ta zone, te reste plus qu'à la libérer.

    Si en plus tu te concentres un minimum sur tes indices (éviter par exemple d'utiliser deux fois le même pour stocker deux choses différentes), que tu évites de taper dans l'indice [1] et l'indice [2] alors que les indices d'un tableau de 2 éléments vont de "0" à "1" ; et que tu arrives à faire le lien entre le fait que l'adresse d'un float c'est un "float étoile" (et non un "int étoile") alors il n'y a plus de souci.

    Ce qui donne alors

    Code c : 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
    #include <stdio.h>
    #include <stdlib.h>
     
    float *tailleprob() {
    	float nbl=0;
    	float nbc=0;
    	float L=10,l=10,dx=2,dy=2;
    	float *tableau; 
     
    	// Allocation mémoire de 2 float
    	tableau=malloc(2 * sizeof(float));
     
    	// Remplissage de la zone mémoire (qu'on peut appeler "tableau")
    	nbl=(l/dy);
    	nbc=(L/dx);
    	tableau[0] = nbl;
    	tableau[1] = nbc;
     
    	// Renvoi de l'adresse du premier élément
    	return &tableau[0];		// Ou bien, puisque le nom d'un tableau équivaut à l'adresse de son premier élément, on peut alors écrire plus simplement "return tableau"
    }
     
    int main() {
    	float *t=tailleprob();
    	printf("%lf\n%lf\n",t[0],t[1]);
    	free(t);
    	return 0;
    }
    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

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2015
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2015
    Messages : 143
    Points : 80
    Points
    80

    Par défaut

    @Sve@r merci beacoup
    en effet, il ya avait une semaine que j'ai commencé à prendre C à coder en C c'est pour cela.

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

Discussions similaires

  1. fonction qui renvoie un tableau
    Par deubelte dans le forum C++
    Réponses: 24
    Dernier message: 26/05/2007, 02h51
  2. fonction qui renvoie un tableau
    Par GLSpirit dans le forum C++
    Réponses: 9
    Dernier message: 12/05/2007, 15h05
  3. fonction qui renvoie un tableau
    Par toto2022 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/01/2007, 17h11
  4. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 02h04
  5. Fonction qui renvoie un tableau?
    Par elm dans le forum C
    Réponses: 23
    Dernier message: 21/12/2005, 13h44

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