0% ont trouvé ce document utile (0 vote)
19 vues4 pages

DVR 2

Le document présente un devoir de synthèse en programmation structurée, axé sur la création d'un programme simulant un moteur de jeu vidéo. Les étudiants doivent compléter des fonctions pour gérer des cibles à bombarder, en utilisant des structures et des algorithmes de recherche et d'ajout. Les consignes incluent des détails sur la déclaration de types, la gestion de la mémoire et l'utilisation de valeurs aléatoires.

Transféré par

selmighazi03
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
19 vues4 pages

DVR 2

Le document présente un devoir de synthèse en programmation structurée, axé sur la création d'un programme simulant un moteur de jeu vidéo. Les étudiants doivent compléter des fonctions pour gérer des cibles à bombarder, en utilisant des structures et des algorithmes de recherche et d'ajout. Les consignes incluent des détails sur la déclaration de types, la gestion de la mémoire et l'utilisation de valeurs aléatoires.

Transféré par

selmighazi03
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Coller ici votre

Code à barres

DEVOIR DE SYNTHESE
PECUE : Programmation Structurée II Classe(s) : L1GE-xx
a
Enseignant(s) : K.HAOUET, F.ANNABI, M.BEN KHADIJA Documents autorisés : Non
r
t Date : 08/06/2023 Durée : 01heure30 02 Double Feuilles Calculatrice autorisée : Non
(Première-Suite)
i
e I : Problème (15 points)
/*--------------------------------------------------------------------------------------------------------------------------------------------------------
Le Programme suivant simule le moteur d'un jeu vidéo dont le but est de bombarder des cibles à des positions bien déterminés
comprise entre 0 et MAX_POS, crées aléatoirement par le programme et ayant des valeurs comprises entre deux entiers
MIN_VAL et MAX_VAL.
On se propose d'écrire essentiellement les deux fonctions :
- ajouterCible
- bombarderCible
Le programme principal servira à tester ces deux fonctions d'une façon aléatoire : l'ordinateur va jouer contre lui-même.
Lire attentivement les commentaires du programme suivant et compléter le code manquent pour remplir ce cahier
des charges
---------------------------------------------------------------------------------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
/* Question : Déclarer à l'aide de typedef un nouveau Type : Cible ; Cible est une structure caractérisée par :
- Un libellé lib : une chaine de caractères dynamique
- Une position pos : une valeur entière comprise entre MIN_POS , MAX_POS
- Une valeur val : une valeur entière comprise entre MIN_VAL , MAX_VAL
*/
………………………………………………………………. {
………………………………………….; // libellé une chaine de caractères dynamique
………………………………………….; // position valeur comprise entre 0 et 100
………………………………………….; // valeur comprise entre -100 et 100
} …………………………………………………….....;

Nom, prénom et signature


de l’enseignant correcteur
// Déclaration des fonctions :
// On se propose d’implémenter les fonctions suivantes :

// randVal : retourne une valeur entière aléatoire comprise entre i et j deux entiers
int randVal(int i,int j);
// ajouterCible : permet de d'ajouter à une liste de cibles une cible : de position :p, de valeur : v, de libellé : libCible, met à jour
// le nombre total de cibles insérées.
// ajouterCible retourne 1 : si la position de la cible n'existe pas et la cible a été insérée à la liste des cible; sinon : elle retourne
// 0 (Une cible existe déjà dans cette position)
int ajouterCible(Cible* list, int p, int v, char* libCible, int *N);

/* bombarderCible : permet de supprimer une cible de position p, de la liste des cibles, met à jour le nombre de total des
cibles, et cumule le nombre de total des Points en ajoutant à ce compteur la valeur val de la cible bombardée.
Retourne la valeur -1 : si la cible n’a pas été supprimée ; retourne l’indice dans le tableau de la cible supprimée.*/
int bombarderCible(Cible* list, int p, int* N, int* Points);

