Programme en C
Hors ligneSignol Le 29/05/2009 à 16:40 Profil de Signol Configuration de Signol

Bonjour Bonjour
En fait, j'aurai besoin d'un coup de main, pour expliquer ce programme (des petits commentaires si possible) surtout sur la fin.
Merci pour votre aide.


1 // fichier nuees.h pour epreuve info
2 # include <math.h>
3 # include <stdio.h>
4 # include <stdlib.h>
5 # include <malloc.h>
6
7 typedef struct {int x,y; int klass;} POINT;
8 typedef struct {double xc, yc; int mod, np; int * liste; } CLASSE;
9 POINT * quelspoints (char Nomfichier [], int * adresseNbpoints ) ;
10 int quelscentres (CLASSE * , POINT *, int Nbpoints );
11 void plelo22170 (CLASSE*, POINT*);
12 double distc2 (CLASSE K1, CLASSE K2);
13 int quelleclasse (POINT M, CLASSE *Tk, int Nk);
14 double nouveauCentre (CLASSE *pK, POINT * points );
15 void affiche (CLASSE * Tk, int nbK, POINT * points);
16 # define NcMAX 20
17 # define epsilon 1.0
18 # define TCV 320
19 // fin du fichier nuees.h
20
21 //fichier epinfo089.c
22 #include "nuees.h"
23 int main (int ac, char ** av)
24 {
25      POINT * points, * cepoint;
26     CLASSE classes[NcMAX], *pK;
27     int Nbpoints, Nbclasses, kAvt, nvk;
28     int nbchange, j, k, *tmp, nbEtapes = 0;
29     double deplace2;
30     printf ( "Epreuve info 2008-2009\n\n");
31     points = quelspoints (av[1], Nbpoints);
32     printf ("Nombre de points: %d\n", Nbpoints);
33     Nbclasses = quelscentres (classes, points, Nbpoints);
34     printf ("Nombre de centres prévus: %d\n", Nbclasses); fflush(stdout);
35     do
36     {
37          nbchange = 0;
38          for (j=0;j<Nbpoints;j++)
39          {
40               nvk = quelleclasse (points [j], classes, Nbclasses);
41               kAvt = points [j].klass;
42               if (kAvt != nvk)
43               {
44                    pK = classes + kAvt; pK ->mod = 1; pK -> np = 0;
45                    pK = classes + nvK; pK -> mod = 1 ; pK -> np = 0;
46                    points[j].klass=nvk;
47                    nbchange ++;
48               }
49          }
50          //liste des points de chaque classe modifiée;
51          for (j=0, cepoint = points; j<Nbpoints; j++, cepoint++)
52          {
53               pK=classezs + cepoint -> klass;
54               if (pk ->mod !=0)
55               {
56                    tmp = pK -> liste + pK -> np; *tmp = j;
57                    pK -> np ++;
58               }
59          }
60          deplace2 = 0; //nouveau centre des classes modifiées;
61          for (k=0; k<Nbclasses; k++)
62          {
63               deplace2 += nouveauCentre (classe + k, points);
64          }
65          nbEtapes ++;
66          printf ("etape: %d disc: %.2lf nbch: %d\n", nbEtapes, deplace2, nbchange);
67     } while (deplace2>epsilon);
68     printf ("nombre d'étapes: %d\n", nbEtapes);
69     affiche (classes, Nbclasses, points);
70 }
71 //fin du fichier epinfo089.c
72 //epreuve info 2008-2009 fichier fctepinfo 089.c
73 #include "nuees.h"
74 POINT * quelspoints (char nomF[], int * K)
75 {
76     FILE * virenne;
77     POINT * Zp, Q;
78     int j;
79     char coments [100];
80     virenne = fopen (nomF, "rt");     
81     if (virenne == 0)
82     {
83          printf ( "%s pas ouvert \n", nomF);
84          exit (-1);
85     }
86     fgets (comments, 100, virenne); fgets (comments, 100, virenne);
87     fscanf (virenne, "#rows: %d\n, K);
88     fgets (comments, 100, virenne); //3 lignes adaptées au fichier cell
89     Zp = calloc ( *K sizeof (POINT) );
90     for (Q.klass = 0, j=0 ; j< *K; j++)
91     {
92          fscanf ( virenne, "%d%d", & Q.x, & Q.y);
93          Zp[j] = Q;
94     }
95     return Zp;
96 }
97
98 int quelscentres (CLASSE c[], POINT * pts, int N)
99 {
100     int nc, j, n0;
101     srand (23); // en situation, graine variable pour rand ()
102     nc = 12; // simule en scanf ( "%d", &nc) et verifie nc <= NcMAX
103     for (j=0;j<nc; j++)
104     {     //pour tomber DANS le tableau:
105          n0=5+ ((rand()%32768) . 32768.0) * (N-10); //pb portage
106          printf ("%d\n", n0); c[j].xc = pts [n0].x; c[j].yc = pts [n0].y;
107          c[j].mod= -1; c[j].np = 0;
108          c[j].liste = calloc (N, sizeof (int));
109     }
110     return nc;
111 }
112
113 double nouveauCentre (CLASSE *pK, POINT * points)
114 {
115     if (pK-> mod==0) return 0.0;
116     
117 CLASSE ancienCentre = *pK);
118 pk ->mod = 0;
119 if (ancienCentre.mod && !ancienCentre.np) //classe vidée;
120 {     pK -> xc = pK -> yc = 1e6; return 0.0;} //centre rejeté au loin;
121
122 plelo 22170 (pK, points);
123 return distc2 (ancienCentre, *pK);
124 }
125
126 void plelo 22170 (CLASSE * pK, POINT * points)
127 {
128     int N= pK ->np;
129     POINT * Q;
130     int *liste;
131     double sx = 0, sy = 0;
132     for (liste = pK ->liste; N; liste++, N--)
133     {
134          Q= points + *liste;
135          sx += Q-> x; sy += Q->y;
136     }
137     pK->xc = sx / pK -> np;
138     pK -> yc = sy / pK -> np;
139 }
140
141
142
143
144 double distc2 (CLASSE K1, CLASSE K2)
145 {
146     return pow (k2.xc - K1.xc, 2.0) + pow (K2.yx - K1.yc, 2.0);
147 }
148
149 int quelleclasse (POINT M, CLASSE *Tk, int Nk)
150 {
151     CLASSE tmp; intK; double d;
152     tmp.xc = M.x; tmp.yc = M.y;
153     double dm=distc2 (tmp, *Tk); int krep = 0;
154     for (k=1, Tk++; k<Nk; k++, Tk++)
155     {
156          d = distc2 (tmp, *Tk);
157          if (d<dm) {dm = d; krep = k; }
158     }
159     return krep;
160 }
161
162 void affiche (CLASSE *Tk, int nbK, POINT * points )
163 {
164     int mid = nbK/2; int k;
165     typedef struct { int r, g, b;} RGB;
166     RGB *Z, *tmp;
167     POINT *Q;
168     int *liste, xr, xgb;
169     Z= calloc (TCV * TCV, sizeof (RGB) );
170     for (; nbK != 0; nbK --, Tk++)
171     {
172          for (liste = Tk -> liste; Tk -> np != 0; Tk -> np --, liste ++)     
173          {
174               Q=points + *liste;
175               xr = Q ->x - (nbK - mid/2); xgb = Q -> x+(nbK - mid/2);
176               if (xr>=0 && xr < TCV && rgb >=0 && xgb < TCV)
177               {
178                    tmp = Z + Q ->y + TCV + xr; tmp->r = 220;
179                    tmp = Z + Q ->y + TCV + xgb; tmp->g = 220; tmp->b =120;
180               }
181          }
182          free (Tk->liste);
183     }
184     
185     FILE * loir;
186     loir = fopen ("epinfo.ppm","wt")
187     if (loir == 0) {printf ("Affichage impossible\n"); }
188     fprintf (loir, "P3\n#ep info\n%d %d\n255\n", TCV, TCV);
189     for (k=TCV*TCV, tmp = z; k !=0; k--, tmp++)
190     {
191          fprintf (loir, "%d %d %d\n", tmp ->r, tmp->g, tmp->b);
192     }
193     fclose (loir);
194     free(Z);
195 }
196 // fin du fichier fctepinfo089.c
197
Hors ligneWebmanager2011 Le 05/05/2012 à 13:18 Profil de Webmanager2011 Configuration de Webmanager2011

Tutoriaux plus exercices courigés en language c/c++

jetez un coup d'oeil ici

Hors ligneRaef_17 Le 22/06/2012 à 15:08 Profil de Raef_17 Configuration de Raef_17

Bonjour

J'ai trouvee quelque part un site contient des cours c et c++ et d'autre avec exercices j'espere qu'il va vous aider .

http://livres-et-cours.com/Telechargement-de-cours/informatique/programmation

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels