Introduction à l`algorithmique.

publicité
M2 GestionTIC
Introduction à l’algorithmique.
Examan
http://www.depinfo.u-cerghy.fr/introAlgoM2
Décembre 2011
1
Partie 1 : théorie.
Pas de document pour cette première partie.
Pas d’ordinateur pour cette première partie.
Répondre sur une première copie double.
1.1
Cours.
1. Donner la définition d’un algorithme.
Un algorithme est une suite finie et non-ambiguë d ?opérations ou d’instructions permettant de
résoudre un problème.
2. Donner la définition du pseudo-code.
En programmation, le pseudo-code est une façon de décrire un algorithme sans référence à un
langage de programmation en particulier.
3. A l’aide des mots code "human readable", code objet, code assembleur, langage machine, compilation décrivez les différentes étapes qui conduisent, pour un algorithme, de sa programmation dans
un langage tel que JAVA en son exécution sur un ordinateur.
On décrira essentiellement deux étapes fondamentales :
– La compilation.
Le compilateur est un programme informatique qui permet de transformer du code "human
readable" en code objet puis en langage machine.
Le langage machine est le langage directement compréhensible par l’ordinateur. Il est constitué
d’une suite d’instruction écrites en binaires (suite de 0 et de 1).
L’assembleur est la traduction "human readable" du langage machine.
Le code objet est un code qui ressemble au langage machines (ou à l’assembleur selon les cas)
et qui contient des informations utiles au compilateur (notamment références de liens).
– L’exécution.
Lors de l’exécution, le code machine est placé en mémoire centrale de l’ordinateur et exécuté.
L’exécution est contrôlée par le système d’exploitation.
4. Donner quelques différences entre un langage fortement typé et un langage faiblement typé.
Si on considère les données et les fonctions permettant de traiter les données, on peut considérer qu’un langage est fortement typé s’il permet de vérifier/contrôler/garantir que les fonctions
(traitements) appliquées à une certaine donnée sont autorisés.
5. Qu’est ce que le muti-threads ?
Donner quelques avantages (en terme de programmation ; on pourra donner un ou plusieurs
exemples).
Avoir plusieurs programmes fonctionnant en même temps.
Décomposer un calcul sur plusieurs processeur.
Donner quelques inconvénients.
Difficulté de programmation.
Déboggage difficile.
6. L’instruction int a=3 correspond, en fait, à plusieurs instructions.
Lesquelles ?
1.2
Pseudo-code.
Dans chacun des cas ci-dessous, écrire en pseudo-code, un algorithme répondant à la problématique
posée.
1. Calcul de la factorielle n! d’un nombre n entier naturel.
2. Echange de deux valeurs stockées dans deux variables a et b.
(Par exemple si au début de l’algorithme a = 3 et b = 4 alors à la fin a = 4 et b = 3).
1
3. Mise sous forme d’une écriture scientifique un nombre réel x donné.
Par exemple si x = 12, 65 le programme doit retourner 1, 265 × 11 .
Si x = 12345, 87656 le programme doit retourner 1, 234587656 × 104 .
On ne tiendra pas compte du problème de l’écriture de la puissance de dix (on pourra par exemple
écrire 12, 76E2 au lieu de 12, 76 × 102 .
1.3
Code java.
Que fait le programme suivant :
import java.util.InputMismatchException;
import java.util.Scanner;
public class exam2011 {
static public void main(String[] args){
int b=0;
Scanner sc = new Scanner(System.in);
System.out.println("Veuillez saisir un entier strictement positif.");
b=sc.nextInt();
int i=0;
int k=0;
while(i<=b){
k=k+i;
i=i+1;
}
System.out.println(k);
}
}
2
Partie 2.
Tous documents autorisés pour cette partie.
Cette partie est à traiter sur ordinateur.
2.1
Premier exercice.
On considère le début de programme suivant :
import java.util.*;
public class exam2011ex1 {
static public void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int i = 0;
while(...){
...
i=i+1;
}
}
}
1. Compléter les "..." pour que le programme affiche la ligne suivante : − − − − − − − · · · − − − − − −− >
{z
}
|
n fois
2. Même chose pour que le programme affiche :
>
−>
−− >
2
−−−>
...
− − − − − − − · · · − − − − − −− >
{z
}
|
n fois
Par exemple pour n = 5 le programme affiche :
>
−>
−− >
−−−>
− − −− >
−−−−−>
2.2
Exercice 2 : plus difficile.
On considère le début de programme suivant :
public class exam2011ex2 {
static public void main(String[] arg){
int [] tableau = {12,4,32,7,23};//Déclaration d’un tableau d’entiers.
int [] tableauTrie = new int[5];//Déclaration d’un tableau de 5 cases pouvant contenir
chacune UN entier
...
for(int element:tableauTrie){//Routine d’affichage des éléments du tableau.
System.out.print(element+" ");
}
}
}
Compléter les "..." pour que le tableau tableauTrie contienne les valeurs de tableau classées par ordre
croissant.
C’est à dire qu’à la fin de l’exécution du programme, le tableau tableauTrie doit contenir {4,7,12,23,32}
Indication : le ième élément du tableau tableau s’obtient par la commande tableau[i-1] (les cases
sont numérotées de 0 à 4 pour les tableaux considérés.)
Pour stocker une valeur dans la case 3 de tableau il suffit de taper : tableau[3]=valeur;
3
Téléchargement