• Sábado 14 de Diciembre de 2024, 20:55

Autor Tema:  PROLEMA CON EJERCICIO  (Leído 3176 veces)

RICARDOJ.

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
PROLEMA CON EJERCICIO
« en: Lunes 13 de Diciembre de 2010, 13:57 »
0
1) Realizar un programa que presente dos opciones alusuario:
MENU 1:
a) Trabajar con vectores: Lee del teclado un vector numérico realde 10 posiciones y lo visualiza del revés, empezando por el ultimo valor introducido.
b) Trabajar con matrices:
- Cargar una matriz "A" de orden 3x4 con numeros enteros.
- Visualizar porpantalla la matriz "A".
- Calcularlamatriz traspuesta de "A" y guardarla con el nombre de atriz "B".
- Visualizar la matriz "B".
MENU 2:
Operar con matrices cuadradas de orden 3x3. El usuario introducira los valores de los elementos de la dos matrices y a continuación se le presentara un menu que le permitira seleccionar las operaciones a realizar.
a) Suma de matrices.
b) Resta de matrices.
c) Calcular determinantes de las dos matrices.

EN EL PROGRAMA QUE PRESENTO A CONTINUACION ME FALTA SOLO LA PARTE DEL MENU 1, QUE NOSE COMO REALIZARLA,ME GUSTARIA UNA PEQUEÑA AYUDA....GRACIAS DE ANTE MANO.


//Libreria basica de entrada/salida de datos.
#include <stdio.h>
//Libreria que permite limpiar el texto en la pantalla para facilitar su lectura.
#include <conio.h>
//Libreria que permite hacer operaciones matematicas avanzadas.
#include <math.h>

