Tableaux en C

cs_Zworykin Messages postés 12 Date d'inscription dimanche 26 avril 2009 Statut Membre Dernière intervention 2 août 2009 - 28 juil. 2009 à 20:18
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 16 août 2009 à 11:40
Bonjours à tous,

voila j'ai ce bout de code qui permets de trier un tableau mais je ne comprends pas trop son fonctionnement.

int t[dim] = { 6,7,8,9,1,0,3,2,5,4 };
int i,j,tmp;

for(i=0;i<dim;i++)
for (j=0;j<dim;j++)
if (t[i]<t[j])
{
tmp=t[i];
t[i]=t[j];
t[j]=tmp;
}

Je ne comprends pas comment on arrive à trier le tableau en commancant à i=0 et j=0.

Si quelq'un peut m'aider merci

11 réponses

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
29 juil. 2009 à 02:25
Bonsoir,

C'est un tri à bulle. Le principe est de remonter les plus petits éléments en tête de liste.

ed73
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
29 juil. 2009 à 08:50
Bonjour,

les indices des tableaux commencent en 0.
Si on déclare un tableau int tab[10] les indices vont de 0 à 9.
0
4fiji Messages postés 6 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 1 septembre 2009
29 juil. 2009 à 10:36
Pour plus d'explications : Tapez le texte de l'url ici.
0
cs_Zworykin Messages postés 12 Date d'inscription dimanche 26 avril 2009 Statut Membre Dernière intervention 2 août 2009
30 juil. 2009 à 00:03
Merci les gars pour vos réponses mais j'ai encore une autre petite question, j'ai testé la recherhce lfind mais y a un bug

#include <stdio.h>
#include <stdlib.h>

int compare_int(int *a,int *b)
{
return (*a-*b);
}

void main (void)
{
int int_valeurs[] = {1,2,4,5,6};
int *int_ptr;
int int_valeur=2, elements=5;

int_ptr = lfind(& int_valeur, int_valeurs, &elements, sizeof(int),(int (*) (const void *, const void *))compare_int);

if(*int_ptr)
printf("valeur trouvée %d", int_valeur);
else
printf("valeur inexistante");

system("PAUSE");
}

il me mets cannot convert int * to unsigned int *

Je trouve pas le stute merci pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
30 juil. 2009 à 00:31
Bonsoir,

Déclare

unsigned int elements = 5;

ou modifie l'appel à lfind

lfind(& int_valeur, int_valeurs, (unsigned int *)&elements, sizeof(int),(int (*) (const void *, const void *))compare_int);
0
cs_Zworykin Messages postés 12 Date d'inscription dimanche 26 avril 2009 Statut Membre Dernière intervention 2 août 2009
30 juil. 2009 à 19:27
Merci pour ta réponse ed32 mais j'ai copié collé ta solution dans mon main et pas moyen :s .

Il m'affiche cannot convert void * to int *.
Et il me dis que elements et int_valeur ne sont pas utilisés.

Pourtant je comprends pas pourquoi je devrais mettre un entier signé?
0
cs_Zworykin Messages postés 12 Date d'inscription dimanche 26 avril 2009 Statut Membre Dernière intervention 2 août 2009
30 juil. 2009 à 23:17
La fonction lfind renvoi un pointeur que je teste ca viendrait pas de la ?
0
cs_Zworykin Messages postés 12 Date d'inscription dimanche 26 avril 2009 Statut Membre Dernière intervention 2 août 2009
30 juil. 2009 à 23:50
Re voila en surfant un peu sur google, j'ai trouvé un tuto

int compare_int(int *a,int *b)
{
return (*a - *b);
}

void main (void)
{
int int_valeurs[] = {1,2,4,5,6};
void *int_ptr;
int int_valeur=5, elements=5;


int_ptr = lfind(& int_valeur, int_valeurs, (unsigned int *)&elements, sizeof(int),(int (*) (const void *, const void *))compare_int);

if(int_ptr)
printf("valeur trouvee %d\n", int_valeur);
else
printf("valeur inexistante\n");

system("PAUSE");
}

Il est possible de déclarer un pointeur VOID ? et pourquoi si je le déclare en int et que je test sa valeur if(*int_ptr) ca ne fonctionne pas ? et le pourquoi du unsigned j'ai pas trop compris. Merci pour vos réponses.
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
31 juil. 2009 à 20:29
Salut,
Tu peux en déclarer un void* en C, oui (le C n'offrant pas la possibilité de surcharger, c'est utile pour les fonctions génériques, comme malloc() par exemple).
La meilleure solution je pense (même si certains vont me taper sur les doigts), c'est un cast :
int_ptr=(int*)lfind(...);


Cordialement, uaip.
0
cs_Zworykin Messages postés 12 Date d'inscription dimanche 26 avril 2009 Statut Membre Dernière intervention 2 août 2009
2 août 2009 à 04:12
merci uaip pour ton coup de pouce.

Je voulais savoir un truc, si je peux utiliser lfind, lsearh sur des entiers ou sur des réels. Est-il possible d'utiliser ces fonctions génériques sur de char ??????

merci de vos réponses.
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
16 août 2009 à 11:40
Salut,
Pour ma part, je ne connais pas ces fonctions, et je n'ai pas compris ta question


Cordialement, uaip.
0
Rejoignez-nous