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 - Khronos14

#441
No dices nada sobre el lenguaje, si va a ser compilado o interpretado...

Citar
Y génte que opine sobre como debe ser la sintaxis ideal.

Dices que es la versión 2.0 y todavía tienes dudas sobre la sintaxis del lenguaje... No me queda muy claro el asunto.

Saludos.
#442
Para hacer eso tienes que emplear la API de Windows CharToOemBuffA o CharToOemBuffW. En Delphi sería algo así:

Código (delphi) [Seleccionar]

program Project1;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils;

var
  S: AnsiString;
begin
  S := 'Ejemplo de cadena: ñ, á, í, ó, é';
  CharToOemBuffA(PAnsiChar(S), PAnsiChar(S), Length(S));
  WriteLn(S);
  ReadLn;
end.


Saludos.
#443
Delphi en lo personal y C# en clase.

Saludos.
#444
Programación C/C++ / Re: ejercicio en c
4 Octubre 2010, 16:40 PM
Por lo que entendí del enunciado del ejercicio:

Citar
Dada una secuencia de numeros acabada en -1, encontrar los numeros que sean consecutivos.

Lo que se me ocurre es ir leyendo los números que se introducen y guardarlos en un array hasta que se introduzca -1, luego muestras por pantalla los números consecutivos.

Código (cpp) [Seleccionar]

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
int count = 0, lista[29];

cout << "Introduce una secuencia de enteros acabada en -1: " << endl;

do{
    cin >> lista[count];
    count++;
}while (lista[count-1] != -1 && count < 30);

int u, i = 0;

while (i < count - 1){
        u = 0;
        while (lista[i + u] + 1 == lista[i + u + 1]){
            cout << lista[i + u] << ",";
            u++;
        }
        if (u > 0){
          cout << lista[i + u] << " son consecutivos" << endl;
          i = i + u;
        }
        else i++;   
}

  system("pause>nul");
  return 0;
}


Saludos.
#445
En una tarde de aburrimiento, se me ocurrió hacer una función para descargar archivos de un servidor web utilizando Sockets.
Es una función alternativa a la API URLDownLoadToFile o a la API de WinInet.

Código (delphi) [Seleccionar]

uses SysUtils, Classes, Windows, Forms, WinSock;

{Función: GetDomainName
Ejemplo: Si le pasas "http://foro.elhacker.net/post.html;board=18.0"
como parámetro te devuelve "foro.elhacker.net"}
function GetDomainName(const URL: AnsiString): AnsiString;
var
P1: integer;
begin
  P1:= Pos('http://', LowerCase(URL));
  if P1 > 0 then
   begin
     result:= Copy(lowercase(URL), P1 + 7, Length(URL) - P1 - 6);
     P1:= Pos('/', result);
     if P1 > 0 then
       result:= Copy(result, 0, P1 - 1);
   end else
     begin
       P1:= Pos('/', URL);
       if P1 > 0 then
         result:= Copy(Lowercase(URL), 0, P1 - 1)
       else result:= LowerCase(URL);
     end;
end;

{Función: GetFileWeb
Ejemplo: Si le pasas "http://foro.elhacker.net/post.html;board=18.0"
como parámetro te devuelve "post.html;board=18.0"}
function GetFileWeb(const URL: AnsiString): AnsiString;
var
P1: integer;
begin
  P1:= Pos('http://', LowerCase(URL));
  if P1 > 0 then
   begin
     result:= Copy(lowercase(URL), P1 + 7, Length(URL) - P1 - 6);
     P1:= Pos('/', result);
     if P1 > 0 then
       result:= Copy(result, P1, Length(result) - P1 + 1);
   end else
     begin
       P1:= Pos('/', URL);
       if P1 > 0 then
         result:= Copy(LowerCase(URL), P1, Length(URL) - P1 + 1)
       else result:= LowerCase(URL);
     end;
end;

