#include<stdio.h>
int main()
{
int n, i,j, T[10], taille, occurence[10], memo;
taille= sizeof(T)/4;
for(i=0; i<taille; i++)//je remplis mon tableau
{
printf("Entrer l'element %d :", i);
scanf("%d",&T[i]);
occurence[i]=0; // j'initialise les occurence de mon tableau à 0
}
for(i=0; i<taille; i++) //je trie mon tableau du plus petit au plus grand
{
for(j=i; j<taille; j++)
{
if(T[i] > T[j])
{
memo=T[i];
T[i]=T[j];
T[j]=memo;
}
}
}
for(i=0; i<taille; i++) //j'incrémente l'occurence de chaque élément à chaque fois qu'il est retrouvé
{
for(j=0; j<taille; j++)
{
if(T[i] == T[j])
{
occurence[j]=occurence[j]+1;
}
}
printf(" %d- ", occurence[i]);
}
for(i=1; i<taille; i++) //j'affiche le nombre qui a la plus grande occurence
{
if (occurence[i]>=occurence[i+1])
printf("\n%d", T[j]);
}
return 0;
}
ceci est mon code je ne sais pas où se trouve l'erreur mais j'ai besoin d'une correction
Dans l'ennoncé, rien ne précise la taille des éléments d'un tableau.
Trier le tableau est une bonne idée.
Cela évite de faire un tableau d'occurrence dont tu ne peux pas connaître la taille simplement.
Une fois trié les valeurs identiques sont adjacentes.
il suffit d'une variable pour stocker la taille d'un.bloc max.
et de refaire un parcourt pour afficher toutes les réponses.
Pour que ça gagne quelque chose par rapport à la méthode basique, il faut jeter à la poubelle les tris classiques (bulles, insertion, selection) qui sont quadratiques, et que les enseignants malfaisants exposent à leurs élèves, et se programmer (ou utiliser) un tri dont la complexité est en n.log(n). Sinon, ça ne gagne rien, ça ne fait que des complications
Mais ça l'étonnerait que ça soit l'exercice, à cette saison. Un bon tri, + un traitement de séquences ? hum hum.
Sinon, la première méthode qui devrait venir à l'esprit est la meilleure : utiliser la fonction "nombre_d_occurences" qu'on a certainement écrit dans l'exercice précédent, et on retombe sur un schéma classique : trouver dans un tableau l'élément qui a le meilleur ceci-cela.
pour trouver la valeur qui a le plus d'occurrences
dans le tableau T :
{
variables locales
V = n'importe quoi # meilleur élément trouvé jusque là
N = 0 # son nombre d'occurrences
pour tout élément E de T {
soit NE = nombre_d'occurences de E dans T # appel fonction
si NE > N alors {
V = E # on a trouvé mieux
N = NE
}
}
retourner V
}
#include <stdio.h>
#include <stdlib.h>
int occurence(int nb)
{
int tableau[10]={1,1,1,3,1,1,1,5,6,2}, occurence=0,taille, i;
taille = sizeof(tableau)/4;
for(i=0; i<taille; i++) //j'incrémente l'occurence de chaque élément à chaque fois qu'il est retrouvé
{
if(tableau[i] == nb)
occurence++;
}
return occurence; //je renvoie le nombre d'occurence
}
int main ()
{
int nombre[10]= {0,1,2,3,4,5,6,7,8,9}; //le nombre à tester combien de fois il est apparu
int resultat[10];
int taille, i, j;
int resultmax; //variable tempon pour stocker la plus grande occurence
//nombre[10] ;
taille = sizeof (nombre)/4;
int *presult;
presult=&resultat[0];
for (i=0; i<taille; i++)
{
resultat[i]=occurence(nombre[i]); // appel de ma fonction occurence pour chaque élément du tableau
printf("%d - ", *(presult+i) );
}
resultmax= *presult; // j'affecte dans cette variable le premier élémenet de mon tableau
for (i=1; i<taille; i++)
{
for (j=i+1; j<taille; j++)
{
if (resultmax <= *(presult+j))
{
resultmax= resultat[j];
printf("%d - ", nombre[j] );
break;
}
}
}
return 0;
}
il essaye de fois de tourner mais après il me donne des résltats non attendu... svp s'il y a quelqu'un pour me corriger je suis prêt à recevoir la correction
Tu connais des tris naifs de complexité n.log(n) ?
La question est de savoir si faire un tri puis trouver la plus longue séquence consécutive, c'est une bonne réduction du problème de trouver l'élément qui a le plus d'occurrences. Ca va être le premier réflexe (on sait pas quoi faire alors on va trier, ça donne l'impression qu'on a travaillé) mais c'est pas forcément le bon (en plus, on paume le tableau d'origine, bien joué les gars).
Et d'abord ce qu'on considère comme _bon_ comme solution, dans le contexte où est posé l'exercice.
Il est probable (à 99%) que quand on pose cet exercice, le débutant n'a aucune notion de complexité, n'a jamais écrit de tri de complexité moindre que quadratique, et n'est pas en état de le faire. L'objectif pédagogique est simplement de faire écrire des traitements qui ne se résument pas à une simple boucle + un test.
Donc si le critère n'est pas la complexité optimale, il s'agit de faire le code le plus simple possible. Pour un débutant, trouver la plus longue séquence consécutive, c'est dans la catégorie "algos de traitement de rupture de séquence", (*) c'est beaucoup plus difficile que trouver l'élément qui maximise quelque chose.
--- en plus, il y a une grosse indication
dans le titre c'est écrit en gros "nombre d'occurrences d'un élement dans un tableau"
et c'est dans le sujet que vient "trouver l'élement qui en a le plus"
ce qui suggère fortement que pour faire le 2, le 1 aide beaucoup. Mais bon, depuis quand faut-il lire les énoncés ?
(*) un balayage du tableau, en conservant
la valeur et le nombre d'occurrences du meilleur candidat trouvé jusque là
la valeur et le nombre d'occurrences de la sous-séquence courante
donc pour chaque élément, test pour voir si on est toujours dans la même sous-séquence, et test pour savoir si la sous-séquence est meilleure que celle trouvée jusque là.
En résumé, 4 variables, une boucle, deux tests, et des initialisations un peu délicates au début. A comparer avec 2 variables et 1 test.
La question n'est pas l'intérêt des tris naïfs (*) mais celui d'utiliser un tri de tableau pour résoudre le problème posé. Vu que derrière, il faut se coltiner en plus un algorithme qui n'est pas si simple.
Vu qu'il s'agit d'un pur exercice d'école, personne ne sait si les données sont toujours volumineuses, ou toujours petites, ou de tailles variables (et avec quelle distribution statistique). Il est donc assez douteux de spéculer sur ce qui serait le plus performant concrètement, puisqu'il n'y a pas d'utilisation concrète.
Ce qui est demandé, c'est que l'étudiant présente une solution simple, raisonnable, et si on est optimiste qu'il soit capable d'expliquer pourquoi il a choisi de faire comme ça (autrement que "j'ai commencé à écrire des trucs et ça a l'air de marcher").
Parce que par exemple, si on sort l'argument <<
Trier le tableau est une bonne idée. Cela évite de faire un tableau d'occurrence dont tu ne peux pas connaître la taille simplement.
>>
désolé, ça tient pas la route, pour deux raisons
1. Absolument rien n'oblige à faire un tableau d'occurrences (on peut les calculer et les utiliser "au vol")
2. On peut très bien se passer à la fois de tableau d'occurence et de tri. Le "ça évite" est un "non sequitur"
et qui plus est, en général, on évite de modifier un tableau de données sur lequel on calcule quelque chose. Ca oblige à en faire une copie.
(*) il faudrait rétablir la peine de mort pour ceux qui montrent le Bubble Sort
Faire un copie/coller de ce morceau de programme de cette feuille vers le fichier " nom_appogée_Variante X.cpp " Répondez aux questions suivantes dans la suite du programme. 1) Afficher les éléments du tableau T. 2) lire au clavier un nombre entier X. 3) rechercher X dans le tableau T ; si X existe dans le tableau T, alors donner à la variable rep la valeur true, sinon donner à rep la valeur false. Et compter nX le nombre de fois que X apparait dans T. 4) Si rep est true, donner I1 l’indice de la première apparition de X dans T. Et donner I2 l’indice de la dernière apparition de X dans T. Par exemple : Si X=7, alors I1=1 et I2=18. Si X=14, alors I1=2 et I2=2. 5) En utilisant un pointeur p, copier les éléments de T de I1 à I2 dans un nouveau tableau A, qu’il faudra déclarer. 6) Ecrire une fonction premier qui prend en argument un entier k et retourne la valeur true si k est premier, sinon elle doit retourner false. Son prototype sera : bool premier(int k); 7) Appeler premier depuis main, en l’appliquant à tous les éléments de T, avec l’affiche pour chaque T[i] i=0,1,2…N-1 s’il est premier ou non.
Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Avant de poster, demandez-vous si ce que vous allez dire apporte quelque chose au sujet. Si votre message n'apporte rien, vous ferez perdre du temps à tout le monde et le sujet pourrait dévier ou devenir difficile à suivre.
Aussi, vérifiez la date du topic. Le déterrage de topic nuit au bon fonctionnement du forum et est interdit. Utilisez les boutons pour dire merci. Si le topic date de plus de deux mois sans réponses, mieux vaut ne pas répondre. Si vous avez une question similaire, créez plutôt votre propre sujet en détaillant votre contexte
ceci est mon code je ne sais pas où se trouve l'erreur mais j'ai besoin d'une correction
il essaye de fois de tourner mais après il me donne des résltats non attendu... svp s'il y a quelqu'un pour me corriger je suis prêt à recevoir la correction
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent