Foros del Web » Programación para mayores de 30 ;) » Programación General »

Traducir programa en C a php !

Estas en el tema de Traducir programa en C a php ! en el foro de Programación General en Foros del Web. Alguien me puede ayudar a traducir este codigo en C para php?? muchas gracias de ante mano el codigo se encuentra en este link: http://www.jaterli.com/codigo-fuente...n-C-1/382.html ...
  #1 (permalink)  
Antiguo 28/07/2008, 12:24
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 4 meses
Puntos: 2
Pregunta Traducir programa en C a php !

Alguien me puede ayudar a traducir este codigo en C para php??

muchas gracias de ante mano

el codigo se encuentra en este link:
http://www.jaterli.com/codigo-fuente...n-C-1/382.html

salu2

esto es lo que llevo en este momento, solo que no se que usar en vez del scanf de C no se como acomodar esta parte en php.


Código PHP:
<?php
/*Variables Globales */

 
$matriz[50][50];
 
$identidad[50][50];
 
$n//$n $$contiene el tama¤o de la matriz cuadrada


/*Funciones*/

hallar_inversa();
escalonar_matriz();
permutar_filas($fila1$fila2);
multip_fila($fila,$factor);
sumar_fila_multip($fila1,$fila2$factor);
ceros_abajo($fila_pivote, $$columna_pivote);
ceros_arriba($fila_pivote, $$columna_pivote);
generar_matriz_identidad();

/*cuerpo*/

function main()
{
global 
$matriz,$identidad,$n;
$fi;
$co;
do{

print(
"Ingrese el tama¤o de la matriz cuadrada: ");
scanf("%i",&$n);
if(
$n>50 || $n<2) {printf("El numero debe estar entre 2 y 50n");}
}while(
$n>50 || $n<2);

for(
$fi=0;$fi<$n;$fi++)
{
for(
$co=0;$co<$n;$co++)
{
printf("Ingrese el valor de matriz[%i][%i]",$fi+1,$co+1);
scanf("%lf",&matriz[$fi][$co]);
}
}

hallar_inversa();

return 
0;
}

/*-------------------------------------------------------------------------*/

