Programación General > C/C++
PROLEMA CON EJERCICIO
SkullFlower:
Mira en la función transpuesta tienes estas lineas:
--- Código: C ---scanf("%.2f", &matriz[i][j]);
--- Código: C ---printf(" %.2f ", matriz[i][j]);
pero matriz no esta definida, solo tienes matrizA y matrizB definidas
en el switch en el case 3 tienes esto:
--- Código: C ---printf("El determinante de la matriz 1 es: %dn", determinante(matriz1);printf("El determinante de la matriz 2 es: %dn", determinante(matriz2);
faltaría agregarle otro paréntesis ) a cada linea:
--- Código: C ---printf("El determinante de la matriz 1 es: %dn", determinante(matriz1));printf("El determinante de la matriz 2 es: %dn", determinante(matriz2));
en donde tienes esto:
--- Código: C ---sum1 = matriz[0][0]*matriz[1][1]*matriz[2][2];sum2 = matriz[0][1]*matriz[1][2]*matriz[2][0];sum3 = matriz[0][2]*matriz[1][0]*matriz[2][1]:res1 = matriz[2][0]*matriz[1][1]*matriz[0][2];res2 = matriz[1][0]*matriz[0][1]*matriz[2][2];res3 = matriz[0][0]*matriz[1][2]*matriz[2][1];
en la linea 3 tienes dos puntos en vez de punto y coma al final.
y en esta otra linea:
--- Código: C ---int determinante(float matriz[][]){
te falta poner ORD entre los corchetes.
Intenta corrigiendo eso a ver si ya funciona.
RICARDOJ.:
solo me da un error en la funcion que me has dicho
Mira en la función transpuesta tienes estas lineas:
1. scanf("%.2f", &matriz[j]);
1. printf(" %.2f ", matriz[j]);
nose porque es
SkullFlower:
--- Código: C ---scanf("%.2f", &matriz[i][j]);
Quitale el .2 en %.2f
y no tienes definido un arreglo llamado matriz en esa función, solo tienes 2 arreglos pero ninguno se llama matriz.
RICARDOJ.:
No puede ser ahora no consigo sacar mi codigo me compila todo y tengo bien hecho el menu pero no me hace ninguna operacion pfffff aqui os dejo el nuevo codigo pero no me realiza lo q quiero hacer
//Librerias necesarias
#include <stdio.h>
#include <math.h>
#include <conio.h>
//Constantes necesarias
#define MAXV 10 //tamaño maximo de un vector
#define FIL 4 //tamaño maximo de las filas de una matriz
#define COL 3 //tamaño maximo de las columnas de una matriz
#define ORD 3 //orden maximo de una matriz cuadrada
//Funciones necesarias
void menu(void);
void mMenu1(void);
void mMenu2(void);
void vector(void);
void traspuesta(void);
int determinante(float matriz[ORD][ORD]);
//Funcion MAIN()
void main()
{
clrscr(); //Limpio los restos en la pantalla
menu(); //Ejecuto el menu
}//main()
//Funcion MENU()
//Esta funcion carga un menu para el programa
void menu(void){
int opc; //opcion
//Repito
do{
clrscr(); //Limpio la pantalla
//Muestro al usuario sus opciones
printf("tt PROGRAMA DE OPERACIONES CON VECTORES Y MATRICESn");
printf("nttt ¿Que desea hacer?n");
printf("nttt 1. Ejercicio 1.n");
printf("nttt 2. Ejercicio 2.n");
printf("nttt 3. Salir.n");
//Limpio el teclado por si hubiera desborde
fflush(stdin);
//Recojo la opcion elegida por el usuario
scanf("%d", &opc);
printf("n");
//Si la opcion no es valida, lo corrijo
if ((opc > 3)||(opc <= 0)){
do{
printf("ttt ERROR 000: Opcion incorrectan");
printf("ttt Por favor, vuelva a introducir su elección: ");
fflush(stdin);
scanf("%d", &opc);
printf("n");
}while((opc > 3)||(opc <= 0));
}//fi
//Determino que ejecutar
switch(opc){
case 1: mMenu1(); break;
case 2: mMenu2(); break;
case 3: break;
default: break;
}//swtich
//Mientras no decida salir
}while(opc != 3);
}//menu()
//Funcion mMENU1()
//Menu que muestra las diferentes opciones para el ejercicio 1
void mMenu1(){
int opc; //opcion
do{
clrscr(); //Limpio la pantalla
//Muestro al usuario sus opciones
printf("ttt ¿Que desea hacer?n");
printf("ttt 1. Trabajar con vectores.n");
printf("ttt 2. Trabajar con matrices.n");
printf("ttt 3. Volver al menu principaln");
//Limpio el teclado por si hubiera desbordamiento
fflush(stdin);
//Recojo la opcion elejida
scanf("%d", &opc);
printf("n");
//Si no es una opción correcta, lo corrijo
if ((opc > 3)||(opc <= 0)){
do{
printf("ttt ERROR 001: Opcion incorrectan");
printf("ttt Por favor, vuelva a introducir su elección: ");
fflush(stdin);
scanf("%d", &opc);
printf("n");
}while((opc > 3)||(opc <= 0));
}//fi
//Determino que ejecutar
switch(opc){
case 1: vector(); break;
case 2: traspuesta(); break;
case 3: break;
default: break;
}//swtich
//Mientras no decida volver al menu principal
}while(opc != 3);
}//mMenu1
//Funcion VECTOR()
//Esta funcion recoge los datos de un vector y los muestra en
//orden inverso
void vector(){
//Variables necesarias
int i;
float vector[MAXV];
clrscr(); //Limpio la pantalla
//Pregunto al usuario por los datos
printf("ttt Guarda los datos del vector:n");
for (i = 0; i <= MAXV-1; i++){
printf("ttt Introduce la posicion %d del vector: ", i+1);
fflush(stdin);
scanf("%.2f", &vector);
printf("n");
}//for
//Y le muestro el resultado en orden inverso
printf("ttt Ha introducido los siguientes datos: ");
for (i = MAXV-1; i >= 0; i--){
printf("%.2f, ", vector);
}//for
}//vectores()
//Funcion TRASPUESTA()
//Esta funcion calcula la matriz traspuesta de una
//introducida por el usuario
void traspuesta(){
//Variables necesarias
int i, j;
float matrizA[FIL][COL], matrizB[COL][FIL];
clrscr(); //Limpio la pantalla
//Presento la informacion y le pido al usuario los datos
printf("ttt MATRIZ TRASPUESTAn");
printf("Guarda los datos de la matriz An");
for (i = 0; i <= FIL-1; i++){
for (j = 0; j <= COL-1; j++){
printf("ttt Introduce el valor de la posicion (%d,%d): ", i+1,j+1);
fflush(stdin);
printf (" %.2f ", matrizB[j]);
printf("n");
}//for j
}//for i
//Muestro al usuario la matriz A
printf("ttt Este es el contenido de la matriz A:n");
for (i = 0; i <= FIL-1; i++){
for (j = 0; j <= COL-1; j++){
printf(" %.2f ", matrizA[j]);
}//for j
printf("n");
}//for i
for (i = 0; i <= FIL-1; i++){
for (j = 0; j <= COL-1; j++){
matrizB[j] = matrizA[j];
}//for j
}//for i
//Muestro la matriz B, la matriz traspuesta de A
printf("ttt Esta es la matriz B, matriz traspuesta de A:n");
for (i = 0; i <= COL-1; i++){
for (j = 0; j <= FIL-1; j++){
printf(" %.2f ", matrizB[j]);
}//for j
printf("n");
}//for i
}//traspuesta()
//Funcion mMENU2()
//Funcion para el menu del ejercicio 2
void mMenu2(){
//Variables necesarias
int i, j, opc;
float matriz1[ORD][ORD], matriz2[ORD][ORD];
clrscr(); //Limpio la pantalla
//Presento la información y le pido los datos
// al usuario
printf("ttt OPERACIONES CON MATRICESn");
printf("ttt Introduzca los datos de la matriz 1:n");
for (i = 0; i <= ORD-1; i++){
for (j = 0; j <= ORD-1; j++){
printf("Dato (%d, %d): ", i+1, j+1);
fflush(stdin);
scanf("%.2f", &matriz1[j]);
printf("n");
}//for j
}//for i
//Le pregunto por los datos de la segunda matriz
printf("ttt Introduzca los datos de la matriz 2:n");
for (i = 0; i <= ORD-1; i++){
for (j = 0; j <= ORD-1; j++){
printf("ttt Dato (%d, %d): ", i+1, j+1);
fflush(stdin);
scanf("%.2f", &matriz2[j]);
printf("n");
}//for j
}//for i
do{ //Repito
///Presentacion del menu.
printf("tttt --Menu de Ejercicio 2--");
printf("nntt Elija el tipo de operacion que desea:");
printf("nntt 1. Sumar las matrices.");
printf("nntt 2. Restar las matrices.");
printf("nntt 3. Trasponer las matrices.");
printf("nntt 4. Salir al menu principal.");
printf("nntt Su opcion: ");
//Depuracion del teclado por posibles "Overflow".
fflush(stdin);
//Lectura de la opcion deseada por el usuario.
scanf("%i", &Opcion2);
printf("n");
//Condicion que nos permite introducir los datos si el usuario ha
//escogido una opcion que requiera lectura de datos.
if(Opcion2<4 && Opcion2>0)
{
//Peticion de los datos de la matriz 1.
printf("nIntroduzca los valores de la Matriz 1:n");
//Bucle para rellenar cada celda de la matriz.
for(Fil=0; Fil<3; Fil++)
{
for(Col=0; Col<3; Col++)
{
printf("Valor x = %i, y = %i: ", Fil, Col);
scanf("%f", &Matriz1[Fil][Col]);
}
}
printf("n");
//Peticion de los datos de la matriz 2.
printf("Introduzca los valores de la Matriz 2:n");
//Bucle para rellenar cada celda de la matriz.
for(Fil=0; Fil<3; Fil++)
{
for(Col=0; Col<3; Col++)
{
printf("Valor x = %i, y = %i: ", Fil, Col);
scanf("%f", &Matriz2[Fil][Col]);
}
}
}
//Selector que nos lleva a la opcion seleccionada por el usuario.
switch(Opcion2)
{
//Opcion_ Suma de matrices.
case 1:
printf("nHa elegido suma de matrices.");
//Bucle para calcular la suma de la misma celda de cada matriz.
for(Fil=0; Fil<3; Fil++)
{
for(Col=0; Col<3; Col++)
{
//Calculo de la suma de cada componente.
Matriz3[Fil][Col]=Matriz1[Fil][Col]+Matriz2[Fil][Col];
}
}
//Representacion de los resultados obtenidos por pantalla.
printf("nnEl resultado de la suma de las matrices es:nn");
//Bucle para representar el valor de cada celda.
for(Fil=0; Fil<3; Fil++)
{
for(Col=0; Col<3; Col++)
{
printf("%7.1f", Matriz3[Fil][Col]);
}
printf("n");
}
printf("nPulse una tecla para continuar.");
getch();
//Limpieza de pantalla.
clrscr();
break;
//Opcion: Resta de matrices.
case 2:
printf("nHa elegido resta de matrices.");
//Bucle para calcular la resta de los valores de la misma celda de
//cada matriz.
for(Fil=0; Fil<3; Fil++)
{
for(Col=0; Col<3; Col++)
{
//Calculo de la resta de cada valor.
Matriz3[Fil][Col]=Matriz1[Fil][Col]-Matriz2[Fil][Col];
}
}
//Representacion de los resultados obtenidos por pantalla.
printf("nnEl resultado de la resta de las matrices es:nn");
//Bucle para representar cada valor de cada celda.
for(Fil=0; Fil<3; Fil++)
{
for(Col=0; Col<3; Col++)
{
printf("%7.1f", Matriz3[Fil][Col]);
}
printf("n");
}
printf("nPulse una tecla para continuar.");
getch();
//Limpieza de los datos por pantalla.
clrscr();
break;
//Opcion: Trasposicion de matrices.
}//mMenu2()
//Funcion DETERMINANTE()
//- Argumentos: matriz cuadrada de orden ORD de tipo real
//- Retorna: entero, determinante de la matriz
//Esta funcion calcula el determinante de una matriz cuadrada
// de orden 3
int determinante(float matriz[ORD][ORD]){
//Variables necesarias
int var, i, j;
float sum1, sum2, sum3, res1, res2, res3;
//Calculo el numero de elementos de la matriz
var = 0;
for (i = 0; i <= ORD-1; i++){
for (j = 0; j <= ORD-1; j++){
var++;
}//for j
}//for i
//Si la matriz es cuadrada de orden 3, var == 9
if (var == 9){
//Calculo todos los operandos del determinante
sum1 = matriz[0][0]*matriz[1][1]*matriz[2][2];
sum2 = matriz[0][1]*matriz[1][2]*matriz[2][0];
sum3 = matriz[0][2]*matriz[1][0]*matriz[2][1];
res1 = matriz[2][0]*matriz[1][1]*matriz[0][2];
res2 = matriz[1][0]*matriz[0][1]*matriz[2][2];
res3 = matriz[0][0]*matriz[1][2]*matriz[2][1];
//Y lo retorno
return sum1+sum2+sum3-res1-res2-res3;
}//fi
//Sino muestro un mensaje de error.
else{
printf("ttt ERROR: El orden de la matriz es incorrecto.");
printf("ttt No se trata de una matriz cuadrada.");
return -1; //El determinante de una matriz no puede ser negativo
// pero sí 0, asi para que la función termine retorno un -1
}//else
}//determinante()
SkullFlower:
Tienes varios errores de sintaxis y variables no declaradas en ese código.
podrías poner el código entre las etiquetas
--- Código: C ---
así seria más fácil de leer.
Navegación
[*] Página Anterior
Ir a la versión completa