• Aucun résultat trouvé

Solutionnaire sur les exercices traitant des techniques de programmation et des TDA de type liste GPA665 École de technologie supérieure

N/A
N/A
Protected

Academic year: 2022

Partager "Solutionnaire sur les exercices traitant des techniques de programmation et des TDA de type liste GPA665 École de technologie supérieure"

Copied!
6
0
0

Texte intégral

(1)

École de technologie supérieure

Génie de la production automatisée

GPA665

Solutionnaire sur les exercices traitant des techniques de

programmation et des TDA de type liste

(2)

1. Techniques de programmation, boucles et tableaux

1)

Est-ce que le code compile et s’exécute sans accès mémoire incorrecte?

Oui

2)

Quelle est la sortie de la fonction?

15.000000 3.000000 1.414214

3) À quoi correspondent chacune des trois parties identifiées?

1. Initialisation d’un tableau de dimension 5 par les valeurs suivantes : 4 : 3 : 2 : 1 : 0 2. On fait des calculs sur les données du tableau Data et on met les résultats dans les

cases 1 et 2 du tableau Result (la somme dans la case 1 et la moyenne dans la case 2).

3. On calcule l’écart type des données contenues dans le tableau Data et on la met dans la troisième case du tableau Result.

2. Techniques de programmation, boucles, tableaux et fonctions

void ComputeBasicStat(float Data[], int NbData,

float *Min, float *Max,

float *Average, float *StD) {

// Déclaration des variables locales int i;

// Identification des valeurs min et max

*Min = *Max = Data[0];

for (i = 1; i < NbData; i++) { if (Data[i] < *Min) { *Min = Data[i];

}

if (Data[i] > *Max) { *Max = Data[i];

} }

// Calcule de la moyenne *Average = 0.0;

for (i = 0; i < NbData; i++) { *Average += Data[i];

}

*Average /= NbData;

// Calcule de l'écart type *StD = 0.0;

for (i = 0; i < NbData; i++) {

*StD += (float)pow(Data[i] - *Average, 2);

}

*StD /= NbData;

*StD = (float)sqrt(*StD);

}

(3)

3. Construction logique, conception, structure, fonctions et TDA

1)

Veuillez déclarer tous les types nécessaires à votre TDA.

// Structure décrivant les sommets du polygone typedef struct

{

double X, Y;

} SPoint2D;

// Structure décrivant les constituants du polygone typedef struct

{

char PolygonName[26];

SPoint2D *Outline;

int N;

double Perimeter;

} SPolygon;

2) Veuillez définir une fonction permettant d’initialiser votre TDA. N’oubliez pas que la

fonction d’initialisation (ou de création) est une fonction permettant de démarrer à vide (sans aucun élément) votre TDA afin qu’elle soit cohérente avec sa définition dès sa création.

/*****************************************************

Fonction de création de la structure d'un polygone.

Cette fonction initialise à vide la structure d'un polygone.

---.

Intrants : - Polygon : Le polygone à détruire Extrants : - Retourne 1 si la fonction réussie sinon 0

*****************************************************/

int CreatePolygon(SPolygon *Polygon) {

if (Polygon != NULL) {

strcpy(Polygon->PolygonName, "");

Polygon->Outline = NULL;

Polygon->N = 0;

Polygon->Perimeter = 0.0;

return 1;

} else { return 0;

} }

3)

Veuillez définir, si nécessaire, une fonction permettant de détruire (ou disposer) de votre TDA. Cette fonction sert principalement une seule fois, à la fin de l’utilisation du TDA.

/*****************************************************

Fonction de destruction d'un polygone. Libère toute la mémoire associée à un polygone.

---.

Intrants : - Polygon : Le polygone à détruire Extrants : - Retourne 1 si la fonction réussie sinon 0

*****************************************************/

int DestroyPolygon(SPolygon *Polygon) {

if (Polygon != NULL) {

if (Polygon->Outline != NULL) { free(Polygon->Outline);

}

strcpy(Polygon->PolygonName, "");

Polygon->Outline = NULL;

Polygon->N = 0;

(4)

Polygon->Perimeter = 0.0;

return 1;

} else { return 0;

} }

4)

Veuillez faire une fonction de lecture du fichier prescrit.

/*****************************************************

Fonction de lecture d'un fichier décrivant un polygone

---.

Intrants : - FileName : Nom du fichier d'entrée - Polygon : Pointeur vers la structure qui

contiendra la définition du polygone.

Extrants : - Le nombre de sommets lus.

Retourne -1 si la lecture a échouée

*****************************************************/

