Saludos amigos foristas.
Alguien sabe como puedo redimensionar un arreglo en tiempo de ejecución.
Código:
Function Pide_Poli( Lista: Array Of Double ): Double;
Var
Truco, Grado, Seguro, Seguros: String;
ClickedOK1, ClickedOK2, ClickedOK3, ClickedOK4: Boolean;
J: Array Of Double;
n, i: Integer;
Begin
Seguros := '';
ClickedOK1 := InputQuery( '', 'De que grado deseas tu polinomio (De grado 3 en delante)?', Grado );
While LowerCase( Seguros ) <> 's' Do
Begin
ClickedOk2 := InputQuery( '', 'Estás seguro que deseas un polinomio de grado: ' + Grado + ' (s/n)?', Seguros );
If ClickedOK2 Then
If LowerCase( Seguros ) <> 's' Then
ClickedOK3 := InputQuery( '', 'De que grado deseas tu polinomio (De grado 3 en delante)?', Grado );
End;
n := StrToint( Grado ) + 1;
// SetLength( lista, n );
// ReAllocMem( Lista, n * sizeof( integer ) );
For i := 0 To Length( j ) - 1 Do
Begin
ClickedOK4 := InputQuery( '', 'Introduce el termino a ' + IntToStr( i ) + ' x^' + IntToStr( i ), Truco );
j [i ] := StrToFloat( Truco );
showmessage( inttostr( i ) + ' ' + floattostr( j [i ] ) );
End;
For i := 0 To length( j ) - 1 Do
Lista [i ] := j [i ];
showmessage( 'largo de lista: ' + inttostr( length( lista ) ) );
End;
Lo que pasa es que necesito redimensionar el arreglo llamado "Lista", y como pueden ver en el código resaltado de azul, he tratado de hacerlo de esas 2 formas, pero me arroja el siguiente error:
"Incompatible types"
Si alguien conoce otra forma de redimensionar arreglos en tiempo de ejecución, me avisa por favor.
PD 1 : A esta función, la "llamo" desde un Boton, de la siguiente manera:
Código:
Var
Poli: Array Of Double;
Tol, Val: Double;
x: String;
ClickedOK: Boolean;
Begin
x := 's';
While LowerCase( x ) = 's' Do
Begin
Pide_Poli( Poli );
checa_valor( Poli, val, tol ); //Se pide la aproximación inicial y se revisa que cumpla la condición.
despliega_raiz( Poli, tol, val ); //Por ultimo despliega el polinomio y la raiz.
ClickedOK := InputQuery( '', 'Deseas resolver otro polinomio?( s / n )', x );
End;
Donde "Poli" es un arreglo del mismo tipo que el de la función "Pide_Poli"
PD 2: A todo esto, está funcion está originalmente en c++ y la estoy "transformando" a Delphi 6(espero que la haya "transformado" bien), aquí les pongo el código en c++:
Código:
void pide_poli(vector<double> &lista)
{ int n;
char x;
cout<<"Este es un programa que resuelve polinomios "<<endl;
cout<<"De que grado deseas tu polinomio (De grado 3 en delante) ?"<<endl;
//Aqui se revisa que ese sea el dato correcto elegido por el usuario.
do
{
cin>>n;
cout<<"Estas seguro que deseas un polinomio de grado "<<n<<"?"<<endl;
cin>>x;
if(tolower(x) != 's')
cout<<"¿Cual es el grado que deseas para tu polinomio?"<<endl;
}while(tolower(x) !='s');
lista.resize(n+1);//Se crea el vector del tamaño deseado por el usuario.
for(int i=0; i<lista.size();i++)
{
cout<<"Introduce el termino a"<<i<<" x^"<<i<<endl;
cin>>lista[i];
}
}
Y así se llama a la función en c++:
Código:
int main()
{
vector<double> poli;
double tol, val;
char x;
do
{
system("cls");
pide_poli(poli);//Se crea el nuevo polinomio deseado.
checa_valor(poli,val,tol);//Se pide la aproximación inicial y se revisa que cumpla la condición.
system("cls"); // Al igual que la tolerancia.
despliega_raiz(poli,tol,val);//Por ultimo despliega el polinomio y la raiz.
cout<<"Deseas resolver otro polinomio?"<<endl;
cin>>x;
}while(tolower(x) =='s');
return 0;
}
Espero haber sido lo más claro posible, me despido. Salu2 desde Chile.