Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BlackZeroX

#391
.
Te dejo mi calculadora que hice en la Univ. para mi profesor de Métodos Numéricos, resuelve expresiones complejas como:

+-+-4(5h^sqr(e(ln(4(5/10)))^sqr(2*2)))(cos(h)^2+sin(h)^2)

* Identifica automáticamente las variables.
* Maneja Variables (lo deje para usa sola variable)... en si se pueden usar N Variables y resolver sus valores.


Arrojando el resultado correcto.

SourceCode. ( Deje el ejecutable Funcional dentro de la carpeta Bin/Release ).

Código (cpp) [Seleccionar]


int main() {
   equation oEquation;
   //equation oGrado;      Clase por si el grado es de alguna manera no procesable como cos(x) o cos(x)^2+sin(x)^2
   string str;
   int iOption = 0, iDivs = 0, iFlags, iOrden = 0;
   int iPresicion = 5;
   bool bNewEquation = false;
   long double ldH = 0.0f, ldArea = 0.0, ldRange[2] = {};

   do {
       system("cls");
       cout << endl << "Programa Creado por: Ortega Avila Miguel Angel 4B (Vespertino)." << endl << endl;

       cout << "Sintaxis------" << endl;
       cout << "Multiplicacion Divicion suma y resta" << endl << "\ta*b, a/b, a+b, a-b, -a, +b";
       cout << "Trigonometricas:" << endl << "\tcos(x), sin(x), tan(x), csc(x), cot(x), sec(x)" << endl;
       cout << "Valor absoluto:" << endl << "\tabs(x)" << endl;
       cout << "Exponencial logaritmo natural:" << endl << "\te(x), ln(x)" << endl;
       cout << "Potencias y raiz cuadrada:" << endl << "\tx^y, sqr(x)" << endl;
       cout << "--------------" << endl;
       cout << "Nota: Se permite el uso de cuarquier variable (el programa la identifica automaticamente)." << endl;
       cout << "Ejemplo: 4(5h^sqr(e(ln(4(5/10)))^sqr(2*2)))(cos(h)^2+sin(h)^2)" << endl << endl << endl;

       cout.precision(2);
       cout.setf(ios::fixed, ios::floatfield);

       while (1) {
           if (tolower(str[0]) != 'r') {
               cout << "Ingrese una ecuacion: ";
               getline(cin, str);
               //str = "4(5h^sqr(e(ln(4(5/10)))^sqr(2*2)))(cos(h)^2+sin(h)^2)";
               oEquation.Equation(str);
               if ((oEquation.GetFlags() & FLAG_SINTAX)) {
                   cout << "\tError: Sintaxis de la ecuacion errorea No se permiten dos operados contiguos (inclusive signos)." << endl << endl;
               } else if ((oEquation.GetFlags() & FLAG_INVALIDTYPE)) {
                   cout << "\tError: Caracteres no procesables." << endl << endl;
               } else if (oEquation.Variables.size() > 1) { //  Hay mas de una variable?.
                   cout << "Error: Ingresa una ecuacion con una sola variable." << endl << endl;
               } else {
                   break;  //  while(1)
               }
           } else {
               cout << "Ecuacion: " << oEquation.Equation() << endl << endl;
               break;
           }
       }

       system("cls");
       bNewEquation = false;

       while(!bNewEquation) {
           cout << "Programa Creado por: Ortega Avila Miguel Angel 4B (Vespertino)." << endl << endl;
           cout << "Leyenda (Posibles resultados):" << endl;
           cout << "nan. = Imposible de calcular (Resulta por ejemplo de raices imaginarias)." << endl;
           cout << "inf. = Numero Infinito (por ejemplo: Una divicion entre 0)." << endl << endl;
           cout << "Ecuacion: " << oEquation.Equation() << endl << endl;
           cout << "[0] Resolver Operacion."<< endl;
           cout << "[1] Calcular derivada."<< endl;
           cout << "[2] Calcular area bajo la curva (Integracion por trapecios)."<< endl;
           cout << "[3] Ingresar otra ecuacion."<< endl;
           cout << "[4] Definir la presicion (cantidad de dcimales a mostrar)." << endl;
           cout << "[5] Terminar aplicacion." << endl << endl;
           cout << "Opcion: ";

           if (!getInt(&iOption, true)) {
               cout << "Error: Solo Numeros Decimales." << endl << endl;

           } else {
               cout << endl;
               switch (iOption) {
...
...
Es un código un tanto largo...
...


Dulces Lunas!¡.
#392
Cita de: AbrahamAraon en 11 Julio 2012, 10:49 AM

Y no olvides de liberar la memoria de z: ReDim z[0]


para liberar se usa erase...

erase z

Aun que si las variables estan declaradas en un proceso estas son automáticas y la llamada a erase se obvia... caso omiso cuando pides memoria...

OJO Mientras mas grande sea el buffer te quedaras sin memoria... tambien ten en consideracion que si lees trozos desde tu HD como dice @AbrahamAraon solo es en cuestión a que sea un archivo PESADO (DEFINICIÓN mas de 100 megas e inclusive hasta 4 Gigas o mas...), mientras no sean archivos super pesados, es mejor CARGAR TODO el archivo en memoria y crear memoria que actué como buffer de esta manera se evita estar leyendo el archivo constantemente y evitamos la latencia que esta representa a su vez aumentamos la velocidad de procesamiento...

* No uses String para leer archivos si es que los vas a procesar,
* Usa array de bytes par procesar archivos un caracter de una string es equivalente a 2 bytes... y en si aun que tu veas 10 caracteres pesaras que pesa en memoria 10 bytes pero la realidad es que pesa 20 bytes...

Dulces Lunas!¡.
#393
Asi es como yo lo haria... los algoritmos funcionan tan rapido que procesa un archivo de 17 megabytes en unos segundos... con un archivo de salida de casi 190 megabytes...

Código (vb) [Seleccionar]


Option Explicit

Private Declare Sub RtlMoveMemory Lib "kernel32" (ByVal pDst As Long, ByVal pSrc As Long, ByVal ByteLen As Long)

Private Sub Form_Load()
Dim ff          As Long
Dim mapFile()   As Byte

   ff = FreeFile
   Open "c:\hola.txt" For Binary As ff
       If Not EOF(ff) Then
           ReDim mapFile(0 To LOF(ff) - 1)
           Seek ff, 1  '  nos posicionamos al inicio del archivo
           Get ff, , mapFile
'                Debug.Print StrConv(mapFile, vbUnicode)
           Seek ff, 1  '  nos posicionamos al inicio del archivo
               mapFile = fisuras(mapFile, StrConv("BlackZeroX", vbFromUnicode))
'                Debug.Print StrConv(mapFile, vbUnicode)
           Put ff, , mapFile
       End If
   Close ff
End Sub


Private Function fisuras(ByRef arr() As Byte, ByRef words() As Byte) As Byte()
Dim size    As Long
Dim newSize As Long
Dim sizeW   As Long
Dim ret()   As Byte
Dim i       As Long, j  As Long ', k  As Long
   
   size = (UBound(arr) + 1)
   sizeW = (UBound(words) + 1)
   newSize = (size * sizeW + size / 1)
   
   ReDim ret(0 To (newSize - 1))
   
   For i = 0 To (size - 1)
       ret(j) = arr(i): j = (j + 1)
       RtlMoveMemory VarPtr(ret(j)), VarPtr(words(0)), sizeW   '   For k = 0 To (sizeW - 1): ret(j + k) = words(k): Next
       j = (j + sizeW)
   Next
   
   fisuras = ret
   
End Function



o tambien asi:

Código (vb) [Seleccionar]


Option Explicit

Private Sub Form_Load()
Dim ff          As Long
Dim mapFile()   As Byte

   ff = FreeFile
   Open "c:\hola.txt" For Binary As ff
       If Not EOF(ff) Then
           ReDim mapFile(0 To LOF(ff) - 1)
           Seek ff, 1  '  nos posicionamos al inicio del archivo
           Get ff, , mapFile
'                Debug.Print StrConv(mapFile, vbUnicode)
           Seek ff, 1  '  nos posicionamos al inicio del archivo
               mapFile = fisuras(mapFile)
'                Debug.Print StrConv(mapFile, vbUnicode)
           Put ff, , mapFile
       End If
   Close ff
End Sub


Private Function fisuras(ByRef arr() As Byte, Optional ByRef text As String = "BlackZeroX") As Byte()
Dim size    As Long
Dim newSize As Long
Dim lenText As Long
Dim ret()   As Byte
Dim i       As Long, j  As Long, k  As Long
   
   size = (UBound(arr) + 1)
   lenText = Len(text)
   newSize = (size * lenText + size / 1)
   
   ReDim ret(0 To (newSize - 1))
   
   For i = 0 To (size - 1)
       ret(j) = arr(i)
       For k = 1 To lenText
           ret(j + k) = Asc(Mid(text, k, 1))
       Next
       j = (j + 1 + lenText)
   Next
   
   fisuras= ret
   
End Function



Dulces Lunas!¡.
#394
[quote author=lessionone link=topic=359048.msg1737017#msg1737017 date=1334307451]
...
[code]
Private Function encriptararchivo(ByVal archivooriginal As String) As String
        Dim c As String = ""
        Dim z As String = ""
        Dim y As Integer=0
        For b = 1 To Len(archivooriginal)
            c = Mid(archivooriginal, b, 1)
            y = Asc(c)
            z = z & y & "tallin"
        Next
        Return z

...
[/quote]

para ese algoritmo sencillo se puede calcular facilmente el buffer que utilizara.

bufferSize = (SizeOfFile * lenWord) + (SizeOfFile / NumberOfChars)
es decir:
bufferSize = (len(archivooriginal) * len("tallin")) + (len(archivooriginal) / 1)

Aun que a mi sinceramente no me agrada usar los strings para trabajar con archivos...

Código (vbnet) [Seleccionar]


...
        z = space((len(archivooriginal) * len("tallin")) + (len(archivooriginal) / 1))

        For b = 1 To Len(archivooriginal)
            mid(z, c, 1) = mid(archivooriginal, i, 1) // no recuerdo si en .Net puedo seguir usando el mid() del lado izuierdo del igual...
            mid(z, c + 1, len("tallin")) = "tallin"
            c = c + 1 + len("tallin")
        Next

        Return z
...


Me tendré que instalar otra vez el vb6...

Dulces Lunas!¡.[/code]
#395
Formularios MDI o también puedes usar el API SetParent...

Dulces Lunas!¡.
#396
unClose.zip by Cobein

Dulces Lunas!¡.
#397
Si no mal recuerdo pueden usar el IDE QT Creator o configurar tu IDE con las librerias QT para compilarlo...

http://qt.nokia.com/downloads

Dulces Lunas!¡.
#398
Usa la Criba de Eratóstenes para calcularlos, en el foro ya se han hecho varios códigos (ni me los pidas).

* Inclusive en wikipedia esta el código en varios lenguajes...

Dulces Lunas!¡.
#399
En mi parecer, al ser un forma de ver el formato de manera uniforme y repetitiva (no compuesto/compleja) donde cada palabra (no  consideran frases) esta solo separada por un signo (en mi caso no era # si no mas bien el espacio o salto de linea '\n' o cualquier carácter que tenga el mismo uso) funciona bastante bien fscanf(file, "%s", ...),se cargan todas la palabras en un "Buffer" para no estar re-leyendo a cada instante el archivo y evitar la latencia de acceso al disco duro por ello yo descarte el uso de strtok() y de lectura de lineas las cuales desconozco su longitud.

* Cuando es un formato del este estilo (palabra1 palabra2 palabra3 palabra4 ... palabraN-esima) y no hay formatos complejos fscanf(file, "%s", ...) va perfecto siempre y cuando haya un separador de palabra, de lo contrario es mas recomendable cargar el archivo en memoria y proseguir a identificar cada palabra/signo clave.

por ejemplo ( Yo cargaría en memoria el archivo si estuviera en el disco y aplicar un analizador sintáctico y enviar todo el archivo a estructuras obviamente ya analizado, a su vez también evitar la mayor cantidad de ciclos incluyendo strtok() ya que en este tipo de cuestiones se pueden omitir o tener palabras/signos opcionales y strtok() sacrificaría demasiado el redimiendo de un algoritmo ademas que ignoraria palabras entre el punto inicial y el punto final, es decir funcionaria solo para identificar la existencia en este caso ):



// este es un comentario

cadena1{ // Note que no hay espacio entre la palabra y {
   casena(propiedad1 = "algo") { // Note que la palabra tiene propiedades; Note que hay un espacio antes del {
        item1 = ""
   }
}



* strtok() esta bien para hacer por ejemplo una función que extraiga un trozo de texto o similares pero para analizar formatos() puede que si y puede que no, en mi criterio es dar muchos vueltas (en formatos complejos) en simples como este no hay bronca pero lo mejor es leer el archivo y meterlo en estructuras que representen al archivo original y así evitar la latencia de acceso al disco duro.

NOTA: la caga en memoria seria por bloques mas no todo de golpe.

Dulces Lunas!¡.