Programación General > C/C++
PROLEMA CON EJERCICIO
RICARDOJ.:
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:
Podrías usar 3 switches de la siguiente forma:
--- Código: C ---#include<stdio.h>int main(){ char letra; int opcion; scanf("%d", &opcion);//lee un numero para ver a cual de los 2 menus entrar switch(opcion){ case 1: scanf("%c", &letra); switch(letra){ case 'a': //Aqui pones lo que hace la opcion a break; case 'b': //aqui pones lo que hace la opcion b break; } case 2: scanf("%c", &letra); switch(letra){ case 'a': //aqui pones lo que hace la opcion a break; case 'b': //opcion b break; case 'c': //opcion c break; } } return 0;}
RICARDOJ.:
Gracias pero me podias ayudar hacer las 2 opciones del menu ejercicio 1
SkullFlower:
Creo que te entendí mal xD
a)
Pues tendrías que declarar un arreglo de 10 elementos:
--- Código: C ---int vector[10];
después tienes que leer los números, eso lo puedes hacer con un ciclo for:
--- Código: C ---for(i=0;i<10;i++){ scanf("%d", &vector[i]);}
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 ---for(i=9;i>=0;i--){ printf("%d ", vector[i]);}
b)
pues declaras primero los arreglos:
--- Código: C ---int A[3][4];int B[4][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 ---for(i=0; i<3; i++){ for(j=0; j<4; j++){ scanf("%d", &A[i][j]); B[j][i]=A[i][j]; }}
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.:
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()
Navegación
[#] Página Siguiente
Ir a la versión completa