void main(void)
{
//Declaracion de variables con su tipo.
int Vector1[5], Vector2[5], Vector3[5];
float Modulo1=0, Modulo2=0;
int Ind=0;
float Matriz1[3][3], Matriz2[3][3], Matriz3[3][3], MatrizTp1[3][3], MatrizTp2[3][3];
int Fil=0, Col=0, Fil1=0, Col1=0;
int Opcion1=0, Opcion2=4;

//Presentacion del programa.
printf("t ESTE PROGRAMA REALIZA OPERACIONES CON MATRICES Y VECTORES.");
printf("nntt PULSE UNA TECLA PARA INICIAR EL PROGRAMA");
getch();
//Limpieza de pantalla.
clrscr();
//Bucle que se repite mientras el usuario no especifica salir del programa.
do
{
//Presentacion del menu principal con sus opciones.
printf("tttt --MENU PRINCIPAL--");
printf("nntt ESCOJA UNA DE LAS SIGUIENTES OPCIONES:");
printf("nntt 1.-EJERCICIO 1.");
printf("nntt 2.-EJERCICIO 2");
printf("nntt 3.-SALIR DEL PROGRAMA");
printf("nntt Nº DE LA OPCION ESCOGIDA: ");
//Depuracion del teclado por si se produce un "Overflow".
fflush(stdin);
//Lectura de la opcion definida por el usuario.
scanf("%i", &Opcion1);
//Limpieza de pantalla para pasar al siguiente menu.
clrscr();
//Bucle que se repite mientras el usuario no especifica salir del submenu.
do
{
//Selector que ejecuta una u otra opcion dependiendo de la deseada por
//el usuario.
switch(Opcion1)
{
//Submenu de opeacion con vectores.
case 1:
//Presentacion del menu.
printf("tttt--Menu de Ejercicio 1--");
printf("nntt Elija el tipo de operacion que desea:");
printf("nntt 1. Trabajar con vectores.");
printf("nntt 2. Trabajar con matrices.");
printf("nntt 3. Volver al menu principal.");
printf("nntt Su opcion: ");
//Depuracion del teclado por si se ha producido un "Overflow".
fflush(stdin);
//Lectura de la opcion deseada por el usuario.
scanf("%i", &Opcion2);
printf("n");
//Condicion que nos permite introducir los datos si quiere realizar
//el usuario algun tipo de operacion.
if(Opcion2<4 && Opcion2>0)
//Selector que ejecuta la opcion definida por el usuario.
switch(Opcion2)
{
//Opcion: Visualizar vector al reves.
case 1:
{
printf("Introduzca los valores del Vector 1:nn");
//Bucle que recopila los datos del vector 1 introducidos por teclado.
for(Ind=0; Ind<5; Ind++)
{
printf("Valor %i: ", Ind);
scanf("%i", &Vector1[Ind]);
}
}
//Opcion: Trasponer matriz.
case 2:

case 3:
//Limpieza de pantalla.
clrscr();
break;
//Resto de opciones.
default:
printf("nPor favor, escoja una opcion valida.");
printf("nPulse una tecla para continuar.");
getch();
//Limpieza de pantalla.
clrscr();
}
break;
//Submenu de Ejercicio 2.
case 2:
//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.
case 3:
//Bucle para rellenar cada valor de la trasposicion de la matriz 1.
for(Col=0; Col<3; Col++)
{
for(Fil=0; Fil<3; Fil++)
{
//Asignacion de valores.
MatrizTp1[Fil1][Col1]=Matriz1[Fil][Col];
//Incremento de la columna de la matriz traspuesta para asignar
//los valores correctamente.
Col1++;
}
//Incremento de la fila de la matriz traspuesta para asignar los
//valores correctamente.
Fil1++;
//Vuelta a la columna 0 para asignar los valores de una fila nueva.
Col1=0;
}
//Vuelta a las coordenadas 0,0 de la matriz traspuesta.
Fil1=0;
Col1=0;
//Bucle para rellenar cada valor de la trasposicion de la matriz 2.
for(Col=0; Col<3; Col++)
{
for(Fil=0; Fil<3; Fil++)
{
//Asignacion de valores.
MatrizTp2[Fil1][Col1]=Matriz2[Fil][Col];
//Incremento de la columna de la matriz traspuesta para asignar
//los valores correctamente.
Col1++;
}
//Incremento de la fila de la matriz traspuesta para asignar los
//valores correctamente.
Fil1++;
//Vuelta a la columna 0 para asignar valores a una fila nueva.
Col1=0;
}
//Representacion de los resultados por pantalla.
printf("nnEl resultado de la trasposicion de la Matriz 1 es:nn");
//Bucle para representar cada celda de la matriz 1.
for(Fil1=0; Fil1<3; Fil1++)
{
for(Col1=0; Col1<3; Col1++)
{
printf("%7.1f", MatrizTp1[Fil1][Col1]);
}
printf("n");
}
//
printf("nnEl resultado de la trasposicion de la Matriz 2 es:nn");
//Bucle para representar cada celda de la matriz 2.
for(Fil1=0; Fil1<3; Fil1++)
{
for(Col1=0; Col1<3; Col1++)
{
printf("%7.1f", MatrizTp2[Fil1][Col1]);
}
printf("n");
}
printf("nPulse una tecla para continuar.");
getch();
//Limpieza de pantalla.
clrscr();
break;
//Opcion: Volver al menu principal.
case 4:
//Limpieza de pantalla.
clrscr();
break;
//Resto de opciones.
default:
printf("Por favor, escoja una opcion valida.");
printf("nPulse una tecla para continuar.");
getch();
//Limpieza de pantalla.
clrscr();
}
break;
//Opcion para salir del programa.
case 3:
//Limpieza de pantalla.
clrscr();
break;
//Resto de opciones.
default:
printf("Por favor, introduzca una opcion valida.");
printf("nPulse una tecla para continuar.");
getch();
//Limpieza de pantalla.
clrscr();
break;
}
//Condicion del bucle para repetir los diferentes submenus.
}while(Opcion2!=4);
//Condicion del bucle para salir del programa.
}while(Opcion1!=3);
}

SkullFlower

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: PROLEMA CON EJERCICIO
« Respuesta #1 en: Lunes 13 de Diciembre de 2010, 15:05 »
0
Podrías usar 3 switches de la siguiente forma:

Código: C
  1. #include<stdio.h>
  2. int main(){
  3.     char letra;
  4.     int opcion;
  5.     scanf("%d", &opcion);//lee un numero para ver a cual de los 2 menus entrar
  6.     switch(opcion){
  7.         case 1:
  8.             scanf("%c", &letra);
  9.             switch(letra){
  10.                 case 'a':
  11.                 //Aqui pones lo que hace la opcion a
  12.                 break;
  13.                 case 'b':
  14.                 //aqui pones lo que hace la opcion b
  15.                 break;
  16.             }
  17.         case 2:
  18.             scanf("%c", &letra);
  19.             switch(letra){
  20.                 case 'a':
  21.                 //aqui pones lo que hace la opcion a
  22.                 break;
  23.                 case 'b':
  24.                 //opcion b
  25.                 break;
  26.                 case 'c':
  27.                 //opcion c
  28.                 break;
  29.             }
  30.     }
  31.     return 0;
  32. }
  33.  

RICARDOJ.

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: PROLEMA CON EJERCICIO
« Respuesta #2 en: Lunes 13 de Diciembre de 2010, 15:12 »
0
Gracias pero me podias ayudar hacer las 2 opciones del menu ejercicio 1

SkullFlower

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: PROLEMA CON EJERCICIO
« Respuesta #3 en: Lunes 13 de Diciembre de 2010, 16:37 »
0
Creo que te entendí mal xD

a)
Pues tendrías que declarar un arreglo de 10 elementos:

Código: C
  1. int vector[10];
  2.  

después tienes que leer los números, eso lo puedes hacer con un ciclo for:

Código: C
  1. for(i=0;i<10;i++){
  2.     scanf("%d", &vector[i]);
  3. }
  4.  

y ya para mostrarlo al revés como ya sabes que el vector es de 10 elementos pues utilizas un ciclo for empezando del 9 y que termine en 0:

Código: C
  1. for(i=9;i>=0;i--){
  2.     printf("%d ", vector[i]);
  3. }
  4.  

b)

pues declaras primero los arreglos:

Código: C
  1. int A[3][4];
  2. int B[4][3];
  3.  

y utilizas 2 ciclos for para leer los datos que se le asignaran a la matriz A:
en la linea 3 va leyendo los numeros y como la transpuesta de una matriz mxn es una matriz nxm en la linea 4 cambio de lugar las variables i y j.
Código: C
  1. for(i=0; i<3; i++){
  2.     for(j=0; j<4; j++){
  3.         scanf("%d", &A[i][j]);
  4.         B[j][i]=A[i][j];
  5.     }
  6. }
  7.  

y ya por ultimo para imprimirla solo es cuestión de utilizar otros 2 ciclos for como en la parte anterior, solo que en vez de leer los datos los vas a mostrar.

Saludos.

RICARDOJ.

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: PROLEMA CON EJERCICIO
« Respuesta #4 en: Lunes 13 de Diciembre de 2010, 17:34 »
0
MIRA A VER ESTA OPCION PERO ME DA UNOS ERRORES QUE NOSE PORQUE SON A VER SI ME PUEDES ECHAR UNA MANO.