// recherche : fonction qui permet de rechercher l'index d'une cible dans // la liste des cibles, // paramètres :
// p : position de la cible
// N : le nombre de cibles en cours de la liste des cibles
// valeur de retour : indice dans la liste des Cibles si l'élément existe // sinon : la fonction retourne un indice négatif : -1
int recherche(Cible*, int p, int N);
// Constante entière non signé désignant le nombre MAX_CIBLE servira à déclarer la liste des cibles sous forme d'un tableau
// dont les éléments sont de type Cible ;
#define MAX_CIBLE 50;
// Constante entière non signé désignant le nombre maximum de points qu'on peut obtenir pendant le jeu
#define MAX_POINTS 2000;
// Constante entière non signé désignant la valeur maximale d'une Cible
#define MAX_VAL 500;
// Constante entière désignant la valeur minimale d'une Cible
#define MIN_VAL -50;
// Constante entière non signé désignant la position maximale d'une Cible
#define MAX_POS = 100;
// Constante entière non signé désignant la position minimale d'une Cible
#define MIN_POS = 0;
int main()
{

// Déclarer une variable list de type : Tableau de Cibles // Taille du Tableau : MAX_CIBLE
………………………………………………………………………;
// Déclarer une variable libCible de type tableau de caractères // Taille du tableau de caractères : 80
………………………………………………………………………;
// Déclarer une variable N entière désignant le nombre de Cibles en cours // Initialiser N à zéro
………………………………………………………………………; // Nombre Total de cibles
// Déclarer une variable Points entière désignant le score des points en cours obtenus par le joueur ; variable à
initialiser
………………………………………………………………………;// Total des valeurs des cibles bombardés
int car;
// Déclration de deux variables entières pos,val : non initialisées

………………………………………………………………………;
// Structure time_t pour initialiser le vecteur aléatoire
time_t t;
// appel de srand() pour initialiser le vecteur aléatoire
srand((unsigned) time(&t));
printf("Début du Jeu\n");
do{
// affecter à la variable pos le résultat de retour de la fonction randVal pour obtenir une valeur aléatoire
// entre 0 et MAX_POS

………………………………………………………………………;

// affecter à la variable val le résultat de retour de la fonction randVal pour obtenir une valeur aléatoire entre
// MIN_VAL et MAX_VAL

………………………………………………………………………;

// Instruction qui permet de copier dans la chaine libCible un nom aléatoire de la forme "Cible@%d$%d"
sprintf(libCible,"Cible@%d$%d",pos,val);
printf("%s\n",libCible);
// Appeler la fonction ajouterCible à la position : pos et de valeur : val ;
if (………………………………………………………………………………………………………………………………………………)
………………..………………..…………………..……..……………………..…………….………………………….……...;
else
………………..………………..…………………..……..……………………..…………….………………………….……...;
// affecter à la variable pos le résultat de retour de la fonction randVal pour obtenir une valeur aléatoire
// entre 0 et MAX_POS
………………………………………………………………………;
// Appeler la fonction bombarder : essayer de bombarder la cible à la position pos
if (……………………………………………………………………………………………………………………………………………….)
printf("Cible éliminée");
else
…………………………………………………………………………………………………………………………………;
printf("Cibles : %d , Points %d\n", N, Points);
printf("Tapez une touche pour continuer ou Ctr-Z pour quittez!\n");
}while((car=getchar())!= EOF && Points < MAX_POINTS && N < MAX_CIBLE);
// Si on sort de cette boucle : 03 cas de figure peuvent se présenter
// on est gagnant si les Points cumulés sont supérieur MAX_POINTS
// on est perdant si N est égal MAX_CIBLE
// à défaut l'utilisateur a tapé Ctr-Z pour sortir du programme
if (…………………………………………………………………………………………………………….)
printf("Vous avez Perdu\n");
else
{
if(……………………………………………………………………………………………….)
printf("Vous Avez Gagné\n");
else
printf("Vous allez quittez le jeu!!\n"); // voir Partie II du sujet - fichiers
}
return 0;
}
// rechercher une cible par position ;
int recherche(Cible *list, int p , int N)
{
for(int i=0; i< N ; i++)
if(………………………………………………………………)
return ………………………………;
return -1;
}
// Ajouter une cible à la position p, de valeur v et dont le libellé est : lib
int ajouterCible(Cible *list, int p , int v ,char *lib, int *N)
{
// utiliser la fonction recherche
if (…………………………………………………………………………………………………………………………………………………………….)
{
……………………………………………… = (char*) malloc(………………………………………………………………..);
if(…………………………………………………….!=NULL)
{
strcpy(…………………………………………………...,lib);
…………………………………………………………………………………….;
…………………………………………………………………………………….;
…………………………………………………………………………………….;
return ………………………………..;
}
}
return 0;
}
// bombarder une cible à la position p
int bombarderCible(Cible*list, int pos, int *N, int *Points)
{
int idx;
idx=recherche(………………………………, …………………………………, ……………………….);
if(………………………………………………………………………………)
{
……………………………………………………………………………………………………………………………….;
// Cible existe
…………………………………………………………………………………………………………………………………….;
for(………………………………………………………………………………………………………………………………){
………………………………………………………………………………………………………………………….;
}
…………………………………………………………………………;
return ………………………………………;
}
// Cible inexistante
return …………………………………;
}
int randVal(int i, int j){ // condition : i < j
// int rand(void) : retourne un entier entre 0 et MAX_RAND (Entier MAX Positif)
// int abs (int x); // retourne la valeur absolue d’un entier
return ( i + rand()%(abs(j-i)+1));
}

Vous aimerez peut-être aussi