Programmation en c

Fermé
kamaldita - 3 févr. 2009 à 22:39
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 4 févr. 2009 à 01:04
Bonjour,
je suis debutante en c , j'ai ecrit un programme qui permet de purger un tableau ( qui elimine les elements qui se repetent mais sans utiliser un autre) je vous serai tres reconnaissante si vous voulez bien y jetter un petit coup d'oeil
et me mettre sur le bon chemein car il ne veu pas se compiler (jutilise dev c++)
merci d'avance pour votre aide qui me sera vital!
#include<stdio.h>
#include<stdlib.h>
#define dim 100
void purger(int[],int*);
main()
{
int a[dim],n,i;
printf("donnez la dimmension de votre tableau\n");
scanf("%d",&n);
printf("entrez les elements de votre tableau\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
purger(a,&n);
for(i=0;i<n;i++)
printf("%d\t",a[i]);
system("PAUSE");
return 0;
}
void purger(int a[],int *n)
{
int i,j,k;
for(i=1;i<*n;)
{
for(j=0;j<=i-1;j++)


if(a[i]==a[j]);
break;


for(k=i;k<=*n-2;k++)
a[k]=a[k+1];
(*n)--;
else
i++;}
}
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
4 févr. 2009 à 00:12
As-tu le droit de créer un tableau temporaire ? Cela te permettrait d'avoir un algorithme plus clair, et avec une meilleure complexité.
1
Bonjour,
je suis debutante en c , j'ai ecrit un programme qui permet de purger un tableau ( qui elimine les elements qui se repetent mais sans utiliser un autre) je vous serai tres reconnaissante si vous voulez bien y jetter un petit coup d'oeil
et me mettre sur le bon chemein car il ne veu pas se compiler (jutilise dev c++)
merci d'avance pour votre aide qui me sera vital! #include<stdio.h>
#include<stdlib.h>
#define taille 100
void purger(int[],int*);
main()
{

int a[taille],n,i;
printf("donnez la dimmension de votre tableau\n");
scanf("%d",&n);
printf("entrez les elements de votre tableau\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
purger(a,&n);
for(i=0;i<n;i++)
printf("%d\t",a[i]);
system("PAUSE");
return 0;}

void purger(int a[],int *n)
{
int i,j,k;
for(i=0;i<*n; )
{
for(j=0;j<i;j++)
if(a[i]==a[j])
{
for(k=0;k<*(n-1);k++)
a[k]=a[k+1];
(*n--);
}
else
i++;
}}
0
void purger(int[],int*); ???

sa ne peut pas marcher tu declare deux int sans donner de nom de variable
Je suis désolé mais ton code ne veut rien dire, tu oubli des accolades.
Tu fais des pointeurs inutile.
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
4 févr. 2009 à 00:23
Bonsoir,
Le mieux, ce serait déjà de donner l'erreur que devC++ t'affiche, ça nous aiderait pas mal.

Sinon, je suis loin d'être un expert en C, mais je ne saisis pas très bien pourquoi tu passes &n à ta fonction purger et non pas n (ça n'optimise rien du tout vu qu'une adresse ou un int, c'est la même taille donc au niveau de la pile c'est pareil, et je pense que c'est ce qui fait que ton programme ne fonctionne pas car tu fais une erreur par la suite).
De plus, tu dois décaler tes éléments commençant à k=i et non pas à k=0
Essaie donc avec ceci :
...
void purger(int[],int); 
...
purger(a,n); 
...
void purger(int a[], int n) {
 int i, j, k;
 for(i = 0; i < n;) {
  for(j = 0; j < i; j++) {
   if(a[i] == a[j]) {
    for(k = i; k < n - 1; k++) {
     a[k]=a[k+1];
    }
    n--;
   } else {
    i++;
   }
  }
 }
}


Cordialement,
0
Il serait aussi judicieux d'allouer ton tableau en fonction de la taille que l'utilisateur te donne et que tu stocke dans 'n'.
Aussi tu as oublier d'assigner un type a ton main, généralement par defaut: int main, ce qui justifie par la suite ton return 0.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842 > Magellane
4 févr. 2009 à 00:55
void purger(int[],int*); ???
Oui, c'est ce qu'on appelle le prototype d'une fonction ;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842 > Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009
4 févr. 2009 à 00:58
mais je ne saisis pas très bien pourquoi tu passes &n à ta fonction purger et non pas n
Je pense que c'est pour avoir la nouvelle taille du tableau dans la fonction appelante (main) et pouvoir afficher le tableau correctement.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
4 févr. 2009 à 00:54
N'oublie pas de penser au cas où l'utilisateur rentre une dimension supérieure à 100.
#include <stdio.h>

#define dim 100

void purger(int[],int*);

int main(void)
{
    int a[dim],n,i;

    printf("donnez la dimmension de votre tableau\n");
    scanf("%d",&n);
    if(n>dim){
        fputs("dimension incorrect\n",stderr);
        return 1;
    }

    purger(a,&n);

    for(i=0;i<n;i++)
        printf("%d\t",a[i]);

    putchar('\n');
    getchar();
    return 0;
}

void purger(int a[],int *n){
    int i=1;

    while(i<*n){
        int j;
        for(j=0;j<i;j++){
            if(a[j]==a[i]){
                //décalage
                int k;
                for(k=i;k<*n-1;k++)
                    a[k]=a[k+1];

                (*n)--;

                //pour refaire une itération sur le même élément
                i--;
            }
        }
        i++;
    }
}

0