Procédures et Param`etres formels [ss] Exercices de cours

publicité
Procédures et Paramètres formels [ss]
Exercices de cours
Karine Zampieri, Stéphane Rivière
Unisciel
algoprog
Version 30 décembre 2016
Table des matières
1 Appréhender le cours
1.1 Compréhension d’algorithmes / qzexercs . . . . . . . . . . . . . . . . . .
1.2 Salutation téléphonique / qzproc . . . . . . . . . . . . . . . . . . . . . .
2
2
5
2 Appliquer le cours
2.1 Autour de la procédure permuter2i / pgpermuter2i . . . . . . . . . . . .
2.2 Procédure quorest / pgquorest . . . . . . . . . . . . . . . . . . . . . . . .
6
6
10
Java - Exercices de cours (Solution)
Mots-Clés Algorithmes paramétrés Difficulté • • ◦ (1 h) 1
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
1
1.1
Appréhender le cours
Compréhension d’algorithmes / qzexercs
Utilise Procédure Durée estimée 10 min Objectif
Cet exercice demande de comprendre des procédures.
Programme 1
public class QZExerc2a {
public static void main(String[] args) {
int a, b;
int[] c = new int[1];
calcul2(3,4,c);
System.out.println(c[0]);
a = 3;
b = c[0] = 5;
calcul2(b,a,c);
System.out.println(c[0]);
}
static void calcul2(int a, int b, int[] c)
{
c[0] = (a+b);
}
}
Que fait la procédure ?
Solution simple
Elle calcule et restitue l’addition a + b dans c (entier).
Qu’affiche le programme ?
Solution
7
8
Programme 2
public class QZExerc2b {
public static void main(String[] args) {
int[] a = new int[1];
int[] b = new int[1];
2
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
int[] c = new int[1];
calcul3(1,2,c);
System.out.println(c[0]);
a[0] = 1;
b[0] = 2;
c[0] = 3;
calcul3(b[0], c[0], a);
System.out.println(a[0] + " " + b[0] + " " + c[0]);
}
static void calcul3(int a, int b, int[] c)
{
a = 2*a;
b = 3*b;
c[0] = (a+b);
}
}
Que fait la procédure ?
Solution simple
Elle calcule et restitue l’addition 2 ∗ a + 3 ∗ b dans c (entier).
Qu’affiche le programme ?
Solution
8
13 2 3
Programme 3
public class QZExerc2c {
public static void main(String[] args) {
int a, b;
int[] c = new int[1];
a = 1;
b = 2;
c[0] = f(b);
System.out.println(c[0]);
calcul4(a, b, c);
System.out.println(a + " " + b + " " + c[0]);
}
static void calcul4(int a, int b, int[] c)
{
a = f(a);
c[0] = 3*b;
c[0] = a+c[0];
}
static int f(int a)
3
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
{
int b = 2*a + 1;
return b;
}
}
Que fait la procédure ?
Qu’affiche le programme ?
Solution
5 // f(2) = 2 * 2 + 1
1 2 9 //
4
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
1.2
Salutation téléphonique / qzproc
Utilise Procédure Durée estimée 10 min Écrivez une procédure un qui affiche « Allo ».
Écrivez une procédure deux qui :
1. Appelle la procédure un.
2. Puis affiche « Bonjour ».
Écrivez un programme qui appelle les procédures deux puis un puis deux.
Qu’affichera votre programme ?
Testez. Résultat d’exécution.
Allo
Bonjour
Allo
Allo
Bonjour
Validez votre programme avec la solution.
Solution Java
@[qzproc.java]
public class QZProc {
public static void main(String[] args) {
deux();
un();
deux();
}
static void un()
{
System.out.println("Allo");
}
static void deux()
{
un();
System.out.println("Bonjour");
}
}
5
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
2
2.1
6
Appliquer le cours
Autour de la procédure permuter2i / pgpermuter2i
Utilise Procédure, Paramètres formels Durée estimée 20 min Écrivez le profil d’une procédure permuter2i(a,b) qui permute le contenu des entiers
a et b passés en paramètre.
Orientation Paramètres
Modifiés : Les entiers a et b
Écrivez le corps de la procédure.
Rappel de cours
Pour permuter deux variables, il faut passer par une variable intermédiaire.
Solution simple
On a :
Validez votre procédure avec la solution.
Solution Java
@[UtilsSSOpers.java]
static void permuter2i(int[] a, int[] b){
int tmp = a[0];
a[0] = b[0];
b[0] = tmp;
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
7
}
Écrivez le profil d’une procédure ordonner2i(a,b) qui remet dans l’ordre croissant les
contenus des entiers a et b.
Orientation Paramètres
Modifiés : Les entiers a et b
Écrivez le corps de la procédure de sorte que, si b<a, elle appelle la procédure permuter2i
pour les ordonner.
Validez votre procédure avec la solution.
Solution Java
@[UtilsSSOpers.java]
static void ordonner2i(int[] a, int[] b){
if (b[0] < a[0]){
permuter2i(a, b);
}
}
Écrivez un programme qui saisit deux entiers dans a et b.
Affichez l’invite :
Deux entiers?
Permutez les deux entiers puis affichez (où [x] désigne le contenu de x) :
==> Après 1ere permutation [a] [b]
Permutez-les une deuxième fois puis affichez :
==> Après 2eme permutation [a] [b]
Enfin ordonnez-les puis affichez :
==> Après ordonner [a] [b]
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
8
Testez. Exemple d’exécution.
Deux entiers? 6 1
==> Après 1ere permutation 1 6
==> Après 2eme permutation 6 1
==> Après ordonner 1 6
Validez votre programme avec la solution.
Solution Java
@[pgpermuter2i.java]
import java.util.Scanner;
public class PGPermuter2i {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int[] a = new int[1];
int[] b = new int[1];
System.out.print("Deux entiers? ");
a[0] = cin.nextInt();
b[0] = cin.nextInt();
UtilsSSOpers.permuter2i(a,b);
System.out.println("==> Apres 1ere permutation " + a[0] + " " + b[0]);
UtilsSSOpers.permuter2i(a,b);
System.out.println("==> Apres 2eme permutation " + a[0] + " " + b[0]);
UtilsSSOpers.ordonner2i(a,b);
System.out.println("==> Apres ordonner " + a[0] + " " + b[0]);
}
}
Écrivez le profil d’une procédure echanger3i(a,b,c) qui permute circulairement, vers
la gauche, les contenus des entiers a, b et c.
Orientation Paramètres
Modifiés : Les entiers a, b et c
Écrivez le corps de la procédure de sorte que le contenu de a va dans c, celui de b dans
a et celui de c dans b) en utilisant deux fois la procédure permuter2i.
(Faites attention à la position des paramètres !)
Aide simple
Il y a plusieurs solutions.
Validez votre procédure avec la solution.
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
Solution Java
@[UtilsSSOpers.java]
static void echanger3i(int[] a,int[] b,int[] c){
permuter2i(a,c);
permuter2i(a,b);
}
9
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
2.2
10
Procédure quorest / pgquorest
Utilise Procédure, Paramètres formels Durée estimée 10 min Écrivez le profil d’une procédure quorest(a,b,qt,rt) qui calcule le quotient dans qt
(entier) et le reste dans rt (entier) de la division entière d’un entier a par un entier b.
Orientation Paramètres
Entrants : Les entiers a et b
Sortants : Les entiers qt et rt
Propriété
La division euclidienne de a par b est définie par :
∀a, b ∈ N : a = q × b + r et 0 ≤ r < b
q est le quotient et r le reste de la division entière.
Écrivez le corps de la procédure.
Validez votre procédure avec la solution.
Solution Java
@[UtilsSSOpers.java]
static void quorest(int a,int b,int[] qt, int[] rt){
qt[0] = a / b;
rt[0] = a % b;
}
Écrivez un programme qui saisit deux entiers.
Affichez l’invite :
Deux entiers?
Calculez le quotient et le reste des deux entiers.
Affichez (où [x] désigne le contenu de x) :
[a] = [b] * [quotient] + [reste]
Testez. Exemple d’exécution.
Deux entiers? 13 3
13 = 3 * 4 + 1
Unisciel algoprog – Procédures et Paramètres formels [ss], December 30, 2016
Validez votre programme avec la solution.
Solution Java
@[pgquorest.java]
import java.util.Scanner;
public class PGQuorest {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int a, b;
System.out.print("Deux entiers? ");
a = cin.nextInt();
b = cin.nextInt();
int[] qt = new int[1];
int[] rt = new int[1];
UtilsSSOpers.quorest(a, b, qt, rt);
System.out.println(a + " = " + b + " * " + qt[0] + " + " + rt[0] );
}
}
11
Téléchargement