Examen Médian - 1 heure 30



Documents pareils
Corrigé des TD 1 à 5

Cours d algorithmique pour la classe de 2nde

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Enseignement secondaire technique

Cours Informatique Master STEP

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmation C++ (débutant)/instructions for, while et do...while

Recherche dans un tableau

CORRECTION EXERCICES ALGORITHME 1

Application 1- VBA : Test de comportements d'investissements

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Organigramme / Algorigramme Dossier élève 1 SI

Algorithmes et programmation en Pascal. Cours

Algorithmique et programmation : les bases (VBA) Corrigé

1. Structure d'un programme FORTRAN 95

Initiation à la programmation en Python

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Présentation du langage et premières fonctions

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Suites numériques. Exercice 1 Pour chacune des suites suivantes, calculer u 1, u 2, u 3, u 10 et u 100 : Introduction : Intérêts simpleset composés.

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Programmation structurée et algorithmes de base en Pascal

ACTIVITÉ DE PROGRAMMATION

Les suites numériques

TRIGONOMETRIE Algorithme : mesure principale

Propagation sur réseau statique et dynamique

Algorithmique & programmation

Java Licence Professionnelle CISII,

Représentation d un entier en base b

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

MINISTERE DE L ENSEIGNEMENT TECHNIQUE ET DE LA FORMATION PROFESSIONNELLE. (Pour l obtention du diplôme d analyste programmeur)

L ALGORITHMIQUE. Algorithme

Algorithme. Table des matières

Feuille TD n 1 Exercices d algorithmique éléments de correction

Licence Sciences et Technologies Examen janvier 2010

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Algorithmique et Programmation, IMA

Utilitaires méconnus de StrataFrame

Par combien de zéros se termine N!?

Vous revisiterez tous les nombres rencontrés au collège, en commençant par les nombres entiers pour finir par les nombres réels.

Probabilités conditionnelles Loi binomiale

CHAPITRE 9. Codes source. 9.1 Insertion brute

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Les structures. Chapitre 3

Tel mobiles partie.

Cours de Systèmes d Exploitation

Les structures de données. Rajae El Ouazzani

TD3: tableaux avancées, première classe et chaînes

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Problèmes liés à la concurrence

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Calculs financiers (1) : intérêts simples, composés.

Algorithmique avec Algobox

Introduction au langage C

Initiation à l algorithmique


THEME : CLES DE CONTROLE. Division euclidienne

C f tracée ci- contre est la représentation graphique d une

Corrigé des exercices sur les références

1.6- Génération de nombres aléatoires

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Chapitre 5. Calculs financiers. 5.1 Introduction - notations

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

POKER ET PROBABILITÉ

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Fluctuation d une fréquence selon les échantillons - Probabilités

Chapitre 4 Pierre, papier, ciseaux

Chapitre 10. Les interfaces Comparable et Comparator 1

Paginer les données côté serveur, mettre en cache côté client

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

STAGE IREM 0- Premiers pas en Python

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Solutions du chapitre 4

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Deuxième partie : Cours de I ère. Applications Delphi

Programme Compte bancaire (code)

Chapitre 2 Devine mon nombre!

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

La maison Ecole d ' Amortissement d un emprunt Classe de terminale ES. Ce qui est demandé. Les étapes du travail

Programmer en JAVA. par Tama

Compilation (INF 564)

LES DECIMALES DE π BERNARD EGGER

Découverte de Python

Projet de programmation (IK3) : TP n 1 Correction

Programmation sous Delphi

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

Modèles et simulations informatiques des problèmes de coopération entre agents

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Débuter avec Easyweb B

Présentation du PL/SQL

Nombres et calcul numérique

Notions fondamentales du langage C# Version 1.0

Transcription:

NF01 - Automne 2014 Examen Médian - 1 heure 30 Polycopié papier autorisé, autres documents interdits Calculatrices, téléphones, traducteurs et ordinateurs interdits! Utilisez trois copies séparées, une copie par Partie Partie n 1, copie séparée (6 points) : Emprunt bancaire Une personne désireuse de faire un emprunt pour l achat d une maison voudrait connaître les mensualités de remboursement en fonction du taux d intérêt du prêt bancaire, de la durée du prêt (15 ou 20 ans) et du montant de l emprunt (prix de la maison). Cette personne s est fixée un plafond c'est-à-dire un montant de mensualité qu elle ne veut pas dépasser. Elle a récemment visité 25 maisons dont le prix est donné en euros. Ecrire un programme en Pascal qui demande le plafond maximum, le taux d intérêt de la banque, puis pour chaque maison, demande son prix et affiche le montant des mensualités correspondant à 15 et à 20 ans de remboursement. L affichage se fera uniquement si celui-ci ne dépasse pas le plafond donné par l utilisateur. Le programme affichera ensuite combien de maisons visitées répondent à son critère. La formule de calcul des mensualités d un prêt est la suivante : Remarques importantes : - L opérateur «puissance» n existe pas en Pascal. A vous de calculer x n. - On n utilise pas de tableaux. Solution PROGRAM exomedianemprunt; const nbmens15 = 180; {nombre de mensualites 15 ans} nbmens20 = 240; {nombre de mensualites 20 ans} var taux: real; {donnée } prix: real; {donnée pour 25 maisons} plafond : real; {donnée} mens15,mens20: real; {résultat : valeur de la mensualité pour 15 et 20 ans} nbmaisons: integer; {résultat : nombre de maisons qui vont bien} i,j : integer; {variables de boucles}

