Petit probleme code java

willESAT Messages postés 1 Date d'inscription mercredi 6 février 2008 Statut Membre Dernière intervention 6 février 2008 - 6 févr. 2008 à 21:32
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 7 févr. 2008 à 05:12
Salut a tous,
Je suis nouveau sur le forum et j'en profite donc pour me présenter:
Je m'apelle Will, j'ai 20 ans et habite Paris.Pour info je suis en premiere année de BTS info.

Passons a mon probleme; nous debutons en prog JAVA et notre prof nous a donner cet exercice (piece jointe) a faire rapidement et j'ai beau tourner le probleme dans tout les sens je n'y arrive pas ! Si quelqu'un l'a deja fait ou est pret a m'aider cele serai volontier. Je despere !

Merci a tous.




Règles du jeu : GRATTE CIEL (extrait de la revue JEUX TANGENTE)  


(6 points)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>










 








(fournies pour la compréhension du sujet)






 










 

 

 

E

X

T

R

A

I

T

 

 

 

 

D

E

 

 

 

L

A

 

 

 

R

E

V

U

E

,

 

 
Un bloc de la ville de New York a été représenté dans une grille.Chaque case contient un immeuble de 10,20,30,40,50 ou 60 étages. Les immeubles d'une même rangée, ligne ou colonne, sont tous de tailles différentes.

 

  Les informations données sur les bords indiquent le nombre d'immeubles visibles sur la rangée correspondante par un observateur situé à cet endroit.

 

  1er exemple, si une ligne contient 20-40-30-10:

  - 2 immeubles sont visibles à partir de la gauche(le 20 et 40)

  - 3 immeubles sont visibles à partir de la droite (le 10,30 et 40).

 

  2eme exemple si une ligne contient: 30-20-40-10

  - 2 immeubles sont visibles à partir de la gauche(le 30 et 40)

       le 20 n'est pas visible, il est caché par le 30

  - 2 immeubles sont visibles à partir de la droite(le 10 et 40).

 

  Retrouvez la hauteur de chaque immeuble !

  Tous les problèmes ont une seule solution.

 
exemple:

 

      | 4  |  1 |  3 |  2 |                      | 4  |  1 |  3 |  2 |  

    --+----+----+----+----+--                  --+----+----+----+----+--

    2 |    |    |    |    | 2                  2 | 10 | 40 | 20 | 30 | 2

    --+----+----+----+----+--     SOLUTION     --+----+----+----+----+--

    3 |    |    |    |    | 1        ==>       3 | 20 | 10 | 30 | 40 | 1

    --+----+----+----+----+--                  --+----+----+----+----+--

    2 |    |    |    |    | 2                  2 | 30 | 20 | 40 | 10 | 2

    --+----+----+----+----+--                  --+----+----+----+----+--

    1 |    |    |    |    | 3                  1 | 40 | 30 | 10 | 20 | 3

    --+----+----+----+----+--                  --+----+----+----+----+--

      | 1  | 2  | 2  | 2  |                      | 1  | 2  | 2  | 2  |  

 





SUJET du test:                                 durée : 2h










  Mr JAVA vient de vous recruter pour réaliser le programme qui devra générer les grilles du jeu Gratte Ciel. Pour ce faire, il vous demande de réaliser le menu suivant:





<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??>
<v:group id="_x0000_s1026" style="WIDTH: 423pt; HEIGHT: 153pt; mso-position-horizontal-relative: char; mso-position-vertical-relative: line" coordsize="6384,2295" coordorigin="2259,9113" editas="canvas">
<o:lock aspectratio="t" v:ext="edit">
</o:lock>
<v:shapetype id="_x0000_t75" coordsize="21600,21600" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75">
<v:stroke joinstyle="miter">
</v:stroke>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0">
</v:f>
<v:f eqn="sum @0 1 0">
</v:f>
<v:f eqn="sum 0 0 @1">
</v:f>
<v:f eqn="prod @2 1 2">
</v:f>
<v:f eqn="prod @3 21600 pixelWidth">
</v:f>
<v:f eqn="prod @3 21600 pixelHeight">
</v:f>
<v:f eqn="sum @0 0 1">
</v:f>
<v:f eqn="prod @6 1 2">
</v:f>
<v:f eqn="prod @7 21600 pixelWidth">
</v:f>
<v:f eqn="sum @8 21600 0">
</v:f>
<v:f eqn="prod @7 21600 pixelHeight">
</v:f>
<v:f eqn="sum @10 21600 0">
</v:f>
</v:formulas>
<v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f">
</v:path>
<o:lock aspectratio="t" v:ext="edit">
</o:lock>
</v:shapetype>
<v:shape id="_x0000_s1027" style="LEFT: 2259px; WIDTH: 6384px; POSITION: absolute; TOP: 9113px; HEIGHT: 2295px" o:preferrelative="f" type="#_x0000_t75">


