CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Fonction pour classé un tableau

Holopainen
Holopainen
Niveau 3
01 novembre 2007 à 20:57:48

J´apprend le C et j´ai un exercice a faire qui me bloque. Je dois classer les nombres du tableau que j´ai déclaré du plus petit au plus grand. Dans l´exercice on me donne le prototype suivant :

void ordonnerTableau(long tableau[], long tailleTableau);

Je ne vous donne pas de chiffre car la fonction doit marcher qul que soit le tableau.

Pourriez vous m´aider svp ??

JosephJoestar
JosephJoestar
Niveau 5
01 novembre 2007 à 21:01:40

Tu devrais arriver à tes fins avec ce lien qui recense les algorithmes de tri les plus courant.
http://www.dailly.info/alo/algorithmes-de-tri/index.php

Holopainen
Holopainen
Niveau 3
01 novembre 2007 à 21:25:47

Merci beaucoup. Je ne connaissai pas se site.

Neoknight
Neoknight
Niveau 10
02 novembre 2007 à 09:39:03

for(int i=0;i<dim;i++)
{
for(int j=1;j<dim;j++)
{
if(tab[i]>tab[j])
{
int tmp=tab[i];
tab[i]=tab[j];
tab[j]=tmp;
}
}
}

un truc ds ce genre ms j´ai pas teste :rouge:

saleGauss
saleGauss
Niveau 9
05 novembre 2007 à 18:06:14

effectivement, ca marche.
Ca s´appelle le tri par insertion.
Juste une erreur : les deux boucles imbriquées vont toutes les deux de 0 à dim.

Neoknight
Neoknight
Niveau 10
05 novembre 2007 à 18:25:08

oui petite faute de frappe :hum:

space_monster66
space_monster66
Niveau 6
05 novembre 2007 à 19:45:47

Que fait cette fonction ? Quand on met un tableau et ses elements (dans le code de neoknight) comment dire que le tableau[i] et plus faible que le tableau [j] ? Ils additionnent les éléments du tableau automatiquement ?
De plus, j´avais entendu que inserer deux for pour completer un tableau à plus d´une dimension (par exemple) completait le tableau en diagonale ! Est-ce faux ?
(par ex. au lieu de faire
111
111
111
ca ferait
100
010
001 ?)
Merci d´avance (curiosité) ^^

walker-texas
walker-texas
Niveau 3
10 novembre 2007 à 10:41:13

=> Que fait cette fonction ?

Le principe de l´algorithme :

POUR i DE 0 A (dim-1) FAIRE
POUR j DE 0 A (dim-1) FAIRE
Si tab[i]>tab[j] ALORS
tmp=tab[i]
tab[i]=tab[j]
tab[j]=tab[i]

Donc pour j variant de 0 a (dim-1),on compare tab[j] à tab[i].
i.e : pour j=0..(dim-1),i=0 : tab[0] avec tab[0],tab[1] avec tab[0], .....,tab[dim-1] avec tab[0].
pour j=0..(dim-1),i=1 : tab[0] avec tab[1],tab[1] avec tab[1], .....,tab[dim-1] avec tab[1].
Ainsi de suite jusqua i=dim-1.

=> Quand on met un tableau et ses elements (dans le code de neoknight) comment dire que le tableau[i] et plus faible que le tableau [j] ?