puis : real; {calcul la puissance dnas la formule} writeln('donner le taux bancaire SVP :'); readln(taux); taux:=taux/100; {si taux en pourcentage} writeln('donner le plafond a ne pas depassser pour les mensualités'); readln(plafond); nbmaisons :=0; for i:=1 to 25 do writeln('donner le prix de la maison :'); readln(prix); {remarque le calcul de la puissance ne depend que du taux, donc pourrais etre sorti de la boucle principale} puis := 1; for j:=1 to nbmens15 do puis:= puis*(1+ taux/12); {writeln('puis:', puis); } mens15 := (prix *taux/12 * puis) /(puis-1); for j:=nbmens15+1 to nbmens20 do puis:= puis*(1+ taux/12); {writeln('puis:', puis); } mens20 := (prix *taux/12 * puis) /(puis-1); {affichage et calcul du nombre de maison} if (mens15<plafond) then nbmaisons :=nbmaisons+1; writeln('mensualité pour 15 ans mens15); if (mens20<plafond) then writeln('mensualité pour 20 ans pour la maison ', i,' = ', pour la maison ', i,' = ', mens20); end else if (mens20<plafond) then writeln('mensualité pour 20 ans pour la maison ', i,' = ', mens20); nbmaisons :=nbmaisons+1; writeln('nombres de maisons possibles ', nbmaisons); readln; readln; Partie n 2, copie séparée (7 points) : Lancés de dés 1) Dans une première version du jeu, deux joueurs s affrontent. A chaque tour de la partie, les deux joueurs jouent : chaque joueur effectue un lancé d un seul dé. On compare alors leurs résultats. Quand les résultats sont identiques, on ne fait rien, et on passe au tour suivant. Quand le lancé de l un joueurs surpasse celui de l autre, on ajoute le résultat de ce lancé au score de son auteur. De plus, si ce résultat est égal à 6, l auteur de ce lancé peut continuer, au sein de ce même tour, à lancer aussi longtemps qu il obtient 6, et naturellement à chaque fois son score particulier est augmenté du résultat de chaque lancé. Une fois tout cela effectué, on passe alors au tour suivant et le même cycle repr Le jeu s arrête au bout de 30 tours. A la fin, on affiche les scores obtenus par les deux joueurs, et bien sûr on précise qui est le vainqueur (celui qui a obtenu le plus gros score).

Ecrire le programme en PASCAL pour mettre en œuvre ce jeu Remarque : à défaut d avoir des lancés vraiment aléatoires, on rentre la valeur de chaque lancé directement par une lecture au clavier. 2) Dans une deuxième version du jeu, il n y a plus qu un seul joueur. Celui-ci lance en même temps deux dés dont les faces sont numérotées de 1 à 6. A chaque lancé : - dans le cas où la somme des deux dés est un nombre premier différent de 2, on ajoute au score total du joueur cette somme multipliée par deux. - dans le cas où les deux dés sont égaux, on soustrait leur somme du score total. - dans les cas restants, on ajoute simplement leur somme au score total. Ce processus doit être interrompu lorsque ce joueur atteint ou dépasse le score total de 100 ou lorsqu il a effectué 40 lancés. A la fin, on affiche le score total atteint par ce joueur ainsi que le nombre de coups mis pour y parvenir. Programmer en PASCAL cette seconde partie du jeu Remarques : - à défaut d avoir un lancé vraiment aléatoire, on rentre la valeur du dé directement par une lecture au clavier. - On n utilise pas de tableaux. Program P1 ; var i, score1, score2, n1, n2 : integer ; score1 := 0 ; score2 := 0 ; for i := 1 to 30 do readln(n1) ; readln(n2) ; if n1 > n2 then while n1 = 6 do end then readln(n1) ; score1 := score1 + n1 ; score1 := score1 + n1 ; else if n2 > n1 readln(n2) ; while n2 = 6 do score2 := score2 + n2 ;

