Bonjour, j'essaie de programmer un algorithme de tri rapide mais je n'y arrive pas, peut-être à cause d'un problème de référencement car le compilateur m'envoie plein d'erreurs lorsque j'essaie d'utiliser des pointeurs sur un vector de long int qui sert à stocker des nombres aléatoires.
Voici le code et mes erreurs à la compilation :
et là les erreurs :Code:#include <iostream> #include <stdio.h> #include <stdlib.h> #include<string.h> #include<vector> #include<random> using namespace std; int choix_pivot(vector<long>, int); int partitionner(vector<long>, int, int, int); vector<long> triRapide(vector<long>, int, int); vector<long>Nb_alea(long); int main() { int nb; std::cout<<"Combien d'entiers ?"<<std::endl; std::cin>>nb; int choix_tri; std::cout<<"Choix du type de tri, 1-tri rapide, 2-tri fusion, 3-tri par tas"<<std::endl; std::cin>>choix_tri; string chemin_acces; std::cout<<"Quel chemin d'acces ?"<<std::endl; std::cin>>chemin_acces; vector<long>vec; vec=Nb_alea(nb); FILE *fp=fopen("TriDeNombres.txt", "rt+, css=UTF-8"); for(int i=0; i<nb; i++) { std::cout<<vec[i]<<std::endl; } int premier=0; if(choix_tri==1) { vec=triRapide(vec, premier, nb); for(int i=0; i<nb; i++) { std::cout<<vec[i]<<std::endl; } }/*else if(choix_tri==2) { }*/ } int choix_pivot(int premier, int dernier) { int milieu; if(dernier%2==0 && premier<=dernier) { milieu=dernier/2; }else if(dernier%2!=0 && premier<=dernier) { milieu=((dernier+1)/2); } return milieu; } int partitionner(vector<long> *vec, int premier, int dernier, int pivot) { std::swap(*vec[pivot], *vec[dernier]); int j=premier; for(int i=premier; i<dernier; i++) { if(*vec[i]<=*vec[dernier]) { std::swap(*vec[i], *vec[j]); j++; } } std::swap(*vec[j], *vec[dernier]); return j; } std::vector<long> triRapide(vector<long> *vec,int premier,int dernier) { if(premier<dernier) { int pivot=choix_pivot(premier, dernier); pivot=partitionner(&vec, premier, dernier, pivot); vec=triRapide(&vec, premier, pivot-1); vec=triRapide(&vec, pivot+1, dernier); } return vec; } std::vector<long> Nb_alea(long nb) { constexpr int max=1000; std::vector<long>tab_nb_alea; static std::mt19937 prng(std::random_device{}()); static std::uniform_int_distribution<long> range(0, max-1); if(nb==0) { std::cout<<"Probleme, vous devez selectionner un nb superieur a 0!"<<std::endl; }else { for(int i=0; i<nb; i++) { tab_nb_alea.push_back(range(prng)); } } return tab_nb_alea; } /*vector<long> tri_fusion(vector<long> vec, int nb, int *pointeur) { long *tab_pointeurs[nb]; }*/
Code:||=== Build: Release in ProjetC++037_REVEILLAUD_Elie_Juin_2021 (compiler: GNU GCC Compiler) ===| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp||In function 'int main()':| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|26|warning: unused variable 'fp' [-Wunused-variable]| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp||In function 'int partitionner(std::vector<long int>*, int, int, int)':| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|57|error: no match for 'operator*' (operand type is 'std::vector<long int>')| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|57|error: no match for 'operator*' (operand type is 'std::vector<long int>')| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|61|error: no match for 'operator*' (operand type is 'std::vector<long int>')| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|61|error: no match for 'operator*' (operand type is 'std::vector<long int>')| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|63|error: no match for 'operator*' (operand type is 'std::vector<long int>')| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|63|error: no match for 'operator*' (operand type is 'std::vector<long int>')| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|67|error: no match for 'operator*' (operand type is 'std::vector<long int>')| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|67|error: no match for 'operator*' (operand type is 'std::vector<long int>')| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp||In function 'std::vector<long int> triRapide(std::vector<long int>*, int, int)':| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|75|error: no matching function for call to 'partitionner(std::vector<long int>**, int&, int&, int&)'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|10|note: candidate: 'int partitionner(std::vector<long int>, int, int, int)'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|10|note: no known conversion for argument 1 from 'std::vector<long int>**' to 'std::vector<long int>'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|55|note: candidate: 'int partitionner(std::vector<long int>*, int, int, int)'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|55|note: no known conversion for argument 1 from 'std::vector<long int>**' to 'std::vector<long int>*'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|76|error: no matching function for call to 'triRapide(std::vector<long int>**, int&, int)'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|11|note: candidate: 'std::vector<long int> triRapide(std::vector<long int>, int, int)'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|11|note: no known conversion for argument 1 from 'std::vector<long int>**' to 'std::vector<long int>'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|70|note: candidate: 'std::vector<long int> triRapide(std::vector<long int>*, int, int)'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|70|note: no known conversion for argument 1 from 'std::vector<long int>**' to 'std::vector<long int>*'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|77|error: no matching function for call to 'triRapide(std::vector<long int>**, int, int&)'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|11|note: candidate: 'std::vector<long int> triRapide(std::vector<long int>, int, int)'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|11|note: no known conversion for argument 1 from 'std::vector<long int>**' to 'std::vector<long int>'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|70|note: candidate: 'std::vector<long int> triRapide(std::vector<long int>*, int, int)'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|70|note: no known conversion for argument 1 from 'std::vector<long int>**' to 'std::vector<long int>*'| C:\Users\Lenovo\OneDrive\Bureau\c\exo_listes_chainee\ProjetC++037_REVEILLAUD_Elie_Juin_2021\main.cpp|79|error: could not convert 'vec' from 'std::vector<long int>*' to 'std::vector<long int>'| ||=== Build failed: 12 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
-----