Le contour d'une matrice*aidez moi*

cs_robi987 Messages postés 1 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 14 mai 2008 - 14 mai 2008 à 17:40
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 17 mai 2008 à 14:13
<hr style="COLOR: #d1d1e1" size="1" />
<!-- / icon and title -->
<!-- message -->

salut,je suis etudiante en informatique en 1 er annee donc je suis debutante et j'ai recontré quelque difficultés à mes etudes c'est pour cela je vous demande l'aide et merci

-soit un matrice de N lignes et M colonnes de type caracteres
--ecrire l'algorithme qui met des etoiles (*) dans le contour de cette matrice

voici mon essai
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
algorithme_contour
debut
const_n=10;
m=10;

type_T:tableau[1..n,1..m]de caractere;

var_T:tab;
I,J:entier;

I=1;
tantque_I<=n_faire
debut
J=1;
tantque_J<=m_faire
debut
lire(T[I,J]);
J=J+1;
fin
fin
I=I+1;
fin
fin

I=1;
si_I=1 ou I=n_ alors
debut
J=1;
tantque_J<=m_faire
debut
T[I,J]=*;
J=J+1;
fin
fin
I=I+1;
fin
J=1;
sinon
debut
si_J=1 ou J=m_alors
debut
I=1;
tantque_I<=n_faire
debut
T[I,J]=*;
I=I+1;
fin
fin

J=J+1;
fin
finsi
fin
finsi



pour_I_depuis_1_jusqu'a_n_faire
debut
pour_J_depuis_1_jusqu'a_m_faire
debut
ecrire(T[I,J]);
fin
fin
fin
fin
fin

<!-- END TEMPLATE: bbcode_code -->qu'est ce que vous proposez?
<!-- / message --><!-- edit note -->

11 réponses

BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
14 mai 2008 à 18:35
Bonsoir,
Ces fonctions te seront certainement utile:
void gotoxy(int x, int y)
{
     COORD c;
     c.X = x;
     c.Y = y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}

// Renvoie la ligne sur la quelle se trouve le curseur
int WhereY( void )
{
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    GetConsoleScreenBufferInfo (STDOUT, &coninfo);
    return coninfo.dwCursorPosition.Y;
}

// Renvoie la colonne sur laquelle se trouve le curseur
int WhereX( void )
{
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    GetConsoleScreenBufferInfo (STDOUT, &coninfo);
    return coninfo.dwCursorPosition.X;
}

// Positionne le curseur sur la colonne x
void GotoX(int x)
{
    int y = WhereY();
    COORD dwCursorPosition = { x, y };
    SetConsoleCursorPosition (STDOUT, dwCursorPosition);
}

// Positionne le curseur sur la ligne y
void GotoY(int y)
{
    int x = WhereX();
    COORD dwCursorPosition = { x, y };
    SetConsoleCursorPosition (STDOUT, dwCursorPosition);
}
Ne pas oublier de déclarer
#define STDOUT  GetStdHandle(STD_OUTPUT_HANDLE) avant ces fonctions dans ton code source
exemple de code :

void ContoursMatrice()
{
long i = 0;
gotoxy(0,0);
do{
printf("*");
i++;
}while(i <= (N + 2))//N étant le nombre de colone
i = 0;
gotoxy(0;0);
do{
printf("*\n");
i++;
}while(i <= (M + 2))//M étant le nombre de ligne
i = 0;
do{
gotoX(N + 2)
printf("*\n");
}while(i <= (M + 2))
i = 0;
GotoX(0);
GotoY(M + 2);
do{
printf("*");
i++;
}while(i <= (N+2))
}//fin ContoursMatrice

Dans le main tu demande le nombre de ligne que tu dtockes dans une variable M et de colonnes dans une variable N puis tu appels la fonction :

int main()
{
long M = 0;
long N = 0;


printf("lignes : ");

scanf("%ld", M);//demande le nombre de lignes

printf("colones : ");

scanf("%ld", N);//demande le nombre de colones
ContoursMatrice();
return 0;
}

Tiens moi au courant (BUG etc...)
PS: c'est une console en C