//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("PROGRAMA DE OPERACIONES CON VECTORES Y MATRICESn");
    printf("Que desea hacer?n");
    printf("t1. Ejer 1.n");
    printf("t2. Ejer 2.n");
    printf("t3. 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("ERROR 000: Opcion incorrectan");
        printf("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("Que desea hacer?n");
    printf("t1. Trabajar con vectores.n");
    printf("t2. Trabajar con matrices.n");
    printf("t3. 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("ERROR 001: Opcion incorrectan");
        printf("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("Guarda los datos del vector:n");
  for (i = 0; i <= MAXV-1; i++){
    printf("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("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("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("Introduce el valor de la posicion (%d,%d): ", i+1,j+1);
      fflush(stdin);
      scanf("%.2f", &matriz[j]);
      printf("n");
    }//for j
  }//for i
 
  //Muestro al usuario la matriz A
  printf("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
 
  //Copio en la matriz B la matriz traspuesta de A
  //Una matriz traspuesta es aquella cuyos elementos
  // de una matriz original tienen su orden de fila
  // y columnas intercambiados. Por ejemplo:
  //
  //  MATRIZ           MATRIZ Traspuesta
  //
  //  1  2              1   3   5
  //  3  4              2   4   6
  //  5  6
  //
  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("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 ", matriz[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("OPERACIONES CON MATRICESn");
  printf("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("Introduzca los datos de la matriz 2: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", &matriz2[j]);
      printf("n");
    }//for j
  }//for i
 
 
  do{ //Repito
     
    //Le muestro las opciones de que dispone
    printf("Que desea hacer?n");
    printf("t1. Sumar las matrices.n");
    printf("t2. Restar las matrices.n");
    printf("t3. Calcular los determinantes.n");
    printf("t4. Volver al menu principal.n");
   
    //Limpio el teclado para borrar cualquier desplazamiento
    fflush(stdin);
    //Registro la opcion elegida
    scanf("%d", &opc);
    printf("n");
 
    //Si la opción es incorrecta, le corrijo
    if ((opc > 4)||(opc <= 0)){
      do{
        printf("ERROR 002: Opcion incorrectan");
        printf("Por favor, vuelva a introducir su elección: ");
        fflush(stdin);
        scanf("%d", &opc);
        printf("n");
      }while((opc > 4)||(opc <= 0));
    }//fi
   
    //Determino que realizar
    switch(opc){
   
      //En el primer caso, hay que calcular la matriz suma.
      //Al ser dos matrices cuadradas del mismo orden, 3,
      // la matriz suma es la suma de los elementos de una
      // matriz con los corresopndiente de la otra.
      case 1: {
        printf("La matriz suma es:n");
        for (i = 0; i <= ORD-1; i++){
          for (j = 0; j <= ORD-1; j++){
            printf(" %.2f ", matriz1[j]+matriz2[j]);
          }//for j
          printf("n");
        }//for i
      }; break;
     
      //En el segundo caso, hay que cacular la matriz diferencia.
      //Igual que en el caso anterior, bastara con restar
      // cada elemento de una matriz con los correspondientes de
      // la otra.
      case 2: {
        printf("La matriz resta es:n");
        for (i = 0; i <= ORD-1; i++){
          for (j = 0; j <= ORD-1; j++){
            printf(" %.2f ", matriz1[j]-matriz2[j]);
          }//for j
          printf("n");
        }//for i
      }; break;
     
      //En el tercer caso, hay que calcular el determinante de cada matriz
      case 3: {
        printf("El determinante de la matriz 1 es: %dn", determinante(matriz1);
        printf("El determinante de la matriz 2 es: %dn", determinante(matriz2);
      }; break;
      case 4: break;
      default: break;
    }//swtich
   
   //Mientras no decida volver al menu principal
  }while(opc != 4);
}//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[][]){
 
  //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("ERROR: El orden de la matriz es incorrecto.");
    printf("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

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: PROLEMA CON EJERCICIO
« Respuesta #5 en: Lunes 13 de Diciembre de 2010, 18:40 »
0
Mira en la función transpuesta tienes estas lineas:

Código: C
  1. scanf("%.2f", &matriz[i][j]);
  2.  
Código: C
  1. printf(" %.2f ", matriz[i][j]);
  2.  

pero matriz no esta definida, solo tienes matrizA y matrizB definidas

en el switch en el case 3 tienes esto:

Código: C
  1. printf("El determinante de la matriz 1 es: %dn", determinante(matriz1);
  2. printf("El determinante de la matriz 2 es: %dn", determinante(matriz2);
  3.  

faltaría agregarle otro paréntesis ) a cada linea:

Código: C
  1. printf("El determinante de la matriz 1 es: %dn", determinante(matriz1));
  2. printf("El determinante de la matriz 2 es: %dn", determinante(matriz2));
  3.  

en donde tienes esto:

Código: C
  1. sum1 = matriz[0][0]*matriz[1][1]*matriz[2][2];
  2. sum2 = matriz[0][1]*matriz[1][2]*matriz[2][0];
  3. sum3 = matriz[0][2]*matriz[1][0]*matriz[2][1]:
  4. res1 = matriz[2][0]*matriz[1][1]*matriz[0][2];
  5. res2 = matriz[1][0]*matriz[0][1]*matriz[2][2];
  6. res3 = matriz[0][0]*matriz[1][2]*matriz[2][1];
  7.  

en la linea 3 tienes dos puntos en vez de punto y coma al final.

y en esta otra linea:

Código: C
  1. int determinante(float matriz[][]){
  2.  

te falta poner ORD entre los corchetes.

Intenta corrigiendo eso a ver si ya funciona.

RICARDOJ.

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: PROLEMA CON EJERCICIO
« Respuesta #6 en: Lunes 13 de Diciembre de 2010, 18:55 »
0
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

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: PROLEMA CON EJERCICIO
« Respuesta #7 en: Lunes 13 de Diciembre de 2010, 18:58 »
0
Código: C
  1. scanf("%.2f", &matriz[i][j]);
  2.  

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.

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: PROLEMA CON EJERCICIO
« Respuesta #8 en: Lunes 13 de Diciembre de 2010, 19:42 »
0
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

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: PROLEMA CON EJERCICIO
« Respuesta #9 en: Lunes 13 de Diciembre de 2010, 20:13 »
0
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
  1.  

así seria más fácil de leer.