Si on a un tableau tab par exemple:
int tab[]={2,4,5,8,9}
tab[2] designe le 3eme élement du tableau (car le tableau est numéroté de 0 à (n-1). i.e: tab[2]=5
Donc pour comparer tab[i] et tab[j] on compare juste 2entiers entre eux.
Si tab[i]>tab[j] on echange les 2 cases du tableau i et j.

=> De plus, j´avais entendu que inserer deux for pour completer un tableau à plus d´une dimension (par exemple) completait le tableau en diagonale ! Est-ce faux ?

Euh je comprends pas trop bien la question, si tu as un tableau a 2 dimensions:
int tab[n][m] de taille n x m.
Alors si tu fais tourner 2 boucles imbriqués tel que:
for (i=0;i<n;i++) {
for (j=0;j<m;j++) {
tab[i][j]=1;
}
}
Tout les élements de ton tableau vont etre mis à 1.
Par exemple pour n=3 m=4.

1111
1111
1111

Par contre si tu fais tourner une seule boucle:
for (i=0;i<n;i++) {
tab[i][i]=1;
}

Seul les éleménts de ton tableau d´indice respectant l´equation i=i ( i.e: la diagonale du tableau ) vont etre mis à 1:

1000
0100
0010
0001

P.S:
D´ailleurs il me semble que l´algorithme n´est pas le plus efficace ( n+n+n...+n calculs avec n opérantes, i.e: n² ).
Il serait plus judicieux de faire varier j de (i+1) à (dim-1).
((n-1)+(n-2)+(n-3)+...1 calculs) .
Car les éléments du tableau tel que j<=i sont déja triés.

godrik
godrik
Niveau 30
10 novembre 2007 à 11:52:46

ce n´est pas un tri par insertion, c´est un tri a bulle ca...

Au sujet de l´optimisation proposé, je ne penses pas qu´elle fonctionne. Deplus, elle ne change pas la complexité de l´algorithme qui reste en O(n^2)

saleGauss
saleGauss
Niveau 9
10 novembre 2007 à 11:59:26

ouiii excuse moi, c´est bien un tri à bulles où les valeurs remontent "petit à petit", comme des bulles à la surface d´une eau.
Je devais etre fatigué (la bonen excuse à 18h... :d).

walker-texas
walker-texas
Niveau 3
10 novembre 2007 à 14:50:52

La complexité est moins élévé mais certes tjs en O(n^2). Par contre, je ne vois pas de raison immédiate pour que cela ne marche pas... enfin je devrais vérifier quand meme ^^ ( mais on est daccord que de toute facon le gain est minime.)

dnob700
dnob700
Niveau 10
10 novembre 2007 à 18:24:58

la compléxité n´est pas moins élevé, par contre, tu gagne un facteur 2 en temps donc ce n´est pas négligeable. (a conditions de ne pas te tromper dans le sens du parcours, là je crois que c´est les dernières valeur qui sont à la bonne place, c´est donc les j>n-i qui sont trié (à des + ou - 1 près un peu partout)).

space_monster66
space_monster66
Niveau 6
13 novembre 2007 à 21:07:23

Et pour additionner les éléments d´un tableau ?

dnob700
dnob700
Niveau 10
13 novembre 2007 à 23:08:08

je ne te répondrais pas. Relis le tuto du sdz depuis le début si tu ne peut pas répondre tout seul à cette question. Ça me semble nécessaire.

Fvirtman
Fvirtman
Niveau 10
14 novembre 2007 à 09:53:46

Les algos de tri, il y a eu beaucoup de recherche la dessus !
Le C présente également une fonction appelé "qsort" dans stdlib.h qui trie n´importe quoi, une fonction puissante, mais qui nécesite de connaitre les pointeurs de fonction, et d´avoir une bonne rigueur sur les pointeurs (je pense aux void* de la fonction a passer)

space_monster66
space_monster66
Niveau 6
14 novembre 2007 à 17:42:20

C´était juste pour m´informer. de plus, le sdz ne m´interresse pas.
pas grave.

dnob700
dnob700
Niveau 10
14 novembre 2007 à 18:44:08

Le problème n´est pas de s´informer. C´est un problème de base (et encore, c´est un euphémisme).

Sur un autre thread, tu veux écrire une IA. Si tu ne sais pas parcourir un tableau (i.e. si tu ne sais pas utiliser une boucle for), je ne voispas comment tu pourra réussir.

Dans tout les cas,je réitère mon conseil, lis un cours ou un tuto de C sérieusement, avant de vouloir passer à de "grosse" application (et une ia, pour n´importe quoi (ou presque) est une grosse application).

space_monster66
space_monster66
Niveau 6
15 novembre 2007 à 21:04:20

for(i=0,i<tailletableau1,i++)
{
for(j=0,j<tailletableau2,j++)
{
tableau[i] + tableau[j]
}
}
un truc comme ca je pense...
(mais bon comme je vois que tu as juste retenu sur mon topic du forum sciences que j´aimai pas les vieux et je les consideraient comme une race, ca ne m´étonne pas de toi...tss. j´ai fait du C je sais utiliser une boucle for, j´avais juste la flemme...)

dnob700
dnob700
Niveau 10
15 novembre 2007 à 21:24:26

"mais bon comme je vois que tu as juste retenu sur mon topic du forum sciences que j´aimai pas les vieux et je les consideraient comme une race, ca ne m´étonne pas de toi...tss. j´ai fait du C je sais utiliser une boucle for"

...

génial ! si tu crois que je me souviens de toi, tu te trompe (maintenant oui, tu me dira). Par contre, pour ta deuxième phrase, tu as brillamment démontré avec ton bout de code que tu te trompe lourdement : tu ne sais manifestement pas parcourir un tableau.

space_monster66
space_monster66
Niveau 6
16 novembre 2007 à 22:10:12

j´ai dit "un truc comme ca", et mon but n´est pas de faire un jeu d´échec vois-tu (même si je l´ai dit sur le topic hein, comprends bien), je voulais juste savoir comment faire une IA, tu es content papy ? rohlala...

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment