• Jueves 25 de Abril de 2024, 00:46

Mostrar Mensajes

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


Mensajes - aguila3000

Páginas: [1] 2
1
Enlaces a Sitios sobre programación / Conoce3000 - Pascal con FreePascal
« en: Domingo 4 de Agosto de 2013, 16:37 »
Pascal con FreePascal

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Indice.html

Aún falta terminar pero cubre varios temas.

2
Diseño de Algoritmos / Algoritmo Determinante matriz nxn
« en: Domingo 4 de Agosto de 2013, 16:32 »
Quiero compartir mis apuntes sobre el algoritmo para hallar la determinante de una matriz nxn. Esta echo en pascal, imagino debe haber algoritmos mejores, pero este me funciona bastante bien hasta el momento.

http://www.conoce3000.com/html/espaniol/Apuntes/2013-07-31-AlgoritmoDeterminanteMatriznxn01/AlgoritmoDeterminanteMatriznxn01.php
http://www.conoce3000.com/html/espaniol/Apuntes/2013-08-02-AlgoritmoDeterminanteMatriznxn02/AlgoritmoDeterminanteMatriznxn02.php

4
Pascal / Re:necesito un tutorial de manejo de archivos sin tipo
« en: Domingo 4 de Agosto de 2013, 16:21 »

5
GNU/Linux / Re: Linux 64 bits memoria virtual
« en: Miércoles 9 de Febrero de 2011, 02:10 »
Gracias, es lo que habia leído.
Al parecer el uso de esas caracteristicas aun no es alcanzable por las supercomputadoras,
http://en.wikipedia.org/wiki/Jaguar_(computer), en este artículo mencionan el uso de Linux con una memoria de 360 TiB, aunque no mencionan si es física o virtual, me imagino debe ser física. Me imagino que con la memorias de intercambio con discos duros, si pueden llegar a los 16 EiB, facilmente.
Y muchas gracias por tus comentarios. :)

6
GNU/Linux / Re: Linux 64 bits memoria virtual
« en: Martes 8 de Febrero de 2011, 15:57 »
No hay problema, disculpa aceptada :).

Una de las dudas que tengo es que obviamente no creo sea posible direccionar 2^64=16 EiB de memoria virtual, a menos que existan discos duros en donde se puedan crear 2^64=16 EiB o más de espacio de intercambio (swap), al menos no se si existan esos discos duros o se tengan que emular usando varios discos duros. En fin seguire investigando a ver que encuentro. como dice el dicho: preguntando se llega a Roma.

7
GNU/Linux / Re: Linux 64 bits memoria virtual
« en: Martes 8 de Febrero de 2011, 13:50 »
Citar
Estás equivocado. Linux funciona en sistemas con 256 MiB y menos. Además, 1 GiB para el kernel es excesivamente demasiado.

Me baso en estos documentos :

http://www.linuxdriver.co.il/ldd3/chp-15-sect-1.shtml
http://linux-mm.org/LinuxMMDocumentation
http://www.win.tue.nl/~aeb/linux/lk/lk-9.html

En donde explican la diferencia entre memoria física y virtual.
Encontre este documento http://www.informit.com/articles/article.aspx?p=29961&seqNum=2, en donde explican la gestión de memoria en los S.O. de 64 bits.
Al parecer dicen segun el cuadro: http://ptgmedia.pearsoncmg.com/images/chap4_0130610143/elementLinks/04fig11.gif
que esta dividido en regiones, en donde cada region tiene un tamaño de 2^61, con lo cual deduzco que:
El espacio direccionable para el kernel sería de : (2^61)*3, y para los proceso sería de : (2^61)*5.

Citar
Tienes el código fuente en kernel.org. Más detallado que eso, imposible.

Tambien lo tengo, pero siempre es necesario tener un marco teorico al respecto que ayuden a comprender más rápido algunas cosas, y es lo que estoy buscando.
Me faltan despejar algunas dudas pero ya estoy encontrando lo que necesito.

Gracias por tu ayuda.

8
GNU/Linux / Linux 64 bits memoria virtual
« en: Lunes 7 de Febrero de 2011, 23:06 »
Hola.

Tengo entendido que el espacio de memoria virtual direccionable por un S.O. Linux de 32 bits, es de 4GiB, en donde 1GiB es usado por el kernel y 3GiB para los procesos.
En el caso de un S.O. Linux de 64bits, por lógica el espacio de memoria virtual direccionable es de : 17179869184 GiB, me interesa saber o donde puedo encontrar información de ¿Como se gestiona la memoria Linux 64 bits ?. Es decir cuanta memoria se usa para el kernel y cuanta para los procesos.
Si es igual al de 32bits entonces debería ser así: 1 GiB para el kernel y el resto para los procesos 17179869183 GiB, pero realmente no estoy seguro y me parece que es distinto.

9
Pascal / Re: punteros
« en: Martes 21 de Diciembre de 2010, 03:52 »
Haciendo preguntas por qui y por alla, encontre esto:
  http://www.freepascal.org/docs-html/prog/progsu158.html
y esto:
  http://www.freepascal.org/docs-html/rtl ... fails.html

en fpc existe una variable ReturnNilIfGrowHeapFails, que define el comportamiento de la administración de memoria, si es true entonces las funciones como getmem, reallocmem y new devuelven nil, en caso contrario devuelve false.
Por defecto es false, No se realmente porque estará en False, si alguien sabe me gustaría saberlo.

El programa quedaría algo así:
Código: Pascal
  1. Var p01,p02,p03,p04:^byte;
  2. Begin
  3.  
  4.   ReturnNilIfGrowHeapFails:=true;
  5.  
  6.   getmem(p01,1024*1024*1024);
  7.   if (p01<>nil) then Writeln('ok 1')
  8.   else Writeln('ko 1');
  9.  
  10.   getmem(p02,1024*1024*1024);
  11.   if (p02<>nil) then Writeln('ok 2')
  12.   else Writeln('ko 2');
  13.  
  14.   getmem(p03,1024*1024*1024);
  15.   if (p03<>nil) then Writeln('ok 3')
  16.   else Writeln('ko 3');
  17.  
  18.   getmem(p04,1024*1024*1024);
  19.   if (p04<>nil) then Writeln('ok 4')
  20.   else Writeln('ko 4');
  21. End.
  22.  
  23.  

10
Pascal / Re: punteros
« en: Martes 21 de Diciembre de 2010, 01:25 »
Y que sería mejor ¿Qué devuelve nil? o ¿Usar excepciones?

11
Pascal / Re: punteros
« en: Lunes 20 de Diciembre de 2010, 03:01 »
ok, pero en C++, No tengo ese problema, cuando la variable dinámica no se puede crear, entonces me devuelve null o nil =0
En freepascal, porque no es lo mismo.
Probe con gnu y sale lo siguiente: ./a.out: out of heap when allocating 1073741824 bytes (error #853 at 804dc86)

¿ Sabes si este problema sucede con Delphi ?

Código: C++
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. int main ()
  7. {  
  8.   char *p01;
  9.   p01 = (char*) malloc(1024*1024*1024);
  10.   if (p01!=NULL) cout << "ok01n";
  11.   else cout << "ko01n";
  12.  
  13.   char *p02;
  14.   p02 = (char*) malloc(1024*1024*1024);
  15.   if (p02!=NULL) cout << "ok02n";
  16.   else  cout << "ko02n";
  17.  
  18.   char *p03;
  19.   p03 = (char*) malloc(1024*1024*1024);
  20.   if (p03!=NULL) cout << "ok03n";
  21.   else cout << "ko03n";
  22.  
  23.   char *p04;
  24.   p04 = (char*) malloc(1024*1024*1024);
  25.   if (p04!=NULL) cout << "ok04n";
  26.   else cout << "ko04n";
  27.  
  28.   return 0;
  29. }
  30.  

12
Pascal / Re: punteros
« en: Domingo 19 de Diciembre de 2010, 12:02 »
Gracias por tu respuesta.
Si no hay memoria, entonces.
¿Cómo puedo evitar crear más variables dinámicas?

Al usar getmem, se supone que al no haber memoria debe darme nil, pero eso no sucede y sale el error runtime error 203.
Estoy usando Win32 (WindowsXP Pro, Vista) y el compilador freepascal, en Linux tambien me sucede lo mismo.

13
Pascal / punteros
« en: Domingo 19 de Diciembre de 2010, 01:22 »
He escrito el siguiente programa, y tengo algunas preguntas:

Código: Pascal
  1. Var p01,p02,p03,p04:^byte;
  2. Begin
  3.   getmem(p01,1024*1024*1024);
  4.   if (p01<>nil) then Writeln('ok 1')
  5.   else Writeln('ko 1');
  6.  
  7.   getmem(p02,1024*1024*1024);
  8.   if (p02<>nil) then Writeln('ok 2')
  9.   else Writeln('ko 2');
  10.  
  11.   getmem(p03,1024*1024*1024);
  12.   if (p03<>nil) then Writeln('ok 3')
  13.   else Writeln('ko 3');
  14.  
  15.   getmem(p04,1024*1024*1024);
  16.   if (p04<>nil) then Writeln('ok 4')
  17.   else Writeln('ko 4');
  18. End.
  19.  

¿Cómo puedo saber que ya no tengo memoria para los punteros?
¿Cómo puedo evitar el error: "runtime error 203 ..."?
¿Cómo puedo crear punteros de 4GB o de tamaño mayor?

14
Pascal / Re: No entiendo UTF8 en consola Windows
« en: Jueves 18 de Marzo de 2010, 23:38 »
Bueno por fin entendí, cual es el problema.
Sucede que la rutina Writeln o Write, hace uso de la función WriteFile de la api de windows.
Esta función tiene un parametro lpNumberOfBytesWritten, que devuelve los bytes enviados a consola o un archivo que se escribieron satisfactoriamente.
Freepascal hace uso de ese parametro comprobando el valor devuelto, si este devuelve un valor igual a cero significa que algo estuvo mal.
La funcion Writefile tiene un fallo, sucede que cuando se usa en consola con Unicode(65001), no devuelve los bytes escritos en consola pero los escribe y eso hace que salte el error en pascal.
La solución es usar directamente esta función de la api de windows, si es que sólo quieren escribir o enviar salidas a consola en unicode (utf8), sólo en Windows.
Nota: esto es asi, si el código fuente se escribe en utf8.

Código: Pascal
  1.  
  2. Uses Windows;
  3. Var Arch:Word;
  4.     BB:longWord;
  5.     cad:string;
  6. Begin
  7.    Arch:=GetStdHandle(STD_OUTPUT_HANDLE); //Se obtiene manejador
  8.    cad:='camión'+#$0D+#$0A;  //Se añade Saltos de línea
  9.    WriteFile(Arch,cad[1],length(cad),BB,nil);
  10.    Writeln('BB = ',BB)
  11. End.
  12.  
  13.  

usando clases TStream tambien sería de este modo :

Código: Delphi
  1.  
  2. uses classes,windows;
  3. var  s: string;
  4.       OutputStream: TStream;
  5. Begin
  6.      OutputStream := THandleStream.Create(GetStdHandle(STD_OUTPUT_HANDLE));
  7.      s:='camión';
  8.      OutputStream.write(s[1],Length(s)); 
  9.      OutputStream.free; 
  10. End.
  11.  
  12.  

No se realmente si sea la solución perfecta o idonea, pero si a alguien se le ocurre algo mejor. La ayuda no vendría mal.

15
Pascal / Re: No entiendo UTF8 en consola Windows
« en: Jueves 18 de Febrero de 2010, 00:46 »
Si soporta UTF8, debes cambiar las fuentes a lucida, y después en la consola ejecutas el siguiente comando chcp 65001, que seria el UTF8 en la consola de Windows.
No se si windowsXP lo soporta.

16
Pascal / No entiendo UTF8 en consola Windows
« en: Miércoles 17 de Febrero de 2010, 20:56 »
No entiendo UTF8 en consola Windows
Yo escribí el siguiente programa, usando un editor UTF8, sin marca de BOM. Usando el comando chcp, cambio el código de página a 65001, el UTF8 para
Windows.

Código: Pascal
  1. {código de página UTF8}
  2. //sin firma Unicode BOM
  3. Begin
  4.  Writeln('code page UTF8 - 65001 en Windows');
  5.  Writeln('camión')
  6. End.
  7.  

Compilo el programa, y después lo ejecuto y aparece el siguiente error :

Código: Text
  1. Runtime error 101 at $00401460
  2.    $00401460
  3.    $004069B1
  4.  

El mismo programa, cuando lo compilo y lo ejecuto en linux. funciona bien.
¿ Qué estoy haciendo mal ?
¿ Cómo puedo correguir ese problema ?

17
C/C++ / Re: comparacion de caracteres
« en: Martes 4 de Agosto de 2009, 02:44 »
En C no puedes comparar directamente una cadena de caracteres, tienes que hacerlo usando la función strcmp

Código: C++
  1.  
  2.    if(strcmp(cad,"Juan") == 0) printf( "este es juan" );
  3.  
  4.  

18
C/C++ / Re: sentencia for
« en: Martes 4 de Agosto de 2009, 02:32 »
Debes usar arreglos.
Un arreglo te permite crear variables todas de un mismo tipo de dato, a las cuales puedes acceder indicando su posición en el arreglo.
Para declarar un array en C se hace de la siguiente manera.

Código: C++
  1.  
  2.    int Numeros[100];
  3.  
  4.  

El código anterior te crear 100 variables de tipo int.
Para leer los numeros y almacenarlos haces lo siguiente usando un bucle y colocando entre corchetes la posición de la variable.

Código: C++
  1.  
  2. for (i=0;i<10,i++){
  3.    scanf("%d",&Numeros[i])
  4. }
  5.  
  6.  

19
Pascal / Re: Otra preguntica xD
« en: Martes 4 de Agosto de 2009, 02:14 »
Si revisas bien tu programa hay muchos errores.
Sólo necesitas un bucle Repeat Until
Algo asi :

Código: Pascal
  1.  
  2.    Repeat
  3.      {Aqui colocas todas las instrucciones que quieres se repitan}
  4.      writeln('¿Desea salir de la aplicacion?: S/N '); readln (respuesta)
  5.    Until respuesta='S'
  6.  
  7.  

20
Pascal / Re: Desencriptar clave
« en: Martes 4 de Agosto de 2009, 00:48 »
Bueno usando pilas y colas el algoritmo seria mas o meno asi :

Código: Pascal
  1.  
  2. PROCEDURE encriptar (VAR palabra:string)
  3.   Var
  4.     Pila:TPila;
  5.     Cola:TCola;
  6.     Car:Char;
  7.     i:Integer;
  8.     sacarpila:boolean;
  9.     aux:string;
  10. Begin
  11.   sacarpila:=false;
  12.   i:=1;
  13.    While (i<length(palabra)) do
  14.       Begin
  15.          if Not(palabra[i] in ['a','e','i','o','u'])
  16.             then  Cola.Meter(palabra[i])
  17.             else Begin
  18.                       While (palabra[i] in  ['a','e','i','o','u']) do
  19.                          Begin
  20.                              Pila.Meter(palabra[i]);
  21.                              i:=i+1
  22.                          End;
  23.                        sacarpila:=true;
  24.                        i:=i-1
  25.                    End;
  26.          if sacarpila then
  27.              Begin
  28.                  While Not(Pila.EsVacia) do
  29.                       Begin
  30.                          car:=Pila.Sacar;
  31.                          Cola.Meter(car)
  32.                       End;
  33.                  sacarpila:=false
  34.              End;
  35.          i:=i+1
  36.       End;
  37.    While Not(Cola.EsVacia) do aux:=aux+Cola.Sacar;
  38.    palabra:=aux;
  39. End
  40.  
  41.  

Estoy asumiendo que  TPila y TCola, son Clases y contiene los métodos Sacar,Meter y EsVacia.
En caso estes usando Procedmientos y funciones y no clases entonces debes hacer los cambios pertinentes.
El procedimiente se puede resumir en el siguient enunciado :

Recorrer todas las letras en palabra, cuando una letra es una consonate entonces lo colocas en la cola, y cuando son vocales loc colocas en la pila, ni bien termines de colocar las letras en la pila los sacas de la pila para colocarlas en la cola, y el proceso se repite hasta terminar con la palabra.

Espero te ayude en algo.

suerte

21
Pascal / Re: Repetir programa.
« en: Lunes 3 de Agosto de 2009, 23:30 »
Debes hacer algo parecido a esto :

Código: Pascal
  1.  
  2. Var a,b:integer;      
  3. Begin
  4.   Repeat
  5.       Write('Ingrese un numero : ');readln(a);
  6.       Write('Ingrese un numero : ');readln(b);
  7.       Writeln('La suma es : ',a+b);    
  8.   Until false;  
  9. End.
  10.  
  11.  

Sólo que te va a hacer un bucle infinito. Para salir del bucle tienes que presionar Ctrl+C.

22
Pascal / Re: Memoria para mi programa Win 32 o Vista
« en: Viernes 27 de Febrero de 2009, 17:44 »
Gracias por tu respuesta.
Estuve investigando y esto es mas o menos lo que encontre :

Limites de memoria

Windows XP (32Bits)
-Soporta un máximo de 4GB de RAM
-Cada aplicación no podrá usar más de 2GB de RAM - memoria virtual de 4GB
-Soporta DirectX9

Windows Vista (32Bits)
-Soporta un máximo de 4Gb de RAM
-Cada aplicación no podrá usar más de 2Gb de RAM - memoria virtual de 4GB
-Soporta DirectX10

Como dicen en Win32 sólo se puede usar un máximo de 2 GB de memoria por programa o aplicación.
Mi pregunta es Si a esos 2GB de memoria RAM que da Win32 a cada aplicación son lo que dicen Memoria Virtual.
Como saber de los 2GB cuanto espacio me queda libre.

Espero alguien me pueda responder.

23
Pascal / Memoria para mi programa Win 32 o Vista
« en: Domingo 18 de Enero de 2009, 16:39 »
Mi pregunta es :
   ¿Como puedo saber si tengo memoria RAM disponible para mi programa?

Por ejemplo si quiero crear una lista dinamica de 2GB
Como hago para saber si hay memoria disponible en el sistema para crear dicha variable.

Espero me puedan ayudar.

24
Pascal / Re: Datos Boolean
« en: Viernes 4 de Enero de 2008, 20:16 »
ok, gracias por tu ayuda

att.
aguila3000

25
Pascal / Re: Datos Boolean
« en: Viernes 4 de Enero de 2008, 17:58 »
:blink:
Gracias.
Pero podrias explicarme un poco mejor tu ejemplo, para facilitar el alineamiento.


Att.
aguila3000

Páginas: [1] 2