Comme peut on resolue ce petit probleme.

Fermé
marwen ben said - 22 nov. 2009 à 14:42
 marwen ben said - 2 déc. 2009 à 10:07
Bonjour,
j'ai besoin du principe de l'algorithme qui permet de saisir des entiers successives dans une matrice sous forme spirale.

5 réponses

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
22 nov. 2009 à 14:55
Bonjour, je peux te le faire si tu me fournit la spirale de façon dégressive ainsi que la matrice sous forme vectorielle.
1
marwen ben said
22 nov. 2009 à 17:38
c'est t'as dire par exemple enter 1 2 3 4 5 6 7 8 9 10 11 12 13 14 dans une matrice quelconque sous forme spirale! est ce que c'est clair l'ennoncer??
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17
22 nov. 2009 à 17:50
tu peut un peut explique l'énoncer c'est pas clair du tout
0
marwen ben said
22 nov. 2009 à 18:16
ok
on doit remplir une matrice par des entier par exemple 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25.

soit le longue des lignes de i jusqu'a n
soit le longue des colones de j jusqu'a m

on doit entrer les entiers 1 2 3 4 5 sur la premiere ligne de i a n.
on commence de la position n jusqu'a la position m et on remplir par 5 6 7 8 9.
maintenant on ait a la position m. on commence de cette position et on termine a la position j.on la remplir par 9 10 11 12 13.
apres on commence de la position j et on s'arrete a la position j+1. 13 14 15 16 ainsi de suite jusqu'a la matrice se rempli.
c'est un exemple:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

normalement c'est clair!
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17
22 nov. 2009 à 18:43
tés intéressent ton exemple je vais essaye de le résoudre je té réponde demain peut être si c'est pas trés urgent 'j'ai oublie tout en algo'
0
marwen ben said
22 nov. 2009 à 19:09
ok aucun probleme je t'attend!
moi aussi je veut encore bien reflechir peut etre je trouve la solution.
merci beaucoup pour votre intere et a tout.
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
25 nov. 2009 à 11:42
J'avoue que c'est un exercice malsain ^^

Explication de ma solution :
- Premièrement il vous faut entrer un nombre entier, qui représente la largeur de la matrice (exemple : 5).
- Ensuite il faut entrer 1 ou 2 (pas autre chose que des nombres) selon votre choix de remplir la matrice spirale automatiquement ou manuellement (avec vos valeurs).
- Si vous avez choisis le remplissage manuel il faut entrer les x valeurs (où x = largeur²), sinon le remplissage se fait tout seul.
- La matrice spiralée s'affiche à la fin du programme.

Ma solution fonctionne pour les matrices de largeur 2 et supérieure (sans quoi ce n'est plus une matrice si la largeur est inférieure à 2).

Conseils d'utilisation :
- Utiliser des matrices de largeur 9 maximum en remplissage automatique (sans quoi l'affichage est un peu décalé par les valeurs supérieures à 100 dans la matrice).
- En mode manuel pas de limites sur la largeur de la matrice, par contre je conseille de remplir la matrice avec des valeurs inférieures à 100 pour éviter le décalage lors de l'affichage.

Voilà, bon amusement !

Le code source (à mettre dans un fichier Spirale.java ou alors renommer la classe) :

import java.util.*;

public class Spirale 
{
	public static Scanner sc = new Scanner(System.in);
	
	public static void main(String[] args)
	{
		System.out.print("Entrez la largeur de la matrice carrée (min. 2) : ");
		int largeur = sc.nextInt();
		
		// Si largeur est plus petit que 2, ce n'est pas une matrice
		if(largeur < 2)
		{
			System.out.println("Largeur trop petite, fin du programme !");
			System.exit(1);
		}
		
		int[][] matrice = new int[largeur][largeur];
		
		// Initialisation du tableau
		for(int i = 0; i < largeur; i++)
			for(int j = 0; j < largeur; j++)
				matrice[i][j] = 0;
		
		// Choix du remplissage
		System.out.println("\n1) Remplir la matrice manuellement");
		System.out.println("2) Remplir la matrice automatiquement");
		System.out.print("Entrez 1 ou 2 : ");
		int choix = sc.nextInt();
		System.out.println();
		 
		int x = 0, y = 0;		// positions dans la matrice
		char direction = 'r';	// la direction du remplissage
		
		// Remplissage
		for(int i = 0; i < (largeur * largeur); i++)
		{
			int value = 0;	// valeur insérée
			
			// selon le choix du remplissage (automatique ou manuel)
			if(choix == 2)
			{
				value = i + 1;
			}
			else
			{
				System.out.print("Entrez le " + (i + 1) + "e nombre : ");
				value = sc.nextInt();
			}
			matrice[x][y] = value;
			
			// avancons dans la bonne direction
			switch(direction)
			{
				case 'r':
					y++;
					break;
				case 'd':
					x++;
					break;
				case 'l':
					y--;
					break;
				case 'u':
					x--;
					break;
			}
			
			// spiralons quand il le faut
			if(matrice[x][y] != 0)
			{
				switch(direction)
				{
					case 'r':
						y--;
						x++;
						direction = 'd';
						break;
					case 'd':
						x--;
						y--;
						direction = 'l';
						break;
					case 'l':
						y++;
						x--;
						direction = 'u';
						break;
					case 'u':
						x++;
						y++;
						direction = 'r';
						break;
				}
			}
			else
			{
				// sinon, tournons aux coins
				if(y == (largeur - 1) && direction == 'r') direction = 'd';
				if(x == (largeur - 1) && direction == 'd') direction = 'l';
				if(y == 0 && direction == 'l') direction = 'u';
				if(x == 0 && direction == 'u') direction = 'r';
			}
		}
		
		// affichons la matrice spiralée
		System.out.println("\nLa matrice spirale : ");
		for(int i = 0; i < largeur; i++)
		{
			for(int j = 0; j < largeur; j++)
			{
				System.out.print(matrice[i][j] + " ");
				if(matrice[i][j] < 10) System.out.print(" ");
			}
			System.out.println();
		}
	}
}
0
marwen ben said
26 nov. 2009 à 12:08
merci beaucoup pour la solution mais je pense que c'est code est en java c'est pas en langage C ???!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
30 nov. 2009 à 00:17
Ah je n'avais pas vu qu'il fallait le faire en C.

En même temps, pour autant que tu ait des connaissances en C, tu n'aura aucun problème à adapter mon code Java en C étant donné qu'à part le Scanner je n'utilise rien de particulier à Java et que la syntaxe entre Java et C reste proche.

Bonne chance.
0
marwen ben said
2 déc. 2009 à 10:07
ok merci beaucoup.
0