//Merci à tous de vous interesser à mon problème,Cordialement,
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
14 mai 2008 à 18:39
Si tu vois des ERROR SYTAX, j'ai oublié quelques ;

//Merci à tous de vous interesser à mon problème,Cordialement,
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
14 mai 2008 à 18:42
Et il y a aussi une erreur sur un gotoxy ou j'ai séparé par un ; à la place d'une ,

//Merci à tous de vous interesser à mon problème,Cordialement,
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
14 mai 2008 à 18:43
Il manque aussi une majuscule à certain gotoY /X

Je te mettrais le code complet correct

//Merci à tous de vous interesser à mon problème,Cordialement,
0

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

Posez votre question
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
14 mai 2008 à 18:56
Le code complet, qui fonctionne (sous code::Blocks, en C)
Tiens-moi au courant

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <dos.h>
#include <sys\timeb.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include
#include <stddef.h>
#include <winsock.h>
#include <string.h>

#include <shellapi.h>
#include <winuser.h>
#include <shlobj.h>
#include <shlwapi.h>

#define STDOUT  GetStdHandle(STD_OUTPUT_HANDLE)

// Renvoie la ligne sur la quelle se trouve le curseur
int WhereY( void )
{
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    GetConsoleScreenBufferInfo (STDOUT, &coninfo);
    return coninfo.dwCursorPosition.Y;
}

// Renvoie la colonne sur laquelle se trouve le curseur
int WhereX( void )
{
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    GetConsoleScreenBufferInfo (STDOUT, &coninfo);
    return coninfo.dwCursorPosition.X;
}

// Positionne le curseur sur la colonne x
void GotoX(int x)
{
    int y = WhereY();
    COORD dwCursorPosition = { x, y };
    SetConsoleCursorPosition (STDOUT, dwCursorPosition);
}
void GotoY(int y)
{
    int x = WhereX();
    COORD dwCursorPosition = { x, y };
    SetConsoleCursorPosition (STDOUT, dwCursorPosition);
}

void Color(int couleurDuTexte, int couleurDeFond) // fonction d'affichage de couleurs
{
        HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(H, couleurDeFond*16+couleurDuTexte);
}
long M = 0;
long N = 0;

void gotoxy(int x, int y)
{
     COORD c;
     c.X = x;
     c.Y = y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}

void ContoursMatrice()
{
long i = 0;
gotoxy(0,0);
do{
printf("*");
i++;
}while(i <= (N + 2));//N étant le nombre de colone
getch();
i = 0;
gotoxy(0,0);
do{
printf("*\n");
i++;
}while(i <= (M + 2));//M étant le nombre de ligne
getch();
i = 0;
GotoY(0);
do{
GotoX(N + 2);
printf("*\n");
i++;
}while(i <= (M + 2));
getch();
i = 0;
GotoX(0);
GotoY(M + 2);
do{
printf("*");
i++;
}while(i <= (N+2));
}//fin ContoursMatrice

int main(int argc, char *argv[])
{
printf("lignes : ");
scanf("%ld", &M);//demande le nombre de lignes
printf("\ncolones : ");
scanf("%ld", &N);//demande le nombre de colones
system("cls");
ContoursMatrice();
return 0;
}

//Merci à tous de vous interesser à mon problème,Cordialement,
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
14 mai 2008 à 19:01
Tu peux enlever le getch(); dans la fonction ContoursMatrice pour qu'elle s'execute d'un coup

//Merci à tous de vous interesser à mon problème,Cordialement,
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
14 mai 2008 à 19:26
ERREUR