score2 := score2 + n2 ; writeln( score du 1er joueur, score1, score du 2ème joueur, score2) ; if score1 = score2 then writeln( il n y a pas de vainqueur ) else if score1 > score2 then writeln( le vainqueur est le joueur 1 ) else writeln( le vainqueur est le joueur 2 ) ; Program P2 ; var i, score, d, dé1, dé2 : integer ; score := 0 ; i := 0 ; repeat i := i + 1 ; readln(dé1) ; readln(dé2) ; d := d1 + d2 ; if (d = 3) or (d = 5) or (d = 7) or (d = 11) then score := score + 2 * d else if dé1 = dé2 then score := score d else score := score + d until (i = 40) or (score >= 100) ; writeln( le score obtenu est :, score, avec un nombre de coups égal à :,i) ; Partie n 3, copie séparée (7 points) : Achat en ligne Le numéro d'une carte bancaire est généré suivant un algorithme particulier. Ainsi la vérification du numéro peut être effectuée suivant les règles suivantes : T 1. Dans un premier temps il faut vérifier si le nombre de chiffres du numéro correspond au type de carte déclarée Master Card (16 chiffres), VISA (13 chiffres), American Express (15 chiffres)

T 2. Dans un deuxième temps la vérification suivante est réalisée : Op 0. Les chiffres qui se trouvent aux places paires du numéro de la carte sont multipliés par 2 Op 1. La somme des chiffres de ces produits est calculée Op 2. A cette somme sont ajoutés les chiffres restants (qui n'ont pas été multipliés par 2) Op 3. Si le nombre obtenu en Op 2. se termine par 0, alors le numéro de la carte est valide On vous demande de réaliser un programme PASCAL qui permet la saisie des informations relatives à la carte utilisée et la vérification de la validité du numéro entré. Votre programme doit permettre de : 1. Saisir le type de carte utilisée. Le programme doit accepter seulement une des cartes Master Card, VISA ou American Express. L'utilisateur a le droit de se tromper, mais la poursuite des opérations ne doit pas être possible avant la saisie d'un nom de carte valide. 2. Après avoir entré le type de carte, l'utilisateur doit entrer le numéro de la carte. Votre programme doit accepter seulement un numéro de longueur valide (longueur calculée par votre programme) : 16 chiffres pour une Master Card, 13 chiffres pour une VISA, 15 chiffres pour une American Express. L'utilisateur a le droit de se tromper, mais la poursuite des opérations ne doit pas être possible avant la saisie d'un numéro de carte de longueur valide. 3. Après la validation des deux premières étapes, votre programme doit vérifier la validité du numéro de la carte suivant l'algorithme de vérification de code présenté précédemment. Remarque : Les opérations Op 0, Op 1 et Op 2 peuvent être effectuées dans la même boucle. L'utilisation des fonctions MOD (permet la récupération du reste de la division) et DIV (permet la récupération de la partie entière de la division) de la division Euclidienne peut faciliter la construction de votre programme. 4. Votre programme doit afficher si le type de carte et le numéro proposés sont valides. Le déroulement de cette vérification est illustré par l'exemple suivant : une carte Master Card avec le N 4794 0132 4276 3821. T 1. Le numéro de carte est composé de 16 chiffres ce qui correspond bien au nombre de chiffres du numéro d'une carte Master Card valide. T 2. Op 0. Op 1. Op 2. Les chiffres qui sont aux places paires sont multipliés par 2 (les chiffres soulignés pour l'exemple 4794 0132 4276 3451) : 4*2 = 8; 9*2 = 18; 0*2 = 0; 3*2 = 6; 4*2 = 8; 7*2 = 14; 3*2 = 6; 5*2 =10 La somme des chiffres des résultats de ces produits est calculée: (8) + (1+8) + (0) +(6) + (8) + (1+4) + (6) + (1+0) = 43 Au résultat (43) de l'op 1. sont ajoutés les chiffres qui n'ont pas été considérés précédemment (7, 4, 1, 2, 2, 6, 4, 1) :

Op 3. 43 + 7 + 4 + 1 + 2 + 2 + 6 + 4 + 1 = 70 Le nombre (70) obtenu en Op 2. se termine par 0 et donc nous avons bien un numéro de carte Master Card valide. Remarque : On n utilise pas de tableaux. Program credit; var Number, Temp_Number : int64; N, pointer, Chiffre, sum :integer; carte : string; Nb_ch, T_ch : integer; repeat writeln('type de carte VISA, Master Card, Amercian Exress'); readln(carte); until (carte = 'VISA') or (carte = 'Master Card') or (carte = 'American Express'); repeat writeln('veuillew entrer votre numero de carte:'); readln(number); Temp_Number := Number; N :=0; while (Temp_Number <>0) do Temp_Number := Temp_Number DIV 10; N := N + 1; until ((carte = 'VISA') and (N = 13)) or ((carte = 'Master Card') and ( N = 16)) or ((carte = 'American Express') and ( N = 15)); sum := 0; Chiffre := 0; Temp_Number := Number; for pointer := 1 to N do Chiffre := Temp_Number mod 10; Temp_Number := Temp_Number DIV 10; if (pointer <> 1) and (pointer mod 2 = 0) then Chiffre := Chiffre*2; sum := sum + Chiffre div 10 + Chiffre mod 10; end else sum := sum + Chiffre; writeln('sum =',sum); if (sum mod 10 = 0) then writeln('carte valide') else writeln('carte invalide'); readln;