function hallar_inversa()
{
global 
$matriz,$identidad,$n;

$cont;
$cont2;
$flag=0;

escalonar_matriz();
generar_matriz_identidad(); //rellena la matriz identidad


for($cont=0;$cont<$n;$cont++) //re$corre $filas
{
for(
$cont2=0;$cont2<$n;$cont2++) //re$corre $columnas
{
if(
$matriz[$cont][$cont2]!=0//busca pivote (elemento ditinto de 0)
{
if(
$matriz[$cont][$cont2]!=1//si pivote no es 1, se lo multiplica
{
multip_fila($cont,pow($matriz[$cont][$cont2],-1));
}

ceros_arriba($cont,$cont2); // se hacen 0's por arriba
ceros_abajo($cont,$cont2); // y por debajo del pivote

break;
}
}
}

/*--------------------------------------------------------------*/
/* Una vez terminada esta operacion, la matriz identidad estara */
/* transformada en la inversa */
/* */
/* Ahora se $comprueba que la matriz original este transformada */
/* en la matriz identidad, de no ser asi la inversa obtenida */
/* no es valida y la matriz no tiena inversa */
/*--------------------------------------------------------------*/


for($cont=0;$cont<$n;$cont++)
{
for(
$cont2=0;$cont2<$n;$cont2++)
{
if(
$cont==$cont2)
{
if(
matriz[$cont][$cont2]!=1flag=1;
}
else
{
if(
matriz[$cont][$cont2]!=0flag=1;
}
}
}



if(
flag==1)
{
printf("nnLa matriz no tiene inversann");
}
else
{
printf("nnLa Matriz Inversa es :nn");

for(
$cont=0;$cont<$n;$cont++)
{
for(
$cont2=0;$cont2<$n;$cont2++)
{
printf("%+#0.3f ",$identidad[$cont][$cont2]);

}
printf("$n");
}
}


printf("nPresione una tecla para continuar...");

}

/*-----------------------------------------------------------------------*/
/* */
/* Ordena la matriz de forma que quede en su forma escalonada por */
/* renglones */
/* */
/*-----------------------------------------------------------------------*/

function escalonar_matriz()
{
global 
$matriz,$identidad,$n;
$cont;
$col;
$ceros;
$vec[10];
$flag
$aux
;

for(
$cont=0;$cont<$n;$cont++)
{
$col=0
$ceros
=0;

if(
$matriz[$cont][$col]==0)
{
do{
$ceros++;
$col++;
}while(
$matriz[$cont][$col]==0);
}
$vec[$cont]=$ceros;
}


do
{
$flag=0;
for(
$cont=0;$cont<$n-1;$cont++)
{
if(
vec[$cont]>vec[$cont+1])
{
$aux=$vec[$cont];
$vec[$cont]=$vec[$cont+1];
$vec[$cont+1]=$aux;

permutar_filas($cont,$cont+1);

$flag=1;
}
}
}while(
$flag==1);

}

/*----------------------------------------------------------------------*/
/* SE DEFI$nE$n LAS 3 OPERACIO$nES ELEME$nTALES DE FILA */
/* */
/* Las operaciones que se le realizen a la matriz para reducirla */
/* tambien deberan realizarsele a la matriz identidad para obtener */
/* la matriz inversa */
/*----------------------------------------------------------------------*/


function permutar_$filas($fila1,$fila2)
{
global 
$matriz,$identidad,$n;
$auxval;
$cont;

for(
$cont=0;$cont<$n;$cont++)
{
$auxval=$matriz[$fila1][$cont];
$matriz[$fila1][$cont]=$matriz[$fila2][$cont];
$matriz[$fila2][$cont]=$auxval;

$auxval=$identidad[$fila1][$cont];
$identidad[$fila1][$cont]=$identidad[$fila2][$cont];
$identidad[$fila2][$cont]=$auxval;
}
}

/*----------------------------------------------------------------------*/

function multip_fila($fila,$factor)
{
global 
$matriz,$identidad,$n;
$cont;

for(
$cont=0;$cont<$n;$cont++)
{
$matriz[$fila][$cont]=($matriz[$fila][$cont])* $factor;
$identidad[$fila][$cont]=($identidad[$fila][$cont])* $factor;
}
}

/*----------------------------------------------------------------------*/

function sumar_fila_multip($fila1,$fila2,$factor)
{
global 
$matriz,$identidad,$n;
$cont;
for(
$cont=0;$cont<$n;$cont++)
{
$matriz[$fila1][$cont]=($matriz[$fila1][$cont])+(($matriz[$fila2][$cont])*$factor);
$identidad[$fila1][$cont]=($identidad[$fila1][$cont])+(($identidad[$fila2][$cont])* $factor);
}
}


function 
ceros_arriba($fila_pivote,$columna_pivote)
{
global 
$matriz,$identidad,$n;
$cont;

for(
$cont=0;$cont<$fila_pivote;$cont++)
{
sumar_fila_multip($cont,$fila_pivote,(($matriz[$cont][$columna_pivote])*(-1)));

}
}

/*-------------------------------------------------------------------------*/
function ceros_abajo($fila_pivote,$columna_pivote)
{
global 
$matriz,$identidad,$n;
$cont;

for(
$cont=$columna_pivote+1;$cont<$n;$cont++)
{
sumar_fila_multip($cont,$fila_pivote,(($matriz[$cont][$columna_pivote])*(-1)));
}

}
/*-------------------------------------------------------------------------*/
function generar_matriz_identidad()
{
global 
$matriz,$identidad,$n;
$i;
$j;
for(
$i=0;$i<50;$i++)
{
for(
$j=0;$j<50;$j++)
{
if(
$i==$j$identidad[$i][$j]=1;
else 
$identidad[$i][$j]=0;
}
}
}
?>

Última edición por sagitariosTheBest; 28/07/2008 a las 12:32 Razón: falto colocar avences de traduccion
  #2 (permalink)  
Antiguo 28/07/2008, 12:59
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 4 meses
Puntos: 2
Respuesta: Traducir programa en C a php !

O este codigo que es Vb para convertirlo a php es la eliminacion de gauss jordan
yo creo a nadie le cairia mal tener este metodo algun dia lo pueden ocupar como yop en estos momentos jamas pense que lo fuera a ocupar.

Código PHP:
/* eliminaición de gauss jordan*/
Public ing As String
Public ne As Integer
Private Sub Command2_Click()
resp MsgBox("Esta seguro de " vbCrLf "borrar la matriz"vbInformation vbYesNo vbDefaultButton2"Eliminación de Gauss")
If 
resp 6 Then
 answer
.Clear
 matrix
.Clear
 ing 
0
 ing 
InputBox("Ingrese el número de ecuaciones""Eliminación de Gauss")
    If 
ing "" Then
        txtingreso
.SetFocus
       
    
Else
        
txtingreso.SetFocus
        txtingreso
.Text Str(ing)
        
matrix.Cols ing 1
        matrix
.Rows ing
        Call tamaño
    End 
If
Else
Exit 
Sub
End 
If
End Sub

Private Sub Command3_Click()
End
End Sub

Private Sub Form_Activate()
txtingreso.SetFocus
End Sub
Private Sub Command1_Click()
ne Val(txtingreso.Text)
answer.Rows ne
' ne: es el número de ecuaciones
ReDim Sistema(1 To ne + 5, 1 To ne + 10) As Double
ReDim Solución(1 To ne) As Double
If matrix.Text = "" Then
MsgBox "Ingrese sus datos ", vbCritical + vbOKOnly, "Menzaje": Exit Sub
Else
For i = 1 To ne
 For j = 1 To ne + 1
 Sistema(i, j) = matrix.TextMatrix(i - 1, j - 1)
 Next j
Next i
ReDim Solución(1 To ne) As Double
 If Gauss(Sistema(), Solución()) Then
    For i = 0 To ne - 1
        answer.TextMatrix(i, 0) = Format(Solución(i + 1), "0.000")
    Next i
 Else
 MsgBox "El sistema de ecuaciones no tiene solución...", vbCritical + vbOKOnly, "Atención"
 End If
End If
tamaño
End Sub

Private Sub Form_Load()
matrix.TextMatrix(0, 0) = 1
matrix.TextMatrix(0, 1) = 1
matrix.TextMatrix(0, 2) = 1
matrix.TextMatrix(0, 3) = 6
matrix.TextMatrix(1, 0) = 1
matrix.TextMatrix(1, 1) = 0
matrix.TextMatrix(1, 2) = 1
matrix.TextMatrix(1, 3) = 4
matrix.TextMatrix(2, 0) = 1
matrix.TextMatrix(2, 1) = 1
matrix.TextMatrix(2, 2) = 0
matrix.TextMatrix(2, 3) = 1
tamaño
End Sub

Private Sub matrix_KeyPress(KeyAscii As Integer)
'
NUMEROS DE 48-57
'. EL PUNTO "." 46
'
LETRAS 65 -90
If KeyAscii >= 46 And KeyAscii <= 57 Then
matrix
.Text matrix.Text Chr(KeyAscii)
End If
End Sub

Private Sub matrix_KeyUp(KeyCode As IntegerShift As Integer)
Select Case KeyCode
Case vbKeyDelete
matrix
.Text ""
Case vbKeyBack
If Len(matrix.Text) > 0 Then
  matrix
.Text Left(matrix.TextLen(matrix.Text) - 1)
End If
End Select
End Sub

Private Sub txtingreso_KeyPress(KeyAscii As Integer)
Val(txtingreso.Text)
ne n
If KeyAscii 13 Then
matrix
.Cols 1
matrix
.Rows n
tamaño
End 
If

End Sub
Private Sub txtingreso_LostFocus()
Val(txtingreso.Text)
matrix.Cols 1
matrix
.Rows n
End Sub
Esta es una subrutina bajada de Internet
Static Function Gauss(ByRef A() As DoubleByRef C() As Double) As Boolean
    Dim Tem 
As DoubleSum As Doubleiljknm
    On Error GoTo Gauss_Err
    n 
UBound(C)
    
1
    
For 1 To n 1
        j 
l
        
For 1 To n
            
If (Abs(A(jl)) >= Abs(A(kl))) Then
               
Else: k
            End 
If
        
Next
        
If Not (lThen
           
For 1 To m
               Tem 
A(li)
               
A(li) = A(ji)
               
A(ji) = Tem
           Next
        End 
If
        For 
1 To n
            Tem 
A(jl) / A(ll)
            For 
1 To m
                A
(ji) = A(ji) - Tem A(li)
            
Next
        Next
    Next
    C
(n) = A(nm) / A(nn)
    For 
1 To n 1
        j 
i
        Sum 
0
        
For 1 To i
            k 
l
            Sum 
Sum A(jk) * C(k)
        
Next
        C
(j) = (A(jm) - Sum) / A(jj)
    
Next
    Gauss 
True
    
Exit Function
Gauss_ErrGauss False
End 
Function
Sub tamaño()
ne Val(txtingreso.Text)
matrix.Height matrix.RowHeight(1) * (ne 0.5)
matrix.Width = (matrix.ColWidth(1)) * (ne 1.12)
answer.Height answer.RowHeight(1) * (ne 0.5)
End Sub 
  #3 (permalink)  
Antiguo 28/07/2008, 13:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Traducir programa en C a php !

Tema trasladado a Ingenieria de Software y Gestion de Proyectos.
  #4 (permalink)  
Antiguo 29/07/2008, 12:27
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 4 meses
Puntos: 2
Pregunta Respuesta: Traducir programa en C a php !

Olvidense de lo que puse arriba en este link esta el metodo gauss para php y muchas otras cosas interesantes, pero haber si alguien me ayuda a que funcione con 4 ecuaciones.

alguien la puede ver y me puede decir si se puede usar para 4 ecuaciones??

aqui les dejo el enlace
http://www.phpmath.com/home?op=cat&cid=17
  #5 (permalink)  
Antiguo 29/07/2008, 22:58
 
Fecha de Ingreso: julio-2008
Mensajes: 12
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Traducir programa en C a php !

De verdad mucha gracias! =D me ayudo mucho tu link, cuando termine de hacer la linea de tendencia que estoy haciendo la monto =)

Con respecto a como se agregan 4 ecuaciones
Código PHP:
include "GaussianElimination.php";

simplemente agrega
$A 
= array(array(01,  1),
           array(
24, -2),
           array(
0315));
                                 
$b = array(4236);

$g = new GaussianElimination;

$x $g->solve($A$b); 
Por:
Código PHP:
include "GaussianElimination.php";

simplemente agrega
$A 
= array(array(01,  1,...,n),
           array(
24, -2,...,n),
           array(
0315,...,n)
           .
           .
           .
           array(
0,12,...,n));
                                 
$b = array(4236,...,n);

$g = new GaussianElimination;

$x $g->solve($A$b); 
Siendo los ...,n los nuevos valores que va a tener cada vector... Bueno espero te sirva, Recueda que tienes que crear una matriz NxN y un vector de N

Por cierto las respuestas estan en $x, lo que viene despues es simplemente para comprobar que el resultado es el correcto... NO LO USES, con $x te basta

Última edición por fer135; 29/07/2008 a las 23:26 Razón: Agregar Respuesta
  #6 (permalink)  
Antiguo 30/07/2008, 07:35
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 4 meses
Puntos: 2
Respuesta: Traducir programa en C a php !

Hola muchas gracas por responder.
Otra cosita sabes a que se refiere ese "include de "utils", me imagino que se refiere a los dos archivos que estan en la carpeta de JAMA que tambien se descarga del sitio que puse arriba estoy en lo correcto??


por cierto en esta parte es donde presenta los datos???

Código PHP:
$b = array(4236,...,n); 
no entiendo muy bien donde donde puedo imprimir los valores de las 4 ecuaciones resultantes
ese 4,2,36 que significan???

sorry por mi ignorancia


saludos

Última edición por sagitariosTheBest; 30/07/2008 a las 07:41
  #7 (permalink)  
Antiguo 30/07/2008, 07:49
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 4 meses
Puntos: 2
Respuesta: Traducir programa en C a php !

include "GaussianElimination.php";

Estos son los valores que deseo colocar en mis 4 ecuaciones..
Código PHP:
$A = array(array(64863,8761,654,714),
           array(
4863,4521899,8519938,620707,667832),
           array(
8761,8519938,21022091,905925,1265493),
           array(
654,620707,905925,137902,100583)    
           ); 

Aqui no se que poner
Código PHP:
$b = array(4236); 
Código PHP:
$g = new GaussianElimination;

$x $g->solve($A$b); 

Me puedes ayudar??


los valores que espero de esas ecuaciones son los sig.
R1=6.7013
R2=0.0784
R3=0.0150
R4=0.2461


saludos y mu chisisisimas gracias
  #8 (permalink)  
Antiguo 30/07/2008, 08:45
 
Fecha de Ingreso: julio-2008
Mensajes: 12
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Traducir programa en C a php !

Hola! para tu ejemplo tienes una matriz 4x5 que son 4 filas y 5 columnas, y para la funcion de gauss debes colocar una matriz NxN, en este caso tienes que colocar o una 4x4 o una 5x5 dependiendo de lo que quieres.

En matemáticas si se pueden sacar valores de una 4x5 pero una de las soluciones te va a dar parametrizada (Si quieres sabes más de esto puedes buscar álgebra lineal y ahí explican como se hace eso). Y no creo que esas pocas lineas de codigo lo hagan

Para que entiendas como se crea un matriz en php, busca arrays en php pero para tu ejemplo seria algo asi:

Código PHP:
//Agregas una fila mas a la matriz
$A = array(array(   6,   4863,   8761,   654,   714),
           array(
4863,4521899,8519938,620707,667832),
           array(
8761,8519938,21022091,905925,1265493),
           array( 
654620707905925,137902,100583)  
           array(   
X,      Y,      Z,     Q,     P
           );

//Con esto creas una matriz 1x5
$b = array(4236WT); 
entonces cuando te quede la matriz $x va a ser 1x5, y ahi van a estar los valores que quieres
  #9 (permalink)  
Antiguo 30/07/2008, 09:57
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 4 meses
Puntos: 2
Respuesta: Traducir programa en C a php !

Muchas gracias ya logre lo que queria muchisimas gracia spor responder
  #10 (permalink)  
Antiguo 30/07/2008, 10:34
 
Fecha de Ingreso: julio-2008
Mensajes: 12
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Traducir programa en C a php !

No hay problema, que bueno ayudar, para eso el foro.

Y como lo prometido es deuda, si quieres sacar una linea de tendencia polinomial:

http://www.forosdelweb.com/f50/linea-tendencia-polinomial-php-610670/#post2513071

Espero que te sirva

Saludos =D
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:09.