<v:fill o:detectmouseclick="t">
</v:fill>
<v:path o:connecttype="none" o:extrusionok="t">
</v:path>
<o:lock v:ext="edit" text="t">
</o:lock>



</v:shape>
<v:rect id="_x0000_s1028" style="LEFT: 3074px; WIDTH: 3261px; POSITION: absolute; TOP: 9113px; HEIGHT: 2160px">
<v:textbox style="mso-next-textbox: #_x0000_s1028">
-=-=-=- Menu -=-=-=-

G Générer  Gratte Ciel                

A Afficher Gratte Ciel                

B Créer    Bords du Gratte Ciel       

X Afficher Gratte Ciel et bords       

     

Z Afficher uniquement bords           

 

        Q Quitter

 

Votre choix [G A B X Z Q ] ?  

 

</v:textbox>
</v:rect>
<v:shapetype id="_x0000_t88" coordsize="21600,21600" filled="f" path="m,qx10800@0l10800@2qy21600@11,10800@3l10800@1qy,21600e" o:spt="88" adj="1800,10800">
<v:formulas>
<v:f eqn="val #0">
</v:f>
<v:f eqn="sum 21600 0 #0">
</v:f>
<v:f eqn="sum #1 0 #0">
</v:f>
<v:f eqn="sum #1 #0 0">
</v:f>
<v:f eqn="prod #0 9598 32768">
</v:f>
<v:f eqn="sum 21600 0 @4">
</v:f>
<v:f eqn="sum 21600 0 #1">
</v:f>
<v:f eqn="min #1 @6">
</v:f>
<v:f eqn="prod @7 1 2">
</v:f>
<v:f eqn="prod #0 2 1">
</v:f>
<v:f eqn="sum 21600 0 @9">
</v:f>
<v:f eqn="val #1">
</v:f>
</v:formulas>
<v:path o:connecttype="custom" textboxrect="0,@4,7637,@5" o:connectlocs="0,0;21600,@11;0,21600" arrowok="t">
</v:path>
<v:handles>
<v:h yrange="0,@8" position="center,#0">
</v:h>
<v:h yrange="@9,@10" position="bottomRight,#1">
</v:h>
</v:handles>
</v:shapetype>
<v:shape id="_x0000_s1029" style="LEFT: 6606px; WIDTH: 135px; POSITION: absolute; TOP: 9248px; HEIGHT: 810px" type="#_x0000_t88">


</v:shape>
<v:shape id="_x0000_s1030" style="LEFT: 6606px; WIDTH: 135px; POSITION: absolute; TOP: 10193px; HEIGHT: 405px" type="#_x0000_t88">


</v:shape>
<v:shapetype id="_x0000_t202" coordsize="21600,21600" path="m,l,21600r21600,l21600,xe" o:spt="202">
<v:stroke joinstyle="miter">
</v:stroke>
<v:path o:connecttype="rect" gradientshapeok="t">
</v:path>
</v:shapetype>
<v:shape id="_x0000_s1031" style="LEFT: 6877px; WIDTH: 1766px; POSITION: absolute; TOP: 9383px; HEIGHT: 675px" type="#_x0000_t202">
<v:textbox>
De 0 à 15 /20

(partie obligatoire)

</v:textbox>
</v:shape>
<v:shape id="_x0000_s1032" style="LEFT: 6877px; WIDTH: 1630px; POSITION: absolute; TOP: 10193px; HEIGHT: 675px" type="#_x0000_t202">
<v:textbox>
De 15 à 20/20

(partie optionnelle)

</v:textbox>
</v:shape>
<?xml:namespace prefix w ns "urn:schemas-microsoft-com:office:word" /??>
<w:wrap type="none">
</w:wrap>
<w:anchorlock>
</w:anchorlock>
</v:group>



NB: l'utilisateur pourra utiliser le menu jusqu'à ce qu'il décide d'arrêter(choix = 'Q')




 









Traitements attendus pour les différents choix

:







1) Choix G: générer GratteCiel :






a) en fait il s'agit ici de faire saisir la dimension du tableau puis de créer les tableaux suivants : int[][] tabNY   (tableau principal)





                           et int[][] tabNSEO (tableau des bords)






 





exemple :pour une dimension de 6, un tableau de 6x6 (rappel: indice du tableau de 0 à 5):





      -le tableau sera de la forme : new int[6][6]







      -la hauteur des immeubles ira de 10 à 60(avec 60 = dimension*10)







                                                          
   
        Page 1 / 2







   b) puis de générer (remplir) le tableau avec des nombres compris entre 10 et dimension*10, en respectant la règle suivante :







  - jamais 2 fois le même nombre sur la même ligne, ni dans la même colonne;







       ("Les immeubles d'une même rangée, ligne ou colonne, sont tous de tailles différentes")






 





NB: La méthode attendue pour « mélanger » les immeubles de hauteur différente est la suivante :





-
       


pour la première ligne (rappel 0), tirer un numéro de colonne au hasard afin d’y placer le 10; pour le 20 passer à la colonne suivante, si cette dernière était supérieur à la dimension, revenir en colonne 0 ;continuer pour les autres nombres jusqu’à atteindre dimension*10.




 







-
       


pour les lignes suivantes, décaler la position du 10 d’une colonne vers la droite ; placer les autres nombres en suivant selon le même procédé.






 









2) choix A: afficher Gratte Ciel : 







 
 afficher le contenu du tableau principal sous la forme:





<v:shape id="_x0000_s1033" style="MARGIN-TOP: 3.1pt; Z-INDEX: 2; MARGIN-LEFT: 99pt; WIDTH: 162pt; POSITION: absolute; HEIGHT: 81pt" type="#_x0000_t202">
<v:textbox style="mso-next-textbox: #_x0000_s1033">


</v:textbox>
</v:shape>

Contenu du tableau

 

    30 40 10 20  

    20 30 40 10  

    10 20 30 40  

    40 10 20 30  




 






 






 






 






 






 






 






 






 





3)choix B: créer Bords du Gratte Ciel: il s'agit ici de compter pour chaque ligne   (de droite à gauche puis de gauche à droite) et pour chaque colonne(du haut vers bas puis du bas vers haut) le nombre d'immeuble visible depuis cet endroit là








 





  cf 1er et 2eme exemple des règles donnée au début dans «  Extrait de la revue  »








 





  NB: Pour le comptage des immeubles visibles:







   le chiffre qui est calculé en haut  (comptage de haut en bas)







   le chiffre qui est calculé en bas   (comptage du bas vers haut)







   le chiffre qui est calculé à droite (comptage de la gauche vers la droite)







   le chiffre qui est calculé à gauche (comptage de la droite vers la gauche)






 







4)X :Afficher Gratte Ciel et bords : obtenir un affichage sous la forme:






  




<v:shape id ="_x0000_s1034" style="MARGIN-TOP: 1.2pt; Z-INDEX: 3; MARGIN-LEFT: 99pt; WIDTH: 171pt; POSITION: absolute; HEIGHT: 107.4pt" type="#_x0000_t202">
<v:textbox style="mso-next-textbox: #_x0000_s1034">


</v:textbox>
</v:shape>

Afficher  Gratte Ciel et Bords

 

       2  1  2  2

   2-|30|40|10|20| -2

   3-|20|30|40|10| -2

   4-|10|20|30|40| -1

   1-|40|10|20|30| -2

       1  4  3  2




 






 






 






 






 






 






 






 






 






 






 





5)choix Z Afficher uniquement bords : obtenir un affichage sous la forme:





<v:shape id="_x0000_s1035" style="MARGIN-TOP: 4.95pt; Z-INDEX: 4; MARGIN-LEFT: 99pt; WIDTH: 171pt; POSITION: absolute; HEIGHT: 99pt" type="#_x0000_t202">
<v:textbox style="mso-next-textbox: #_x0000_s1035">


</v:textbox>
</v:shape>


    Afficher bords

 

       2  1  2  2

   2-|  |  |  |  | -2

   3-|  |  |  |  | -2

   4-|  |  |  |  | -1

   1-|  |  |  |  | -2

       1  4  3  2

 



 






 






 






 






 






 






 






 






 






 






 





                                                         
   
      
   Page 2 / 2

1 réponse

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 févr. 2008 à 05:12
bah c'est pas compliqué ...

tu genere les immeuble.
ensuite il suffit d'encadrer la matrice et de voir combien d'immeuble sont visible selon le sens de la matrice :

matrice 4x4

10 20 10 30
40 20 30 10
20 10 30 40
30 40 20 20

peut importe le sens du regard on vois toujours au moins le premier
puis on ne vois que ceux qui sont plus grand que le plus grande deja vus dans ce sens.

ligne 1 de gauche a droite :
1,1 est visible, max = 10
1,2 plus grand que max (20 > 10 ?) oui : max = 20, visible + 1
1,3 plus grand que max (10 > 20 ?) non: ...
1,4 plus grand que max (30 > 20 ?) oui : max = 30, visible + 1
total : plus grand 30, visible 3

ligne 1 de droite a gauche :
1,4 est visible, max = 30
1,3 plus grand que max (10 > 30 ?) non : ...
1,2 plus grand que max (20 > 30 ?) non : ...
1,1 plus grand que max (10 > 30 ?) non : ...
total : plus grand 30, visible 1

pour en deduire un programme (pseudo code) :

int function LeftToRightViewer(tableau, rowindex, indexlow, indexhigh) {
  int max=0;
  int visible=0;

  max = tableau[rowindex, indexlow];
  visible = 1;
  for(i=indexlow+1, i <= indexhigh, i++)
    if (tableau[rowindex, i] > max) {
      visible++;
      max = tableau[rowindex, i];
    }
  return(visible);
}

int fucntion RightToLeftViewer(tableau, rowindex, indexlow, indexhigh) {
  int max=0;
  int visible=0;


  max = tableau[rowindex, indexhigh];

  visible = 1;

  for(i=indexhigh-1, i >= indexlow, i--)

    if (tableau[rowindex, i] > max) {

      visible++;

      max = tableau[rowindex, i];

    }
  return(visible);

}

int function TopToBottomViewer(tableau, colindex, indexlow, indexhigh) {
  int max =0;

  int visible =0;

  max = tableau[indexlow, colindex];

  visible = 1;

  for(i=indexlow+1, i <= indexhigh, i++)

    if (tableau[i, rowindex] > max) {

      visible++;

      max = tableau[i, rowindex];

    }
  return(visible);

}

int function BottomToTopViewer(tableau, rowindex, indexlow, indexhigh) {
  int max =0;

  int visible =0;


  max = tableau[indexhigh, rowindex];

  visible = 1;

  for(i=indexhigh-1, i >= indexlow, i--)

    if (tableau[i, rowindex] > max) {

      visible++;

      max = tableau[i, rowindex];

    }
  return(visible);

}

int ml = 0; // index bas
int mh = 7; // index haut (6x6 immeubles)
int matriceimmeuble[ml..mh, ml..mh];

// le nombre d'immeuble visible est placé dans les case d'index :
// n, ml pour left to right (a gauche du tableau)
// n, mh pour right to left (a droite du tableau)
// ml, n pour top to bottom (en haut du tableau)
// mh, n pout bootom to top (en bas du tableau)

for (n=ml+1, n<=mh-1, n++) {
  matriceimmeuble[n, ml] = LeftToRightViewer(matriceimmeuble, n, ml+1, mh-1);

  matriceimmeuble[n, mh] = RightToLeftViewer(matriceimmeuble, n, ml+1, mh-1);

  matriceimmeuble[ml, n] = TopToBottomViewer(matriceimmeuble, n, ml+1, mh-1);

  matriceimmeuble[mh, n] = BottomToTopViewer(matriceimmeuble, n, ml+1, mh-1);
}

je te laisse trouver pour le reste c'est pas compliqué ...

<hr size="2" width="100%" />
http://deefaze.gnomz.com
0
Rejoignez-nous