{Función: CleanHTTP
Esta función se encarga de eliminiar las líneas de control
que emplea el protocolo HTTP. El archivo comienza despues de #13#10#13#10.

Un ejemplo de las líneas que vamos a quitar con esta función:

HTTP/1.0 200 OK
Date: Sat, 07 Aug 2010 23:25:05 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=45985543825451c0:TM=1281223505:LM=1281223505:S=kPYwkz3GOI3idLv6; expires=Mon, 06-Aug-2012 23:25:05 GMT; path=/; domain=.google.es
Set-Cookie: NID=37=rPl51eNebbKvxz3Abvlpje8AT-qMszIbpmDR-zJJjYlwRie55cmev5KE45t4kBPVmhsHPpWUqBwzwqI4rsndihEbd0OtrMJfMohVYI0lfxJ3U1uchrbJMA4SUVh2-uNz; expires=Sun, 06-Feb-2011 23:25:05 GMT; path=/; domain=.google.es; HttpOnly
Server: gws
X-XSS-Protection: 1; mode=block
}
procedure CleanHttp(var Mem: TMemoryStream);
var
i: integer;
Separator: array [0..3] of AnsiChar;
Mem2: TMemoryStream;
begin
 if Assigned(Mem) then
   begin
     for i := 0 to Mem.Size - 1 do
       begin
         Mem.Seek(i, 0);
         Mem.Read(Separator, 4);
         if (Separator[0] = #13) and (Separator[1] = #10) and (Separator[2] = #13)
             and (Separator[3] = #10) then
               begin
                 Mem2:= TMemoryStream.Create;
                 Mem.Seek(i + 4, 0);
                 Mem2.CopyFrom(Mem, Mem.Size - I - 4);
                 Mem:= Mem2;
                 break;
               end;
       end;
   end;
end;


{Función DownLoadFile
URL: La dirección del archivo que vas a descargar.
FileName: La ruta donde vas a guardar el archivo
ProcessMessages: Por defecto está a True, hace que no se bloquee
la aplicación con el bucle. Puedes cambiar su valor a False o eliminar la línea
"if ProcessMessages then Application.ProcessMessages;" y los uses "Forms" si vas a
trabajar en modo consola

Devuelve True si tiene éxito}
function DownLoadFile(const URL: AnsiString; FileName: String; ProcessMessages: boolean = true): boolean;
var
WSA: TWSAData;
Sock: TSocket;
Hostent: PHostent;
Ip: ^Integer;
ReturnCode, i: integer;
RHost: sockaddr_in;
Http: AnsiString;
szBuffer: array [0..1023] of AnsiChar;
Stream: TMemoryStream;
begin
result:= false;
 If WSAStartup(MakeWord(2,2), WSA) = 0 then
   begin
     Sock:= SOCKET(AF_INET, SOCK_STREAM, 0);
     if Sock <> INVALID_SOCKET then
         Hostent:= GetHostByName(PAnsiChar(GetDomainName(URL)));
         if Hostent <> nil then
           begin
             Ip:= @Hostent.h_addr_list^[0];
             RHost.sin_family:= AF_INET;
             RHost.sin_port:= htons(80);
             RHost.sin_addr.S_addr:= ip^;
             if Connect(Sock, RHost, Sizeof(RHost)) = 0 then
               begin
                 Http:= 'GET ' + GetFileWeb(URL) + '   HTTP/1.0'#13#10 +
                 'Host: ' + GetDomainName(URL) +  #13#10#13#10;
                 send(Sock, Pointer(Http)^, Length(Http), 0);

                 try
                 Stream:= TMemoryStream.Create;
                   repeat
                     if ProcessMessages then Application.ProcessMessages;
                     FillChar(szBuffer, SizeOf(szBuffer), 0);
                     ReturnCode:= recv(Sock, szBuffer, sizeof(szBuffer), 0);
                     if ReturnCode > 0 then
                       Stream.Write(szBuffer, ReturnCode);
                   until ReturnCode <= 0;
                 CleanHttp(Stream);
                 if Stream.Size > 0 then
                     begin
                        result:= true;
                       Stream.SaveToFile(FileName);
                     end;
                 finally
                   Stream.Free;
                 end;

                 ShutDown(Sock, SD_BOTH);
                 CloseSocket(Sock);
               end;
           end;
   end;
 WSACleanUp;
end;


Un ejemplo de uso:

Código (delphi) [Seleccionar]

DownLoadFile('http://www.google.es', 'C:\google.html');


Saludos.
#446
A mi me funcionan los 2 códigos, en la función DD te falta un ;

Código (delphi) [Seleccionar]

function DD(s:string):string;
begin
  result:= s + s + s;
end;


Tal vez lo copiaste de algún sitio y te olvidaste poner el componente TEdit en el Form.

Saludos.
#447
Creo que primero deberías de aclarar si va a ser Pascal en modo consola o POO con algún tipo de interfaz visual...

Saludos.