Sujet de ratrapages a faire ces vacances, aidez moi SVP

cs_carlmari Messages postés 2 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 28 juillet 2004 - 28 juil. 2004 à 17:32
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 25 août 2004 à 12:25
Bonjour, j'aimerais qu'on me corrige mon programme SVP, concernant un sujet de ratrapages que j'ai a faire.

voici l'adresse où trouver le sujet: http://annexe.esiea.fr/reexamens/reexamens2004.html

vous allez dans 2A puis projet.

Je voudrais savoir si mon algo est bon d'abord, puis si j'ai fait des erreurs dans l'utilisation des pointeurs, merci.
Voici mon code:

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

#define MAX_TAILLE 2048

typedef struct
{
short couleur[3];
}Pixel;

typedef struct
{
int nb_lignes,nb_colonnes;
Pixel tab[MAX_TAILLE][MAX_TAILLE];
}Image;

Image *CalculerDifferences(Image *source)
{
int i,j;
Image *P= source;
Image *P2;
P2=P;
for(j=1;j< P->nb_lignes;j++)
{
for(i=1;i< P->nb_colonnes; i++)
{
P2->tab[i][j].couleur[0]= P->tab[i][j].couleur[0]- ((P->tab[i-1][j].couleur[0]+ P->tab[i-1][j-1].couleur[0] + P->tab[i][j-1].couleur[0])/3);
P2->tab[i][j].couleur[1]= P->tab[i][j].couleur[1]- ((P->tab[i-1][j].couleur[1]+ P->tab[i-1][j-1].couleur[1] + P->tab[i][j-1].couleur[1])/3);
P2->tab[i][j].couleur[2]= P->tab[i][j].couleur[2]- ((P->tab[i-1][j].couleur[2]+ P->tab[i-1][j-1].couleur[2] + P->tab[i][j-1].couleur[2])/3);
}
i=1;
}
return P2;
}

void Negliger(Image *diff, int alpha)
{
Image *P2;
P2=diff;
int r,v,b,R,V,B,Alpha,S,i,j;

for(j=1;jnb_lignes;j++)
{
for(i=1 ;i< P2->nb_colonnes;i++)
{
r= P2->tab[i][j].couleur[0];
v= P2->tab[i][j].couleur[1];
b= P2->tab[i][j].couleur[2];

R=r*r;
V=v*v;
B=b*b;
Alpha= alpha*alpha;
S=R+V+B;

if(S<=Alpha)
{
P2->tab[i][j].couleur[0]=0;
P2->tab[i][j].couleur[1]=0;
P2->tab[i][j].couleur[2]=0;
}
}
i=1;
}
}

void EcrireFichier(char *nom_fichier, Image *diff)
{
int i=0,j=0,a=1,b=0,n=0;
Image *P2;
P2=diff;
char tmp[MAX_TAILLE][MAX_TAILLE];
nom_fichier= *tmp;
while(jnb_lignes)
{
while(inb_colonnes)
{
if(P2->tab[i][j].couleur[0]!=0 || P2->tab[i][j].couleur[0]!=0 || P2->tab[i][j].couleur[0]!=0 )
{
n++;
tmp[a][b]=i;
tmp[a+1][b]=P2->tab[i][j].couleur[0];
tmp[a+2][b]=P2->tab[i][j].couleur[1];
tmp[a+3][b]=P2->tab[i][j].couleur[2];
a+=4;
}
i++;
}
tmp[0][b]=n;
b++;
j++;
i=0;
}
}

11 réponses

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2004 à 18:37
Tu peux pas changer le structure car elle n'est pas tres explicite
typedef struct
{
short couleur[3];
}Pixel;

c'est meiux d'avoir :

typedef struct
{
short r; // rouge
short g; // green
short b; // blue
}Pixel;

mais bon c'est pas tres grave mais plus un code est clair, plus il est facile a debugger. J'ai pas trop bien comrpis ou etait ton probleme ? tu as teste ton programmes ? tu as rencontrer des bugs ?
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2004 à 20:32
Heu ta onction EcrireFichier est douteuse, il faut utilser des fopen,fwrite et fclose
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
28 juil. 2004 à 23:32
c'est des prof qui ont fais ce sujet ? et les const ?

carlmari > tu n'as visiblement pas compris les pointeurs, dans CalculerDifferences tu modifie l'image source

et fais du C, #include n'a rien à faire ici
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
29 juil. 2004 à 09:40
commente le code pour mieu le comprendre & on t'aidera a ce moment la...

ID : utilise MétaProg (cf mes srces)
et copie puis complete le com pour toutes les fonction...

++

Magic Nono: l'informagicien!
0

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

Posez votre question
cs_imanewin32 Messages postés 70 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 12 août 2004
29 juil. 2004 à 11:59
tu doit d'abord allouer pour P2 dans la fonction CalculerDifferences sinon tu ne peux pas le rtourner car il est déclaré ds une fonction donc il est local dans cette fonction et il va etre détruit une fois tu sort de la fonction.
ça c'est trés trés important ne l'oublie jamais
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 juil. 2004 à 19:28
de quoi tu parle ? il retourne une adresse valide, ou est le probleme ?
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
29 juil. 2004 à 20:05
Un truc que je pige pas, "Image *P2;" ne cree pas en memoire une image, juste un pointeur qui est apres initiatilise a P. A mon avis il faut cree un autre image destination differente de source, car tel que c'est fais la, il ecrase son image de depart.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 juil. 2004 à 21:00
c'est ce que j'avais dit, il modifie l'image source...
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
29 juil. 2004 à 22:32
djl > excuse ...

il faut faire par exemple :
Image *CalculerDifferences(Image *destination,Image *source)
{
// ... le code... au lieu de P2 tu prends destination
}

quand tu appelles la fonction CalculerDifferences, tu fais :

Image dest, source;
// ... tu charges ce que tu veux dans source
CalculerDifferences(&dest,&source);

Comme cela pas de Pb de memoire
0
cs_gibbon Messages postés 12 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 5 février 2009
25 août 2004 à 09:15
sinon ca vous parait bon?
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
25 août 2004 à 12:25
ben tu as teste les resultats ? tu fais un petit exemple sur papier, puis du regarde si ton programme ton le meme resultat.
0
Rejoignez-nous