| | TP noté 2, sujet du groupe H2 comme base de travail pour le H1 | |
| | Auteur | Message |
---|
ezano Admin
Messages : 59 Date d'inscription : 26/11/2009 Age : 34 Localisation : Lannion
| Sujet: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 Jeu 14 Jan - 19:19 | |
| Salut, le groupe H2 a fait le TP noté mercredi, je me décide de poster le sujet ici, il n'est pas compliqué, et le cours est autorisé, mais c'est mieux de savoir le faire sans =) En gros c'est des tableaux et des structures: Exercice 1:1) Faire un programme principal qui définit un tableau de N = 1000 entiers et l'initialise avec des valeurs aléatoires strictement infèrieures à N 2) Faire une procédure d'affichage du tableau précédent. Elle reçoit en paramètre le tableau de valeur à afficher par ligne, par exemple 20 valeurs qui seront affichées chacune sur 4 caractères 3) Faire une fonction de recherche d'un entier dans le tableau. La fonction reçoit en paramètre le tableau et le nombre à rechercher et retourne l'indice de la case correspondante si le nombre a été trouvé, -1 sinon. 4) Faire une procédure qui trie le tableau par ordre décroissant des valeurs. 5) Faire une fonction de recherche dichotomique d'un entier dans le tableau après qu'il a été trié. 6) Integrer au programme principale un menu proposant les procédures et fonctions précédentes. Exercice 2:Réaliser un programme permettant de doner le signe astrologique correspondant à une date de naissance. Définir pour cela une constante symbolique pour le nombre de mois, égale à 12, puis une type structuré t_zodiaque comprennant trois champs: -un entier pour le jour -une chaine d'au moins 9 caractère pour le mois -une chaine d'au moin 11 caractères pour le signe. On utilisera aussi le tableau suivant: - Code:
-
const t_zodiaque zodiaque[12] = { {23, "decembre", "sagittaire"}, {20, "janvier", "capricorne"}, {20, "fervrier", "verseau"}, {21, "mars", "poisson"}, {20, "avril", "bélier"}, {21, "mai", "taureau"}, {21, "juin", "gémeaux"}, {22, "juillet", "cancer"}, {23, "aout", "lion"}, {23, "septembre", "vierge"}, {23, "octobre", "balance"}, {22, "novembre", "scorpion"} };
Puis écrire un programme principal qui demande à l'utilisateur un jour (controler que l'entier est bien entre 1 et 31) et un mois (chaine de caractères). Ce programme devra appelmler une fonction qui reçoit le jour et le mois et retourne l'indice de la case où se trouve le mois ou -1 si le mois n'existe pas dans le tableau. Le programme affichera alors le signe correspondant ou un message d'erreur si le mois n'existe pas. Attention: si la date est supèrieure à celle indiquée par le mois, le signe est celui du mois suivant (le suivant du 12 e est le premier). Ex d'exécution: date de naissance ? jour: 42 jour: 14 mois: issure Ce mois n'existe pas. Date de naissance ? jour: 29 mois: avril votre signe: taureau Voila, faites les si vous avez le temps, le fait de ne pas avoir de correction exact vous aidera pour demain et vous forcera à réflechir pour trouver une solution =) Je doute qu'il y en ai mais si il y a des problèmes, posez vos questions on répondra comme on le pourra =). | |
| | | Kage
Messages : 30 Date d'inscription : 26/11/2009 Age : 32 Localisation : Lesneven
| Sujet: Re: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 Jeu 14 Jan - 20:27 | |
| Pour la recherche dichotomique, t'as pas un code type sous la main ? | |
| | | Arkas
Messages : 39 Date d'inscription : 27/11/2009 Localisation : Lannion
| Sujet: Re: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 Jeu 14 Jan - 20:50 | |
| On considère un tableau de N valeurs, trié. On prend la case milieu X du tableau, et on compare sa valeur avec celle du chiffre recherché : si elle est inférieure --> la première moitié du tableau est la bonne, si le chiffre recherché existe, alors il est forcément dans cette moitié--> on jarte la deuxième moitié du tableau, en définissant la case milieu X comme étant la nouvelle borne max de la zone de recherche si elle est supérieure --> le chiffre se trouve donc dans la deuxième moitié, on jarte la première moitié, et pour ce faire, on définit la case X milieu comme étant la nouvelle borne min de la zone de recherche on recalcule le milieu et ainsi de suite, la zone de recherche deviendra de plus en plus en petite puisque divisée par 2 à chaque relance de la boucle, si la borne max et la borne min se touchent, le terme recherché n'est pas dans le tableau voilà pour le principe ( /!\ le principe de manière générale, ya un piège dans l'ex ), j'aimerais te donner le code, mais t'as pas eu cours aujourd'hui alors je me venge | |
| | | ezano Admin
Messages : 59 Date d'inscription : 26/11/2009 Age : 34 Localisation : Lannion
| Sujet: Re: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 Jeu 14 Jan - 20:56 | |
| - Citation :
- voilà pour le principe, j'aimerais te donner le code, mais t'as pas eu cours aujourd'hui alors je me venge rabbit
^^ pas mal =) Pour la recherche dichotomique j'ai pas pris la correction, j'ai pas eu le temps de m'attarder sur le problème dans le TP. J'ai trouvé des exemples de codes sur internet, pas mal en C, mais comme t'as pas eu cours ben, jte le donne en assembleur =) - Code:
-
recherche:
PUSH(LP) |on sauvegarde l'adresse de retour sur la pile PUSH(BP) |on sauvegarde le cadre de pile precedent MOVE(SP,BP) |on initialise le cadre de pile courant PUSH(r1) |sauvegarde du registre r1 PUSH(r2) |sauvegarde du registre r2 PUSH(r3) PUSH(r4) PUSH(r5) PUSH(r6) PUSH(r7) PUSH(r8) |sauvegarde du registre DI PUSH(r9) |sauvegarde du registre SI
LD(BP,-12,r1) |chargement de la taille du tableau dans r1 LD(BP,-16,r9) |chargement de l'adresse du 1er elt du tableau dans SI LD(BP,-20,r4) |on charge l'element rechercher MULC(r1,4,r1) | Calcul de l'adresse suivant de dernier element du tableau SUB(r1,4,r1) | ADD(r9,r1,r8) | Placement de cette adresse dans DI
bsearch_end : CMPLT(r8,r9,r2) |si DI<SI, r2=1 BNE(r2,boucle1) |branchement a boucle1 si r2!=0 LD(BP,-12,r1) |chargement de la taille du tableau dans r1 SHRC(r1,1,r1) |on divise le contenu de r1 par 2 MOVE(r1,r7) |transfert de r1 dans r7 MULC(r7,4,r7) |on multiplie par 4 ADD(r9,r7,r7) |on obtient l'adresse du milieu du tableau LD(r7,0,r3) |on charge le contenu du milieu du tableau CMPEQ(r3,r4,r5) | on compare le milieu du tableau a l'element, si r3=r4,alors r5=1 BNE(r5,boucle2) CMPLT(r4,r3,r6) |si r4<r3, r6=1 BNE(r6,boucle3) |branchement a boucle3 si r6!=0 ADDC(r7,4,r7) | l'element suivant devient le milieu du tableau PUSH(r4) |sauvegarde de l'elt recherché PUSH(r7) |sauvegarde de l'adresse du milieu du tableau qui devient le 1er elt du tableau PUSH(r1) |sauvegarde de la taille du tableau BR(recherche,LP) |nouvel appel de la fonction recherche DEALLOCATE(3) boucle1:
SUB(0,1,r0) |on retourne -1 POP(r1) POP(r2) POP(r3) POP(r4) POP(r5) POP(r6) POP(r7) POP(r8) POP(r9) MOVE(BP,SP) POP(BP) POP(LP) JMP(LP,r31) boucle2: SUB(r7,r9,r3) |difference entre l'adresse du milieu du tableau et l'adresse du tableau DIVC(r3,4,r3) |on divise par 4 MOVE(r3,r0) POP(r1) POP(r2) POP(r3) POP(r4) POP(r5) POP(r6) POP(r7) POP(r8) POP(r9) MOVE(BP,SP) POP(BP) POP(LP) JMP(LP,r31)
boucle3: PUSH(r4) |sauvegarde de l'elt recherché PUSH(r9) |sauvegarde de l'adresse du 1er elt du tableau PUSH(r1) |sauvegarde de la taille du tableau BR(recherche,LP) |nouvel appel de la fonction recherche DEALLOCATE(3)
Bonne chance, je sais pas si ça fonctionne =) | |
| | | Kage
Messages : 30 Date d'inscription : 26/11/2009 Age : 32 Localisation : Lesneven
| Sujet: Re: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 Jeu 14 Jan - 22:17 | |
| Ouaaah merci les mecs, vous m'aidez trop, merci Ezano pour le code assembleur, je vais me faire un p'tit prog assembleur qui gère le tri d'un tableau ce soir tiens =D Aujourd'hui j'ai dormis jusqu'à 12h, c'était bien les cours ? *vengeance* | |
| | | Gautier
Messages : 65 Date d'inscription : 27/11/2009 Localisation : Lannion
| Sujet: Re: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 Sam 16 Jan - 2:19 | |
| Et votre TP d'Algo c'était bien? | |
| | | Kage
Messages : 30 Date d'inscription : 26/11/2009 Age : 32 Localisation : Lesneven
| Sujet: Re: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 Sam 16 Jan - 2:34 | |
| Pas vraiment mec !
en fait, le truc c'était de comprendre l'énoncé, y avait pas mal de structures et de tableaux imbriqués les uns aux autres. ça m'a pas trop pris de temps, mais en la fait la plus grosse difficulté c'était de finir le tp dans les temps, ça c'était infaisable.
En plus on a eu a manipuler les fichiers pour gérer notre répertoire téléphonique, et j'ai même du utiliser des fonctions qu'on a malheureusement pas vues en cours (fgets, fprintf, etc).
Donc voila, en gros il y en a qui on ni compris ni eu le temps de comprendre, moi j'ai trouvé ça plutôt facile mais beaucoup trop long --' 2h de plus et c'était niquel ^^ | |
| | | ezano Admin
Messages : 59 Date d'inscription : 26/11/2009 Age : 34 Localisation : Lannion
| Sujet: Re: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 Sam 16 Jan - 3:12 | |
| Franchement je comprend pas comment notre prof de TP qui est un bon prof nous a pondu un truc aussi simple, et votre prof vous a pondu un truc beaucoup trop long, enfin je suis curieux de voir le sujet pour voir ce que j'aurais pu faire en 2h Les structures imbriqués dans des tableaux etc ça pose pas de problème particulier si on comprend vite, et la gestion des fichiers c'est toujours la même choses, seulement avec les fonction qu'on utilise en cours je pense que ça peut se compliquer, Yohan a raison de préférer l'usage de fgets, fprintf, fscanf, fputs etc, Go ici pour plus d'info: http://www.siteduzero.com/tutoriel-3-14052-lire-et-ecrire-dans-des-fichiers.htmlLes fonctions les plus simples à utiliser, sont fgets pour la lecture et fprintf pour l'ecriture, lisez ce chapitre, vous verrez la différence avec fread et fwrite. =) | |
| | | Arkas
Messages : 39 Date d'inscription : 27/11/2009 Localisation : Lannion
| Sujet: Re: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 Sam 16 Jan - 17:34 | |
| Vous avez été interrogés sur les fichiers ? :/
Ouh le coup de pute ! | |
| | | Contenu sponsorisé
| Sujet: Re: TP noté 2, sujet du groupe H2 comme base de travail pour le H1 | |
| |
| | | | TP noté 2, sujet du groupe H2 comme base de travail pour le H1 | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |