Forum Clubic

Besoin d'aide pour du JAVA

Bonsoir à tous,

Je débute en JAVA et je me suis trouvé des petits exercices pour apprendre petit à petit. Malheureusement certains exercices ne sont pas corrigés et j’ai besoin d’aide pour la solution.

L’énoncé c’est:

"Soit un dessin carré de n*n éléments (n impair) que l’on veut construire sur un écran. Chaque élément est représenté par le signe ’ - ’ sauf les éléments des diagonales (principale et secondaire) représentés par le signe ’ + '. Ecrire un algorithme qui, quelque soit n>2, valeur saisie au clavier, affiche un carré à l’écran.
Eemple:
Pour n=5, l’affichage obtenu est le suivant:
±–+
-±±
–±-
-±±
±–+
"

C’est un exercice qui se situe vraiment tout au début de la programmation java c’est à dire juste dans l’utilisation des boucles for, while, do while, if.

merci de votre aide

avec une matrice de caractères ?
Je ne sais pas si ma définition est bonne pour la matrice dans le code mais l’idée générale est présente.
Pour demander à l’utilisateur de rentrer un nombre au clavier, de mémoire il faut utiliser la classe Scanner.

int i,j;
char [][] matrice;

n = SaisirN() //Fonction à définir

matrice = new char[n][n];

//Remplissage simple de la matrice
for( i = 0 ; i < n ; i++ )
{
 for( j = 0 ; j < n ; j++ ) 
  {
    matrice[i][j] = '-';
  }
}

//Remplissage des diagonales
for( i = 0 ; i < n ; i++ )
{
 //Diagonale haut gauche vers bas droite
 matrice[i][i] = '+';

 //Diagonale haut droite vers bas gauche
 matrice[n-i-1][n-i-1] = '+';
}

Afficher( matrice) //Fonction à définir

Le problème c’est que “la fonction” matrice je l’ai pas encore vu mais je vais voir pour me baser sur ce que tu as écrit je penses que ça peut m’aider.

Car je viens de trouver comment alterner les + et les - en gros de mettre les + en premier et en dernier (±----+) ou les faire bouger (-±—±) mais il me reste un problème c’est de faire un mixe de tout ça afin d’avoir la figure demander.

Niveau code pour le moment j’ai ceci qui me donne (±----+ n fois entré)
int n=7;
for(int l=1; l<n; l++){
for (int i=1; i<=n; i++){
if ((i==1)||(i==n))
System.out.print("+");
else
System.out.print("-");
}
System.out.println();
}

Et :
int n=7;
for(int l=1; l<n; l++){
for (int i=1; i<=n; i++){
if ((i==2)||(i==n-1))
System.out.print("+");
else
System.out.print("-");
}
System.out.println();

où je fais bouger les + dans la figure en gros -±—±

Mais je n’arrive pas à faire un mixe pour avoir le décalage le long du carré. Le problème c’est de trouver les bonnes conditions pour finaliser la figure !!
Edité le 18/09/2009 à 11:37

une façon plus simple sans passer par une matrice

pour toute les lignes de 1 à n inclus
pour chaque position de caractere de 1 à n inclus
//gestion diagonale gauche
si position == ligne : écrire ‘+’

//gestion diagonale droite
sinon si position == ( n - lignes + 1) : écrire ‘+’

sinon : écrire ‘-’

fin pour
fin pour

int ligne, position, n;

n=... // todo

for( ligne = 1 ; ligne == n ; ligne++ )
{
 for( position = 1 ; position == n ; position++ )
 {
    //Diagonale gauche
    if( position == ligne) System.out.print( "+");
    //Diagonale droite
    elsif( position == ( n - ligne + 1)System.out.print( "+"); //elsif ou else if ????
    //Sinon
    else system.out.print( "-");
    //Saut de ligne
    System.out.println();
 }
}

Il s’agit avant tout d’un probleme d’algorithmique. Ca n’a rien à voir avec le Java à proprement parler.

Une fois que tu auras ta solution en pseudo code, tu pourras poser tes questions sur la manière de l’implémenter en Java.

Je te remercie Jiheme44 j’ai du seulement corriger 2 petites erreures dans le code que tu m’as donné. Il fallait mettre ligne<=n et position<=n en mettant les deux avec ==n il n’y avait rien qui s’afficher.

Mais tu as réussi à me donner le code auquel je pensais mais que je n’arrivais pas à mettre en forme je m’embrouillais avec les boucles.

Merci encore

Waw, 2 boucles, un test par caractère… Heureusement qu’on n’est plus sous ZX Spectrum…

Bon, une algo, ça ressemblerait à ça


Soit n un entier supérieur à 2.
Soit l une liste de n caractères "-"

Soit compteur un entier égal à 1

Tant que compteur est inférieur ou égal à n, 
    Soit la une copie de l
    remplacer le caractère en position compteur de la par le caractère "+"
    remplacer le caractère en position n - (compteur - 1) de la par le caractère "+"
    afficher la
    revenir à la ligne
    incrémenter compteur
--

La Bonne méthode ta était donnée par jiheme44 dans son 1er poste mais il faut pour cela que tu deroule la matrice
je Copie son code, comment les ligne a modifié et donne ma correction


int i,j;
//char [][] matrice;
char [] matrice;

n = SaisirN() //Fonction à définir

//matrice = new char[n][n];
matrice = new char[n * n];

//Remplissage simple de la matrice
for(int i = 0 ; i < n ; i++ )
{
 for(int j = 0 ; j < n ; j++ ) 
 {
 //matrice[i][j] = '-';
matrice[i*n +j] = '-';
 }
}

//Remplissage des diagonales
for(int i = 0 ; i < n ; i++ )
{
 //Diagonale haut gauche vers bas droite
// matrice[i][i] = '+';
 matrice[i*n + i] = '+';

 //Diagonale haut droite vers bas gauche
// matrice[n-i-1][n-i-1] = '+';
 matrice[(n-i-1)*n +(n-i-1)] = '+';
}

Afficher( matrice) //Fonction à définir

Voila le code de la matrice gerer par tableau horizontale
Attention a la déclaration des index (i et j) dans les boucles.

Si non d’un point de vu algorithmique (le plus important dans ce cas là), il faut comprendre que le rang de la ligne donne la position des deux ‘+’ à mettre sur chacun gardons ton exemple de 5*5
n° rang ligne rang caractère (garder en mémoire que les rang en programmation commence a 0 et non 1)
1 -->0–> ±–+ 0 et 4
2 -->1–> -±± 1 et 3
3 -->2–> --±- 2
4 -->3–> -±± 3 et 1
5 -->4–> ±–+ 4 et 0

En effectuant cette analyse tu vois de suite que une règle ce dessine et l’algorithme qui en correspond (je reste sous la forme sans matrice)


Entier rangLigne
Tableau de caractère TabC
Entier n

faire
      saisir n
tant que n <=2

tabC <- tableau de n*n caractère
remplir tabC avec le caractère '-'

pour toute les ligne à partir de rangLigne<-0 jusqu'à n avec un pas de 1
faire
      tabC reçoit '+' au rang rangLigne*n + rangLigne
      tabC reçoit '+' au rang rangLigne*n + n - rangLigne - 1
fin pour

Désolé si vous avez du mal a le comprendre mais indiqué le rang dans un tableau ou encore un boucle for en algorithmique est compliqué

Pour un traitement par colonne le code reste me même (avantage du carré)