Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-02-2007
Cecilioxx Cecilioxx is offline
Registrado
 
Registrado: feb 2007
Ubicación: Santander
Posts: 5
Poder: 0
Cecilioxx Va por buen camino
Resolución sistemas de ecuaciones

Saludos: Hay bastantes programas que resuelven problemas matemáticos, pero SIN CÓDIGO FUENTE.
El programa consta de un formulario en el que se han pegado los siguientes controles:
- Un TStringGrid que sirve para introducir la matriz ampliada del sistema (coeficientes de las variables + los términos independientes). Se ha puesto a cero las propiedades FixedCols y FixedRows para que no se muestren los botones de filas y de columnas.
- Un TMemo con en el que se indica como introducir los datos. La propiedad Lines tiene el siguiente texto:
Introduzca los coeficientes de las incógnitas en las n
primeras columnas y los términos independientes en la
columna n+1:
Ejemplo:
X1+X2+X3=6; Introducir; 1 1 1 6
X1-X2+X3=2; " 1 -1 1 2
X1+X2-X3=0; " 1 1 -1 0
Las soluciones son: X1=1; X2=2; X3=3
Se permite hasta 100 incógnitas.

La propiedad ReadOnly está a true para impedir modificar el texto.
-Un TEdit con una etiqueta (Nº de incónitas)
-Un TStatusBar para dar las soluciones.
-Un botón para inicial los cálculos.
-Un botón para imprimir la pantalla, si se desea
Cómo funciona:
1) Se introduce el nº de incógnitas en el TEdit. Se pulsa intro y se redimensiona la rejilla con n filas y n+1 columnas. También se redimensionan las celdas.
2) Se introduce la matriz ampliada y se pulsa el botón para calcular.
Código:
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#include <stdio.h>
#include <malloc.h>
#pragma hdrstop
#include "ecu1.h"
//---------------------------------------------------------------------------
#pragma link "Grids"
#pragma resource "*.dfm"
TEcuaci *Ecuaci;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------

int resuelve(int filas,double *datos);
//--------------------------------------------------
int resuelve(int filas,double *datos)
{
/* Función que resulve el sistema. Recibe como parámetros el número de incógnitas y por la matriz ampliada
*/ 
  int i,j,k;
  int columnas;
  columnas=filas+1;
  for (i=0;i<filas;i++)
    {

    if (*(datos+i*columnas+i)==0.0)
      return 1;
                for (j=columnas-1;j>=0;j--)
      {
                        *(datos+i*columnas+j) /= *(datos+i*columnas+i);
      }
    for (j=i+1;j<filas;j++)
      {
                        for (k=columnas-1;k>=i;k--)
        *(datos+j*columnas+k)-=*(datos+j*columnas+i) * *(datos+i*columnas+k);
      }
                }
        for (i=filas-2;i>=0;i--)
                {
                for (j=columnas-2;j>i;j--)
                        {
                        *(datos+i*columnas+columnas-1)-= \
                        *(datos+i*columnas+j) * *(datos+j*columnas+columnas-1);
                        *(datos+i*columnas+j)=0;
                        }
                }
  return 0;
}
__fastcall TEcuaci::TEcuaci(TComponent* Owner)
	: TForm(Owner)
{
}
//----------------------------------------------------------
void __fastcall TEcuaci::Edit1Exit(TObject *Sender)
{
//Al salir del control TEdit se limpia la rejilla
for (int i=1;i<Grid1->ColCount;i++)
{for (int n=1;n<Grid1->RowCount;n++)
 Grid1->Cells[i][n]="";}
//Se asignan tantas filas como incógnitas y como columnas 
//una mas que filas.
 Grid1->ColCount=atoi(Edit1->Text.c_str())+1;
 Grid1->RowCount=atoi(Edit1->Text.c_str());
//Se redimensinan las celdas
if (Grid1->ColCount*Grid1->DefaultColWidth<393)
Grid1->DefaultColWidth=384/Grid1->ColCount;
else Grid1->DefaultColWidth=64;
Grid1->Col=1;

}
//----------------------------------------------------------
void __fastcall TEcuaci::Button1Click(TObject *Sender)
{
//este botón obtiene el nº de incógnitas de TEdit y
//rellena una matriz de n*n+1 con los datos introducidos
//en la rejilla, convirtiéndolos a coma flotante
int nVariables=atoi(Edit1->Text.c_str());
double V[100][101];
double *V1=&V[0][0];
int i=0;
 for (int a =0;a<nVariables;a++)
  {
    for (int b =0;b<nVariables+1;b++)
   {
      *(V1+i)=atof(Ecuaci->Grid1->Rows[a]->Strings[b].c_str());
   i++;
   }
  }
if (resuelve(nVariables,V1)==1)// L
ShowMessage("Matriz singular"+String("\nSistema incompatible o indeterminado"));
else
{
String Cadena;
int g=1;
StatusBar1->SimpleText="";
for (int a=nVariables;a<nVariables*(nVariables+1);a=a+nVariables+1)
    {
    Cadena=Cadena+"X"+String(g)+"="+String(*(V1+a))+";  ";
    g++;
    }
StatusBar1->SimpleText=Cadena;

}
}
void __fastcall TEcuaci::Edit1KeyUp(TObject *Sender, WORD &Key,
	TShiftState Shift)
{
if ((Key==13)|(Key ==9)) Grid1->SetFocus();
//si se pulsa enter en el TEdit pasa el foco a la rejilla.
}
//---------------------------------------------------------------------------


void __fastcall TEcuaci::BitBtn1Click(TObject *Sender)
{
Print();
}
//----------------------------------------------------------
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:37:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi