Comme peut on resolue ce petit probleme.

marwen ben said -  
 marwen ben said -
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   Statut Membre Dernière intervention   425
 
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
 
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   Statut Membre Dernière intervention   17
 
tu peut un peut explique l'énoncer c'est pas clair du tout
0
marwen ben said
 
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   Statut Membre Dernière intervention   17
 
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
 
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   Statut Membre Dernière intervention   425
 
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
 
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   Statut Membre Dernière intervention   425
 
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
 
ok merci beaucoup.
0