Svp Je veux résoudre un problème de recherche de sous-séquence maximale en langage « C » , d'abord le programme doit Générer 100 tableaux de taille aléatoire n entre [300..3000] et pour chaque taille n les éléments du tableau doivent être générés aléatoirement 100 fois càd exécutez le code 100 fois avec différentes valeurs du tableau.
J'ai fait un programme qui génère n valeurs entre 10 et 30 avec la fonction rand() mais le console n'affiche rien.
Merci d'avance pour votre aide.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int i,j,k,n,low,high;
float x[n],maxSum,sumSuquence;
n=rand() %30 + 10;
for (i=0 ;i<=100;i++){
x[i]= rand() %100 + 1;
}
maxSum=x[0];
for (i = 0; i<=6; i++ ){
for (j= i;i<=6;j++){
sumSuquence=0;
for (k=i;k<=j+1 ;k++){
sumSuquence= sumSuquence+x[k];
if(sumSuquence>maxSum){
maxSum=sumSuquence;
low=i;
high=j;
}
}
}
}
for(i=low;i<=high;i++)
printf("la sous séquence est %f",x[i]);
printf("la somme de sous séquence est %f",sumSuquence);
return 0;
}
Bonjour ! Manifestement il ne rentre pas dans la boucle finale. Donc affiche les valeurs de 'low' et 'high' juste avant cette boucle (entre les lignes 33 et 34), ça t'aidera à trouver l'erreur. C'est cette méthode qui permet de trouver des erreurs. Les valeurs en question sont peut-être différentes de celles prévues, ce qui t'obligera à afficher celles de 'i' et 'j' juste avant l'affectation de 'low' et 'high' et ainsi de suite jusqu'à ce que tu trouves ce qui cloche.
Merci beaucoup pour votre aide je vais essayer d'appliquer vos remarques.
Oui j'ai changé les valeurs de longueur de du tableau pour savoir si le programme fonctionne pour des petites valeurs avant de passer aux grandes valeurs.
En ayant regardé vite fait, je pense qu'il y a quelque chose de suspect avec le tableau x[] : tu dis qu'il est de taille 'n', or 'n' n'a aucune valeur définie au moment de la déclaration. J'ai peur que le tableau x[] soit vide, du coup 'maxSum' vaut n'importe quoi, 'sumSuquence' reste égal à zéro, aussi 'low' et 'high' ne sont jamais modifiés et valent n'importe quoi. Je pense qu'il faut que tu affiches les valeurs de tes variables pour corriger toutes ces erreurs une par une.
J'ai essayé de modifier le programme en se basant sur vos idées mais toujours le même message est reçu.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int i,j,k,n,low,high;
float x[n],maxSum,sumSuquence;
n=rand() %30 + 10;
for (i=0 ;i<=100;i++){
x[i]= rand() %100 + 1;
maxSum=x[0];
for (i = 0; i<=n; i++ ){
for (j= i;i<=n;j++){
sumSuquence=0;
for (k=i;k<=j+1 ;k++){
sumSuquence= sumSuquence+x[k];
if(sumSuquence>maxSum){
maxSum=sumSuquence;
low=i;
high=j;
}
}
}
}
printf(" min de sous séquence est %d ",low);
printf("max de la séquence est %d",high);
for(i=low;i<=high;i++)
printf("la sous séquence est %f",x[i]);
printf("la somme de sous séquence est %f",sumSuquence);
}
return 0;
}
J'ai essayé de modifier le programme en se basant sur vos idées mais toujours le même message est reçu.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int i,j,k,n,low,high;
float x[n],maxSum,sumSuquence;
n=rand() %30 + 10;
for (i=0 ;i<=100;i++){
x[i]= rand() %100 + 1;
maxSum=x[0];
for (i = 0; i<=n; i++ ){
for (j= i;i<=n;j++){
sumSuquence=0;
for (k=i;k<=j+1 ;k++){
sumSuquence= sumSuquence+x[k];
if(sumSuquence>maxSum){
maxSum=sumSuquence;
low=i;
high=j;
}
}
}
}
printf(" min de sous séquence est %d ",low);
printf("max de la séquence est %d",high);
for(i=low;i<=high;i++)
printf("la sous séquence est %f",x[i]);
printf("la somme de sous séquence est %f",sumSuquence);
}
return 0;
}
edgarjacobs a écrit:
Comme l'a écrit @robun, commence par inverser les lignes 7 et 8... 6 et 7 dans ton dernier code
Edit: si tu avais mis les options de compilation -Wall -Wextra, tu aurais sans doute tout de suite compris où se trouvait le problème
Si les réponses données ne t'intéressent pas, inutile de poster sur le forum. Et ton code est toujours aussi infâme au niveau indentation, malgré la correction que je t'ai proposée.
- Edité par edgarjacobs 27 novembre 2022 à 23:36:07
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Salut, je vois que vous essayez de m'aider et je suis reconnaissant pour vous, j'ai essayé d'inverser les lignes 7 et 8 comme vous avez dit ...,vu que je suis encore débutant en programmation C j'attendais plus de l'aide en tout cas merci pour votre réponse.
J'ai essayé de modifier le programme en se basant sur vos idées
Tu n'as pas compris ce que j'écrivais plus haut ? Tu as défini en ligne 6 un tableau 'x' de taille 'n', alors que 'n' n'a pas été initialisé (il le sera en ligne 7) ! Il faut donc inverser les lignes. Mais n'inverse pas les lignes parce qu'on te dit d'inverser : inverse-les parce que tu comprends bien que le tableau 'x' n'est pas défini correctement.
Comprends aussi qu'il y a plusieurs erreurs, il faut toutes les corriger pour que le programme marche.
On dirait que tu n'as pas compris les interventions ci-dessus. N'hésite pas à demander des précisions !
Dernière chose, mon conseil plus haut : « il faut que tu affiches les valeurs de tes variables pour corriger toutes ces erreurs une par une. » Je t'assure que c'est très utile d'afficher les valeurs des variables, car quand un programme ne marche pas, c'est en général parce que les variables n'ont pas les valeurs prévues.
int main(void)
{
int n;
float x[n];
n = rand() %30 + 10;
Le compilateur lit le code du haut vers le bas. Donc quand tu créés le tableau x de taille n tu n'as pas encore donné de valeur à n qui a donc une valeur indéfinie. La ligne suivante tu donne une valeur à n, mais c'est trop tard, le tableau est déjà créé.
...
Générez 100 tableaux de taille aléatoire n
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.