Вы находитесь на странице: 1из 5

UniversitdesAntillesetdelaGuyane

DpartementScientifiqueInterfacultaire
CorrigExamenINFO1
Informatique
Lecorrigproposeunedesrponsespossiblesauxproblmesposs.Lebutdel'examenn'tantpas
de traiter le problme d'une manire prcise (sauf si indications dans ce sens), les solutions
diffrentesmaisjustesaurontgalementtretenuescommerponsescorrectes.Enparticulier,les
algorithmesdemandspourlejeudelaviepouvaienttrecritenlangage'C'oualgorithmique.

Sommedesentierspairs

Exercice1*
crireunefonctionquiretournelasommedesentierspairsinfrieursougauxunentierndonn.
intsommePairs(intn){
inti,somme=0;
for(i=0;i<=n;i++){
if(i%2==0)somme+=i;
}
returnsomme;
}

Lejeudelavie.
NB:Chaqueexercicepeuttretraitindpendamment.
Ondisposed'unchiquier,danslequellescasespeuventprendrelesvaleurs0ou1.
chaquetape,oncalculelanouvellevaleurdechacunedescasesenfonctiondesvaleursdescases
voisines.Lescasesvoisinesd'unecasetantcellessetrouvantdepartetd'autredecettecasesurla
mmeligneousurlammecolonne(pasendiagonale).
Lavaleurd'unecasepasse0siellepossde0ou4voisins1(ellemeurtisoleoutouffe).
Lavaleurd'unecasepasse1siellepossde2ou3voisins1.
Ellenechangepasdanslesautrescas.
Pourviterlescasparticuliersdescasessetrouvantenpriphriedel'chiquier,onconsidreraque
cederniereststockdansuntableaucomprenantunbordurerempliedezros(0):
0

Dans l'chiquier reprsent ici (avec sa


bordure),lacasel'intersectiondela2meligne
etdela3mecolonne3voisins1.
Leprogrammeprincipalvousestdonnetestle
suivant:

voidmain()
{
intn=25;
intM[n][n];/*ondclareuntableaucarr*/
inti,NbEtapes;
configInit(M);
printf("Entrerlenombred'etapes:");
scanf("%d",&NbEtapes);
for(i=1;i<=NbEtapes;i++)
{
changeEtat(M);
imprime(M);
}
}

Exercice2*
Onsouhaitepouvoirvisualiserl'volutiondujeu.crivezlaprocdure imprime quiprenden
paramtreuntableaustockantunchiquieretaffichecedernierl'cran.
voidimprime(intM[n][n])
{
inti,j;
for(i=1;i<n1;i++)
{
printf("\n");
for(j=1;j<n1;j++)printf("%1d",M[i][j]);
}
printf("\n");
}

Exercice3*
Onsouhaitepouvoircalculerpourunecasedel'chiquierlenombredevoisins1afindetesterles
diffrentscas.crivezl'algorithmepermettantd'obtenircenombre.
intnbVoisins(intM[n][n],intligne,intcolonne){
return(M[i1][j]+M[i+1][j]+M[i][j1]+M[i][j+1]);
}

Exercice4**
OndisposedunefonctionbinRandomquiretourneauhasardlavaleur0oulavaleur1.Onsouhaite
initialiserl'chiquieravecunevaleurauhasardpourchacunedescases.crivezlaprocdure
configInitquipermetd'initialiserletableau,c'estdirenonseulementinitialiserl'chiquier
maisaussilabordure.
voidconfigInit(intM[n][n])
{
inti,j;
/*Misea0descontours*/
for(i=0;i<n;i++)
{

M[0][i]=0;M[n1][i]=0;
M[i][0]=0;M[i][n1]=0;

}
/*Acquisition*/
//printf("Entrerlaconfigurationinitiale:\n");
for(i=1;i<n1;i++)
for(j=1;j<n1;j++)
M[i][j]=rand()>(RAND_MAX/2.0)?1:0;
//scanf("%d",&M[i][j]);
}

Exercice5**
Enutilisantlesfonctionsetprocduresprcdentes,crivezlafonctionestVivantequiretournela
valeurquedevraprendreunecasel'tapesuivante.
intestVivante(intM[n][n],intligne,intcolonne){
NbVois=nbVoisins(M,ligne,colonne);
if((NbVois==4)||(NbVois==0))
return0;
else
if(NbVois==2)
return1;
elsereturnM[ligne][colonne];
}

Exercice6***
Compltezlaprocduresuivantequipermetdefairevoluerl'ensembledel'chiquierd'unetape
versuneautre.
voidchangeEtat(intM[n][n])
{
inti,j,NbVois;
intMaux[n][n];
for(i=1;i<n1;i++)
for(j=1;j<n1;j++)
{
Maux[i][j]=estVivante(M,i,j);
}
/*RecopiedeMAuxdansM*/
for(i=1;i<n1;i++)
for(j=1;j<n1;j++)
M[i][j]=MAux[i][j];
}

ProgrammationenC

Exercice7*

DansleprogrammesCsuivant,donnezleserreursetlescorrectionseffectuer.*
intaddition(inta,intb);
{
inta,b,c;
c=a+b;
returnc;
}

Exercice8**
Queraliselesprogrammessuivant:**
1)

for(i=0;i<10;i++);
printf("helloworld!\n");

Boucle10foispuisaffichehelloworld!l'cran.

2)

for(i=0,i<10,i++)
printf("helloworld!\n");

Erreurlacompilationcausedesvirgulesdansl'instructionfor.

Exercice9***
QueraliseleprogrammeCsuivant(rpondezauxquestionssuivantes).***

Quefaitlafonctiont?

Lafonctiontcomparedeuxentiers,retourne0silepremierestinfrieurau
second,retrancheleseconddupremieretretourne1sinon.

LavariablecontestdclareenCcommeunint,maisquelestrellementsontype.

Lavariablecontestenfaitunevariableboolennepuisqu'elleestutiliseen
tantquetelledansl'instructionfor.

Quelrelationlielesvariablesi,a,betcchaquepassagedanslabouclefor.

Larelationquireliei,a,betcestc=b*(i+1)+a.

Completezl'instructionprintfenfinduprogrammeprincipal(main).

printf("Laquotientdeladivisionde%dpar%dest%detleresteest%d\n"
,b*i+a,b,i,a);
inti,a,b,cont=1;
intt(int*a,intb){
if(*a<b)return0;
*a=*ab;
return1
}
main(){

inti,a,b,c,cont=1;
printf("Entrezunevaleurpoura\n");
scanf("%d",&a);
c=a;
printf("Entrezunevaleurpourb\n");
scanf("%d",&b);
for(i=1;cont;i++)cont=t(&a,b);
printf("...\n",...,...,...,...);
}

Parcoursenaccordon
Exercice10****
crireunefonctionquiafficheunparcoursenaccordond'untableaudeuxdimensions.Plus
prcisment,onparcourtlapremirelignedegauchedroitepuislasecondededroitegaucheet
ainsidesuiteenalternantlesensdeparcoursdeslignes.
Exemple:
Pourletableausuivant,

0123
4567
891011
12131415
16171819

Ondoitobtenirl'affichagesuivant:

0,1,2,3,7,6,5,4,8,9,10,11,15,14,13,12,16,17,18,19
voidaccordeon(tab[m][n]tableau,intm,intn){
for(i=0;i<m;i++){
if(i%2==0){
debut=0;
pas=1;
fin=n;
}else{
debut=n1;
pas=1;
fin=1;
}
while(debut!=fin){
printf("\t%i",tableau[i][j]);
debut+=pas;
}
printf("\n");
}
}

Вам также может понравиться