Foros del Web » Programación para mayores de 30 ;) » C/C++ »

pueden ayudarme a validar esta matriz ?

Estas en el tema de pueden ayudarme a validar esta matriz ? en el foro de C/C++ en Foros del Web. //Hola este es un proyecto en el que llevo mucho tiempo la idea de esto es que el usuario introduzca numero de reglones columnas para ...
  #1 (permalink)  
Antiguo 30/05/2013, 10:02
 
Fecha de Ingreso: mayo-2013
Ubicación: DF
Mensajes: 1
Antigüedad: 11 años, 6 meses
Puntos: 0
Exclamación pueden ayudarme a validar esta matriz ?

//Hola este es un proyecto en el que llevo mucho tiempo la idea de esto es que el usuario introduzca numero de reglones columnas para 2 matrices y el programa verifique que sean iguales para poder sumas ambas matrices el programa ya hace todo eso solo la única falla ya para terminarlo es que introduciendo los valores si por accidente se mete un carácter este programa lo tiene que volver a pedir y ese es mi único error no se como validar dentro de un arreglo si alguien pudiera asesorarme este es mi código en C

//matrices 1.4
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>



int main ()
{
//declaraciones//
int ren,ren2,col,col2;
int x,y,x2,y2;
int true;
int w;


inicio:


printf("\n INTRODUCE UNA MATRIZ DE X*Y\n\nREGLAS DE EJECUSION:\n\n*En renglones y columnas no se permiten numero NEGATIVOS\n\n Ni cualquier tipo de CARACTER\n\n*Las filas y las columnas deben de coincidir para realizar la suma\n\n De lo contrario se solicitaran nuevamente \n\n");
do
{


printf("\n\n***introduce los valores de la primer matriz***\n\n ");
//validacion
while (true) {

fflush (stdin);

printf("Introduce los renglones-->");
scanf("%d",&x);
if (x < 0 ) continue;

else break;
}

while (true) {

fflush (stdin);
printf("introduce las columnas-->");
scanf("%d",&y);
if (y < 0 ) continue;

else break;
}

while (true) {

fflush (stdin);
printf("\n\n***Introduce los datos de la segunda matriz***\n\n");
printf("Introduce los renglones-->");
scanf("%d",&x2);
if (x2 < 0 ) continue;

else break;
}

while (true) {

fflush (stdin);
printf("introduce las columnas-->");
scanf("%d",&y2);

if (y2 < 0 ) continue;

else break;
}

}while (x!=x2||y!=y2);

//proceso
printf("\n\nprimer matriz\n\n");
int numeros [x][y];

for (ren=1;ren<=x;ren++)
{
for(col=1;col<=y;col++)
{
printf("teclee el valor [%d] [%d]: ",ren,col);
scanf("%d",& numeros [ren] [col] );
}
}

printf("La matriz introducida es:\n\n",ren,col);

for (ren=1;ren<=x;ren++)
{
for(col=1;col<=y;col++)
{
printf("%5d", numeros [ren] [col] );
}
printf("\n");
}
//segunda

int numero [x2] [y2] ;

for (ren2=1;ren2<=x2;ren2++)
{
for(col2=1;col2<=y2;col2++)
{
printf("teclee el valor [%d] [%d]: ",ren2,col2);
scanf("%d",& numero [ren2] [col2] );
}
}

printf("La matriz introducida es:\n\n",ren2,col2);

for (ren2=1;ren2<=x2;ren2++)
{
for(col2=1;col2<=y2;col2++)
{
printf("%5d", numero [ren2] [col2] );
}
printf("\n");
}
//suma
printf("\n");


printf( "\n******La suma de las dos matrices es******\n\n");
int m3 [x] [y];
for (ren=1;ren<=x;ren++)
{
for(col=1;col<=y;col++)
{
printf("%5d",m3 [ren] [col] =numero [ren] [col]+numeros[ren] [col]);

}
printf("\n");
}

printf("desea realizar un nuevo calculo?? \n\n\nprecione 1 para nuevo calculo 2 para salir\n\n\n");
scanf("%i",&w);
if (w==1){
system("cls");
goto inicio;
}
else {
getchar ();
fflush(stdin);
}
}
  #2 (permalink)  
Antiguo 30/05/2013, 13:00
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: pueden ayudarme a validar esta matriz ?

Hay algunos trucos para hacerlo con scanf pero esa funcion no fue diseñada para este tipo de comprovaciones; basandote en la forma de trabajar de scanf puedes tunear un poco el ingreso de datos:

Código:
int x;

printf("Entra un entero: ");
while(scanf("%d", &x) != 1) {
    //limpias stdin, despues te comento como no usar fflush(stdin)
    printf("No valido, entra un entero: ");
}
El scanf retorna el nº de elementos cargados del tipo indicado, es decir que si pides un entero y entras una letra resulta que lee 0 elementos y retorna 0; en este caso pido un entero y solo funcionará cuando retorne que ha leido un elemento de tipo entero ok?

La otra forma las controlada es usar fgets para leer en forma de texto y convertir a entero con strtol, tambien tienes que tunear el codigo un poco; un ejemplo:

Código:
long int x;
char strnum[10], *pch;

printf("Entra entero: ");
if(fgets(strnum, sizeof(strnum), stdin) != NULL) {
	pch = NULL;
	x = strtol(strnum, &pch, 10);
	
	if(pch[0] == 10) {
		printf("%d ok", x);
	}
	else {
		printf("error");
	}
}
Tal vez visto asi sea mas practico usar el primer ejemplo, pero te lo puedes poner en una funcion aparte y usar el bucle para llamarla.

Otra cosa, no uses stdin con fflush porque esa funcion no sirve para el stream de entrada; en cambio debes usar algo que vaya leyendo del stdin hasta vaciarlo, puedes usar esta funcion como propia (puedes encontrarla por ahi bajo mil nombres diferentes):

Código:
void fflush_stdin() {
	while (getchar() != '\n');
}

//en el codigo
scanf("%d", &x);
fflush_stdin();
Y la libreria conio no es estandar. Aun otra cosa, lo de 'int true;' es valido? Creo que deberias dejarlo como macro para que funcione correctamente, o como enum:

Código:
#define FALSE 0
#define TRUE 1

enum L_BOOLEAN_VALUES {false, true};
Saludos
vosk
  #3 (permalink)  
Antiguo 30/05/2013, 16:38
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Respuesta: pueden ayudarme a validar esta matriz ?

Cita:
Iniciado por vosk Ver Mensaje
comprovaciones
comprobaciones
  #4 (permalink)  
Antiguo 31/05/2013, 04:03
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: pueden ayudarme a validar esta matriz ?

Perdón, y ademas justamente en esa palabra :)

Saludos
vosk

Etiquetas: matrices, suma, validacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:50.