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 :

Fonction qui renvoie un tableau


Sujet :

C

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Points : 101
    Points
    101
    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 averti Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    155
    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 : 155
    Points : 346
    Points
    346
    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
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    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
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Points : 101
    Points
    101
    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
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    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 éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 1 565
    Points : 7 648
    Points
    7 648
    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
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    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 «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]

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Points : 101
    Points
    101
    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, 01h51
  2. fonction qui renvoie un tableau
    Par GLSpirit dans le forum C++
    Réponses: 9
    Dernier message: 12/05/2007, 14h05
  3. fonction qui renvoie un tableau
    Par toto2022 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/01/2007, 16h11
  4. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  5. Fonction qui renvoie un tableau?
    Par elm dans le forum C
    Réponses: 23
    Dernier message: 21/12/2005, 12h44

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