int OpenPolygon(char FileName[], SPolygon *Polygon) {

FILE *FileIn;

int i;

// Ouverture du fichier

if (FileIn = fopen(FileName, "rt")) {

// Lecture du nom et du nombre de sommets

fgets(Polygon->PolygonName, POLYGON_NAME_SIZE, FileIn);

fscanf(FileIn, "%d\n", &Polygon->N);

// Allocation dynamique du tableau en fonction de la taille if (Polygon->Outline =

(SPoint2D*) malloc(sizeof(SPoint2D) * Polygon->N)) { Polygon->Perimeter = 0.0;

if (Polygon->N > 0) {

// Lecture de tous les sommets et mise à jour du périmètre

fscanf(FileIn, "%lf %lf\n",

&(Polygon->Outline[0].X), &(Polygon->Outline[0].Y));

for (i = 1; i < Polygon->N; i++) { fscanf(FileIn, "%lf %lf\n",

&(Polygon->Outline[i].X), &(Polygon->Outline[i].Y));

Polygon->Perimeter +=

SideLength( &(Polygon->Outline[i-1]), &(Polygon->Outline[i]));

}

Polygon->Perimeter +=

SideLength( &(Polygon->Outline[0]), &(Polygon->Outline[Polygon->N-1]));

} }

// Fermeture du fichier fclose(FileIn);

return Polygon->N;

// Fichier manquant } else {

strcpy(Polygon->PolygonName, "");

Polygon->N = 0;

Polygon->Perimeter = 0.0;

return -1;

} }

(5)

/*****************************************************

Fonction calculant la longueur d'un segment en deux sommets.

---.

Intrants : - P1 & P2 : Les deux points représentant les coordonnées des sommets.

Extrants : - La longueur entre les deux sommets (calcule de distance euclidienne).

*****************************************************/

double SideLength(SPoint2D *P1, SPoint2D *P2) {

return sqrt(pow(P2->X - P1->X, 2) + pow(P2->Y - P1->Y, 2));

}

5) Veuillez faire une fonction d’écriture du fichier prescrit.

/*****************************************************

Fonction d'écriture d'un fichier décrivant un polygone

---.

Intrants : - FileName : Nom du fichier de sortie - Polygon : Pointeur vers la structure

contenant la définition du polygone.

Extrants : - Le nombre de sommets lus.

Retourne -1 si l'écriture a échouée

*****************************************************/

int SavePolygon(char FileName[], SPolygon *Polygon) {

FILE *FileOut;

int i;

// Ouverture du fichier pour l'écriture if (FileOut = fopen(FileName, "wt")) {

// Écriture du nom et du nombre de sommets fprintf(FileOut, "%s\n", Polygon->PolygonName);

fprintf(FileOut, "%d\n", Polygon->N);

// Écriture de tous les sommets for (i = 0; i < Polygon->N; i++) {

fprintf(FileOut, "%lf %lf\n", Polygon->Outline[i].X, Polygon->Outline[i].Y);

}

// Fermeture du fichier fclose(FileOut);

return Polygon->N;

// Fichier manquant } else {

return -1;

} }

4. Techniques de programmation, récursivité, paramètres passés par valeur et par référence

Quelle est la sortie du programme suivant?

256

(6)

5. Récursivité

void DessineFigure(int X, int Y, int R) {

if (R > 1) {

DrawCircle(X, Y, R);

if (R/2 > 1) { // Cette condition est facultative DessineFigure(X + 3/2*R, Y, R/2);

DessineFigure(X - 3/2*R, Y, R/2);

DessineFigure(X, Y + 3/2*R, R/2);

DessineFigure(X, Y - 3/2*R, R/2);

} } }

6. Récursivité

1 23

44

65

2

81

71 66

76 18

8 3

13 60

50 45

55

39

29 24

34

43 41

42

40 28 26

27

25 38

36 37

35

33 31

32

30

85 83

84

82 70 68

69

67 80

78 79

77

75 73

74

72 64 62

63

61 49 47

48 46 59

57 58

56

54 52

53 51

22 20

21

19 7 5

6

4 17

15 16

14

12 10

11

9

X

Y

Références

Documents relatifs

N’oubliez pas que la fonction d’initialisation (ou de création) est une fonction permettant de démarrer à vide (sans aucun élément) votre TDA afin qu’elle soit cohérente avec

On s'intéresse aux deux primitives suivantes ( i est donné) : ajouter un nouvel élément à l'indice i du tableau supprimer l'élément d'indice i du tableau. Proposez une

paquet est de type liste/tableau, i,j,k et temp sont de type entier.. Cet algorithme mélange le paquet

Sur la partie qui n’est plus recouverte par ces résines, on peut alors réali- ser des traitements chimiques nécessaires pour parvenir à ces assemblages extrême- ment complexes

[r]

[r]

• Le troisième quartile Q 3 est la plus petite valeur pour laquelle on atteint ou dépasse 75% ; Exemple Imaginons que l’on ait le tableau statistique suivant :.. Valeurs 3 5 6 8 11

Définition Le premier quartile est la plus petite valeur du caractère notée Q 1 qui fait atteindre ou dépasser le quart des effectifs cummulés croissants.. Le troisième quartile est