Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique Sujets de Travaux Dirigés et de Travaux Pratiques Pascal Ballet, Philippe Le Parc et Sophie Gire TD 1 – Codage et Circuits logiques TD 2 – Architecture TD 3 et 4 – Variables, séquences et conditionnelles simples TD 5, 6 et 7 – Itérations (boucle Pour et Tant que) et tableaux TD 8 – Tableaux et graphisme TD 9 – Introduction aux bases de données page 2 page 5 page 14 page 17 page 20 page 22 TP1 – Introductions aux TPs et circuits logiques TP2 – Architecture TP3 et 4 – Introduction à Visual Basic : variables, séquences et conditionnelles simples TP5 et 6 – Itérations (boucle Pour et Tant que) et tableaux TP 7 et 8 – Un peu de graphisme TP 9 – Introduction aux bases de données TP 10 – Gestion d’un stock de voitures page 24 page 31 page 33 page 45 page 47 page 52 page 55 Memo Access page 59 Retrouver ce document, et d’autres informations sur cet enseignement, dans l’Intranet du département Informatique (intranet-depiup.univ-brest.fr), rubrique Pédagogie, puis Licence 1, puis Introduction à l’Informatique. Les exercices de TD suivis par une étoile (*) sont considérés comme des exercices de base, dont la compréhension est nécessaire. 1 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TD n°1 Codage et Circuits Logiques L'objectif de ce TD est, d'une part de mettre en pratique les notions de codage vues en cours (bases, changement de base, implémentation) et d'autre part, des exercices sur les circuits logiques sont proposés pour consolider les éléments vus en cours. Partie 1. Codage Exercice 1 * a) Soit le nombre 110102, quelle est sa valeur en base 10 ? b) Soit le nombre 3010, quelle est sa valeur en base 2 ? Exercice 2 Enumérer les symboles utilisés pour les bases suivantes : 4, 8, 16 Exercice 3 * Soient les nombres suivants : 10112, 10114, 10118. a) Quels sont les nombres en base 10 correspondant ? b) Quels sont leur écriture en base 2 ? Exercice 4 Soient les nombres 32314, 5289, 40657 a) Donner leur écriture en base 10. b) Donner leur écriture en base 2. Exercice 5 * Soient les nombres binaires suivants : 1110110100012, 10100111012, 1000010011110112. a) Quels sont les nombres en base 8 correspondant ? b) Quels sont les nombres en base 16 correspondant ? 2 Exercice 6 * Soient les 2 octets suivants : A : 1011 00012 B : 0001 01112 On suppose que ces deux octets codent respectivement deux nombres. 1. Additionnez, en binaire, A et B 2. Quelle est la valeur entière de cette somme en base 10 ? 3. Additionnez, en binaire, B avec lui-même ? Que remarquez-vous sur le résultat ? Exercice 7 * a) Soit N le nombre suivant en base 10 : -29,25 1. Convertir la partie entière de la valeur absolue de N en binaire. 2. Convertir la partie fractionnaire de N en binaire. 3. Ecrire N en binaire. 4. Ecrire N sous la forme exponentielle binaire normalisée. 5. Donner une représentation interne de N en utilisant la forme suivante : 1 bit de signe (mantisse) / 11 bits pour la mantisse / 1 bit de signe (exp) / 3 bits pour l'exposant. Signe (1 bit) Mantisse (11 bits) Signe (1 bit) Exposant (3 bits) b) Recommencer l'exercice avec les nombres : 128,125 puis 0,8. Exercice 8 Additionner les nombres binaires suivants : 0011 0011 et 0101 1111. Donner la valeur en base 2 et en base 10 du résultat obtenu. Exercice 9 Soit la suite de bits : 0101 1001 0000 0100. a) Si l’on considère que cette suite de bits est un nombre entier codé en base 2, donner sa valeur en base 16. b) Si l’on considère que cette suite de bits est un nombre réel, codé avec le format vu en cours et rappelé ci-dessous, donner sa valeur en base 10. Signe (1 bit) Mantisse (11 bits) Signe (1 bit) Exposant (3 bits) 3 Partie 2 - Circuits logiques Exercice 1 * Donner les tables de vérité des portes ET, OU, OU exclusif et NON Exercice 2 * A Soit le circuit suivant : B S1 C S2 S D a) b) c) d) e) Donner une expression logique de la sortie S en fonction des entrées A, B, C et D. Donner la table de vérité de la sortie S. Donner une expression logique de la sortie S directement à partir de la table de vérité. Simplifier l'écriture de S (choisir l'expression (a) ou (c)). Proposer un circuit plus petit mais équivalent à celui proposé (on pourra également diminuer le nombre d'entrées si possible). Exercice 3 * Soit l'expression logique suivante : S = A.B.C + (~A).B + A.(B+C) a) Donner un circuit logique équivalent à cette expression. b) Simplifier l'expression de S et donner un nouveau circuit logique. Exercice 4 * Soit le circuit logique suivant : a) Donner la table de vérité de ce circuit b) Quelle fonction assure ce circuit ? c) Modifier ce circuit logique pour qu'il assure complètement sa fonction. Exercice 5 Soit l’expression logique suivante : S =A.~B + (Ã.B + C) Dessiner un circuit logique équivalent et donner la table de vérité. Après analyse la table de vérité, donner une expression plus simple équivalent à S. Exercice 6 Soit le circuit logique suivant : A B a) Donner la table de vérité de ce circuit. b) Donner une expression logique équivalente à ce circuit. C S 4 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TD n°2 Architecture L’objectif de ce TD est l’étude d’une architecture à jeu d’instructions réduit (RISC) simplifiée. L’architecture est décrite en fin d’énoncé de TD Exercice 1 * A l’aide de la description de l’architecture RISC que vous trouverez en fin de sujet, donner, pour chaque notation de constante uimm4, uimm5, simm5, uimm11, l’intervalle de valeurs que peuvent prendre ses constantes. Exercice 2 * On considère les deux instructions en assembleur : • • qui additionne une constante sur 5 bits (simm5) à un registre source (rs) et place le résultat dans un registre destination (rd). Nous supposerons que les registres sont sur 16 bits. add rd, rs1, rs2 qui additionne les valeurs des registres sources (rs1) et (rs2) et place le résultat dans un registre destination (rd). Nous supposerons que les registres sont sur 16 bits. addi rd, rs, simm5 a) Sachant que les registres sont sur 16 bits, decrire ce que l’ordinateur doit faire au moment de l’éxécution de : addi rd, rs, simm5. b) On suppose initialement que le registre r1 est à : 0000000000100011 et que le registre r3 est a : 0000010000111100. On exécute alors les deux instructions ci-dessous l’une après l’autre. addi r2, r1, 15 add r2, r3, r2 (étape 1) (étape 2) Une fois l’étape 1 effectuée, quel est le contenu de r2 (écrit sur 16 bits) ? Quelle est la valeur de r2 en base 10 ? c) Une fois les étapes 1 et 2 effectuées, quel est le contenu de r2 (écrit sur 16 bits) ? Exercice 3 * On suppose les instructions suivantes chargées en mémoire (à partir de l’adresse mémoire 0) : 0) 1) 2) 3) 4) 5) 6) 7) addi r1, r0, 0 addi r2, r0, 0 st (r2 + 15), r1 addi r2, r2, 1 add r1, r1, r2 addi. r3, r2, -6 bne -5 st (r2 + 15), r1 Décrire l’exécution de ce programme, en détaillant chaque étape de chaque instruction et en donnant les valeurs de chaque registre. 5 Exercice 4 Soit le programme suivant : 0) 1) 2) 3) 4) 5) 6) addi r1, r0, 0 addi r2, r0, 1 addi r1, r1, 1 add r2, r2, r2 addi. r3, r1, -3 bne -4 nop Pour mémoire, les instructions addi et add réalisent des additions, l’opération bne permet de faire un branchement en fonction du calcul précédent (mise en place de RCC) et l’opération nop ne fait rien. a) Quelles sont les valeurs des registres R1 et R2 à l’issue de l’exécution de ce programme ? b) Quel sera le résultat du calcul, si dans l’instruction 4), on remplaçait -3 par -6 ? Exercice 5 La résolution de cet exercice nécessite préalablement la résolution de l’exercice 3. a) Proposer une suite d’instructions permettant de calculer le produit des valeurs positives contenues dans les registres r1 et r2. On ne prendra pas en compte un éventuel débordement. b) Proposer de même une méthode pour calculer le quotient et le reste de la division de r1 par r2. 6 Description de l’architecture RISC étudiée Présentation des composants Cette architecture comprend une mémoire et un processeur, reliés par des bus. La mémoire comprend 216 = 65536 cases de 16 bits, adressées de 0 à 65535 et utilisée pour stocker le code et les données. Le processeur comprend : • Une unité de commande, qui décode et interprète les instructions. • Une unité arithmétique et logique (UAL) qui effectue les calculs nécessaires. • Des registres qui stockent les données internes du processeur : o 8 registres génériques de 16 bits allant de r0 à r7, r0 étant toujours égal à 0; o un registre d’état rcc de 4 bits qui stocke des indicateurs ; o un registre d’instruction de 16 bits qui stocke le code de l’instruction en cours d’exécution ; o un compteur de programme de 16 bits qui contient l’adresse de la prochaine instruction `a charger ; o un registre d’adresse mémoire de 16 bits qui sert lors de la lecture ou de l’écriture en mémoire. L’architecture comprend enfin 3 bus s1, s2 et d qui permettent le transfert des données entre les registres, les unités et la mémoire. Un schéma de l’architecture est disponible en dernière page du TD. Exécution d’une instruction L’exécution d’une instruction nécessite plusieurs étapes (dont les 3 premières sont toujours identiques) : L’instruction située `a l’adresse du compteur de programme est chargée dans le registre d’instruction. 1. Le compteur de programme est augmenté de 1 (pour pointer vers la prochaine instruction à exécuter). 2. L’instruction chargée est décodée. 3. Le cas échéant, lecture des données en mémoire ou dans les registres. 4. Traitement des données (en général par l’UAL). 5. Eventuellement, stockage des données en mémoire ou dans les registres. A la fin de l’exécution, on retourne à la première étape. Jeu d’instruction Pour décrire le jeu d’instruction, on définit les différentes notations : uimm11 désigne une constante non signée codée sur 11 bits. simm11 désigne une constante signée codée sur 11 bits. simm9 désigne une constante signée codée sur 9 bits. simm5 désigne une constante signée codée sur 5 bits. uimm5 désigne une constante non signée codée sur 5 bits. uimm4 désigne une constante non signée codée sur 4 bits. rn désigne le n-ième registre, pc le compteur de programme, rcc[c], rcc[z], rcc[n] et rcc[v] les 4 indicateurs d’état (voir dernière section). 7 Lors de leur utilisation, les constantes sont étendues (si nécessaire) sur 16 bits par l’ajout de 0 (pour une constante non signée) ou du bit de signe (pour les constantes signées) dans les bits de poids fort. Un nombre binaire se repère par un b à la fin (par exemple, 01101b vaut 13), un nombre hexadécimal par 0x au début (par exemple 0x7F vaut 127). Le symbole || désigne la concaténation de nombres binaires, ainsi 10101b || 0000b vaut 101010000b. • • • Instruction de chargement : Instruction Action lih rn, uimm11 rn←uimm11 || 00000b Instructions de branchement inconditionnel : Instruction Action b simm11 pc←pc + (1 + simm11) ba simm11 pc←simm11 Instructions de branchement conditionnel : Inst ruction Action beq simm9 si rcc[z]=1, alors pc←pc + (1 + simm9) bne simm9 si rcc[z]=0, alors pc←pc + (1 + simm9) bge simm9 si rcc[z]=1 ou rcc[n]=0, alors pc←pc + (1 + simm9) bgt simm9 si rcc[z]=0 et rcc[n]=0, alors pc←pc + (1 + simm9) ble simm9 si rcc[z]=1 ou rcc[n]=1, alors pc←pc + (1 + simm9) blt simm9 si rcc[z]=0 et rcc[n]=1, alors pc←pc + (1 + simm9) bvs simm9 si rcc[v]=1, alors pc←pc + (1 + simm9) bvc simm9 si rcc[v]=0, alors pc←pc + (1 + simm9) • Instructions de décalage : Les symboles << et >> représentent respectivement les opérations binaires de décalage `a gauche et `a droite. Ainsi, 01001b << 3 donne 01001000b, et 01101b >> 2 donne 011b. Instruction Action lsl rd, rs1, uimm4 rd ← rs1 < < uimm4 rol rd, rs1, uimm4 rd ← rs1 < < uimm4 les bits de poids faibles re¸coivent les bits de poids forts éjectés lsr rd, rs1, uimm4 rd ← rs1 > > uimm4 asr rd, rs1, uimm4 rd ← rs1 > > uimm4 les bits de poids forts sont comblés avec le bit de signe 8 • Instructions arithmétiques, logiques et chargement/rangement : Instruction Action add rd, rs1, rs2 rd ← rs1+rs2 add. rd, rs1, rs2 rd ← rs1+rs2, modifie rcc sub rd, rs1, rs2 rd ← rs1-rs2 sub. rd, rs1, rs2 rd ← rs1-rs2, modifie rcc and. rd, rs1, rs2 rd ← rs1 & rs2, modifie rcc or rd, rs1, rs2 rd ← rs1 | rs2, modifie rcc addi rd, rs1, simm5 rd ← rs1+simm5 addi. rd, rs1, simm5 rd ← rs1+simm5, modifie rcc andi. rd, rs1, simm5 rd ← rs1 & simm5, modifie rcc ori rd, rs1, uimm5 rd ← rs1 | uimm5, modifie rcc ldx rd, (rs1+rs2) rd ← Mem[rs1+rs2] stx (rs1+rs2), rd Mem[rs1+rs2] ← rd ldbx rd, (rs1+rs2) rd ← Mem[rs1+rs2] & 0x00ff Ldsbx rd, (rs1+rs2) rd ← exts(Mem[rs1+rs2] & 0x00ff) stbx (rs1+rs2),rd Mem[rs1+rs2] ← rd & 0x00ff ld rd,(rs1 + simm5) rd ← Mem[rs1+simm5] st (rs1 + simm5),rd Mem[rs1+simm5] ← rd ldb rd,(rs1 + simm5) rd ← (Mem[rs1+simm5] & 0x00ff stb (rs1 + simm5),rd Mem[rs1+simm5] ← rd & 0x00ff Dans ce tableau, Mem[a] désigne la mémoire pointée par l’adresse a, et exts(a) étend sur 16 bits un entier signé a représenté sur 8 bits. Indicateurs d’états Les quatre indicateurs d’états servent pour faire des tests. Les instructions add., sub., addi., and., or, andi. et ori modifient les indicateurs en fonction de leur résultat : • • rcc[z] rcc[n] est mis à 1 si le résultat de l’opération arithmétique vaut 0, et à 0 sinon. est mis à 1 si le rèsultat de l’opération (vu comme un entier signé) est négatif, et à 0 sinon. • • est mis à 1 si une addition ou soustraction a généré une retenue (en prenant les entiers comme non signés), à 0 sinon. rcc[v] est mis à 1 si une addition ou soustraction a débordé (dans le cas d’entiers signés), à 0 sinon. rcc[c] 9 Schéma de l’architecture RISC utilisée (source PixArchi) 10 Architecture logicielle et matérielle de référence 1 Notations Les conventions et notations suivantes sont utilisées : uimm11 constante non signée codée sur 11 bits. Lorsque cette constante est employée dans une instruction, elle est complétée par des 0 dans les bits de poids fort si nécessaire pour l'étendre sur 16 bits. simm11 constante signée codée sur 11 bits. Lorsque cette constante est employé dans une instruction, elle est complétée par le bit de signe dans les bits de poids fort si nécessaire pour l'étendre sur 16 bits. simm9 constante signée codée sur 9 bits. Même remarque que pour simm11. simm5 constante signée codée sur 5 bits. Même remarque que pour simm11. uimm5 constante non signée codée sur 5 bits. Même remarque que pour uimm11. uimm4 constante non signée codée sur 4 bits. Même remarque que pour uimm11. & et logique bit à bit. ; | ou logique bit à bit. ; <- affectation. ; || concaténation ; == test d'égalité. ; << décalage à gauche. ; >> décalage à droite. Signification des bits du registre RCC. Bit Signification si 0 Signification si 1 C L'instruction n'a pas généré de retenue L'instruction a généré une retenue Z Le résultat de l'instruction est différent de 0 Le résultat de l'instruction est égal à 0 N Le résultat de l'instruction est positif ou nul Le résultat de l'instruction est négatif V L'instruction n'a pas généré de débordement L'instruction a généré un débordement Mem[addr] case mémoire à l'adresse addr. 2 Les registres et le jeu d'instructions Le programmeur dispose de 8 registres banalisés nommés r0 à r7. Le registre r0 est câblé à 0 (i.e. il contient la constante 0, on peut écrire dans ce registre mais cette écriture est sans effet). Le registre rcc contient 4 drapeaux : C, Z, N et V mémorisant les caractéristiques du résultat de la dernière instruction qui l'a modifié selon le codage présenté dans la table 1. Les adresses sont sur 16 bits et les cases mémoire ont une capacité de mots de 16 bits. On peut donc adresser 128ko (kilo-octets) soit 131072 octets. Les instructions sont codées sur 16 bits. Il existe 3 types d'instructions : • • • les instructions arithmétiques et logiques, les instructions de branchement (conditionnel ou non), les instructions de chargement et de rangement d'une donnée en mémoire. 6 formats sont utilisés pour coder ces instructions. On dispose en tout de 35 instructions. 11 Format 1 : instruction de chargement du poids fort d'une constante 0 0 uimm11 rd Mnémonique Codage Opération Exemple lih rn,uimm11 rd=n rn <- uimm11 lih r2,0x7FF Format 2 : instructions de branchement inconditionnel 0 1 0 simm11 AA 00 Mnémonique Codage Opération Exemple b simm11 AA=0 pc <- pc + (1 + simm11) b -16 ba simm11 AA=1 pc <- simm11 ba 0x0004 Format 3 : instructions de branchement conditionnel 0 1 1 0 cond simm9 Mnémonique Codage Opération Exemple beq simm9 cond=000 si (rcc[z] == 1) pc <- pc + (1 + simm9) beq -16 bne simm9 cond=001 si (rcc[z] == 0) pc <- pc + (1 + simm9) bne 16 bge simm9 cond=010 si (rcc[z] == 1 ou rcc[n] ==0) pc <- pc + (1 + simm9) bge 16 bgt simm9 cond=011 si (rcc[z] == 0 et rcc[n] ==0) pc <- pc + (1 + simm9) bgt 16 ble simm9 cond=100 si (rcc[z] == 1 ou rcc[n] ==1) pc <- pc + (1 + simm9) ble 16 blt simm9 cond=101 si (rcc[z] == 0 et rcc[n] ==1) pc <- pc + (1 + simm9) blt 16 bvs simm9 cond=110 si (rcc[v] == 1) pc <- pc + (1 + simm9) ble 16 bvc simm9 cond=111 si (rcc[v] == 0) pc <- pc + (1 + simm9) blt 16 Format 4 : instructions arithmétiques, logiques et chargement / rangement 1 0 0 Codop rs2 rs1 rd Mnémonique Codage Opération Exemple add rd,rs1,rs2 Codop=0100 rd <- rs1 + rs2 add r3,r4,r3 add. rd,rs1,rs2 Codop=0101 rd <-rs1 + rs2 + C ; rcc modifié add. r3,r4,r3 sub rd,rs1,rs2 Codop=0000 rd <- rs1 - rs2 sub r0,r2,r2 sub. rd,rs1,rs2 Codop=0001 rd <-rs1 - rs2 + C ; rcc modifié sub. r0,r3,r4 and. rd,rs1,rs2 Codop=0111 rd <- rs1 & rs2 and. r3,r2,r1 or rd,rs1,rs2 Codop=0110 rd <- rs1 j rs2 or r2,r3,r4 ldx rd,(rs1+rs2) Codop=1000 rd <- Mem[rs1+rs2] ldx r2,(r3+r4) stx (rs1+rs2),rd Codop=1001 Mem[rs1+rs2] <- rd stx (r2+r1),r1 ldbx rd,(rs1+rs2) Codop=1010 rd <- Mem[rs1+rs2] & 0x00ff ldbx r2,(r3+r4) ldsbx rd,(rs1+rs2) Codop=1101 rd <- exts(Mem[rs1+rs2] & 0x00ff) ldsbx r2,(r3+r4) stbx (rs1+rs2),rd Codop=1011 Mem[rs1+rs2] <- rd & 0x00ff stbx (r2+r1),r1 12 Format 5 : instructions arithmétiques, logiques et chargement / rangement 1 Codop simm5/uimm5 rs1 rd Mnémonique Format Opération Exemple addi rd,rs1,simm5 Codop=0100 rd <- rs1 + simm5 addi r3,r3,1 addi. rd,rs1,simm5 Codop=0101 rd <- rs1 + simm5 + C ; rcc modifié addi. r4,r5,2 andi. rd,rs1,simm5 Codop=0111 rd <- rs1 & simm5 andi. r4,r2,0xF ori rd,rs1,uimm5 Codop=0110 rd <- rs1 | uimm5 ori r5,r6,0xA ld rd,(rs1+simm5) Codop=1000 rd <- Mem[rs1+simm5] ld r8,(r5+0) st (rs1+simm5),rd Codop=1001 Mem[rs1+simm5] <- rd st (r0+12),r4 ldb rd,(rs1+simm5) Codop=1010 rd <- Mem[rs1+simm5] & 0x00ff ldb r8,(r5+0) ldsb rd,(rs1+simm5) Codop=1101 rd <- Mem[rs1+simm5] & 0x00ff ldsb r8,(r5+0) stb (rs1+simm5),rd Codop=1011 Mem[rs1+simm5] <- rd & 0x00ff stb (r0+17),r4 Format 6 : instructions de décalage 1 1 1 1 type uimm4 rs1 rd Mnémonique Format Opération Exemple lsl rd,rs1,uimm4 type=00 rd <- rs1 << uimm4 lsl r3,r3,1 rol rd,rs1,uimm4 type=01 rd <- rs1 << uimm4 ; les bits de poids faible reçoivent les bits de poids fort éjectés rol r4,r3,15 lsr rd,rs1,uimm4 type=10 rd <- rs1 >> uimm4 lsr r1,r1,3 asr rd,rs1,uimm4 type=11 rd <- rs1 >>uimm4 ; les bits de poids fort sont comblés avec le bit de signe asr r2,r3,4 13 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TD n°3 et n°4 Variables, séquences et conditionnelles simples A l’issue de ce TD, vous serez capable de déclarer des variables simples et de construire des programmes séquentiels contenant des conditionnelles de type si … alors … sinon. Exercice 1 * 1. Soit l’algorithme suivant : Variable X : entier Y : entier Z : entier Debut X 10 Y 0 Z 0 X X * X Y 4 * X Z Y / 3 Z Y - Z Z Z + X X (Y - X) Y (X + Z) Afficher (X, Fin X Y * Z * Y Y, Z) Exécuter cet algorithme « à la main » et donner pour chaque ligne les valeurs des variables X, Y et Z. 2. Traduire cet algorithme en un programme Visual Basic. Pour l’affichage, on utilisera l’instruction MsgBox(....). Exercice 2 * C’est la période des soldes ! 1. On suppose qu’un client profite des soldes pour acheter un article en plusieurs exemplaires. Ecrire un algorithme qui lit le prix de l’article non soldé, le pourcentage de réduction et le nombre d’articles, puis affiche le prix total correspondant. 2. Dessiner une interface graphique permettant la saisie des 3 valeurs (prix, réduction, nombre) et l’affichage du résultat. On pourra utiliser par exemple des boites de dialogue pour l’acquisition (i.e. InputBox(…)) et l’affichage (i.e. MsgBox(…)), ou des champs texte (TextBox.text = …). 3. Traduire l’algorithme écrit en 1, en Visual Basic en tenant compte de l’interface décrite en 2. 14 Exercice 3 1. Ecrire un algorithme qui lit 3 températures en degrés Fahrenheit, puis affiche leurs valeurs et leur moyenne en degrés Celsius, suivant la relation : celsius = (fahrenheit – 32) * 5 / 9 2. Dérouler cet algorithme pour les températures Fahrenheit suivantes : 68 ; 77 ; 113. Exercice 4 * 1. Ecrire un algorithme qui lit et inverse le contenu de deux variables A et B, en utilisant une variable supplémentaire, puis affiche les valeurs de A et B. 2. Ecrire un algorithme qui lit et inverse le contenu de deux variables numériques A et B, sans utiliser une troisième variable, puis affiche les valeurs de A et B. Exercice 5 * Ecrire un algorithme qui permet de dessiner la figure ci-dessous (Remarque : le dessin ci-dessous n’est pas à l’échelle). (0,0) 100 x 100 y On supposera que le point de départ à pour origine (100,100), que le premier segment à une longueur de 140, le deuxième de 120 etc… Pour tracer les segments on utilisera la fonction : DessineLigne(X_depart, Y_depart, X_arrivee, Y_arrive) Exercice 6 * 1. Ecrire un algorithme qui lit deux nombres puis qui affiche le plus grand des deux. 2. Ecrire un algorithme qui lit une valeur réelle représentant une température d’eau et qui répond « glace » si la température est inférieure à 0, « liquide » si la température est entre 0 et 100 et « vapeur » sinon. 3. Ecrire un algorithme qui demande à l’utilisateur trois nombres et les affiche ensuite dans l’ordre croissant. On supposera ici que les trois nombres sont deux à deux différents. 4. Ecrire un algorithme qui demande deux nombres A et B à l’utilisateur et, sans calculer le produit A * B, affiche si le produit est positif, négatif, ou nul. 15 5. Ecrire un algorithme qui lit trois nombres a, b et c et qui affiche les racines du polynôme ax2 + bx + c, si le discriminant (∆) est supérieur ou égal à zéro. Exercice 7 Construire algorithme qui permet d’additionner deux mesures de temps. Par exemple, 7h23min + 3h16min = 10h39min. On demandera à l’utilisateur la première mesure (nombre d’heures et nombre de minutes), puis la deuxième mesure (nombre d’heures et nombre de minutes) et on produira le résultat. On supposera que l’utilisateur donne correctement les valeurs des heures (comprises entre 0 et 23) et des minutes (comprises entre 0 et 59). Exercice 8 A partir des coordonnées de trois points ((Ax, Ay), (Bx, By), (Cx, Cy)), construire un algorithme permettant de déterminer si le triangle construit est isocèle en (Ax, Ay), équilatéral, rectangle en (Ax, Ay). Exercice 9 A partir de 3 couples (note, coefficient), calculer la moyenne obtenue par un élève. On vérifiera que les notes sont bien comprises en 0 et 20. Si la moyenne est inférieure à 5, afficher un avis « nul », comprise en 5 et 10, afficher un avis « insuffisant », comprise entre 10 et 14, afficher un avis « bien », supérieure à 14, afficher un avis « très bien ». Exercice 10 Sur un bateau de plaisance, le choix du mode de propulsion se fait en fonction de la force du vent et de sa direction par rapport à la route choisie. Le tableau ci-dessous est un extrait d’une table permettant de choisir les voiles ou le moteur en fonction de ces deux informations. Force du vent = 0 Force du vent = 1 Force du vent = 2 Force du vent = 3 Force du vent = 4 Force du vent = 5 Direction comprise entre 0 et 45° Moteur Moteur Moteur Moteur Moteur Moteur Direction comprise entre 45 et 130° Moteur Moteur Grand Voile + Génois Grand Voile + Génois Grand Voile + Génois Grand Voile + Génois Direction comprise entre 130 et 180° Moteur Moteur Grand Voile + Spi Grand Voile + Spi Grand Voile + Spi Grand Voile + Génois Construire un algorithme qui permet de décider du choix des voiles ou du moteur en fonction de la force du vent et de la direction du vent par rapport à la route. Exemple d’utilisation : Force du vent ? 3 Direction du vent par rapport à la route ? 75 Vous devez utiliser : Grand Voile + Génois. Question à l’utilisateur Réponse de l’utilisateur Question à l’utilisateur Réponse de l’utilisateur Affichage du résultat 16 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TD n°5, 6 et 7 Itérations (boucle Pour et Tant que) et tableaux L’objectif de ce TD est de mettre en pratique vos connaissances sur les itérations et de travailler sur les tableaux de données. Exercice 1 * – boucle Pour 1. Ecrire un algorithme MoyenneNotes qui demande et lit le nombre N de notes à entrer, puis qui demande et lit les N notes, une par une, pour afficher leur moyenne. 2. Dérouler cet algorithme sur un exemple de 5 notes. Exercice 2 * – boucle Pour 1. Dérouler l’algorithme suivant : Var i, j : entier Début Pour i = 0 jqa 1 Pour j = 0 jqa 1 ecrire(i,j) Fpour Fpour Fin 2. En déduire un algorithme AfficheBinaire qui permet l’affichage des nombres binaires compris en 000 et 111 et leur valeur en base 10. 000 0 001 1 010 2 011 3 100 4 101 5 … Exercice 3 * – boucle Pour et tableaux 1. Ecrire un algorithme NbrOccur qui lit le nombre N d’éléments d’un tableau T, les éléments de T et également un élément x, puis retourne le nombre d’occurrences de l’élément x dans T. Dérouler NbrOccur pour N = 7, T = {53,6 ; 29 ; 6 ; 3,14 ; 29 ; 10,5 ; 29} et x = 29, puis x = 56. 2. Ecrire un algorithme Présence qui lit le nombre N d’éléments d’un tableau T, les éléments de T et également un élément x, puis retourne une position de x dans T si x y est présent, sinon il affiche le message "x n’est pas présent dans T". Dérouler Présence pour N = 7, T = {53,6 ; 29; 6 ; 3,14 ; 29 ; 10,5 ; 29} et x = 29, puis x = 56. Exercice 4 * – boucle Pour et tableaux 1. Ecrire un algorithme PosMinTab qui lit un entier N et les N nombres d’un tableau T et affiche le plus petit élément de T et sa position dans T. Dérouler cet algorithme pour N = 7 et T = {53,6 ; 29 ; 56,7 ; 6 ; 3,14 ; 78 ; 10,5}. 2. Ecrire un algorithme similaire pour un tableau à deux dimensions (matrice NxM). 17 Exercice 5 – boucle Pour et tableaux 1. Ecrire un algorithme Fibonacci(n) qui calcule et affiche chacun des n+1 termes de la suite de Fibonacci définie par : F0 = 0, F1 = 1 et Fn = Fn-1 + Fn-2 pour n > 1. On rangera chaque terme dans une case d’un tableau. 2. Dérouler cet algorithme avec n = 6. 3. Modifier l’algorithme calculer les termes de la suite de Fibonacci, mais sans utiliser de tableau. Exercice 6 – boucle Pour et tableaux L’image miroir d’un tableau T = {e0 ; e1 ; … ; en-2 ; en-1} est le tableau ImT = {en-1 ; en-2 ; … ; e1 ; e0}. 1. Ecrire un algorithme ImageMiroir qui lit le nombre d’éléments et les éléments d’un tableau T et construit dans un second tableau, noté ImT, l’image miroir de T. Dérouler l’algorithme ImageMiroir pour N = 7 et T = {53,6 ; 29,2 ; 56,7 ; 3,14 ; 29 ; 10,5 ; 4}. 2. Ecrire un algorithme ImageMiroir2 qui lit le nombre d’éléments et les éléments d’un tableau T et construit l’image miroir de T dans ce même tableau T. Dérouler l’algorithme ImageMiroir2 pour les données de la question 1. Exercice 7 * – boucle Tant que 1. Ecrire un algorithme Somme qui lit une suite d’entiers positifs et les additionne au fur et à mesure. Le calcul se termine lorsqu’une valeur négative est saisie. 2. Ecrire, en utilisant une boucle Tant que un algorithme MoyenneNotes qui demande le nombre N de notes à entrer, puis qui lit N et les N notes, une par une, pour afficher leur moyenne. 3. Modifier cet algorithme pour vérifier que chaque note saisie est bien comprise entre 0 et 20. Si la valeur saisie est incorrecte, on demandera à l’utilisateur de ressaisir la note incorrecte. Exercice 8 * – boucle Tant que Ecrire un algorithme permettant de dessiner la figure ci-dessous. La longueur du premier segment sera demandée à l’utilisateur. . Entre deux segments, la différence de longueur sera de 10 unités et les segments seront espacés verticalement de 5 unités. On dessinera des segments, tant que les segments auront une longueur supérieure à 10. Exercice 9 * – boucle Tant que On cherche à construire un algorithme permettant de rechercher une valeur V dans un tableau de nombres réels à une dimension TAB[M], tableau que l’on supposera pré-rempli. 1. Proposer un algorithme en supposant que la valeur V est dans le tableau. 2. Proposer un algorithme en supposant que la valeur V est peut-être dans le tableau. 18 Exercice 10 – boucle Tant que On cherche à construire un algorithme permettant de rechercher une valeur V dans un tableau de nombres réels à deux dimensions TAB[M], tableau que l’on supposera pré-rempli. 1. Proposer un algorithme en supposant que la valeur V est dans le tableau. 2. Proposer un algorithme en supposant que la valeur V est peut-être dans le tableau. Exercice 11 – boucle Tant que Ecrire un algorithme permettant de dessiner la figure ci-dessous. L’utilisateur saisira la longueur du segment initial ainsi que le pas (ici, le pas permet de déterminer la différence de longueur entre deux segments consécutif. L’algorithme s’arrêtera lorsque la longueur du segment à dessiner sera inférieure au pas. 19 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TD n°8 Tableaux, chaines et récursivité Exercice 1 * – tri de tableau On souhaite construire un algorithme de tri de tableau par recopie : étant donné un tableau A de N éléments entiers positifs, on cherche à remplir un tableau B contenant les éléments de A dans l’ordre croissant. L’algorithme devra comporter trois étapes principales : acquisition des valeurs de A, tri par recopie puis affichage du tableau B. Pour la partie « tri par recopie », on cherchera la plus grande valeur dans le tableau A que l’on rangera alors dans la dernière case du tableau B. On remplacera cette valeur dans le tableau A par -1, et on cherchera alors la nouvelles plus grande valeur dans le tableau A que l’on rangera alors dans l’avant dernière case du tableau B et ainsi de suite… Initialisation : A = [12, 8, 45, 11] B = [?, ?, ?, ?] Etape 1 : A = [12, 8, -1, 11] B = [?, ?, ?, 45] Etape 2 : A = [-1, 8, -1, 11] B = [?, ?, 12, 45] Exercice 2 * – manipulation des chaines de caractères Pour cet exercice, on utilisera les fonctions longueur(ch) et sous-chaine(ch, debut, longueur). • • • Construire un algorithme permettant de vérifier si la chaine « a » appartient à une chaine donnée ch. Les palindromes sont des mots ou des phrases qui peuvent se lire dans les deux sens, comme par exemple « laval », « kayak », «Karine alla en Irak ». Construire deux algorithmes permettant de vérifier : o si un mot est ou non un palindrome. o si une phrase est ou non un palindrome Construire un algorithme qui permet de calculer le nombre d’occurrences d’une chaine ch1 dans une chaine ch2. Par exemple, la chaine ch1 = « tique » a deux occurrences dans la chaine «les travaux pratiques d’informatique». Exercice 3 * Une manière simple pour représenter une image en informatique est d’utiliser un tableau à deux dimensions. Chaque case du tableau représente alors un pixel et contient une valeur numérique. Cette valeur numérique permet de coder la couleur du pixel. Plusieurs techniques existent pour diminuer la taille d’une image. L’une d’entre elle remplace un groupe de 4 pixels proches par un seul pixel, dont la valeur est la moyenne des 4 pixels du groupe. Exemple : 12 150 27 200 250 252 45 46 112 24 13 250 248 44 12 10 100 45 12 110 100 24 14 250 248 0 127 127 24 13 250 248 65 53 59 100 45 12 110 32 50 100 127 0 0 127 0 127 127 59 60 66 13 66 13 59 43 40 45 0 60 45 0 60 devient donc (résultat partiel) 80 15 … … 66 … … … 250 … 50 … 43 … … … On suppose que l’on possède une image de 1000x1000 pixels, codée dans un tableau INIT de 1000x1000 cases. Proposer un algorithme permettant de réaliser une telle opération de compression vers un tableau COMP de 250x250 cases. 20 Exercice 4 – graphisme et appel de fonctions récursives On souhaite dessiner la figure ci-contre. Le principe est de dessiner d’abord un premier triangle, puis de redessiner dans chaque triangle, sauf celui du milieu la même figure. On obtient la suite de dessins ci-dessous Les triangles, isocèles, seront définis par les coordonnées du sommet supérieur (xA, yA), la hauteur issue de ce même sommet (h) et la largeur de la base (b). A MAC MAB B xB = xA – b/2, xC = xA + b/2, xMBC = xA, xMAB = xA – b/4, xMAC = xA + b/4, MBC yB = yA + h yC = yA + h yMBC = yA +h yMAB = yA + h/2 yMAC = yA + h/2 C Construire l’algorithme de la fonction TrianglesImbriques (xA, yA, h, b, p), avec p la profondeur du dessin : cette fonction permet d’abord le dessin du triangle A-B-C, puis des triangles A-MAB-MAC, MAB-B-MBC, MAC-MBC-C. Elle se conclut, si la profondeur n’est pas égale à 0, à son « autoappel », pour être appliquée dans les 3 triangles précédement construits, avec décrémentation de p. Remarque : on supposera disponible une fonction dessine_triangle(xA, yA, xB, yB, xC, yC). 21 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TD n°9 Introduction aux bases de données Gestion d'une bibliothèque municipale Une bibliothèque municipale possède une collection de 6 000 ouvrages. Afin d'en faciliter la gestion, elle propose de stocker l'ensemble de ses livres dans une base de données. En tant qu'ingénieur en informatique, vous avez pour tâche de concevoir cette base de données. Voici les informations (cahier des charges préliminaire) que vous fournit la bibliothèque municipale : - le budget est de 12 000 euros le nombre de livres est d'environ 6 000 et c'est un employé de la bibliothèque municipale qui remplira, au fur et à mesure la base, chaque livre devra être repéré de manière unique par son code ISBN (lettres + chiffres), un livre peut avoir été écrit par plusieurs auteurs, un livre peut appartenir à plusieurs catégories (sciences, roman, enfant, BD...), un livre doit pouvoir se repérer physiquement rapidement car il se trouve dans une salle particulière (Salle 1 à Salle 4) et sur un rayonnage spécifique (Rayonnage 1 à Rayonnage 50) la base de données a vocation à être utilisée en intranet. Exercice 1 * Étant donné les informations données par la bibliothèque municipale, quelle base de données libre ou du commerce est adaptée à cette problématique. Exercice 2 * Créer une table livres permettant de mémoriser les titres des livres, leur numéro ISBN, leur date d'édition, le nombre de pages, un bref résumé (champ de type mémo), le numéro de la pièce et le numéro du rayonnage. a) Indiquer le type de chacun des champs. b) Indiquer si un champ est une clé. Exercice 3 * Deux nouveaux points sont souhaités par la bibliothèque municipale dans son cahier des charges final : • elle désire avoir une table contenant des informations sur les auteurs et que ces auteurs soient identifiés de manière unique (sans doublons), • de même, elle désire avoir une table contenant des informations sur les catégories (roman, théâtre, science-fiction, aventure...) et que ces catégories soient également identifiées de manière unique. Il faut donc créer deux nouvelles tables : • la table auteurs, qui contient l'identifiant unique d'un auteur (un simple numéro), son nom, son prénom, sa date de naissance, sa date de décès éventuelle et un résumé de sa vie, • la table catégories, qui contient l'identifiant unique d'une catégorie (un simple numéro), le nom de la catégorie et un descriptif de la catégorie. a) Créer ces deux tables 22 Exercice 4 * Deux tables sont encore nécessaires pour répondre au cahier des charges : la table auteurs-livres et la table catégories-livres. a) Créer ces deux tables de jointure pour que : • un livre soit associé à plusieurs auteurs et à plusieurs catégories • une catégorie soit associée à plusieurs livres • un auteur soit associé à plusieurs livres Remarque : les tables de jointure (Catégories-Livres et Auteurs-Livres) auront une seule clé associée à deux champs simultanément. Il est maintenant nécessaire de relier les tables. b) Relier les 5 tables de la base de données. c) Indiquer le type de chacune des relations explicites mise en place. d) Quel type de relation est implicitement réalisé entre la table Livres et la table Auteurs ainsi qu'entre la table Livres et la table Catégories ? Exercice 5 * Remplir la base avec les informations suivantes : • Jules Verne (8/2/1828 à 24/3/1905), auteur de science-fiction a écrit les romans suivants : De la Terre à la Lune, Voyage au centre de la Terre. • Isaac Asimov (2/1/1920 à 6/4/1992), auteur de science-fiction a écrit les romans suivants : Les robots, Fondation, Terre et Fondation. • William Shakespeare (23/4/1564 à 23/4/1616), auteur de pièces de théâtre a écrit : Hamlet, Roméo et Juliette, Le songe d'une nuit d'été. • Victor Hugo (26/2/1802 à 22/5/1885), écrivain romantique (entre autre), auteur de : Notre-Dame de Paris, Les Misérables. NB : on pourra tracer un tableau des enregistrements par table. Pour rappel, les titres des colonnes sont les champs et les lignes sont les enregistrements, c'est à dire les données stockées. Exercice 6 * Votre base de données répond maintenant au cahier des charges final quant à sa structure et contient quelques données qui ont permis de la valider. Il faut maintenant permettre à l'employé de la bibliothèque municipale de saisir les données de manière pratiques. a) b) Quels sont les formulaires (avec éventuellement des sous formulaires) à développer pour permettre une saisie rapide et rigoureuse des données ? Dessiner ces formulaires. Dans quel ordre doivent être remplis les formulaires ? Exercice 7 * Écriture de requêtes SQL. a) b) c) Il est demandé maintenant d'écrire une requête SQL permettant de retrouver tous les auteurs nés au XIXème siècle. Donner la requête SQL permettant de classer tous les auteurs par leur date de naissance. Donner la requête SQL permettant de retrouver tous les livres d'un auteur. Pour l'exemple, nous prendrons le nom Hugo. 23 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TP n°1 Introduction aux TPs et Circuits logiques L’objectif de ce TP est multiple. Il s’agit d’abord de se familiariser avec un micro-ordinateur de type PC et son système d’exploitation Windows 7 et ensuite de découvrir un logiciel permettant la simulation de circuits logiques. 1. Découverte de la machine 1.1 Ouverture d’une session Pour pouvoir utiliser le PC, il faut ouvrir une session. Pour cela, il faut s’identifier auprès de l’ordinateur comme étant un utilisateur autorisé. La marche à suivre est la suivante : - Appuyez simultanément sur les touches Ctrl, Alt et Suppr. Puis, cliquez sur Changer d’utilisateur et sur l’icône Autre utilisateur. Entrez le nom d’utilisateur et le mot de passe qui vous a été attribué individuellement par le département d’Informatique, puis validez en cliquant sur la flèche (ou touche Entrée). Patientez un peu, la première connexion est un peu lente… On se retrouve alors sous l’interface graphique de Windows, avec en bas une barre de menus et à gauche un ensemble d’icônes. Les icônes permettent d’accéder à un ensemble d’outils logiciels ou de périphériques. Une fenêtre apparait également, que vous pouvez fermer en cliquant sur la croix rouge, en haut à droite. En bas à gauche, vous trouverez l’icône de Window. Cliquez dessus avec le bouton de gauche puis, cliquez sur Ordinateur. Nous allons à présent étudier la manipulation de cette fenêtre. 1.2 Manipulation de fenêtres : exemple de l’explorateur de fichiers La figure 1 présente la forme générale d’une fenêtre. Celle-ci comprend un bandeau (qui contient généralement le titre de la fenêtre) et trois boutons (en haut à droite) qui permettent respectivement de réduire la fenêtre, de la maximiser (mode plein écran) ou de la fermer. Lorsque la fenêtre est en mode plein écran, le bouton du milieu permet de rendre à la fenêtre sa taille initiale. Le redimensionnement d’une fenêtre s’effectue à l’aide de la poignée de redimensionnement (mettre la souris sur un des quatre coins) ou bien à l’aide de la bordure de la fenêtre (mettre la souris sur un des 4 cotés). Le déplacement de la fenêtre se fait grâce au bandeau. Expérimenter ces diverses fonctionnalités sur la fenêtre ouverte. D’autres fonctionnalités permettent de modifier la présentation du contenu (ou corps) de la fenêtre. Il est ainsi possible d’afficher les objets sous forme d’icônes ou de listes triées plus ou moins détaillées. 24 Tester ces différentes possibilités. Figure 1 : Explorateur Windows 1.3 Arborescence de répertoires et de fichiers Deux grandes classes d’informations doivent être stockées : - les données du système, en particulier les différents outils disponibles et les informations de configuration de la machine, - les données des utilisateurs de la machine, par exemple les programmes qu’ils ont développés ou les documents qu’ils ont tapés. Toutes ces données peuvent être stockées, soit sur le disque dur de la machine, soit sur une clé USB. En règle générale, les données sont placées sur le disque dur. Etant donné que les ordinateurs sont utilisés par plusieurs étudiants, il est recommandé d’enregistrer les données personnelles (documents, programmes visual basic…) sur une clé USB ou dans votre dossier personnel qui se retrouve à l'identique sur tous les PC. Il est nommé licXXXX(\\vador)(H:), et se trouve dans la partie emplacement réseau. Les données sont stockées sous forme de fichiers. Un fichier contient par exemple un programme, un ensemble de paramètres de configuration, une photographie… Tous ces fichiers doivent être organisés de manière à pouvoir retrouver rapidement des données. Pour cela, on applique les deux principes suivants : - le nom associé à chaque fichier doit identifier clairement son contenu (éviter toutefois les accents, les espaces et autres caractères spéciaux), - Les fichiers sont rangés dans des répertoires (dossiers). 25 Un répertoire est l’équivalent d’un classeur dans lequel on range des fiches (les fichiers) et éventuellement d’autres répertoires (d’autres classeurs). Attention, les dossiers Documents, Images, Musiques etc. sont locaux à une machine. Evitez donc de stocker de l’information dans ces emplacements. Pour un accès facile à votre dossier personnel, créez un raccourci vers votre bureau. Cliquez, avec le bouton de droite sur licXXXX(\\vador)(H:), puis sélectionnez créez un raccourci. Une icône supplémentaire apparait alors sur le bureau. En cliquant dessus avec le bouton de droite vous pouvez le renommer, par exemple ainsi : licXXXX sur vador. Vous pouvez également faire glisser l’icône dans la colonne liens favoris de l’explorateur de fichier. Double-cliquez sur l’icône que vous venez de créer pour voir vos fichiers personnels. 1.3 Création et suppression de répertoires Pour créer un nouveau répertoire, on utilise l’explorateur vu au paragraphe précédent. Il suffit de sélectionner le répertoire dans lequel la création doit être effectuée, puis d’utiliser le bouton Nouveau dossier (Figure 2). Le nouveau répertoire apparaît alors et il suffit de saisir son nom au clavier. Figure 2 : création d'un répertoire (ou dossier) Créer un répertoire TP1 et un répertoire Essai sur le disque dur dans votre répertoire personnel licXXXX(\\vador)(H:). Pour supprimer un répertoire ou un fichier, il suffit, sous l’explorateur, de le sélectionner puis d’utiliser l’option supprimer du menu fichier. Supprimer un répertoire Essai que l’on aura au préalable créé dans votre dossier. 1.4 Menu démarrer Le menu Démarrer est accessible depuis l’icone Windows située en bas à gauche de votre écran. Il permet, dans sa partie gauche d’accéder aux divers logiciel présents sur votre ordinateur. Il propose des accès rapide à certaines applications et des accès spécifiques en cliquant sur Tous les programmes. Lancer le programme Firefox en cliquant sur Tous les programmes -> Mozilla Firefox Pour les logiciels que vous utilisez souvent, pensez à créer des raccourcis sur votre Bureau. 26 1.5 Navigation sur internet Nous avons vu que l’outil explorateur windows permet de naviguer dans les répertoires des différents disques (clé USB, disque dur, CD, DVD…). L’outil FireFox, quant à lui, permet de naviguer dans les différents sites web présents sur internet. On peut également utiliser Internet Explorer. Un site web contient des fichiers et des répertoires. La plupart des fichiers contenus dans un site web sont au format HTML. Il s’agit d’un format permettant d’afficher entre autres, du texte, des images, des animations et des hyper-liens. Un hyper-lien permet de naviguer parmi les pages HTML de façon pratique pour l’utilisateur. L’accès à Internet nécessite la configuration de votre navigateur. Pour Firefox, cliquez sur l’icone en haut à droite (3 barres horizontales) puis Options. Vous devez avoir l’affichage présenté figure 3. Cliquez sur Avancé, puis Réseau puis Paramètres. Une nouvelle fenêtre apparait. Remplissez les champs comme indiqué sur la figure 4. Figure 3 : options de Firefox 27 Figure 4 ; configuration du proxy Vous pouvez maintenant accéder à Internet. Par exemple, dans la zone de saisie de l’adresse web, taper http://www.qwant.com. Figure 5 : fenêtre de l’outil FireFox. Ici elle est sur le site de recherche www.qwant.com. 28 Trouver le site du département d’Informatique, en tapant dans la barre de recherche de Qwant, Informatique UBO Brest. Cliquer alors sur le lien qui mène au site du département d’Informatique. Ce site vous donne des informations générales sur les études en informatique à l’UBO. Parcourez-le pour trouver la fiche descriptive du cours du parcours de Licence Informatique parcours International. A partir de ce site vous pouvez également accéder à l’Intranet du département d’informatique en cliquant sur accès restreints. L’accès étant restreint, vous devez donc taper votre nom d’utilisateur et votre mot de passe de l’ENT (qui sont différents des noms d’utilisateur et mots de passe que vous avez saisi pour vous connecter). Consultez alors le contenu du cours d’introduction à l’informatique (rubrique Pédagogie), et les pages Tout, absolument tout, pour les nouveaux arrivants... et la FAQ des étudiants (rubrique Système). 2. Circuits logiques 2.1 Découverte du logiciel DigSim (Digital Simulateur) DigSim permet de simuler le fonctionnement de circuits logiques (portes ET, OU, NON) En utilisant l’explorateur Windows (menu démarrer, puis choisir Ordinateur), accéder au dossier J:\enseignants\leparc\digsim\classes. Puis, pour lancer le logiciel, double-cliquez sur LancerDigSim. N’hésitez pas à faire un raccourci vers votre bureau. Dans DigSim, créer un nouveau circuit vide en sélectionnant Nouveau dans le menu Fichier. Commencer par créer un circuit élémentaire permettant d'allumer ou d'éteindre une lumière à l'aide : d'un commutateur (interrupteur) d'une alimentation (pile, batterie...) d'une DEL (Diode ElectroLuminescente = lumière) de fil électrique (câblage) Attention : les composants doivent être parfaitement placés les uns avec les autres, c'est à dire placés bout à bout. Les fils de doivent pas se chevaucher mais ils peuvent se croiser. 2.2 Réalisation de petits circuits logiques Exercice 1 1) A l'aide d'une porte ET réaliser un circuit n'allumant une LED que si 2 commutateurs sont enclenchés. 2) Copier le circuit précédent et le coller en dessous. Remplacer la porte ET par une porte OU. 29 Exercice 2 Le OU EXCLUSIF (XOR) est une porte logique à 2 entrées et 1 sortie. La sortie est à 1 si et seulement si une seule des entrée est à 1. Si A et B sont les 2 entrées du XOR, la sortie S est décrite comme suit : S = (A + B).(~A + ~B) Rappel : l'opérateur NON (noté ~ ) est prioritaire sur l'opérateur ET (noté . ) qui lui même est prioritaire sur l'opérateur OU (noté + ). 1) Réaliser le circuit logique correspondant et en vérifier le bon fonctionnement. 2) Réaliser le circuit logique XOR équivalent au premier est donné par : S = (A+B).(~(A.B)) 3) De même réaliser le circuit équivalent : S = (A.~B) + (~A.B) 4) Une autre manière d'avoir le XOR est : S = ~( (A.B) + (~A.~B) ). Exercice 3 Réaliser le demi-additionneur vu en cours : Exercice 4 1) Réaliser l'additionneur complet vu en cours : 2) Réaliser alors un additionneur 4 bits. 30 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TP n°2 Architecture PixArchi est un logiciel qui permet de simuler une architecture de type RISC. Il se trouve dans le répetoire J:\enseignants\leparc\PixArchi. Double-cliquez sur PixArchi pour le lancer. L’écran de PixArchi se divise en trois parties. A gauche, on trouve un dessin des différents composants de l’architecture, pour simuler les opérations pas à pas. A droite, de haut en bas, on trouve le contenu de la mémoire, les registres, le code du programme qui sera exécuté. Il est possible de choisir la base d’affichage des registres et de la mémoire, entre binaire, décimal ou hexadécimal. Tout en bas se trouvent des boutons pour exécuter le simulateur. Le réveil permet de régler la vitesse de simulation (plus le nombre est élevé plus la simulation est lente). Lorsque la simulation commence, le programme est d’abord interprété et chargé en mémoire 1, puis exécuté. On utilisera le bouton “Step” pour exécuter le programme pas `a pas, et “Next” quand on cherche `a exécuter rapidement un programme (sans les animations). Exercice 1 : Lancer la démonstration de PixArchi (menu “Paramètres”, puis “Mode”, puis “Démonstration”) et lire attentivement la notice. Exercice 2 : La correspondance entre l’assembleur et le langage machine est détaillée dans l’aide (choisir “Sommaire”, puis “Références complètes de l’architecture RISC utilisée”). Une description de l’architecture est également proposée dans le sujet du TD n°2. A l’aide de cette aide, trouver le code machine sur 16 bits des instructions : addi r1, r0, 15 ldx r3, (r0 + r1) add r2, r3, r2 Exercice 3 : Entrer (via le bouton ”Editer”) le programme ci-dessous (exercice 2 du TD n°2) et l’exécuter pas à pas, en notant à chaque étape les éléments utilisés de l’architecture, et les registres modifiés. addi r2, r1, 15 add r2, r3, r2 On utilisera le mode “Expert” pour pouvoir modifier les valeurs des registres et/ou de la mémoire avant l’exécution du programme. 1 Noter que l’adresse de la nième ligne de programme est n-1 et non n. 31 Exercice 4 : Saisir, et tester le programme ci-dessous (exercice 3 du TD n°2) dans PixArchi. 0) 1) 2) 3) 4) 5) 6) 7) addi r1, r0, 0 addi r2, r0, 0 st (r2 + 15), r1 addi r2, r2, 1 add r1, r1, r2 addi. r3, r2, -6 bne -5 st (r2 + 15), r1 Modifier ce programme pour réaliser une multiplication (par exemple 4*5). Modifier ce programme pour pouvoir réaliser une division (par exemple 17/5). 32 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TP n°3 et 4 Introduction à Visual Basic Variables, séquences et conditionnelles simples 1. Découverte de Visual Basic .NET 0B 1.1 Généralités 3B Visual Basic est un langage de programmation qui permet le développement de programmes de manière relativement simple. C’ est un des langages de programmation (comme C++, C#, J#) qui utilisent l'environnement Visual Studio. Ce que vous allez apprendre avec Visual Basic s'appliquera donc également aux autres langages de Visual Studio. Le développement d’un programme en VB (Visual Basic), comprend les étapes suivantes : 12345- écriture de l’algorithme (le programme) en visual basic, correction des erreurs de frappe, sauvegarde sur disque du code source, exécution et test du programme, correction des erreurs d’exécution Ces étapes sont résumées par l’organigramme ci-dessous : Saisie du programme oui Erreur de saisie ? non Sauvegarde Exécution Erreur à l’exécution ? oui non Fin Pour bien illustrer la démarche à suivre, nous allons mettre au point un programme permettant de convertir la vitesse du vent. 33 1.2 Exécution de Visual Basic 4B Cliquer sur Démarrer Visual Studio 2015 Après quelques secondes (nécessaires pour la configuration initiale), apparaît alors la fenêtre de gauche. Cliquer sur me rappeler ultérieurement. La fenêtre de droite apparait ensuite. Sélectionnez les paramètres de développement Visual Basic, puis cliquez sur démarrez Visual Studio. Après 1à 2 minutes environ, la fenêtre suivante doit apparaitre. 34 Pour créer un programme en Visual Basic, il faut cliquer sur Fichier Nouveau Projet Il faut alors choisir Visual Basic puis Application Windows Forms. Donner ensuite un nom à votre application (votre programme) en bas de la fenêtre : vent. Cliquer alors sur OK pour valider le nom de votre application. Visual Studio crée pour vous une application Windows minimale, c'est à dire, une fenêtre vide. En cliquant sur Boites à outils, puis sur la punaise vous obtiendrez la figure ci-dessous. Dans la suite du TP nous complèterons cette fenêtre en lui ajoutant un bouton d'action. La fenêtre principale de Visual Studio se divise en plusieurs zones bien distinctes. Nous n'utiliserons pour commencer qu'une toute petite partie de chaque zone de l'interface. Au début, l'interface semble complexe, mais avec l'usage vous vous rendrez compte qu'elle est bien pratique. Dans un premier temps, il faut bien suivre le sujet du TP jusqu'au bout, ensuite, vous pourrez découvrir les différents menus et tester les différents boutons proposés par cet environnement de développement de logiciels. 35 Exercice 1 A ce stade, Visual Studio a créé pour vous la structure de base de votre application, c'est à dire une fenêtre vide. Pour tester cette fenêtre, cliquer sur l'icône qui se trouve dans la barre d'outils. Apparaît alors la fenêtre suivante : 5BU Il faut fermer la fenêtre pour poursuivre la mise au point de notre programme. Nous allons ajouter un bouton à notre fenêtre en cliquant sur le bouton dans la boîte à outils, puis en cliquant dans la fenêtre vide là où l'on veut placer le bouton. Nous obtenons la fenêtre suivante : Il faut maintenant faire un double clic sur le bouton que nous venons d'insérer pour créer le code visual basic qui sera exécuté : Pour le moment, il n'est pas nécessaire de comprendre entièrement le code qui a été créé par Visual Studio. Seul Button1_Click nous est utile : ce nom indique clairement que le code sera exécuté lorsque nous cliquerons sur notre bouton. Le code Visual Basic doit être saisi entre Sub Button1_Click(...) et End Sub. Nous allons faire un simple test en ajoutant la ligne de code : MsgBox("Bonjour"). Voici à quoi doit ressembler votre code : 36 Nous remarquons bien que le code est entre Sub ... et End Sub. Il en sera toujours de même dans tous les TP. Vous pouvez maintenant tester votre programme en cliquant à nouveau sur le bouton puis sur le bouton de votre fenêtre (bouton1). Vous devriez avoir un affichage similaire à celui-ci. 3 fenêtres sont visibles • La fenêtre de Visual Studio en arrière-plan. Sur la partie gauche, on retrouve le programme et au milieu des outils de diagnostic. • La fenêtre de votre programme en cours d’exécution (intitulée Form1). • La fenêtre de dialogue ouverte grâce à l’instruction MsgBox. Si vous avez une erreur à l'exécution, il faut cliquer sur le bouton Stop (le bouton carré de droite) et corriger votre code. Si tout s'est bien passé, bravo, vous venez de réussir votre premier programme Visual Basic ! Penser à le sauvegarder. 6BU 37 Exercice 2 Maintenant, nous allons permettre à l'utilisateur de saisir une donnée au clavier puis nous l'afficherons dans une boite à l'écran (MsgBox). Pour cela, il nous faut une boite de saisie qui se nomme en Visual Basic InputBox. Nous allons donc commencer par effacer la ligne MsgBox("Bonjour") pour écrire à la place le code suivant : Dim v As Single v = InputBox("Entrer la vitesse du vent en km/h") MsgBox("La vitesse du vent en km/h est de " & v) Explication du code : • Dim v As Single signifie que nous allons utiliser une variable pour stocker un nombre non entier (Single). Cette variable s'appelle v (le nom de la variable est laissé au choix du programmeur). • v = InputBox("Entrer la vitesse du vent en km/h ") va afficher une boite de saisie à l'écran. L'utilisateur (vous en l'occurrence), va devoir saisir un nombre. Le nombre saisi par l'utilisateur va alors être placé dans la variable v. • MsgBox("La vitesse du vent en km/h est de " & v) affiche le message "La vitesse du vent est de" suivi de la valeur de la variable v. L'opérateur & permet d'afficher à la fois du texte et des nombres. Tester votre programme avec une vitesse de vent de 10, puis avec une vitesse de 12,5. Exercice 3 Nous allons ajouter un calcul de conversion pour transformer la vitesse du vent en km/h, en vitesse du vent en noeuds. Un noeud correspond approximativement à 1,85 km/h. Il suffit pour cela de modifier l'affichage du résultat en modifiant la ligne contenant le MsgBox pour obtenir : 7BU MsgBox("La vitesse du vent en noeuds est de " & v / 1.85) Exercice 4 Nous allons encore plus loin car nous allons modifier le programme pour qu'il affiche les résultats en Beaufort (l'échelle Beauforts mesure aussi la vitesse du vent, mais en force : force 0 (calme), force 1 (Très légère brise) ... jusqu'à force 12 (ouragan). Pour cela nous allons compléter le programme déjà commencé. Pour débuter nous ne traitons que les forces 0 et 1 en ajoutant le code suivant : 8BU If v < 1 Then MsgBox("Force 0 - Calme") End if If v >= 1 And v < 5 Then MsgBox("Force 1 - Très légère brise") End if Notez que la vitesse du vent est affichée en noeuds grâce au calcul de v / 1.85. Cependant, la valeur de v saisie est toujours en km/h. Si l'on étudie le premier test : If v < 1 Then MsgBox("Force 0 - Calme") End if Cela signifie que : Si la vitesse v est inférieure strictement à 1, Alors Visual Basic affiche "Force 0 - Calme" à l'écran, dans une boite de dialogue. 38 Echelle de Beaufort : Nombre de Beaufort Terme générique Vitesse du vent à 10 m de hauteur Que se passe-t-il au large ? (degré) 0 (descriptif) Calme en km/h en noeuds moins de 1 moins de 1 (remarques) la fumée s'élève verticalement ; la mer est comme un miroir 1 Très légère brise 1à5 1à3 il se forme des rides, mais il n'y a pas d'écume 2 Légère brise 6 à 11 4à6 vaguelettes courtes ; leurs crêtes ne déferlent pas 3 Petite brise 12 à 19 7 à 10 très petites vagues ; écume d'aspect vitreux 4 Jolie brise 20 à 28 11 à 15 petites vagues devenant plus longues ; moutons nombreux 5 Bonne brise 29 à 38 16 à 21 vagues modérées, allongées ; moutons nombreux 6 Vent frais 39 à 49 22 à 26 des lames se forment ; crêtes d'écume blanche plus étendues 7 Grand frais 50 à 61 27 à 33 la mer grossit ; l'écume est soufflée en trainées ; lames déferlantes 8 Coup de vent 62 à 74 34 à 40 9 Fort coup de vent 75 à 87 41 à 47 lames de hauteur moyenne ; de leurs crêtes se détachent des tourbillons d'embruns grosses lames ; leur crête s'écroule et déferle en rouleaux 10 Tempête 88 à 102 48 à 55 11 Violente tempête 103 à 117 12 Ouragan plus de 118 très grosses lames à longues crêtes en panache ; déferlement en rouleaux intense et brutal 56 à 63 lames exceptionnellement hautes ; mer recouverte de bancs d'écume blanche plus de 64 air plein d'écume et d'embruns ; mer entièrement blanche ; visibilité très réduite 39 Exercice 5 9BU A l’aide de la boite à outils, ajouter un nouveau bouton ainsi qu’un label. Faire un double clic sur le nouveau bouton (attention, pas sur le label) et reprendre le code de l’exercice 4 (utiliser le copier/coller). Remplacez MsgBox("La vitesse du vent en km/h est de " & v) par Label1.Text = "La vitesse du vent en km/h est de " & v De la même manière, ajouter un nouveau Label et remplacer les 2 autres MsgBox par Label2.Text = … 1.3 Exécution pas à pas du programme Il est possible d’exécuter un programme pas à pas en Visual Basic afin de bien voir le déroulement du code pendant qu’il s’exécute. Pour se faire, il faut ajouter un point d'arrêt. Un point d'arrêt permet de stopper le programme en cours d'exécution à un endroit bien précis puis de suivre ensuite son déroulement ligne par ligne. Pour faire cela, il faut placer votre curseur sur la ligne : MsgBox("La vitesse du vent en noeuds est de " & v / 1.85) de l’exercice 4 et appuyer sur la touche F9 (ou bien menu Déboguer-> Basculer le point d’arrêt) La ligne apparaît alors en rouge avec un point rouge sur la gauche. Vous pouvez maintenant exécuter le programme, puis saisir un nombre pour la vitesse du vent. Juste après avoir cliqué sur ok, votre programme est stoppé et le code est mis en avant. Il vous suffit de sélectionner Pas à pas détaillé dans le menu Déboguer (ou appuyer sur la touche F11) pour faire exécuter une ligne après une autre. C'est la ligne en rouge qui va s'exécuter, donc vous allez voir à l'écran la boite qui affiche la vitesse en noeud. Si vous cliquez sur ok, vous retournez au code de votre programme. Pendant le pas à pas, il est possible de connaître la valeur d’une variable en plaçant le pointeur de la souris sur la variable en question. Placer par exemple votre curseur sur la variable v pour connaître sa valeur. Entraînez-vous à faire du pas à pas en changeant de place au point d'arrêt. 1B 40 2 Introduction au graphisme Exercice 6 10BU Cet exercice nécessite la mise en place d’une zone de dessin. 1. Ouvrez un nouveau projet (Fichier Nouveau Projet) 2. Donnez-lui le nom : TestGraphique 3. Agrandissez la Form1 pour obtenir une taille de 600x600 (Fenêtre Propriétés – Size) 4. Sur la Form1, installez un « panel »(Boite à outils – Conteneurs) 5. Renommez ce panel : zoneDessin (Fenêtre Propriétés – (Name)). Par défaut le premier panel se nomme panel1. 6. Agrandissez le panel zoneDessin pour obtenir une taille 400x400 (Fenêtre Propriétés – Size) 7. Changez la couleur du panel zoneDessin (Fenêtre Propriétés – BackColor) 8. Sauvegardez votre travail (Fichier Enregistrer tout) 9. Double cliquez sur la zone form1. Modifiez le code pour qu’il soit le suivant : Public Class Form1 Dim g As Graphics Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles Mybase.Load g = zoneDessin.CreateGraphics End Sub End Class 10. Tester Il est maintenant possible de dessiner dans cette zone de dessin : 1. Cliquez sur l’onglet Form1.vb[Design] 2. Ajoutez un bouton (Boite à outils – Contrôles communs) 3. Donnez-lui le nom : BDessin : : (Fenêtre Propriétés – Name ) 4. Changer son label (Dessin) : (Fenêtre Propriétés – Text) 5. Double cliquer sur le bouton BDessin. Ajouter au code les instructions suivantes : g.FillRectangle(Brushes.White, 100, 100, 100, 100) g.FillEllipse(Brushes.Black, 100, 100, 100, 100) g.FillRectangle(Brushes.White, 150, 100, 50, 100) g.FillEllipse(Brushes.White, 125, 100, 50, 50) g.FillEllipse(Brushes.Black, 125, 150, 50, 50) g.DrawEllipse(Pens.Black, 100, 100, 100, 100) g.FillEllipse(Brushes.Black, 145, 120, 10, 10) g.FillEllipse(Brushes.White, 145, 170, 10, 10) 6. Sauvegarder votre travail 7. Tester. 8. Modifier le programme pour que le dessin s’affiche en 2 fois plus grand, au point d’origine (100, 250). 41 3 Exercices complémentaires 2B Exercice 7 – Tetris – fonctions de base 1BU Ouvrir un nouveau projet nommé Tetris. Ajouter une zone de dessin de 200x400, ainsi que deux boutons nommés carrés et carrés alignés. L’appui sur le bouton carrés alignés doit permettre la création d’une suite de 4 carrés alignés de taille 18x18, espacés de 2, avec le premier carré ayant pour origine supérieure gauche (21,21) L’appui sur le bouton carrés doit permettre la création d’une suite de 4 carrés de taille 18x18, espacés de 2, avec le premier carré ayant pour origine supérieure gauche (21,61) et formant un carré. Exercice 8 12BU Ecrire un programme Visual Basic permettant, pour un sportif, le calcul et l’affichage de sa fréquence cardiaque maximum ainsi que sa fréquence cardiaque d’entrainement. La fréquence cardiaque maximum (FM) est calculée en fonction de l’âge du sportif : FM = 220 – age La fréquence d’entraînement (FE) correspond au 3/4 de la fréquence maximum : FE = FM * 0.75 L’affichage se fera à l’aide de Label ou de MsgBox. (On peut aussi faire les deux pour s’entrainer). Exercice 9 13BU Construire un programme Visual Basic permettant de trouver le minimum de trois nombres compris entre 0 et 75. On pourra faire l'acquisition des trois membres à l’aide d'un composant NumericUpDown et l'affichage dans une boîte de dialogue de type MsgBox. Exercice 10 14BU Les événements générés par un clic sur la souris, peuvent être captés en Visual Basic et donner lieu à des actions. Créez un nouveau projet contenant une zone de dessin (= panel + contexte graphique). Une fois la zone de dessin créé, cliquez dessus et consultez la fenêtre des propriétés (en général, elle se situe en bas à droite). 42 Cliquez sur le symbole représentant un éclair de couleur jaune. Une liste déroulante apparaît, double-cliquez sur MouseClick. Vous devez normalement vous trouver dans une zone de code similaire à celle-ci : Private Sub Panel1_MouseClick(sender As System.Object, System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseClick e As End Sub Modifier le code pour qu'il corresponde au code ci-dessous (e.X et e.Y représentent les coordonnées de la souris dans la zone de dessin) : Private Sub Panel1_MouseClick(sender As System.Object, System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseClick e As Dim click_x, click_y As Integer click_x = e.X click_y = e.Y g.DrawLine(Pens.Blue, 0, 0, click_x, click_y) End Sub Modifier à nouveau le code pour qu'un clic dans la zone de dessin provoque le dessin d'un carré de taille 20 X. 20. Modifier à nouveau le code pour qu'un click dans la zone de dessin provoque le dessin d'un trait entre le point cliqué et le point précédemment cliqué. On supposera que le point initial se trouve en (0, 0). 43 ANNEXE : syntaxe des structures de contrôle Structures Langage algorithmique (français) Si condition alors Traitement Fin si Langage Visual Basic If condition then Traitement End if Si condition alors Traitement 1 Sinon Traitement 2 Fin si If condition then Traitement 1 Else Traitement 2 End if Cas Condition 1→ traitement 1 Condition 2→ traitement 2 … Autre → traitement n Fin cas Conditionnelles Cas Select Case x Case ‘a’ x = ‘a’ → traitement 1 x = ‘c’ → traitement 2 … autre → traitement n Fin cas Tant que condition faire Traitement Fin tant que Pour x allant de 0 à 9 Traitement Fin pour Afficher « Bonjour » Afficher x Afficher « La valeur de x est : », x x ← lire « Valeur de x ? » x ← 10 x ← (a + b) . c / 102 ‘ Ceci est un commentaire While condition Traitement End While For x=0 to 9 Traitement Next x MsgBox (« Bonjour ») MsgBox x MsgBox (« Bonjour » & x) x = InputBox (« Valeur de x ? ») x = 10 x = (a + b) * c / 10^2 ‘ Ceci est un commentaire Répéter Affectation Commentaires Traitement 2 … Case Else Traitement n End Select Traitement Jusqu’à condition x = 1 ou 2 → traitement 1 x entre 5 et 10 → traitement 2 … Autre → traitement n Fin cas Interactives Traitement 1 Case ‘c’ Select Case x Case 1, 2 Traitement 1 Case 5 to 10 Traitement 2 … Case Else Traitement n End Select Do Traitement Loop until condition Cas Itératives If condition 1 then Traitement 1 Elseif condition2 then Traitement 2 … Else Traitement n End if 44 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TP n°5 et 6 Itérations (boucle Pour et Tant que) et tableaux Exercice 1 – calcul de moyenne – boucle pour et tantque 1. Ecrire un programme permettant de calculer la moyenne de N notes : le programme demandera le nombre N de notes, puis chacune des notes, une par une, et affichera ensuite leur moyenne. 2. Ecrire un deuxième programme permettant de calculer la moyenne d’une suite de notes terminées par -1 (exemple : 12, 10, 14, 16, -1….. moyenne de 13). 3. Modifier le programme de la question 1 pour vérifier que chaque note saisie est bien comprise entre 0 et 20. Si la valeur saisie est incorrecte, on demandera à l’utilisateur de ressaisir la note incorrecte Exercice 2 – boucle Pour et tableaux 1. Ecrire un programme qui lit le nombre N d’éléments d’un tableau T, les éléments de T et également un élément x, puis retourne le nombre d’occurrences de l’élément x dans T. 2. Ecrire un programme qui lit le nombre N d’éléments d’un tableau T, les éléments de T et également un élément x, puis retourne une position de x dans T si x est présent, sinon il affiche le message "x n’est pas présent dans T". Exercice 3 – boucle Tant que Ecrire un programme permettant de dessiner la figure ci-dessous. La longueur du premier segment sera demandée à l’utilisateur. Entre deux segments, la différence de longueur sera de 10 unités et les segments seront espacés verticalement de 5 unités. On dessinera des segments, tant que les segments auront une longueur supérieure à 10. Exercice 4 – boucle Tant que Ecrire un programme permettant de dessiner la figure ci-dessous. L’utilisateur saisira la longueur du segment initial ainsi que le pas (ici, le pas permet de déterminer la différence de longueur entre deux segments consécutifs. Le programme s’arrêtera lorsque la longueur du segment à dessiner sera inférieure au pas. 45 Exercice 5 – boucle Tant que On cherche à construire un algorithme permettant de rechercher une valeur V dans un tableau de nombres réels à une dimension TAB[M], tableau que l’on supposera pré-rempli. 1. 2. Proposer un algorithme en supposant que la valeur V est dans le tableau. Proposer un algorithme en supposant que la valeur V est peut-être dans le tableau. 46 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TP n°7 et n°8 Exercice 1 On souhaite dessiner des suites d’hélices imbriquées. 1. Construire une procédure, qui étant donné les coordonnées du centre (xC, yC) et la largeur lh de l’hélice, permet le dessin ci-dessous. Le point A, a pour coordonnées (xC-lh, yC-lh). Le point B, a pour coordonnées (xC, yC –lh/2) On pourra expérimenter avec xC = 200, yC = 200 et lh = 100. A B C 2. Utiliser la procédure construite précédemment afin de construire des hélices imbriquées. On diminuera la largeur de l’hélice de moitié à chaque itération, tant que la largeur est supérieure à 10. On pourra expérimenter avec xC = 300, yC = 300 et lh = 250. 3. On cherche maintenant à construire la figure ci-après, qui fera appel aux procédures construites en 1 et 2. On pourra expérimenter avec un premier centre d’hélice ayant pour coordonnées xC = 70, yC = 70 et une longueur lh = 60. 47 Exercice 2 – Manipulation des chaines de caractères Pour cet exercice, on utilisera les fonctions len(ch) et ch.substring(debut, longueur). La première fonction permet le calcul de a longueur d’une chaine, et la deuxième permet d’extraire une sous-chaine de longueur « longueur » de la chaine ch et commençant en « debut ». Exemple d’utilisation Dim machaine as string = « bonjour » Dim masouschaine as string Dim lgr as integer lgr = len(machaine) masouchaine = machaine.substring(2,3) • • • ‘ retourne la valeur 7 ‘ retourne « njo » Construire un programme permettant de vérifier si la chaine « a » appartient à une chaine donnée ch. Les palindromes sont des mots ou des phrases qui peuvent se lire dans les deux sens, comme par exemple « laval », « kayak », «Karine alla en Irak ». Construire deux programmes permettant de vérifier : o si un mot est ou non un palindrome. o si une phrase est ou non un palindrome Construire un programme qui permet de calculer le nombre d’occurrences d’une chaine ch1 dans une chaine ch2. Par exemple, la chaine ch1 = « tique » a deux occurrences dans la chaine «les travaux pratiques d’informatique». 48 Exercice 3 – appel de fonctions récursives On souhaite dessiner la figure ci-dessous. Le principe est de dessiner d’abord un premier triangle, puis de redessiner dans chaque triangle, sauf celui du milieu la même figure. On obtient la suite de dessins ci-dessous Les triangles, isocèles, seront définis par les coordonnées du sommet supérieur (xA, yA), la hauteur issue de ce même sommet (h) et la largeur de la base (b). A MAC MAB B xB = xA – b/2, xC = xA + b/2, xMBC = xA, xMAB = xA – b/4, xMAC = xA + b/4, MBC yB = yA + h yC = yA + h yMBC = yA +h yMAB = yA + h/2 yMAC = yA + h/2 C 49 L’algorithme repose sur une fonction Dessine_triangle (xA, yA, h, b, g, p), avec g la référence de la zone de dessin et p la profondeur du dessin. Cette fonction permet d’abord le dessin du triangle A-B-C, puis des triangles A-MAB-MAC, MAB-B-MBC, MAC-MBC-C. Elle se conclut, si la profondeur n’est pas égale à 0, à son « autoappel », pour être appliquée dans les 3 triangles précédemnt construits, avec décrémentation de p. Remarque :on construira la fonction ci-dessous pour dessiner un triangle. Public Sub FillTriangle(ByVal couleur As System.Drawing.Brush, ByVal xa As Integer, ByVal ya As Integer, ByVal xb As Integer, ByVal yb As Integer, ByVal xc As Integer, ByVal yc As Integer, ByVal g As Graphics) Dim points(2) As System.Drawing.Point points(0) = New Point(xa, ya) 'Top Left of Trapezoid points(1) = New Point(xb, yb) 'Top Right of Trapezoid points(2) = New Point(xc, yc) 'Bottom Right of Trapezoid g.FillPolygon(couleur, points) End Sub Exercice 4 – Tetris suite Modifier le programme Tetris réalisé lors des TPs précédents afin de : 1. Dessiner un quadrillage : lignes verticales de longueur 400 aux points d’abscisse 0, 20, 40, … 200 et lignes horizontales de longueur 200 aux points d’ordonnée 0, 20, 40, … 380, 400. 2. Définir un tableau à deux dimensions, nommé Mazone, représentant de manière interne chaque case du quadrillage. On initialisera ce tableau afin que la colonne la plus à gauche, la colonne la plus à droite et la ligne inférieure aient des valeurs égales à -1, et que les autres cases du tableau aient des valeurs égales à 0 3. Remplir le quadrillage avec des carrés de couleur rouge, pour les valeurs du tableau Mazone égales à -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 Résultat question 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 Tableau Mazone 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 Résultat question 3 4. On souhaite manipuler un objet en forme de T. Ses coordonnées [(x0, y0) ; (x1, y1) ; (x2, y2) ; (x3, y3)] seront stockées dans un tableau nommé MonObjet. Initialiser ce tableau et 50 construisez une fonction permettant de dessiner l’objet à l’emplacement indiqué cidessus. 5. Rajoutez à votre interface deux boutons permettant de déplacer l’objet en forme de T vers la gauche ou la droite. Attention, il vous faudra construite une fonction permettant d’effacer l’objet et vous devrez également faire en sorte que votre objet reste dans la zone de jeu (la zone bleue) 6. Ajoutez ensuite un événement « Timer », permettant la descente régulière de l’objet. Vous devrez utiliser les deux instructions suivantes pour spécifier la durée du « Timer » et l’activer. a. Timer1.Interval = 1000 b. Timer1.Enable = True 7. Il ne reste plus qu’à gérer la dépose des objets, et l’élimination des lignes complètes. 51 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TP n°9 Introduction aux bases de données Lancer ACCESS : Menu Démarrer=> Microsoft Office ACCESS (ou bien : Menu Démarrer=>Tous les programmes=>Microsoft Office-> Microsoft Office ACCESS) La fenêtre principale de la base apparaît alors : Cliquer sur le bouton Office (bouton rond en haut à gauche) puis sur la commande Nouveau. Puis, nommer votre base Bibliothèque (à droite de la fenêtre principale) : Cliquer ensuite sur Créer pour créer la base de données. Par défaut, la fenêtre permettant de saisir le contenu des tables apparaît : 52 Exercice 1 Pour passer en mode création, il faut cliquer sur le bouton Affichage (en haut à gauche) et choisir l’icône Création : Commencer par nommer la table en « Livres » (par défaut, le nom est « Table1 »). NB : Par la suite, vous créerez toujours les tables en mode Création. Lorsque vous souhaiterez saisir le contenu des tables (les données, appelées aussi les enregistrements), il faudra choisir le mode Feuille de données (onglet Accueil, bouton Affichage). Créer la table selon le modèle suivant : Pour placer la clé sur le champ ISBN (si ce n’est pas déjà fait), il faut faire un clic droit sur la zone grise à gauche du nom du champ puis cliquer sur Clé primaire. Enregistrer enfin votre table (par exemple en passant en affichage Feuille de données). Exercice 2 Mettez en œuvre avec ACCESS les autres tables vues en TD (toujours en mode création) : Catégories Auteurs Catégories-Livres Auteurs-Livres Remarque 1 : pour les clés de type numérique, on évitera une numérotation automatique. Remarque 2 : les tables de jointure (Catégories-Livres et Auteurs-Livres) auront une seule clé associée à deux champs (sélectionner les deux champs avec la touche CTRL puis clic droit puis clé primaire). 53 Exercice 3 Mettez en place les relations entre les tables. Pour cela, sélectionner l’onglet Outils de base de données (en haut) puis cliquer sur le bouton relations : Ajouter les tables dans le plan de travail. Puis cliquer sur le champ à relier, maintenir le clic et déplacer la souris sur l'autre champ à relier. Une fois dessus, relâcher le clic. La relation apparaît alors. Renouveler l'opération pour toutes les relations nécessaires. Exercice 4 Remplir les tables avec les données suivantes : 2 catégories : Sciences Fiction et Poésie 2 auteurs : Jules Verne et Charles Baudelaire 2 livres : Voyage au centre de la terre de Jules Verne (1864) dans la catégorie Sciences Fiction et Les fleurs du mal de Charles Baudelaire (1857). Enfin, remplir les tables Catégories-Livres et Auteurs-Livre de manière adéquate. Exercice 5 Créer un formulaire pour les auteurs, les catégories et les livres (en mode assistant). Pour cela, sélectionner l’onglet Créer puis cliquer sur Plus de formulaires puis Assistant Formulaire : On placera tous les champs de la table dans le formulaire. Vérifier que les données précédemment enregistrées sont bien affichées. Exercice 6 Pour apprendre à bien manipuler ACCESS, ajouter un nouveau livre de Jules Verne (par exemple De la Terre à la Lune, publié en 1865). Exercice 7 Crée une requête simple (onglet Créer, bouton Création de requêtes) permettant d’afficher tous les livres de Jules Verne. Exercice 8 Crée une autre requête simple permettant d’afficher tous les livres publiés entre 1855 et1860. 54 Université de Bretagne Occidentale - UFR Sciences - Département d’Informatique Licence 1ère année (S1), Parcours 1 Introduction à l’Informatique TP n°10 Gestion d’un stock de voitures Un garagiste multi marques possède un stock d'environ 400 véhicules d'occasion. Afin d'en faciliter la gestion, il propose de gérer cet ensemble de voitures et utilitaires dans une base de données. En tant que concepteur, vous avez pour tâche de concevoir cette base de données. Voici les informations (cahier des charges préliminaire) que vous fournit le garagiste : - le budget est de 18000 euros - le nombre de véhicules est d'environ 400 et c'est un employé du garage qui remplira, au fur et à mesure la base, - chaque véhicule devra être repéré de manière unique par son numéro d'immatriculation, - un véhicule possède une marque (Renault, Peugeot, Citroën, Volkswagen…), - un véhicule appartient à une catégorie (petite, compacte, routière, utilitaire), - un véhicule a un kilométrage, - un véhicule a une année de fabrication, - un véhicule possède une motorisation spécifique (1,2 litre essence, 2,0 litres diesel…), - un véhicule possède une couleur, - la base de données a vocation à être utilisée en intranet et internet. NB : Avant de vous lancer sur Access, il est préférable de prendre un papier et un crayon pour mettre en place les tables et leurs relations. C’est pourquoi, les exercices 1 à 5 sont à faire sur papier Exercice 1 Écrire une table « véhicules » permettant de mémoriser les véhicules et leurs caractéristiques. A- Indiquer le type de chacun des champs. B- Indiquer si un champ est une clé. Exercice 2 Écrire les autres tables qui sont utiles pour compléter la base : A- Une table « marques » contenant les différentes marques existantes, B- Une table « catégories » mémorisant les catégories de véhicules. C- Une table « couleurs » contenant les couleurs possibles pour les véhicules. 55 Exercice 3 Il est maintenant nécessaire de relier les tables. A- Relier les tables de la base de données. B- Indiquer les valeurs aux extrémités de chacune des relations mise en place (1 ou N). Exercice 4 Votre base de données maintenant répond au cahier des charges préliminaire. Cependant, un point nouveau est souhaité par le garagiste dans son cahier des charges final : il désire avoir une table contenant des informations sur les anciens propriétaires des véhicules. Il faut donc créer une nouvelle table : - la table propriétaires, qui contient l'identifiant unique d'un propriétaire (un simple numéro), son nom, son prénom et son adresse. - Il est à noter qu'un propriétaire peut avoir eu plusieurs véhicules (une table jointure véhicules-propriétaires devra donc être créée) Il est à noter que la table contenant les noms des propriétaires est uniquement à usage interne avec un droit de regard, de modification ou de suppression de la part des ex-propriétaires (loi informatique et liberté). Il n'est pas demandé ici de sécuriser la base. A- Écrire ces deux tables B- Relier ces deux tables aux tables précédentes en modifiant éventuellement certaines des tables précédentes. C- Quel type de relation est implicitement effectué entre la table Véhicules et la table Propriétaires ? Exercice 5 Dans quel ordre faut-il saisir les données dans les tables ? Est-ce d’abord les tables principales (Véhicules, Propriétaires…) qu’il faut remplir ou bien les tables de jointure (véhiculespropriétaires) ? Justifier votre réponse. Votre base de données maintenant répond au cahier des charges final quant à sa structure. Il faut maintenant la créer avec ACCESS et y rentrer des données. 56 Développement de la base avec Access Lancer ACCESS : Menu Démarrer=> Microsoft Office ACCESS (ou bien : Menu Démarrer=>Tous les programmes=>Microsoft Office-> Microsoft Office ACCESS) Cliquer sur le bouton Office (bouton rond en haut à gauche) puis sur la commande Nouveau. Puis, nommer votre base Garage (à droite de la fenêtre principale). Exercice 6 Créer la table véhicule en mode création (rappel du TP 9: par défaut, la table est en mode Feuille de données). Rappel : pour placer la clé, il faut faire un clic droit sur la zone grise à gauche du nom du champ considéré. Exercice 7 Mettez en œuvre avec ACCESS les autres tables écrites précédemment (toujours en mode création) : Remarque 1 : pour les clés de type numérique, on évitera une numérotation automatique. Remarque 2 : les tables de jointure auront une seule clé associée à deux champs (sélectionner les champs avec la touche CTRL puis clic droit puis ajouter une clé). Exercice 8 Mettez en place les relations entre les tables. Pour cela, sélectionner l’onglet Outils de base de données (en haut) puis cliquer sur le bouton relations : Ajouter les tables dans le plan de travail. Puis cliquer sur le champ à relier, maintenir le clic et déplacer la souris sur l'autre champ à relier. Une fois dessus, relâcher le clic. La relation apparaît alors. Renouveler l'opération pour toutes les relations nécessaires. Exercice 9 Créer un formulaire pour les véhicules, les catégories, les propriétaires, les marques et les couleurs (en mode assistant). Pour cela, sélectionner l’onglet Créer puis cliquer sur Plus de formulaires puis Assistant Formulaire : On placera tous les champs de la table dans le formulaire. 57 Exercice 10 Remplissez les formulaires avec 3 véhicules, 4 marques, 4 couleurs, 4 propriétaires et 3 catégories. Exercice 11 A- Créer un état (onglet Créer, bouton Assistant état) permettant de visualiser l'ensemble des véhicules. B- Créer un état permettant de visualiser l'ensemble des marques (il serait intéressant que la table marques possède un champ pays indiquant le pays de fabrication). Exercice 12 Créer graphiquement les requêtes suivantes (onglet Créer, bouton Création de requêtes) puis les tester : A- Créer une requête permettant de retrouver tous les véhicules de la catégorie « routière ». B- Créer la requête permettant de trier tous les véhicules par leurs marques. C- Créer la requête permettant de retrouver tous les véhicules ayant appartenu à l'un des propriétaires. Par exemple, nous prendrons le nom « Dupont ». 58 Université de Bretagne Occidentale UFR Sciences Département d’Informatique LICENCE 1 L1, S1, 2007-2008 Parcours A, IMP Introduction à l’Informatique Mémo ACCESS Pascal Ballet I Qu'est-ce qu'Access ? Access est un système de gestion de base de données relationnelle. En d'autres mots, Access permet de stocker des données sous la forme de tables reliées entre-elles par des relations. Nous verrons plus loin ce que signifient les relations. Pour l’instant concentrons-nous sur les données. II Qu'est-ce qu'une table ? II-1 Une table vide Une table peut être vue comme l'entête d'un simple tableau. Par exemple, le tableau suivant (carnet d'adresse) peut être vu comme une table ayant 4 champs : Nom, Prénom, Adresse et Téléphone. Carnet d'adresse (sous la forme d'un simple tableau) Nom Prénom Adresse Téléphone En effet, sous Access, la table permettant de faire l'équivalent de ce carnet d'adresse est : = Carnet d'adresse (sous la forme d'une table Access) Nom du champ Nom Prénom Adresse Téléphone Il faut ici bien comprendre que le carnet d'adresse sous forme de table correspond uniquement à l'entête du carnet d'adresse sous la forme d'un simple tableau. Nous avons ici simplement mis l'entête verticalement au lieu d'horizontalement. II-2 Une table remplie Le simple tableau utilisé précédemment était vide (hormis l'entête). De même qu'il est possible de remplir un tableau... Nom Prénom Adresse Téléphone Célère Jacques Brest 02 23 45 67 89 Némar Jean Quimper 02 98 76 54 32 Ile Ode Lannion 02 76 54 32 10 ... il est possible de remplir une table : Nom Prénom Adresse Téléphone Célère Jacques Brest 02 23 45 67 89 59 Némar Jean Quimper 02 98 76 54 32 Ile Ode Lannion 02 76 54 32 10 On remarque que maintenant il n'y a plus de différence entre l'affichage de la table et celui du tableau. En effet, lorsque l'on crée un nouveau tableau, on se préoccupe généralement tout de suite des cases que l'on va remplir. Quand on crée une table, on passe par une étape supplémentaire qui est la création de l'entête de la table (à savoir les champs). Nous devons faire cela en premier car une table demande également de réfléchir sur le type de données qu'elle va contenir (chaîne de caractères, nombres entiers, nombres monétaires...). II-3 Résumé Pour résumé, une table en mode création/modification sous Access est sous la forme : Nom du champ Nom Prénom Adresse Téléphone Une table en mode saisie est sous la forme : Nom Prénom Adresse Célère Jacques Brest Némar Jean Quimper Ile Ode Lannion Téléphone 02 23 45 67 89 02 98 76 54 32 02 76 54 32 10 III Qu'est-ce qu'une relation ? III-1 Plusieurs numéros de téléphones Il est tout à fait imaginable qu’une personne présente dans le carnet d'adresse possède plusieurs numéros de téléphone. Dans ce cas, la table pourrait s'écrire : Nom Redford Prénom Robert Adresse Brest Bon Ile Jean Ode Quimper Lannion Téléphone 02 23 45 67 89 06 12 23 34 56 02 98 76 54 32 02 76 54 32 10 01 23 45 67 89 06 65 98 74 32 Cette notation convient bien pour afficher les numéros de téléphones. => Cependant, dans une base de données, le nombre de caractères que l'on peut placer dans un champ n'est pas infini (256 maximum pour les chaînes de caractères avec Access). => De plus, si un champ prend de la place pour rien, la base va très vite grossir et ne sera rapidement plus utilisable. Imaginons par exemple que nous placions 256 caractères pour le champ Téléphone. La place occupée par nos 3 contacts (Redford, Bon et Ile) serait de 256x3 = 768. Hors M. Bon ne possède qu'un seul numéro de téléphone (qui occupe donc seulement 14 caractères en comptant les espaces). Donc nous perdons 256 - 14 = 242 caractères. Conclusions, les informaticiens ont utilisé une autre technique qui consiste à créer une nouvelle table qui s'appelle Téléphones. On remplace ainsi un champ par une table complète. 60 La nouvelle table se définie alors comme suit : Téléphones : Nom Téléphone Redford 02 23 45 67 89 Redford 06 12 23 34 56 Bon 02 98 76 54 32 Ile 02 76 54 32 10 Ile 01 23 45 67 89 Ile 06 65 98 74 32 Comme nous le constatons, nous répétons plusieurs fois le même nom pour connaître à coup sûr à qui appartient le numéro de téléphone. Ainsi nous avons maintenant deux tables pour mémoriser nos données, donc dans la table Carnet, le champ Téléphone n'est plus utile : Carnet Nom Redford Bon Ile Téléphones Nom Redford Redford Bon Ile Ile Ile Prénom Robert Jean Ode Adresse Brest Quimper Lannion Téléphone 02 23 45 67 89 06 12 23 34 56 02 98 76 54 32 02 76 54 32 10 01 23 45 67 89 06 65 98 74 32 Maintenant il faut, pour chercher le numéro de téléphone d'un contact, consulter la nouvelle table Téléphones. Ce n'est pas très pratique quand il s'agit de simples tableaux mais grâce à Access nous pouvons relier facilement les deux tables pour retrouver en un clic souris tous les numéros de téléphone d'un correspondant. En cliquant sur le bouton Relations de la barre d'outils (puis afficher les 2 tables), on crée un lien (une relation) entre les deux tables sur les données qu'elles ont en commun, à savoir le nom des contact. Table Carnet Nom Prénom Adresse 1 * Table Téléphones Nom Téléphone NB : notons que les tables sont affichées comme pour le mode création/modification, c'est à dire que l'entête est verticalement disposé. A partir de là, lorsqu'on affiche en mode saisie la table Carnet, il devient possible d'afficher tous les numéros de téléphone d'un contact : Nom Prénom Adresse - Redford Robert Brest 02 23 45 67 89 06 12 23 34 56 61 + Bon + Ile Jean Ode Quimper Lannion En effet, Access fait automatiquement la recherche des numéros de téléphones en fonction du nom du contact. => Dorénavant, un contact peut avoir autant de numéros de téléphones que nécessaire ! => La place mémoire (ou disque dur) nécessaire pour stocker les numéros de téléphone est réduit à 14 caractères ! => Le lien (la relation) entre les deux tables se fait automatiquement ! III-2 Résumé Les relations entre les tables permettent de faciliter / optimiser le traitement informatique des données. Lorsque la base de donnée devient assez grande (de nombreuses tables), les relations entre les tables facilitent la mise au point de la base de données en séparant bien plusieurs données (un peu comme une maison possède plusieurs pièces et non pas une seule grande. Même si cela est possible, cela n'est pas pratique de mélanger la cuisine avec les chambres !). IV Le coeur d'Access Nous avons vu comment stocker les données avec Access. C'est donc sous la forme de tables (très proche de la notion de tableau de type Excel) reliées entre-elles (pour faciliter leur manipulation et optimiser le stockage). Ces tables reliées entre-elles sont le coeur d'Access (en fait, c'est le coeur de toute base de données). Les informaticiens auraient pu en rester là, mais un des avantage de l'ordinateur est le traitement rapide des données et il est donc possible d'effectuer des traitements sur la base de données pour extraire certaines informations et faire des statistiques. V Les requêtes V-1 Consultation de la base de données Pour consulter la base, la manière la plus simple est d'ouvrir les tables pour voir leur contenu. Cela est possible lorsque le nombre de données mémorisées n'est pas trop grand. Cependant, au delà d'un certain nombre (généralement au delà de 1000), il est utile de pouvoir interroger la base. Pour donner une idée de l'intérêt de la base de données, imaginons que nous ayons plus de 100 000 contacts dans notre Carnet d'Adresses. Une première solution consiste à faire comme dans un annuaire papier, c'est à dire faire défiler tous les noms jusqu'à trouver le bon. Cela se fait relativement bien sur papier (type annuaire téléphonique) mais beaucoup moins bien sur l'écran de l'ordinateur (car moins intuitif et moins pratique). Une solution consiste alors à envoyer une requête (c'est à dire une question) à la base de données du genre "Quels sont les numéros de téléphone de Ode Ile ?". La base de donnée est alors scrutée par Access jusqu'à ce que le nom Ode et le prénom Ile soient trouvés. L'ordinateur renvoi alors l'ensemble des numéros de téléphone d'Odile et le temps de recherche est si faible que nous avons l'impression que la réponse de l'ordinateur est immédiate. Requête : "Quels sont les numéros de téléphone de Ode Ile ?" Réponse : "02 76 54 32 10", "01 23 45 67 89", "06 65 98 74 32" Tables et Relations 62 Les requêtes peuvent être plus complexe encore et l'on peut par exemple demander "Quels sont les numéros de téléphones de toutes les personnes prénommées Jean" ou encore "Quels sont les personnes dont le numéro de téléphone se termine par 89 et dont le nom commence par les lettres Re" (ici en l'occurrence, le résultat sera Robert Redford 02 23 45 67 89). Notons que pour retrouver les données, Access recherche dans les tables existantes et place les données correspondante dans un table temporaire (un peu comme nous le ferions en cherchant dans un annuaire puis en notant le numéro recherché sur un bout de papier). V-2 Résumé Les requêtes viennent juste après les tables et les relations par ordre d'importance dans Access. Nous pouvons donc maintenant stocker des données de manière pratique mais aussi poser toute sorte de questions (requêtes) à Access pour qu'il retrouve les données dont on a besoin. VI Les formulaires et les états Les formulaires et les états viennent en dernier car, même s'ils sont pratiques, ils ne sont en rien indispensables à l'utilisation d'une base de données. Il permettent avant tout de faciliter la saisie (les formulaires) et l'impression (états) des données stockées dans la base de données. VI-1 Les formulaires Afin de faciliter la saisie des données, Access permet de créer des formulaires de saisie. Ceux-ci sont plus agréables à utiliser que les tables. On peut également programmer un formulaire en Visual Basic pour que suite au remplissage des données, des actions soient effectuées. Par exemple, si nous avons deux champs dont les contenus sont à priori les mêmes, on peut faire un petit programme Visual Basic qui va permettre de remplir simultanément les deux champs. De même, si nous faisons une erreur de saisie, il est possible d'indiquer à la personne utilisant le formulaire qu'elle rentre une donnée qui semble fausse. VI-2 Les états Les états permettent d'imprimer des documents (genre bon de commande ou autre) directement en relation avec les données de la base. Ainsi, il devient facile d'imprimer un document, ou un groupe de documents. Il est même possible d'imprimer les résultats d'une requête (on parle alors d'état basé sur une requête et non pas simplement sur une table). VI-3 Résumé Les formulaires et les états ne sont pas essentiels à la base de données, mais ils facilitent grandement le travail du programmeur et de l'utilisateur pour avoir de pratiques formulaires de saisie et de beaux documents imprimés (états). 63 VII Conclusion Voici pour résumé un dessin représentant les fonctionnalités d'Access. Requête : "Quels sont ... ?" Réponse : Il y a n réponses... Tables et Relations Lecture dans la base (donc dans les tables !) Etats d'impression Lecture et écriture dans la base (donc dans les tables !) Formulaires de saisie ACCESS Pour finir, voici les ressemblances et les différences essentielles entre une base de données et un tableur (type Excel) : > Les tables (Access) et les tableaux (Excel) sont très proches. > De même, les requêtes (Access) et les filtres (Excel) sont similaires. > Par contre, les relations entre les tables (Access) sécurisent et structurent les données (plus difficile à obtenir avec Excel) > De plus, grâce aux requêtes (Access), toute sorte de questions peuvent être posées (Excel se limite généralement à des filtres). Même des questions compliquées. > La saisie des données sous Access peut être plus poussée grâce aux formulaires de saisies et au langage Visual Basic. > L'impression et la mise en forme des données est plus complète sous Access que sous Excel. > Il est possible d'avoir une base de donnée partagée par plusieurs utilisateurs EN MÊME TEMPS et sur différents ordinateurs. Ce qui n'est pas possible avec Excel. > Une base de donnée peut être placée sur Internet plus facilement. > Une base de donnée est plus facilement sécurisable qu'un tableau Excel (typage des données, format de saisie, formulaire de saisie ne faisant pas apparaître certains champs,...). 64