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
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
A voir également:
- Programmation en c
- Application de programmation - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Mettre en veille un programme - Guide
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
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é.
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++;
}}
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++;
}}
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
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 :
Cordialement,
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,
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
4 févr. 2009 à 00:55
void purger(int[],int*); ???
Oui, c'est ce qu'on appelle le prototype d'une fonction ;)
Oui, c'est ce qu'on appelle le prototype d'une fonction ;)
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
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.
Je pense que c'est pour avoir la nouvelle taille du tableau dans la fonction appelante (main) et pouvoir afficher le tableau correctement.
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
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++; } }