algorithmique 1 tp 2

publicité
ALGORITHMIQUE 1
TP2
Pointeurs - Fonctions
Classe : SETI 1ere Année
Groupe : 1
Année : 2012/2013
Date :
Binôme :
- APERE - Nicolas
- KAVANAGH - Johan
Z. Kachouh / ESCPI
Document1
1
EXERCICE 1 – Pointeur simple
Soit le programme C suivant :
int i = 0;
int *p;
float x = 3.14;
float *f;
void main( void ) {
p = &i;
*f = 666;
f = &x;
*f = *p;
*p = 34;
p = f
*p = *p + 1;
printf( "%d %f\n", i, *f );
}
Questions :
1. Dans le programme suivant, rayez les lignes illégales (erreurs) et donner les explications.
2. Qu'affiche ce programme après correction?
----
Z. Kachouh / ESCPI
Document1
2
EXERCICE 2 – Tableaux statiques
Nous souhaitons écrire un programme affectant aux éléments d’un tableau les valeurs de leurs indexes et afficher
le contenu. L’écriture doit respecter le prototype suivant :
void exo2(int T[], int N)
---Re-formulation du problème (algorithme de haut niveau)
Ecrire une procédure dont le prototype est void
exo2(int T[], int N)
T : le tableau
N : la taille de T
Qui donnent à chaque casse du tableau la valeur de son index (position du tableau)
Qui afficher les valeurs à l’écran
Qui ne retourne aucune valeur
> Utiliser cette procédure dans un programme
Donner la description des données (variables) utilisées
Variables
Types
Portée
Description
size
Entier positif
Locale
Taille du tableau
Tableau
Tableau d’Entier
Locale
« size » valeurs
T
Tableau de
Locale à la fonction
Paramètre de la fonction
N
Entier
Locale à la fonction
Paramètre de la fonction
i
Entier positif
Locale à la fonction
Index
Algorithme
ALGORITHME TABLEAU
Procédure Exo2( T : Tableau d’entiers signés, N : entier signé )
Début
Variables locales
i : entier positif
Pour i allant de 0 à N-1 Par pas de 1 Faire
T(i)  i;
afficher "La case ", i," du tableau contient ", T(i), ALaLigne
FinPour
FIN
Début
Variables locales
size : entier positif
Tableau : Tableau (size) d’entiers positifs
Programme
Exo2(Tableau, size);
Fin
FIN ALGORITHME TABLEAU
Plan test
Size
1
3
4
0
Tableau S attendue
La case 0 du
Peu
Importe …
S observée
Résultat (Ok/Ko), commentaire
tableau contient 0
La case 1 du tableau contient 1
La case 2 du tableau contient 2
…
La case 3 du tableau contient 3
Rien
Z. Kachouh / ESCPI
Document1
3
Transcodage de l’algorithme en langage C
//Tableau
void Exo2(int T[], int N)
{
char i ;
for(i=0; i<N; i++)
{
T[i]=i;
printf(« La case %d du tableau contient %d\n»,i, T[i]);
}
}
void Main(void)
{
char size = 10;
char Tableau[size];
Exo2(Tableau,size);
}
Tests
Dans cet exercice, laisser les élèves se tremper sur le type des variables (unsigned char ou char) avant de faire
un commentaire.
Num A
b
S attendue
S observée
Résultat (Ok/Ko), commentaire
1
5
5
10
10
Ok
2
-5
10
interdit
5
Ko
3
200
200
400
144
Dépassement de valeur par le type
4
A
5
Saisie non valide
5
Erreur donnée pas scanf
Conclusion
Nous avons utilisé pour les variables d’entrée a et b le type entier positif (unsigned char)
sur un octet pour respecter l’énoncé du cahier des charges. Les valeurs permises pour ces
variables sont entre 0 et 255. Le résultat véhiculé par la variable S est également de type
entier positif (unsigned char) sur un octet. Ceci ne nous permet pas de dépasser une
somme de 255 de a et b ensemble.
Les tests numéros 2 et 4 ne sont pac concluant car la saisie des valeurs de types ne
correspondants pas au type de données (unsigned char) n’est as contrôlé.
Le test numéro 3 n’est pas concluant car il y a dépassement de la valeur permise pour la
variable S qui est de 0 à 255.
Nous suggérons, pour résoudre ce problème de choisir un type entier positif sur 2 octets
(unsigned short).
Comme perspectives pour améliorer le future programme, nous suggérons de faire un contrôle
de la saisie au clavier sur le type des données avant de calculer la somme et contrôler les
limites des valeurs.
Z. Kachouh / ESCPI
Document1
4
EXERCICE 3 – Tableaux dynamiques
Nous souhaitons écrire un programme affectant aux éléments d’un tableau les valeurs de leurs indexes et afficher
le contenu. L’écriture doit respecter le prototype suivant :
void exo3(int *T, int N)
On utilise la syntaxe suivante pour un tableau dynamique, int *tab, de taille N :
int *tab = (int *) malloc(N*sizeof(int));
---Re-formulation du problème (algorithme de haut niveau)
Ecrire un programme dont le prototype est void
exo3(int *T, int N)
T : le tableau
N : la taille de T
Qui donnent à chaque casse du tableau la valeur de son index (position du tableau)
Qui afficher les valeurs à l’écran
Qui ne retourne aucune valeur
> Utiliser cette procédure dans un programme
Donner la description des données (variables) utilisées
Variables
Types
Portée
Description
Size
Entier positif
Locale
Taille du tableau
Tableau
Tableau d’Entier
Locale
« size » valeurs
T
Tableau de
Locale à la fonction
Paramètre de la fonction
N
Entier
Locale à la fonction
Paramètre de la fonction
i
Entier positif
Locale à la fonction
Index
Algorithme
ALGORITHME TABLEAU
Procédure Exo2( T : Tableau d’entiers signés, N : entier signé )
Début
Variables locales
i : entier positif
Pour i allant de 0 à N Par pas de 1 Faire
T(i)  i ;
afficher "La case ", i," du tableau contient ", T(i), ALaLigne
FinPour
FIN
Début
Variables locales
size : entier positif
Tableau : Tableau (size) d’entiers positifs
Programme
Exo2(Tableau, size);
Fin
FIN ALGORITHME TABLEAU
Plan test
size
1
Tableau S attendue
La case 1 du
Peu
Z. Kachouh / ESCPI
S observée
Résultat (Ok/Ko), commentaire
tableau contient 1
Document1
5
3
Importe
4
0
//…
La case 2 du tableau contient 2
La case 3 du tableau contient 3
//…
La case 3 du tableau contient 3
Rien
Transcodage de l’algorithme en langage C
void Exo2(int T[], int N)
{
char i ;
for(i=0; i<=N; i++)
{
T[i]=i;
printf(« La case %d du tableau contient %d\n»,i, T[i]);
}
}
void Main(void)
{
char size = 10;
char Tableau[size];
Exo2(Tableau,size);
}
Tests
Dans cet exercice, laisser les élèves se tremper sur le type des variables (unsigned char ou char) avant de faire
un commentaire.
Num a
b
S attendue
S observée
Résultat (Ok/Ko), commentaire
1
5
5
10
10
Ok
2
-5
10
interdit
5
Ko
3
200
200
400
144
Dépassement de valeur par le type
4
a
5
Saisie non valide
5
Erreur donnée pas scanf
Conclusion
Nous avons utilisé pour les variables d’entrée a et b le type entier positif (unsigned char)
sur un octet pour respecter l’énoncé du cahier des charges. Les valeurs permises pour ces
variables sont entre 0 et 255. Le résultat véhiculé par la variable S est également de type
entier positif (unsigned char) sur un octet. Ceci ne nous permet pas de dépasser une
somme de 255 de a et b ensemble.
Les tests numéros 2 et 4 ne sont pac concluant car la saisie des valeurs de types ne
correspondants pas au type de données (unsigned char) n’est as contrôlé.
Le test numéro 3 n’est pas concluant car il y a dépassement de la valeur permise pour la
variable S qui est de 0 à 255.
Nous suggérons, pour résoudre ce problème de choisir un type entier positif sur 2 octets
(unsigned short).
Comme perspectives pour améliorer le future programme, nous suggérons de faire un contrôle
de la saisie au clavier sur le type des données avant de calculer la somme et contrôler les
limites des valeurs.
Z. Kachouh / ESCPI
Document1
6
Z. Kachouh / ESCPI
Document1
7
Téléchargement