M x N
これは整数の行列です。
- 自動塗りつぶし、または手動塗りつぶしをお願いします。
- 自動を選択すると、いっぱいになります。
- 次に、行列をテストして、その列(1)または行(0)が回文(例:)であるかどうかを確認します
1 2 9 2 1
。 - 再起動または終了をお願いします。
fgets
再起動すると、マトリックスが自動的にいっぱいになります。これは、がしばらくの間であり、常に実行される必要があるため、なぜ発生しているのかわかりません。
関数llenar_matriz
、4行目。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define COL 5
#define FIL 5
int reiniciar( void );
void llenar_matriz( int mat[ FIL ][ COL ] );
void imprimir_matriz( int mat[ FIL ][ COL ] );
int matriz_palindrome( int mat[ FIL ][ COL ], int tipo );
int main () {
do {
int mat[ FIL ][ COL ] = {0};
llenar_matriz( mat );
if ( matriz_palindrome( mat, 1 ) ) {
puts( "Las columnas de la matriz son palindromos" );
}
else {
puts( "Las columnas de la matriz no son todas palindromos" );
}
} while( reiniciar() );
system( "pause" );
}
void imprimir_matriz( int mat[ FIL ][ COL ] ) {
int i, j;
for( i = 0; i < FIL; i ++ ) {
for( j = 0; j < COL; j++ ) {
printf( "%4d", mat[ i ][ j ] );
}
printf( "\n" );
}
}
void llenar_matriz( int mat[ FIL ][ COL ] ) {
char rta[3];
int i, j;
printf( "Desea llenar la matriz automaticamente? Si / No\n" );
while( fgets( rta, 3, stdin ) == NULL ) {
fflush( stdin );
printf( "Ocurrio un error al obtener su respuesta. Intente nuevamente.\n" );
}
if( strcmp( rta, "No" ) == 0 | strcmp( rta, "no" ) == 0 ) {
for( i = 0; i < FIL; i++ ) {
for( j = 0; j < COL; j++ ) {
printf( "Ingrese el valor de la posicion %d, %d\n", i+1, j+1 );
while( scanf( "%d", &mat[ i ][ j ] ) == NULL ) {
fflush( stdin );
puts( "Hubo un error al obtener su respuesta. Intente nuevamente" );
}
imprimir_matriz( mat );
}
}
}
else {
srand( time(NULL) );
for( i = 0; i < FIL; i++ ) {
for( j = 0; j < COL; j++ ) {
mat[ i ][ j ] = rand() % 99 + 1;
}
}
imprimir_matriz( mat );
}
fflush( stdin );
}
int reiniciar( void ) {
char rta[3];
int centinel = 0;
puts( "Desea reiniciar la prueba? Si / No" );
do{
while( fgets( rta, 3, stdin ) == NULL ) {
fflush( stdin );
printf( "Ocurrio un error al obtener su respuesta. Intente nuevamente.\n" );
}
if( strcmp( rta, "Si" ) == 0 | strcmp( rta, "si" ) == 0 ) {
return 1;
}
else {
if( strcmp( rta, "No" ) == 0 | strcmp( rta, "no" ) == 0 ) {
return 0;
}
else {
printf( "Respuesta incorrecta. Intente nuevamente.\n" );
centinel = 1;
}
}
fflush( stdin );
} while( centinel );
}
int matriz_palindrome( int mat[ FIL ][ COL ], int tipo ) {
int i, j;
if( tipo == 0 ) {
for( i = 0; i < FIL; i++ ) {
for( j = 0; j <= COL/2; j++ ) {
if( mat[ i ][ j ] != mat[ i ][ COL - j - 1] ) {
return 0;
}
}
}
}
if( tipo == 1 ) {
for( i = 0; i < COL; i++ ) {
for( j = 0; j <= FIL/2; j++ ) {
if( mat[ j ][ i ] != mat[ FIL - j - 1 ][ i ] ) {
return 0;
}
}
}
}
return 1;
}