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 :

Inversion de vecteur entier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Par défaut Inversion de vecteur entier
    Bonjour, je voudrais inverser les éléments de mon vecteur. Voici la fonction que j'ai crée pour inverser mon vecteur.

    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
    #include <stdio.h>
     
    void inverse(int elem[], int longueur, int *p);
     
    int main()
    {
     
    	int n;
    	int vect[n];
    	int inv[n];
    	printf("Quelle est la longueur du vecteur? \n");
    	scanf("%d", &n);
    	for(int i=0; i<n; i++)
    	{
    	printf("\n Vecteur valeur '%d' : ", i+1);
    	scanf("%d", &vect[i]);
    	}
    	inverse(vect, n, inv);
    	for(int j =0;j<n;j++) 
    	{ 
    		printf(" '%d', ", inv[j]);
    	} 
    return 0;
    }
    void inverse(int elem[], int longueur, int *p)
    {
    	int k = 0;
    	for(int i = longueur-1 ; i > 0 ; i--)
    	{
    		*(p+k) = *(elem+i);
    		k++;
    	}
    }
    Le code fonctionne correctement 1 fois sur 3
    J'ai 0 warnings cependant, je ne trouve pas mon erreur ?

  2. #2
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 765
    Par défaut
    Hello,

    Sans parler de l'inversion des éléments, les lignes 9 et 10 posent porblème: n n'a pas été initalisé, et donc peut valoir vaut n'importe quoi.

    Déplace ta ligne 12 après la 8, ça ira mieux....

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Par défaut
    Merci edgarjacobs pour cet élément de réponse.
    Je me retrouve donc avec mes lignes 11 et 12 avant ma 8.
    Mon code s'exécute mais il reste un problème.
    Nom : inversion.PNG
Affichages : 673
Taille : 5,2 Ko
    la dernière variable de mon vecteur se voit attribué un entier assez ... particulier !

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 757
    Par défaut
    Tu as un buffer overflow dans ta procédure inverse
    Ta plage pour tes indices de boucle est mauvaise

    Et au passage, tu peux mettre l'incrémentation de k dans ta boucle : for (int i = (longueur - 1); i > 0; i--, k++) {

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    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 815
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mathieudvlmnck Voir le message
    Bonjour, je voudrais inverser les éléments de mon vecteur. Voici la fonction que j'ai crée pour inverser mon vecteur.

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void inverse(int elem[], int longueur, int *p)
    {
    	int k = 0;
    	for(int i = longueur-1 ; i > 0 ; i--)
    	{
    		*(p+k) = *(elem+i);
    		k++;
    	}
    }
    Bonjour

    Je ne comprends pas, si tu comme tu dis tu veux inverser les éléments de ton tableau, pourquoi tu ne les inverses alors pas dans ledit tableau mais dans un second et différent tableau ?

    Sinon il te faut descendre jusqu'à 0 et non t'arrêter à 1 (car un tableau commence à 0 !!!). De plus foetus t'indique que k peut se mettre dans la boucle mais moi je te dis que k est inutile car il peut se déduire (calculer) depuis i (ou i se calcule depuis k)

    Et enfin cette écriture *(p+k) n'est absolument pas plus économique ni plus rapide que l'écriture classique p[k] et au contraire rend le code moins lisible.
    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. Inverser un vecteur de texte
    Par ThonySp dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/05/2013, 10h17
  2. [Turbo Pascal] Inverser un vecteur de chaînes de caractères
    Par Malouche dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 31/05/2012, 16h00
  3. [MEX] Inverser un vecteur
    Par ggwtf dans le forum MATLAB
    Réponses: 7
    Dernier message: 19/11/2009, 15h19
  4. Inverser un vecteur
    Par Invité dans le forum Caml
    Réponses: 9
    Dernier message: 13/01/2009, 00h20
  5. Inverser nombre entier de 4 chiffres
    Par zenattitude dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2005, 15h18

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