-
CréateurSujet
-
mai 2, 2024 à 10:47 am #39714BotParticipant
bonjour, je débute en C++ et je cherche actuellement quelques exercices intéressant pour m’y exercer, notamment sur la programmation orienté objet, et si possible la surcharge d’opérateur, quelqu’un aurait un liste d’exercice svp ? Je n’ai aucune idée de mini-projet pour le moment
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
CréateurSujet
-
AuteurRéponses
-
-
mai 2, 2024 à 10:50 am #39715
Je vous donnerai une liste quand je rentrerai à la maison pour vous aider. Combien de temps avez-vous en programmation et en C++?
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 10:52 am #39716
merci beaucoup, ça va faire un peu plus d’un mois, je suis les vidéo de FormationVideo pour apprendre, j’ai regardé ses vidéos associées à toutes ces notions là
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:05 pm #39718
Et donc vous voulez des exercices en lien avec ces concepts?
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:07 pm #39720
yes c’est ça
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:08 pm #39721
Mhh, je vais voir ça.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:16 pm #39724
J’allait vous donner une liste d’exercice lié à ces concepts mais je ne suis pas sûr de votre niveau exacte… Je vais vous donnez un de chaque niveau pour voir où vous avez du mal.
Je verrais votre niveau par apport à la façons dont vous avez écris votre programme.
Nous allons commencer simple. Écrivez un programme pour trouver le plus grand nombre parmi trois nombres saisis par l’utilisateur en utilisant input.——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:16 pm #39725
Vous pouvez aussi utilisant un array si vous le voulez.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:17 pm #39727
d’accord, je vois, je vous mentionnerez quand ça sera fait
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:17 pm #39729
Bien, bonne chance.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:33 pm #39772
Rester de la façons la plus simple que vous pouvez le faire, n’essayez pas de faire quelque chose de complexe juste pour être complexe.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:55 pm #39773
`#include
#include
#includeint main()
{
std::array n_array{};std::cout <> n_array[0];
std::cin.ignore(255, ‘,’);
std::cin >> n_array[1];
std::cin.ignore(255, ‘,’);
std::cin >> n_array[2];std::sort(std::begin(n_array), std::end(n_array));
std::cout << "Le plus grand nombre est : " << n_array.back() << std::endl;
return 0;
}`——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:56 pm #39774
ça m’a pris quelque minute le temps de me souvenir de l’existence de std::sort()
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 12:59 pm #39775
Je vais juste voir si votre script marche bien.
Il marche, vous avez donc décider une méthode bien plus complexe que nécessaire pour quelque chose d’aussi simple. Mais je vois un peu votre niveau…
On va donc vous donnez quelque chose d’intermédiaire au lieu de simple. Implémentez un algorithme de recherche binaire pour rechercher un élément dans un tableau trié à 5 valeurs.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:00 pm #39776
comment j’aurai pu faire pour le rendre plus simple ?
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:01 pm #39777
que voulez-vous dire par recherche binaire ?
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:03 pm #39778
Déjà vous n’aviez pas besoin d’utilisez un array, cela augmente juste la difficulté, vous n’aviez pas non plus besoin d’utiliser le module d’algorithme, vous auriez plus utiliser une logique simple pour faire ce script.
#include using namespace std; int main() { double num1, num2, num3; cout <> num1 >> num2 >> num3; double max_num = num1; if (num2 > max_num) { max_num = num2; } if (num3 > max_num) { max_num = num3; } cout << "Le plus grand nombre est: " << max_num << endl; return 0; }
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:03 pm #39779
Vous avez étudiez les algorithmes non?
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:03 pm #39780
Une recherche binaire est un type d’algorithm, aussi appelez binary sort.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:05 pm #39781
ah oui effectivement je me suis pris la tête pour rien
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:05 pm #39782
Oui.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:06 pm #39783
Mais ça me fait comprendre un peu votre niveau de penser, mais souvenez vous, essayez de ne pas aller trop loin, la plupart de vos solutions sont simple. Il ne saire à rien de faire plus que demander ou besoin.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:06 pm #39784
Pour ce challenge, vous aurez besoin d’un array par contre.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:06 pm #39785
Car les sorts utilise des arrays.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:06 pm #39786
Vous pouvez aussi choisir de faire une recherche en bulle.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:06 pm #39787
oui je vois, en général je me prend la tête sur un truc simple pour me rendre compte de la simplicité de la solution
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:07 pm #39788
Oui.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:09 pm #39789
qu’est-ce que c’est ?
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:09 pm #39790
je connais pas trop les termes
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:11 pm #39791
je vais vous donnez une explication pour votre algorithme de recherche.
On initialise deux indices, left et right (droite et gauche), qui représentent respectivement le début et la fin du tableau à considérer.
On calcule l’indice du milieu du tableau.
On compare l’élément du milieu avec l’élément recherché :
1. Si l’élément est égal à l’élément recherché, on a trouvé l’élément.
2. Si l’élément est plus petit, on continue la recherche dans la moitié supérieure du tableau.
3. Si l’élément est plus grand, on continue la recherche dans la moitié inférieure du tableau.
On répète ce processus jusqu’à ce que l’élément soit trouvé ou que la zone de recherche soit vide.
Si l’élément n’est pas trouvé, on indique qu’il n’est pas présent dans le tableau.——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:12 pm #39792
d’accord je comprend mieux, je vais faire ça
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:54 pm #39793
`#include
#includeint main()
{
std::array n_array{1,2,3,4,5};
int left = n_array.front();
int right = n_array.back();
int middle = (right-1)/2;int element = 5;
while (1)
{
if(element == middle && middle = left)
{
std::cout << "Trouve." < middle)
{
middle++;
}
else if(element right || middle < left)
{
std::cout << "Pas present." << std::endl;
break;
}
}return 0;`
je suis vraiment pas sûr de ma méthode mais au moins ça marche
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:56 pm #39794
ça ma l’air globablement bon à premier vu d’oeuil mais laissez moi voir.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:58 pm #39795
Vous avez oublier un } à la fin.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 1:58 pm #39796
Pour finir l’encapsulation de main().
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 2:00 pm #39797
C’était un bonne essaie mais quelque erreurs de ce que je vois.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 2:01 pm #39798
Ah oui erreur quand j’ai copié collé
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 2:08 pm #39799
Tout d’abord, votre script marche avec le } à la fin, donc bravo la dessus.
Mais vous fait une initialisation incorrecte des variables left, right et middle, comme j’ai expliquer avant, dans une recherche binaire, left et right représentent les indices du premier et du dernier élément du tableau respectivement, dans votre code, left est initialisé au premier élément du tableau et right est initialisé au dernier élément, cependant middle est incorrectement calculé comme la moitié de (right-1), ce qui en pratique, n’est pas du tout nécessaire au milieu du tableau.
Ensuite vous utilisez des conditions de comparaison incorrectes, les conditions que vous avez utilisée ne suivent pas le modèle de comparaison typique d’une recherche binaire, vous ne l’avez pas faite de façon à diviser la plage de recherche de manière cohérente.
Finalement, dans une recherche binaire, middle est mis à jour en fonction de la moitié de la plage de recherche actuelle, dans votre code, middle est simplement incrémenté ou décrémenté sans ajuster les limites de la plage de recherche.
Votre code est globalement correcte, mais la performance à du en partir à cause d’une mauvaise implémentation de votre algorithme, pour une première fois, c’est un bonne essaie. Je vous dis bravo.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 2:14 pm #39800
Vous avez des bonnes notions en C++ et ça ce vois que vous travaillez bien. Malgré certaine lacune dans certains concepts, vous arriverez à le faire très rapidement.
Ci-dessous, vous pourrez voir une implémentation parfaite de la recherche binaire de ma librairie personnel:
(type traits est un module de modèle générique, non nécéssaire mais sinon le code n’est pas à un niveau expert, mais avancée.)#include #include #include template typename std::enable_if<std::is_arithmetic::value, int>::type binarySearch(const std::array& arr, const T& target) { if (arr.empty()) { return -1; } int left = 0; int right = arr.size() - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == target) { return mid; } if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } int main() { std::array arr = {1, 3, 5, 7, 9}; int target; std::cout <> target; int result = binarySearch(arr, target); if (result != -1) { std::cout << "L'élément " << target << " est présent à l'indice " << result << " dans le tableau." << std::endl; } else { std::cout << "L'élément " << target << " n'est pas présent dans le tableau." << std::endl; } return 0; }
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 2, 2024 à 4:27 pm #39803
ahhh oui je vois c’est plus complet
——————–
leyymonogatari – Envoyé depuis le Discord : Culte du code -
mai 3, 2024 à 3:31 am #39855
sinon en C pour le fun
#inlude #define max(x, y) (x > y ? x : y) int main() { printf("Please input 3 numbers (ex: 1,2,3): "); fflush(stdout); int n[3] = {0}; if (!sanf("%d,%d,%d", n, n+1, n+2)) return fprintf(stderr, "wront input...n"); int max = n[0] > n[1] ? max(n[0], n[2]) : max(n[1], n[2]); printf("The biggest number is %d !n", max); }
——————–
4zv4l – Envoyé depuis le Discord : Culte du code -
mai 3, 2024 à 3:57 am #39856
Honnêtement très bonne implémentation pour c’êtes exercice. Les bases sont bien utilisé, en revanche plusieurs point à revoir, la macro max() est définie en utilisant l’opérateur ternaire, c’est une façon qui peut faire un comportement inattendu si les arguments ont des effets secondaire, par exemple si l’un des arguments est une fonction ayant des effets secondaires, la fonction peut être appelée plusieurs fois. Je conseille donc d’utiliser une fonction plutôt qu’une macro.
En terme de sécurité, l’utilisation de scanf peut causée un buffer overflow si l’input est trop longue (Aucun risque ici, mais dans une implémentation plus réaliste il est préférable d’utiliser sscanf() ou fgets().
Finalement, vous avez fait une erreur d’ortographe sur le message d’erreur pour stderr ce qui en soit n’est pas grand problème mais à noter.
En soit, votre programme est bon, vous n’avez pas utiliser de fonction plus complexe que nécessaire et votre script marche. Pour développer votre niveau sur celui là, je dirait de rajouter une validation des entrée ainsi qu’une optimization plus effective sans utiliser un opérateur ternaire, et vous pouvez aussi rajouter de la gestion d’erreurs à votre code.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 3, 2024 à 3:58 am #39857
Je donne votre code un 90/100.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 3, 2024 à 3:59 am #39858
Sur ce, je vous souhaite une bonne soirée.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 3, 2024 à 9:22 am #39859
Merci pour ton retour. J’ai également quelques points à souligner.
Sscanf ne protège pas des buffers overflows. Si le buffer qui reçoit la partie de la string donnée à sscanf est trop court, ça va overflow aussi.
> code fait a la va vite comme example
Ce que tu dis sur la macro avec l’expression ternaire est vrai, mais mon code ne fait pas d’appel à de fonctions avec cette macro, elle serait à revoir si j’utilise des fonctions dans mon code (ici que `main`).
L’erreur d’orthographe a été corrigée 😉
Mon programme gère les erreurs et la validation de l’entrée. Si `scanf` ne fonctionne pas (mauvais format), une erreur s’affiche et le programme exit avec un code d’erreur.
Je suis d’accord avec le fait que l’expression ternaire générera un cmp/jmp supplémentaire à ton implémentation.har buff[2]; har str[] = "Hello, world !"; ssanf(str, "%[^ ]", buff); // overflow
——————–
4zv4l – Envoyé depuis le Discord : Culte du code -
mai 3, 2024 à 12:26 pm #39860
Ci-dessous est ce que je voulais dire:
#inlude // printf(), fgets() perror() #inlude // Alloation de mémoire et termination du progamme #inlude // Vérifiation de la longueur des entrées et la déouper en jetons à l'aide de strtok() #inlude // Pour la préision sur de grand nombres #define INPUT_SIZE 100 int main() { printf("Please input 3 numbers (ex: 1.5,2,3.7): "); fflush(stdout); har input[INPUT_SIZE]; if (!fgets(input, sizeof(input), stdin)) { perror("Error reading input"); return EXIT_FAILURE; } // Chek for buffer overflow if (strlen(input) >= INPUT_SIZE - 1) { fprintf(stderr, "Input too longn"); return EXIT_FAILURE; } har *endptr; mpfr_t n[3]; for (int i = 0; i < 3; i++) { mpfr_init2(n, 128); // Initialize eah mpfr_t variable with preision 128 bits } har *token = strtok(input, ","); int i = 0; while (token != NULL && i < 3) { if (!mpfr_set_str(n, token, 10, MPFR_RNDN)) { // Convert string to mpfr_t fprintf(stderr, "Invalid input: Please enter valid numbers separated by ommasn"); return EXIT_FAILURE; } token = strtok(NULL, ","); i++; } mpfr_t max_num; mpfr_init2(max_num, 128); // Initialize max_num with preision 128 bits mpfr_set(max_num, n[0], MPFR_RNDN); // Set max_num to the first number for (int i = 1; i < 3; i++) { mpfr_max(max_num, max_num, n, MPFR_RNDN); // Update max_num if n is larger } printf("The biggest number is "); mpfr_out_str(stdout, 10, 0, max_num, MPFR_RNDN); // Output max_num printf("!n"); // Clean up mpfr_lear(max_num); for (int i = 0; i < 3; i++) { mpfr_lear(n); } return EXIT_SUCCESS; }
——————–
foundationscp – Envoyé depuis le Discord : Culte du code -
mai 3, 2024 à 3:21 pm #39861
Ça ne répond pas vraiment à ce que j’ai dit sur sscanf et buffer overflow check avec fgets alors que tu précises la taille ?🌜
stdlib.h pour “allocation de mémoire” ? Ou ça ?
Mpfr c’est sympa mais avec 128 bits tu auras des performances moins bonnes avec les plateformes qui ne supportent pas nativement cette taille.
Et pour montrer ses skills de C c’est sympa, mais niveau simplicité et lisibilité c’est vraiment loin, surtout pour une tâche si “basic”, surtout que le “gain” ne doit probablement pas valoir la complexité du code
——————–
4zv4l – Envoyé depuis le Discord : Culte du code -
mai 3, 2024 à 5:28 pm #39869
Je n’avais rien à ajouter sur ce que vous avez précisé avant, et le scripte lui même est honnêtement horrible si fait comme ça en production, cela ne sert à rien, je dois bien l’admettre que j’ai un peut abusé sur la complexité du code.
Ensuite, pour stdlib.h, il peut être utilisé pour de l’allocation de mémoire avec calloc, realloc et malloc et déallocation avec free. Juste pas dans le programme que j’ai montré.
——————–
foundationscp – Envoyé depuis le Discord : Culte du code
-
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.
Sujets récents
-
Demande d’aide en génie logiciel
par Bot
il y a 3 jours et 16 heures
-
Souci de mon système de gain de niveaux
par Bot
il y a 3 jours et 8 heures
-
Problème avec kali
par Bot
il y a 4 jours et 1 heure
-
message d erreur virtual box
par Bot
il y a 3 jours et 21 heures
-
DEV BOT
par Bot
il y a 1 jour et 16 heures
Réponses récentes
Statistiques des Forums
- Comptes enregistrés
- 2 595
- Forums
- 51
- Sujets
- 928
- Réponses
- 17 561
- Mot-clés du sujet
- 0