![]() |
---|
////////////////////////////////////////// // C ++ Visual Wilo Carpio // MANEJO DE MATRICES ////////////////////////////////////////// #include vcl\dialogs.hpp> /////////////////////////////////////////// // Declaración de Tipos de Datos Globales /////////////////////////////////////////// const char Titulo[] = "MANEJO DE MATRICES Visual C++ Wilo Carpio"; const char Raya[] = "============================="; const char Datos[] = "\n\t Datos de la matríz \n"; const char Calculos[] = "\n\n\t Cálculos Numéricos \n"; const char SaltoRenglon = '\n'; int i,j,n,m,s,Mayor,Menor,Suma; int matriz[20][20]; float Promedio;
FUNCIONES: ESTRUCTURAS C++BUILDER
///////////////////////////////////// // Estructuras de las funciones ///////////////////////////////////// int LeerFilas() { AnsiString ValorFilas; char Filas; ValorFilas = InputBox("REGISTRO DE FILAS de A(m,n) ","Digita Nº de filas: Hasta m = 20 ","2"); Filas = atoi(ValorFilas.c_str()); return Filas; } int LeerColumnas() { AnsiString ValorColumnas; char Columnas; ValorColumnas = InputBox("REGISTRO DE FILAS de A(m,n) ","Digita Nº de columnas: Hasta n = 20 ","2"); Columnas = atoi(ValorColumnas.c_str()); return Columnas; } int LeerElemento() { AnsiString ValorElemento; char Elemento; ValorElemento = InputBox("INGRESO DE ELEMENTOS de A(m,n) ","Digita valor del elemento ","2"); Elemento = atoi(ValorElemento.c_str()); return Elemento; } int Seguir() { AnsiString Valor; char Si; Valor = InputBox("DESEAS CONTINUAR ","Para SALIR -> 0 ","0"); Si = atoi(Valor.c_str()); return Si; }
FUNCIONES en C++BUILDER: MAIN
/////////////////////////////////////////////// // FUNCION PRINCIPAL /////////////////////////////////////////////// WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { ////////////////////////////// // Variables Locales ////////////////////////////// ////////////////////////////// // Bucle Operativo ////////////////////////////// do {
FUNCIONES en C++BUILDER: ALTAS
////////////////////////////// // Ingreso de Datos // Aplicación de la función ////////////////////////////// m = LeerFilas(); n = LeerColumnas(); ///////////////////////////////////////////// // Carga del valor de cada elemento ///////////////////////////////////////////// for(j=1;j<=m;j++) for(i=1;i<=n;i++) { matriz[i][j]=LeerElemento(); };
FUNCIONES en C++BUILDER: OPERACIONES
///////////////////////////////////////////// // Si el dato ingreasado es mayor que cero // muestra la matriz, sino termina el programa //////////////////////////////////////////// if (m>0) { ////////////////////////////// // Cálculos ////////////////////////////// Mayor=0; Menor=matriz[1][1]; Suma=0; for(j=1;j<=m;j++) for(i=1;i<=n;i++) { if (matriz[i][j]>Mayor) Mayor=matriz[i][j]; if (matriz[i][j] < Menor) Menor=matriz[i][j]; Suma=Suma+matriz[i][j]; }; Promedio=Suma/(m*n);
VER PARA CREER
Para simplificar solo usaremos el fomulario Message...!!
///////////////////////////////// // Salidas por Monitor A(m,n) //////////////////////////////// ShowMessage ( Titulo + AnsiString(SaltoRenglon) + Raya + Datos +" \ n Número de Filas = " + AnsiString(AnsiString(j-1)) +" \ n Número de Columnas = " + AnsiString(AnsiString(i-1)) +" \ n Primer elemento A(1,1) = " + AnsiString(matriz[1][1]) +" \ n Ultimo elemento A("+AnsiString(j-1) + ","+AnsiString(i-1)+") = "+ AnsiString(matriz[i-1][j-1]) + Calculos +" \ n Mayor elemento = "+ AnsiString(Mayor) +" \ n Menor elemento = "+ AnsiString(Menor) +" \ n Promedio Valores = "+ AnsiString(Promedio) ); } s= Seguir(); } while (s !=0); return 0; }
Para que la cosa sea más divertida te propongo que los términos de dicha serie se transformen en los elementos de una matríz cuadrada..!!
///////////////////////////////////////////////// // C++ Builder Wilo Carpio // MATRICES Y BIBONACCI ///////////////////////////////////////////////// #include#pragma hdrstop #include "DinoProy.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" ///////////////////////////////////////////////// // Declaracion de Variables Globales ///////////////////////////////////////////////// int mimatriz[5][5]; int mivector[5]; int fila,columna,grado,ant1=1,ant2=2; ///////////////////////////////////////////////// // Prototipo del formulario ///////////////////////////////////////////////// Tmiformulario *miformulario; ///////////////////////////////////////////////// // Activando el formulario ///////////////////////////////////////////////// __fastcall Tmiformulario::Tmiformulario(TComponent* Owner) : TForm(Owner) { } ///////////////////////////////////////////////// // Cerrando el programa ///////////////////////////////////////////////// void __fastcall Tmiformulario::botonsalirClick(TObject *Sender) { if (Application->MessageBox("¿Queres cerrar el Sistema?", "Fin del Programa", MB_OKCANCEL+MB_DEFBUTTON1|MB_ICONQUESTION)== IDOK) { Close(); } } ///////////////////////////////////////////////// // Cancelando generación de matríz ///////////////////////////////////////////////// void __fastcall Tmiformulario::botoncancelarClick(TObject *Sender) { boxdato->Clear(); }
El único dato que requieres es el grado de la matríz donde debes almacenar tu serie de Fibonacci
///////////////////////////////////////////////// // Ingreso del grado de la matríz ///////////////////////////////////////////////// void __fastcall Tmiformulario::botoninicioClick(TObject *Sender) { if (botoninicio->Caption=="Inicio") { boxdato->Visible=true; botonaceptar->Visible=true; botoncancelar->Visible=true; botoninicio->Caption="Cerrar"; boxdato->Text=3; boxdato->SetFocus(); miformulario->Caption="Ingrese el grado de la matriz"; } else { boxdato->Visible=false; botonaceptar->Visible=false; botoncancelar->Visible=false; botoninicio->Caption="Inicio"; miformulario->Caption="Fibonacci"; } }
El siguiente método te muestra una manera sencilla de generar la típica serie de fibonacci la cuál es cargada directamente a los elementos de una matríz cuadrada.
En la última parte apreciarás como transfiero la información generada para la matríz de manera que puedas visualizarla en un Memo Box.
///////////////////////////////////////////////// // Serie de Fibonacci ///////////////////////////////////////////////// void __fastcall Tmiformulario::botonaceptarClick(TObject *Sender) { boxdato->Visible=false; botonaceptar->Visible=false; botoncancelar->Visible=false; botoninicio->Caption="Inicio"; vermatriz->Visible=true; vermatriz->Clear(); botoninicio->Caption="Cerrar"; grado=StrToInt(boxdato->Text); miformulario->Caption="Grado de la matriz generada: "+IntToStr(grado); ///////////////////////////////////////////////// // Generando Serie de Fibonacci ///////////////////////////////////////////////// for(fila=1;fila<=grado;fila++) { for(columna=1;columna<=grado;columna++) { if((fila==1 && columna==1)||(fila==1 && columna==2)) { mimatriz[1][1]=1; mimatriz[2][1]=2; } else { mimatriz[columna][fila]= ant1+ ant2; ant1= ant2; ant2= mimatriz[columna][fila]; } } } ///////////////////////////////////////////////// // Generando Serie de Fibonacci ///////////////////////////////////////////////// for(fila=1;fila<=grado;fila++) { for(columna=1;columna<=grado;columna++) { vermatriz->Lines->Add(IntToStr(mimatriz[columna][fila])); } } } //---------------------------------------------------------------------------
El placer está tan cerca del dolor, que muchas veces lloramos de alegría..!!
Todos los algoritmos que te propongo funcionan correctamente, por lo tanto, solo te resta mejorarlos de acuerdo a tus propias necesidades.
Luego de editar la siguiente sintaxis, al compilar lograrás un sistema que te permitirá ver en acción a los objetos del grafico precedente.
Como podrás apreciar el siguiente ejemplo solo te permite efectuar altas de datos y luego la visualización de los mismos. Solo requieres armar los objetos de acuerdo a la imagen de los objetos de la parte superior de este link y asignarle los nombres que te indico en el siguiente programa.
A modo de introducción también te propongo algunos mecanismos de seguridad y amigabilidad en el procesamiento de un vector cuyo elemento posee dos campos tipo cadena.
Ah..!! Este primer ejemplo, con el fín de simplificar no posee archivo, por lo tanto los registros de datos son volátiles al cerrar el programa.
VECTOR Programa Fuente
///////////////////////////////////////////////////// // C++Builder 5 Wilo Carpio // // MANEJO BASICO DE UN VECTOR DE DOS CAMPOS // SIN ARCHIVO // //////////////////////////////////////////////////// //--------------------------------------------------------------------------- #include#pragma hdrstop #include "Fuente.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" /////////////////////////////////////// // // Declaracion de la Estructura ////////////////////////////////////// typedef struct registro { char Nombre[30], Email[30]; int Borrado; } MiRegistro; ////////////////////////////// // // Declaracion del Vector ////////////////////////////// MiRegistro MiVector[50]; //////////////////////////////////////////// // // Declaracion de las variables del Vector //////////////////////////////////////////// int i=0; int n=0; int Total,l; TMiFormulario *MiFormulario; //--------------------------------------------------------------------------- __fastcall TMiFormulario::TMiFormulario(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::BotonSalirClick(TObject *Sender) { if (Application->MessageBox("Quieres cerrar el programa.?","Ojito.. QUE NO TENES ARCHIVO..!!",MB_DEFBUTTON1 + MB_OKCANCEL + MB_ICONQUESTION)==1) { Close(); } } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::BotonAltasClick(TObject *Sender) { if(BotonAltas->Caption=="&Altas") { BotonAltas->Caption = "&Cerrar"; BoxNombre->Visible=true; BoxNombre->SetFocus(); BoxEmail->Visible=true; MiFormulario->Caption="DIGITA LOS NUEVOS DATOS"; Autor->Visible=false; } else { BotonAltas->Caption = "&Altas"; BoxNombre->Visible=false; BoxEmail->Visible=false; MiFormulario->Caption="VECTORES: Agenda sin archivo Wilo Carpio"; Autor->Visible=true; } } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::BoxNombreChange(TObject *Sender) { if(!(BoxNombre->Text=="")) { GrabarAlta->Visible=true; } else { GrabarAlta->Visible=false; } } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::GrabarAltaClick(TObject *Sender) { i++; Total = i; strcpy(MiVector[i].Nombre,BoxNombre->Text.c_str()); strcpy(MiVector[i].Email,BoxEmail->Text.c_str()); MiFormulario->Caption="CARGADO: V("+IntToStr(i)+") = "+AnsiString(MiVector[i].Nombre); BoxNombre->Clear(); BoxEmail->Clear(); BoxNombre->SetFocus(); BotonVer->Visible=true; } /////////////////////////////////////////////////////////////// // VISUALIZACION DE DATOS POR BOX MEMO Y POR GRILLA ////////////////////////////////////////////////////////////// void __fastcall TMiFormulario::BotonVerClick(TObject *Sender) { if(BotonVer->Caption=="&VerFichas") { ////////////////////////////////////////////// // Carga del vector en el BOX MEMO ////////////////////////////////////////////// MiFormulario->Caption="FICHAS CARGADAS: V( "+IntToStr(Total)+" ) "; BotonVer->Caption = "&Cerrar"; BoxMemo->Clear(); BoxMemo->Lines->Add("\t CONTENIDO"); BoxMemo->Lines->Add("\t =========="); BoxMemo->Visible=true; for(n=1;n<=Total;n++) BoxMemo->Lines->Add("V("+IntToStr(n)+") = "+AnsiString(MiVector[n].Nombre)); ////////////////////////////////////////////// // Carga de datos a la GRILLA ////////////////////////////////////////////// i=1; l=1; MiGrilla->Cells[0][0]="Nombre"; MiGrilla->Cells[1][0]="Email"; while (i<=Total) { MiGrilla->Cells[0][l]=MiVector[i].Nombre; MiGrilla->Cells[1][l]=MiVector[i].Email; i=i+1; l=l+1; } MiGrilla->Visible=true; } else { BotonVer->Caption = "&VerFichas"; BoxMemo->Visible=false; MiGrilla->Visible=false; MiFormulario->Caption="VECTORES: Agenda sin archivo Wilo Carpio"; } } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::MiGrillaClick(TObject *Sender) { MiFormulario->Caption="CONTENIDO DEL VECTOR"; i=1; l=1; MiGrilla->Cells[0][0]="Nombre"; MiGrilla->Cells[1][0]="Email"; while (i<=Total) { MiGrilla->Cells[0][l]=MiVector[i].Nombre; MiGrilla->Cells[1][l]=MiVector[i].Email; i=i+1; l=l+1; } MiGrilla->Visible=true; }
///////////////////////////////////////////////////// // C++Builder 5 Wilo Carpio // // MANEJO BASICO DE UN VECTOR DE DOS CAMPOS // SIN ARCHIVO // //////////////////////////////////////////////////// //--------------------------------------------------------------------------- #include#pragma hdrstop #include "Fuente.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" /////////////////////////////////////// // // Declaracion de la Estructura ////////////////////////////////////// typedef struct registro { char Nombre[30], Email[30]; int Borrado; } MiRegistro; ////////////////////////////// // // Declaracion del Vector ////////////////////////////// MiRegistro MiVector[50]; //////////////////////////////////////////// // // Declaracion de las variables del Vector //////////////////////////////////////////// int i=0; int n=0; int Total,l; TMiFormulario *MiFormulario; //--------------------------------------------------------------------------- __fastcall TMiFormulario::TMiFormulario(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::BotonSalirClick(TObject *Sender) { if (Application->MessageBox("Quieres cerrar el programa.?","Ojito.. QUE NO TENES ARCHIVO..!!",MB_DEFBUTTON1 + MB_OKCANCEL + MB_ICONQUESTION)==1) { Close(); } } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::BotonAltasClick(TObject *Sender) { if(BotonAltas->Caption=="&Altas") { BotonAltas->Caption = "&Cerrar"; BoxNombre->Visible=true; BoxNombre->SetFocus(); BoxEmail->Visible=true; MiFormulario->Caption="DIGITA LOS NUEVOS DATOS"; Autor->Visible=false; } else { BotonAltas->Caption = "&Altas"; BoxNombre->Visible=false; BoxEmail->Visible=false; MiFormulario->Caption="VECTORES: Agenda sin archivo Wilo Carpio"; Autor->Visible=true; } } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::BoxNombreChange(TObject *Sender) { if(!(BoxNombre->Text=="")) { GrabarAlta->Visible=true; } else { GrabarAlta->Visible=false; } } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::GrabarAltaClick(TObject *Sender) { i++; Total = i; strcpy(MiVector[i].Nombre,BoxNombre->Text.c_str()); strcpy(MiVector[i].Email,BoxEmail->Text.c_str()); MiFormulario->Caption="CARGADO: V("+IntToStr(i)+") = "+AnsiString(MiVector[i].Nombre); BoxNombre->Clear(); BoxEmail->Clear(); BoxNombre->SetFocus(); BotonVer->Visible=true; } /////////////////////////////////////////////////////////////// // VISUALIZACION DE DATOS POR BOX MEMO Y POR GRILLA ////////////////////////////////////////////////////////////// void __fastcall TMiFormulario::BotonVerClick(TObject *Sender) { if(BotonVer->Caption=="&VerFichas") { ////////////////////////////////////////////// // Carga del vector en el BOX MEMO ////////////////////////////////////////////// MiFormulario->Caption="FICHAS CARGADAS: V( "+IntToStr(Total)+" ) "; BotonVer->Caption = "&Cerrar"; BoxMemo->Clear(); BoxMemo->Lines->Add("\t CONTENIDO"); BoxMemo->Lines->Add("\t =========="); BoxMemo->Visible=true; for(n=1;n<=Total;n++) BoxMemo->Lines->Add("V("+IntToStr(n)+") = "+AnsiString(MiVector[n].Nombre)); ////////////////////////////////////////////// // Carga de datos a la GRILLA ////////////////////////////////////////////// i=1; l=1; MiGrilla->Cells[0][0]="Nombre"; MiGrilla->Cells[1][0]="Email"; while (i<=Total) { MiGrilla->Cells[0][l]=MiVector[i].Nombre; MiGrilla->Cells[1][l]=MiVector[i].Email; i=i+1; l=l+1; } MiGrilla->Visible=true; } else { BotonVer->Caption = "&VerFichas"; BoxMemo->Visible=false; MiGrilla->Visible=false; MiFormulario->Caption="VECTORES: Agenda sin archivo Wilo Carpio"; } } //--------------------------------------------------------------------------- void __fastcall TMiFormulario::MiGrillaClick(TObject *Sender) { MiFormulario->Caption="CONTENIDO DEL VECTOR"; i=1; l=1; MiGrilla->Cells[0][0]="Nombre"; MiGrilla->Cells[1][0]="Email"; while (i<=Total) { MiGrilla->Cells[0][l]=MiVector[i].Nombre; MiGrilla->Cells[1][l]=MiVector[i].Email; i=i+1; l=l+1; } MiGrilla->Visible=true; }
Del anális de esto ejemplo ya estas en condición de deducir que:
Los vectores y las matrices en C, son manejados como estructuras de datos tipo ARREGLOS, que son grupos consecutivos de localidades de memoria a los cuales les asignamos un mismo nombre y un mismo tipo de dato.
Las magnitudes vectoriales y matriciales, forman parte de los datos estructurados que se caracterizan por ser variables del tipo subindicadas, pues en su estructura integran un valor indice que indica la ubicación de cada uno de sus elementos dentro del conjunto.
Estos datos requieren:
int MiMatriz[30][30];
int TuMatriz[50][30];
int MiMatriz[30][30], TuMatriz[50][30] Esta equivale a las dos anteriores.
MiMatriz[1][1] = 0;
int TuVector[4]= {69, 22, 14, 55}; ( Este ejemplo abarca declaración e inicialización )
MiMatriz[i][j] = TuMatriz[i][j] + EsaMatriz[x][y]
MiMatriz[i][j] = TuMatriz[i][j] - UnValor
MiMatriz[i][j] = TuMatriz[i][j] * 5
Tanto en C, como en C++, en Visual C++ y C++Builder, siempre el elemento inicial tiene como subíndice cero, por ello, el primer elemento si se trata de:
Fácilmente puedes deducir que el elemento enésimo será
Es necesario que los subíndices sean:
Volver |
---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
---|
Y para el cruel que me arranca
el corazón con que vivo,
cardo ni ortiga cultivo;
..cultivo una rosa blanca..!
José Martí
![]() |
![]() |
![]() |
![]() |
![]() |
![]() Volver |
---|
Te espero en: wilucha@gmail.com
Esta page está en: www.wilocarpio.com.ar
24/09/2002