From 925fa6086a229df9445d1a17d50ddb6eeed96b12 Mon Sep 17 00:00:00 2001 From: "antoine.perederii" Date: Wed, 7 Dec 2022 12:03:46 +0100 Subject: [PATCH] ajout du tp 13 d'algo --- Algo/tp/tp13/exe | Bin 0 -> 17520 bytes Algo/tp/tp13/joresult.don | 7 + Algo/tp/tp13/paysalpha.don | 9 ++ Algo/tp/tp13/resdujour.don | 5 + Algo/tp/tp13/testtp13.c | 7 + Algo/tp/tp13/tp13.c | 267 +++++++++++++++++++++++++++++++++++++ Algo/tp/tp13/tp13.h | 23 ++++ 7 files changed, 318 insertions(+) create mode 100755 Algo/tp/tp13/exe create mode 100644 Algo/tp/tp13/joresult.don create mode 100644 Algo/tp/tp13/paysalpha.don create mode 100644 Algo/tp/tp13/resdujour.don create mode 100644 Algo/tp/tp13/testtp13.c create mode 100644 Algo/tp/tp13/tp13.c create mode 100644 Algo/tp/tp13/tp13.h diff --git a/Algo/tp/tp13/exe b/Algo/tp/tp13/exe new file mode 100755 index 0000000000000000000000000000000000000000..2085f96604d43183aa52732ffcaa19a80dbd1125 GIT binary patch literal 17520 zcmeHP4UkmTmA*XeNVARDJE3*`?-7>PH;_kRXd%ttv zJ+EIk-NtNfZPixI)t++b2bMJfiy?6PJuWNOk!y&jh#h(ho#v4tFM={2)Q567> zSRu~E-#-yw5$6D(B55YyV*+r^(pOgw>lNJzNP7DezY@+>atzr+f}~fgj7&2*429|k z=}je;!Yg6-d8Qsi=3DJ)CSO#*VdV@%yB@_R-(u?J+sff?)$ctDvL2zNH=*<AW&Jy;5Y-3gOY|)Gph*@CS?_x2k)L0*aM(Af_G-nY zN%_xEbyqCzk8D|f#p3=@OMfJm9&8z0vAkvZ74Br*y;SylHXNaxTC=W4{A5u)e24h) zBe^Rce*VGLufIHV<(WO?H~B#JNQMf@bNC4|-|W|SNrZ<*91Xt`m4q69=72t{3hzgt zX;tXWpjDHiI^iU1@<{I?XHRxZhL4Oi-4Zq5AEeO^6MRBi2r|DXaegJe0 zzsj->gawsE!h7Qb;h6CIBguI1s;m6TU?A2j2GXe{{R#F35~4R8?=1=Rni9Ri{&+Gh zqJjSYcu@2XBqFgCNd*T3{@zF|&>z_m7Rgj17##o=Nf`7eQ-MUv9}Pref^f>gi@ON(P_J_iW@YYB&6;5pIUezCug*OJa^oL<>Ycw8H*8HYuRY7!) zveSvb_Wy`lXXUU1^=**id3I4Gf)&jvh7>J*ab!Aad>=R!UXOVFIC8#8A6M%Q(}xv( z&|~tM&iFAJa1@#|JeLR`wb9j*Ok|O_(a)6>^Ut`A-e99o*y!9hVmEnAA+k-m#YOX& zHKNn}=F;pjYeeTYj3})h`YQy{<@G^gLagwZ6{6eMIggFbu^>s^Mn|Bnvff6YVNr#+ z$wr@Pqkqdr#{gQT&qjAy)XBpVnbPHD4Bk`vQr(3VWu*9DvoNl=aLlXa6!s#}wFd*@V38!1H!nY*;6T<11 ztFT_;KO~%PwF(}I&jQ{%3|y8a?{^wUZ`F^vmV339booACqDx**-x%*K1lct7-?NM?%J;#=_mA@Z$!@x&Nbmc zlL__Ndah?g&-$L|G(PEs-??S);2u;r4oN%t#?OkyY|m?1-!aFtS>JCRM-1O6r1$ID zZfI>jtQ+;ZaTC(1`v}lux}i4$Z_4(J8tXMvaP!13q&L}gYqtCHY)^C6cZt{dz-t^f zjvCMExpX4}cqbY)TYTlyVsV)L|L)kmG8}j9Gtzqx`NpVkaPd}hG1qo8K>ifub@D26 z*QiL(0r@)1*7v~MPZ?3@LbjsEPw4PWH{L-1^1ngX3g?5K^^L9c?M*L$>Q!X%a6hE4JT|>NH`D}N}Tkiu)8>Ij9%gx1Dao3VWXFv3Yifi}-cZ?x zW4ajzT6v`SaXpKqLE;!QbmJCO(TnU&O}eob`EyHC)}tBiTK;)*Jo8*Dbqgj}`d+*9 z(PwC$=lgz-EGanwqZ)k38|f2=d=oS}hkR!+VB+N3tZ$-hMDofN1NnT0I5T-P!8uH0 zWv0g_w6JUB?sFhz_$D$ihuTWti8~*MMKhySi$>3A)_0&u%ie~581d}rWHZhbM^eMWL#p)_8H zG0#L#I5KygaD3;N!^6t|%vh`H0|x(?Zgd|(*vKWA$mAX9ci{(w^}yx?=Kiw>-kaw* za&*G*ozD7BpVckd1M(K8UeJwy$7s941 zC#O?&1YW@#jKoC4{Xv=MWZQK5wArs4^s;rs=-Goc<1(y`n1O!@kberck@9)08F_Qf zn8Pb)ejRw`n(=*H(R6DvUy=?KMBPNvamML}xXDgWF2)N@#WBu&P^s^MP5W|g{ zicK{Y=Vp6;`#FkpYbt73U_VDuEBs1!bni;v9=YNk!eu`H)PKqa1|dF_|2gXR6?bn% zNURn29a1u|;#NwOt+)@szIkCu+Zwr<8o^4&D{gfYU*sB>@$I#(xSS++PyBI7f~1h0 zcfc=NabJ=vwn_Vk|DY8YdBZENZ2>@Dzlr-MnB#kT-y&U)*7%1Z<05;wv0tRdRi*9S_=1B ztP7>BToZB49QAOm_U5c*D*nj18mLHSC-YG~3P2KSg6= z$jj8VvJY}p23snl`v8WllJ-94@X0B|CmrfuK;Bn-Z|uso6*VEen>vj*ygi-9$KH)z z<4lj9YZ(XmhOR}QQaJJ-eTY6D_|%!2v*fLYd7{hsu**2rVZ7@t&i{@g zCKd+G9{6IZM0khRAJ$^=DD_WzoCpW|!iiwt!N;U*Qmm(b#NabJmfm*ov9fl8@mLBk ztI?3Xfy;u_hGUL%CB0Lp*K7Mu6^o;Qeg9r8*5mRs2>1l>&Ev(Q20RMr0sK8+2(aaY zVsR(nt5~x30p9pgvG@|;%Yb8mtFYkC#IWW7F9!_cYS9JQflJZ=-~cXX!+^AJ+7Eab zkYAS3dvq#}9UFvWu+cGR=Ct}@$FxSG)3+ES@bzmXph|UlA!r{g<=-zBM@ZJyxZ2gU zw&C2{>xaa(7q7hR>z6DbGU?+ni?|7P?eEh__nY`FLoDQbKd-Ctp1M`%o%3gK2y_j< zJMmix{{4W0`M!*^Zl@_jHum860A%R8V#!2HHby}HYw#aM+$_GHaXNQ9q>u*k3H%ly z=DPqb8EWT_Qadzm8OYE(SWBkv&!qtQ(G32ZpTpO|UySiwTc+=`^!vcS8T?~q{9ju> z-V6Tu82{g4JgxSrAFtL~HvS$mFCiB$2ef3Im&%UPcu@`=!=?TsJD+U)n;8pgn#Srh z`1_Dc^eusCcQrmx*Xe4y-|2H{xhXzZ^L~)i=609X z?rMU3yQ^Nlr@jWhj=&BzH(4elFd2c#2uwy`G6Itkn2f+=1pap;z~A@r_k4WMCGS_! zl=Tgo`p6FNrex{(iV450aQ<$PzIUa<_v{y&sNnAh>7JJg^FRKq7?(J`2}Z%wAz2Pj zF(JM1rP8YS^kRp~TPDEw=4NS9@B#%HC^aEGCWUT;snn~E@;(JmfMvNz!TqXXrcWrx z*zXY~hgSl!aQoOY$^L*SMe$Tk;)j(!o@z;)6tnKcQw%;oVCOpVWq0EOJB8)HWPN{Z=Q{B;fY*<5`URp|o;t;ag1&L^E(2XFiCMMxB>n7syI$I{#H`AjQ(pa{mJcoUHdhup2zCFsyk#2-i`0^9vz zyaU)SdJ}s>$-Mtm;buet8ega^l$XGclpSwJdYGirlr?> z(8~_cpqF0EgcJ0l;tw20QYWX(gHe`|D@8Pt3Z4GabZ;g_8kz>9$2@7*X*!9v;sxswd0B@GI1`;7UB}FZmr=-+5tTIt`Vyld% z`ix^%^2}EmukzHDKa`C7`vS2Loyh9E4h@AOF@HK4#u$~tOCzn$h*enIl1wV+C=v8`eAKw5>g{cxJax)R685@BaTp#edhsc{Tde>%A) zfqn_$PHvClH5_0nVZuJH;jmjcF(BNrcq;7P8cVykq$417 z6YkLV80?ual`uJY4Vc7>yE4QNULxF&S9ROLkhOvSlyJ*Xx>0p+jRQ@E2l1CC9faaC zo7~|(HO=}$Fv6IrYR)%PgX?G^5RC-Ud^|;#;T&b98)GBfnDJ3eT@mCEe2J{S!mp??XfuWsXsC zD{8d2=Jt7?#c+X=WdB)?;kUu3y*lH(A7j|6^eg>WWU&JkiYe>!zK!9C66E$P`@d7^ zw<|f`-!bIp6{JtkC@S^ox=S(P=OuItB8!5gV=v^Zy%<33`kK;XIARw@y~4aa2X5CN zRRRpzUpB)y!=Hj-*XMs{fZ_GlgDBGix6k$-snF+rDnouw!}68=e@yA~_z6u(DtJ3N zXDjSCll~DE5@CJb_cDBt1r@Ap-`ww%^m%{GaEJ{n{mS-#0lEu6nnP50f5hkME9Dty z_&RhN@MC@6Z;!W-wNk#BSP5tSe+7ebkM((9&i`J)sEQxwC+qPz?uIUjus-kKk1Ylf zrP&15U)E>%9yoS=;ZdTkCLB;G1J+~s5g2xT-e(LbefG0bpYcynAzSSKkjLZ|bG4 bE~{X2yDUq${}m#Vb$q2MF|9(O0u}!abHO6$ literal 0 HcmV?d00001 diff --git a/Algo/tp/tp13/joresult.don b/Algo/tp/tp13/joresult.don new file mode 100644 index 0000000..6585b0a --- /dev/null +++ b/Algo/tp/tp13/joresult.don @@ -0,0 +1,7 @@ +Etats-Unis 16 20 14 +Chine___ 15 8 7 +Australie 9 8 8 +Japon___ 3 6 5 +Allemagne 7 10 15 +France__ 4 6 +Italie__ 5 3 2 diff --git a/Algo/tp/tp13/paysalpha.don b/Algo/tp/tp13/paysalpha.don new file mode 100644 index 0000000..bc009ca --- /dev/null +++ b/Algo/tp/tp13/paysalpha.don @@ -0,0 +1,9 @@ +Allemagne 7 10 16 33 +Australie 9 8 8 25 +Chine___ 17 9 7 33 +Cuba____ 1 1 0 2 +Etats-Unis 16 20 14 50 +France__ 5 7 0 12 +Italie__ 5 3 2 10 +Japon___ 3 6 5 14 +Zimbabwe 0 0 1 1 diff --git a/Algo/tp/tp13/resdujour.don b/Algo/tp/tp13/resdujour.don new file mode 100644 index 0000000..cf7e021 --- /dev/null +++ b/Algo/tp/tp13/resdujour.don @@ -0,0 +1,5 @@ +Chine___ 2 1 0 +Allemagne 0 0 1 +Cuba____ 1 1 0 +France__ 1 1 0 +Zimbabwe 0 0 1 diff --git a/Algo/tp/tp13/testtp13.c b/Algo/tp/tp13/testtp13.c new file mode 100644 index 0000000..400a40a --- /dev/null +++ b/Algo/tp/tp13/testtp13.c @@ -0,0 +1,7 @@ +#include "tp13.h" + +int main(void) +{ + global(); + return 0; +} \ No newline at end of file diff --git a/Algo/tp/tp13/tp13.c b/Algo/tp/tp13/tp13.c new file mode 100644 index 0000000..92d8afd --- /dev/null +++ b/Algo/tp/tp13/tp13.c @@ -0,0 +1,267 @@ +#include "tp13.h" + +Pays lirePays(FILE *flot) +{ + Pays p; + fscanf(flot, "%s %d %d %d", p.pays, &p.or, &p.ar, &p.br); + p.tot = p.or + p.ar + p.br; + return p; +} + +void afficherPays(Pays p) +{ + printf("%s\t%d\t%d\t%d\t%d\n", p.pays, p.or, p.ar, p.br, p.tot); +} + +int chargeResults(Pays *tpays[], int nbmax) +{ + Pays p; + int i=0; + FILE *flot; + flot=fopen("joresult.don","r"); + if(flot==NULL) + { + printf("Erreur d'ouverture du fichier"); + return -1; + } + p = lirePays(flot); + while(!feof(flot)) + { + if(i == nbmax) + { + printf("Erreur, tableau plein, trop de pays !!!\n"); + fclose(flot); + return -2; + } + tpays[i] = (Pays*)malloc(sizeof(Pays)); + if(tpays[i] == NULL) + { + printf("Erreur d'allocation mémoire"); + fclose(flot); + return -3; + } + *tpays[i] = p; + i++; + p = lirePays(flot); + } + fclose(flot); + return i; +} + +void afficheTab(Pays *tpays[], int nb) +{ + int i; + for(i=0; ipays, tpays[pge]->pays) > 0) + pge = i; + } + return pge; +} + +void echanger(Pays *tpays[], int i, int j) +{ + Pays *aux; + aux = tpays[i]; + tpays[i] = tpays[j]; + tpays[j] = aux; +} + +void triEchange(Pays *tpays[], int nb) +{ + int pge; + while(nb > 1) + { + pge = plusGrand(tpays, nb); + echanger(tpays, pge, nb-1); + nb--; + } +} + +int copie(Pays *tpays[], int i, int j, int n, Pays *tab2[]) +{ + int r, pas = 0; + for(r=i; r<1; r++) + { + tab2[pas] = tpays[r]; + pas++; + } +} + +void fusion(Pays *R[], int n, Pays *S[], int m, Pays *tpays[]) +{ + int i = 0, j = 0, k = 0; + while(i < n && j < m) + { + if(strcmp(R[i]->pays, S[i]->pays) < 0) + { + tpays[k] = R[i]; + i++; + k++; + } + else + { + tpays[k] = S[j]; + j++; + k++; + } + } + while(i < n) + { + tpays[k] = R[i]; + i++; + k++; + } + while(j < m) + { + tpays[k] = S[j]; + j++; + k++; + } +} + +void triFusion(Pays *tpays[], int nb) +{ + Pays **R, **S; + if(nb == 1) + return; + R = (Pays**)malloc(sizeof(Pays*)*nb/2); + S = (Pays**)malloc(sizeof(Pays*)*(nb-nb/2)); + if(R == NULL || S == NULL) + exit (1); + copie(tpays, 0, nb/2, R); + copie(tpays, nb/2, nb, S); + triFusion(R, nb/2); + triFusion(S, nb-nb/2); + fusion(R, nb/2, S, nb-nb/2, tpays); + free(R); + free(S); +} + +int recherche(Pays *tpays[], int n, char *pays, int *trouve) +{ + int inf=0, sup=n-1, m; + while(inf <= sup) + { + m = (inf+sup)/2; + if(strcmp(tpays[m]->pays, pays) == 0) + { + *trouve = 1; + return m; + } + else if(strcmp(pays, tpays[m]->pays) < 0) + sup = m-1; + else + inf = m+1; + } + *trouve = 0; + return m; +} + +int miseajour(Pays *tpays[], int nb, int nbmax) +{ + Pays p; + int trouve, pos, i; + FILE *flot; + flot=fopen("resdujour.don","r"); + if(flot==NULL) + { + printf("Erreur d'ouverture du fichier"); + return -1; + } + p = lirePays(flot); + while(!feof(flot)) + { + pos = recherche(tpays, nb, p.pays, &trouve); + if(trouve == 1) + { + tpays[pos]->or = tpays[pos]->or + p.or; + tpays[pos]->ar = tpays[pos]->ar + p.ar; + tpays[pos]->br = tpays[pos]->br + p.br; + tpays[pos]->tot = tpays[pos]->tot + p.tot; + } + else + { + if(nb == nbmax) + { + printf("Erreur, tableau plein, trop de pays !!!\n"); + fclose(flot); + return -2; + } + tpays[nb] = (Pays*)malloc(sizeof(Pays)); + if(tpays[nb] == NULL) + { + printf("Erreur d'allocation mémoire"); + fclose(flot); + return -4; + } + *tpays[nb] = p; + nb++; + } + p = lirePays(flot); + } + fclose(flot); + return nb; +} + +void sauvegarde(Pays *tpays[], int nb) +{ + FILE *flot; + int i; + flot=fopen("paysalpha.don","w"); + if(flot==NULL) + { + printf("Erreur d'ouverture du fichier"); + return; + } + triEchange(tpays, nb); + for(i=0; ipays, tpays[i]->or, tpays[i]->ar, tpays[i]->br, tpays[i]->tot); + } + fclose(flot); +} + +void global(void) +{ + Pays *tpays[50]; + int nb, trouve, pos; + char pays[20], rep; + nb = chargeResults(tpays, 50); + if(nb < 0) + return; + afficheTab(tpays, nb); + //triEchange(tpays, nb); + triFusion(tpays, nb); + printf("\n--------- tableau après tri ---------\n"); + afficheTab(tpays, nb); + printf("Voulez-vous modifier un pays ? (o/n) : "); + scanf("%c", &rep); + while(rep == 'o' || rep == 'O') + { + printf("Entrez le nom du pays recherché : "); + scanf("%s", pays); + pos = recherche(tpays, nb, pays, &trouve); + if(trouve == 1) + afficherPays(*tpays[pos]); + else + printf("Pays non trouvé\n"); + printf("Voulez-vous continuer ? (o/n) : "); + scanf("%*c%c", &rep); + } + nb = miseajour(tpays, nb, 50); + if(nb < 0) + return; + afficheTab(tpays, nb); + sauvegarde(tpays, nb); +} \ No newline at end of file diff --git a/Algo/tp/tp13/tp13.h b/Algo/tp/tp13/tp13.h new file mode 100644 index 0000000..6c96481 --- /dev/null +++ b/Algo/tp/tp13/tp13.h @@ -0,0 +1,23 @@ +#include +#include +#include + +typedef struct { + char pays[20]; + int or; + int ar; + int br; + int tot; +} Pays; + +Pays lirePays(FILE *flot); +void afficherPays(Pays p); +int chargeResults(Pays *tpays[], int nbmax); +void afficheTab(Pays *tpays[], int nb); +int plusGrand(Pays *tpays[], int nb); +void echanger(Pays *tpays[], int i, int j); +void triEchange(Pays *tpays[], int nb); +int recherche(Pays *tpays[], int n, char *pays, int *trouve); +int miseajour(Pays *tpays[], int nb, int nbmax); +void sauvegarde(Pays *tpays[], int nb); +void global(void);