2017-08-21 3 views
0

J'utilise ce code pour la surcharge de fonctions en utilisant C++ pour trier un tableau double et un tableau d'entiers.Le programme C++ arrondit automatiquement les valeurs doubles à l'exception de la première valeur dans un tableau

#include<iostream> 
#include<bits/stdc++.h> 
using namespace std; 

void sort(int arr[],int n) 
{ 
    int i,j,key; 
    for(j=1;j<n;j++) 
    { 
     key=arr[j]; 
     i=j-1; 
     while((i>=0)&&(arr[i]>key)) 
     { 
      arr[i+1]=arr[i]; 
      i--; 
     } 
     arr[i+1]=key; 
    } 
    cout<<"Sorted integer array is \n"; 
    for(i=0;i<n;i++) 
    { 
     cout<<arr[i]<<endl; 
    } 
} 

void sort(double arr[],int n) 
{ 

    int i,j,key; 
    for(j=1;j<n;j++) 
    { 
     key=arr[j]; 
     i=j-1; 
     while((i>=0)&&(arr[i]>key)) 
     { 
      arr[i+1]=arr[i]; 
      i--; 
     } 
     arr[i+1]=key; 
    } 
    cout<<"Sorted double array is \n"; 
    for(i=0;i<n;i++) 
    { 
     cout<<arr[i]<<endl; 
    } 
} 

int main() 
{ 
    int n; 
    cout<<"Enter the size of the array \n"; 
    cin>>n; 
    cout<<"Enter the values for the integer function \n"; 
    int a[n]; 
    int i; 
    for(i=0;i<n;i++) 
    { 
     cin>>a[i]; 
    } 
    double b[n]; 
    cout<<"Enter the values for the double array \n"; 
    for(i=0;i<n;i++) 
    { 
     cin>>b[i]; 
    } 
    sort(a,n); 
    sort(b,n); 
} 

Dans la réponse, il arrondit les valeurs des valeurs doubles sauf la première entrée dans le double tableau. Y at-il une étape de coulée de type qui me manque ou tout autre défaut dans le code?

+0

'VLA's ne sont pas' C++ 'standard, pourquoi wont vous utilisez' std: : array'/'std :: vector' –

+1

Je vous suggère de lire [Pourquoi ne devrais-je pas #include ?] (https://stackoverflow.com/questi ons/31816095/why-should-i-not-include-bits-stdc-h) –

+0

Vous déclarez 'int a [n];' tableaux avec un nombre non constant 'n' –

Répondre

5

Vous êtes irrévocablement découpant une partie flottante de double si vous l'enregistrez dans la variable int.

int key; 
key=arr[j]; 

C'est pourquoi vous obtenez des résultats erronés. Déclarer key comme double et cela fonctionne.


également VLA s (tableaux de longueur variable) ne sont pas standart C++.

Voici quelques autres variantes

  • std::array
  • std::vector
  • utilisation new & delete
+0

Cela résout le problème immédiat, mais jetez également un coup d'oeil à certains des commentaires sur les tableaux de longueur variable, et pourquoi vous ne devriez vraiment pas les utiliser. – Matt

+0

C'est mon commentaire. Iam éditant mon A merci. –

+0

Je voulais dire plus pour OP que pour vous :) – Matt