Voici le code correct (dans l'ancien, la matrice faisait 1 ligne et une colone de trop)
//il y a sûrement des includews qui ne servent à rien
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <dos.h>
#include <sys\timeb.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include
#include <stddef.h>
#include <winsock.h>
#include <string.h>

#include <shellapi.h>
#include <winuser.h>
#include <shlobj.h>
#include <shlwapi.h>

#define STDOUT  GetStdHandle(STD_OUTPUT_HANDLE)

// Renvoie la ligne sur la quelle se trouve le curseur
int WhereY( void )
{
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    GetConsoleScreenBufferInfo (STDOUT, &coninfo);
    return coninfo.dwCursorPosition.Y;
}

// Renvoie la colonne sur laquelle se trouve le curseur
int WhereX( void )
{
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    GetConsoleScreenBufferInfo (STDOUT, &coninfo);
    return coninfo.dwCursorPosition.X;
}

// Positionne le curseur sur la colonne x
void GotoX(int x)
{
    int y = WhereY();
    COORD dwCursorPosition = { x, y };
    SetConsoleCursorPosition (STDOUT, dwCursorPosition);
}
void GotoY(int y)
{
    int x = WhereX();
    COORD dwCursorPosition = { x, y };
    SetConsoleCursorPosition (STDOUT, dwCursorPosition);
}

void Color(int couleurDuTexte, int couleurDeFond) // fonction d'affichage de couleurs
{
        HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(H, couleurDeFond*16+couleurDuTexte);
}
long M = 0;
long N = 0;

void gotoxy(int x, int y)
{
     COORD c;
     c.X = x;
     c.Y = y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}

void ContoursMatrice()
{
long i = 0;
gotoxy(0,0);
do{
printf("*");
i++;
}while(i <= (N + 1));//N étant le nombre de colone
i = 0;
gotoxy(0,0);
do{
printf("*\n");
i++;
}while(i <= (M + 1));//M étant le nombre de ligne
i = 0;
GotoY(0);
do{
GotoX(N + 1);
printf("*\n");
i++;
}while(i <= (M + 1));
i = 0;
GotoX(0);
GotoY(M + 1);
do{
printf("*");
i++;
}while(i <= (N+1));
}//fin ContoursMatrice

int main(int argc, char *argv[])
{
printf("lignes : ");
scanf("%ld", &M);//demande le nombre de lignes
printf("\ncolones : ");
scanf("%ld", &N);//demande le nombre de colones
system("cls");
ContoursMatrice();
return 0;
}

//Merci à tous de vous interesser à mon problème,Cordialement,
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
14 mai 2008 à 20:31
Faites attention
aussi, j'ai inversé, N est le nombre de Colonnes et M de Lignes

//,Cordialement,
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 mai 2008 à 12:18
Salut

Eh bien Bastien, 8 messages consecutifs, des includes a gogo, et un code si compliqué pour un probleme aussi trivial...

Voila ma version qui dessine sur la console, le contours d'une matrice. Donc un rectangle:

#include



int main()
{
 int Largeur=20,Hauteur=15,i,j;



 for(j=0;j<Hauteur;j++)
 {
  for(i=0;i<Largeur;i++)
  {
   if(i==0 || i==Largeur-1 ||j==0 ||j==Hauteur-1)
    printf("*");
   else
    printf(" ");
  
  }
  printf("\n");
 }
 return 0;



}


A+
Mon site internet : http://pistol.petesampras.free.fr
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
16 mai 2008 à 18:27
Désolé, mais vu que je ne sais pas quoi est dans quelle include...
et puis pour faire VRAIMENT simple, on pourrais carrement faire :
printf("**********************\n");
printf("*                                        *\n");
...
printf("**********************");
mais dans ce cas, les dimentions sont fixes (c'est vrai, elles ne devaient pas forcément être variables) mais je pensais que ce code pouvait être interressant...

//Cordialement,
ps: je l'ai précisé il me semble qu'il y avait sûrement des includes en trop

@++
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
17 mai 2008 à 14:13
J'ai vu que tu l'as précisé qu'il y avais des include en trop, mais la quand meme!!!

Tu as des includes pour les entrées sorties en C  ET en C++, pour la
console ET pour les api windows, pour le formatage de la console, pour
les sokets!!!!, et y'en a un packet d'autre que je n'ai jamais utilisé.... Et tout cela pour faire un printf !

Si tu ne sais pas quel include ajouter à ton programme, prend chaque fonction que tu appelles et tu la colles dans google pour savoir de quel include il depend et tu vires toutes les dépendances inutiles.

Quand on répond à une question, il faut essayer de ne pas trop embrouiller la personne.

A+ et bonne continuation.
Mon site internet : http://pistol.petesampras.free.fr

http://pistol.petesampras.free.fr
0
Rejoignez-nous