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

#11
Programación C/C++ / Re: broma en c++
6 Julio 2013, 01:21 AM
ajia. Si pones una música tétrica ya es un puntazo.
#12
He acabado los examenes.
Aquí esta el código:

Código (cpp) [Seleccionar]
/*Text based web browser*/

#include <string>
#include <iostream>
#include <boost/asio.hpp>

using namespace std;

string get_formated_web(string);
string getWeb(string);
string getPage(string);

int main(int argv, char **argc){

if(argv==2){
string web=getWeb(string(argc[1]));
cout<<"web: "<<web<<endl;
string page=getPage(string(argc[1]));
cout<<"page: "<<page<<endl;

boost::asio::ip::tcp::iostream stream;
stream.expires_from_now(boost::posix_time::seconds(60));
stream.connect(web, "http");
stream << "GET "<<page<<" HTTP/1.0\r\n";
stream << "Host: "<< web <<"\r\n";
stream << "Accept: */*\r\n";
stream << "Connection: close\r\n\r\n";
stream.flush();

stringstream codestream;
codestream<<stream.rdbuf();
string htmlsource( codestream.str() );

string formatedweb=get_formated_web(htmlsource);
std::cout << formatedweb;
}
else{
cout<<"Wrong arguments."<<endl
<<"Usage: http www.webpage.com"<<endl;
}
}


/* given: www.webpage.com/page.html */
/* returns: www.webpage.com */
string getWeb(string a){
string web;
for(int i=0;i<a.size();i++){
if(a[i]==':'){
web+=a[i];
if(i+2<a.size()){
if(a[i+1]=='/' && a[i+2]=='/'){
web+="//";
i+=2;
}
}
}
else if(a[i]=='/'){
return web;
}
else{
web+=a[i];
}
}
return web;
}

/* given: www.webpage.com/page.html */
/* returns: /page.html */
string getPage(string a){
string page;
bool found=false;
for(int i=0;i<a.size();i++){
if(found){
page+=a[i];
}
else{
if(a[i]==':'){
if(i+2<a.size()){
if(a[i+1]=='/' && a[i+2]=='/') i+=2;
}
}
else if(a[i]=='/'){
page+='/';
found=true;
}
else{}
}
}

if(page=="") return "/";
return page;
}


/* given: html source code */
/* returns: formatted text webpage */
string get_formated_web(string unformated){
return unformated;
}


No es un navegador completo pero espero que se vea clara la idea principal.
Lo que hacemos es imprimir el código fuente html.
La función get_formated_text() pretende traducir el html a el text legible.

Por ejemplo si le pasas:
<html>
<body>
<p>hola</p>
</body>
</html>

Te devuelve:
hola

He usado la libreria no estándar asio la cual es parte de boost.
En g++ se puede compilar así(como no es estándar toca linkear):
g++ http.cpp -lboost_system

Te animo a que completes el código a tu gusto o que por lo menos te sirva un poco de guía.
#13
Programación C/C++ / Re: Duda con hostent C
19 Junio 2013, 23:49 PM
Si le pasas una IP seguro que no hace petición DNS. No tendría sentido porque las peticiones DNS se hacen para obtener una IP.
#14
Supongo que tu código es diferente al que has copiado perque el que has copiado tiene varios fallos. Por ejemplo:

v=num;

debería ser:

v[i]=num;

El código completo corregido debería ser este:


//Secuencial - OrdenacionSectp5.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

/*Declaración de variables globales*/
unsigned long int MAX=100000;

/*Generar datos*/
void CagarDatos(unsigned long int v[], unsigned long int N)
{
  unsigned long int i,j;
  int duplicado;
  unsigned long int num;
 
  for(i=0; i<N; i++)
  {
     num=1+rand()%N;
     duplicado=0;

      for(j=0; j<=i; j++)
     {
        if(num==v[j])
        {
           duplicado=1;
           break;
        }
     }
     if(duplicado==1)
        i--;
     else
        v[i]=num;
  }
}

/*Ordenar Datos de menor a mayor mediante método burbuja*/
void OrdenarDatos(unsigned long int v[], unsigned long int N)
{
  unsigned long int i,j;
  unsigned long int buffer;

  for(i=0; i<N-1; i++)
 {
    for(j=i+1; j<N; j++)
   {
       if(v[i]>v[j])
      {
         buffer=v[j];
         v[j]=v[i];
         v[i]=buffer;
      }
   }
 }
}

/*Muestra los datos cargados*/
void MostrarDatos(unsigned long int v[], unsigned long int N)
{
  unsigned long int i;
 
  printf("\n============================================");
  printf("\nNúmeros cargados:\n ");
  for(i=0; i<N; i++)
    printf("-%ld", v);
}

/*Principal*/
int main()
{
  unsigned long int ordenar[MAX];
  time_t inicio, fin;

  srand(time(NULL));
  CagarDatos(ordenar, MAX);
  inicio=time(NULL);
  OrdenarDatos(ordenar, MAX);
  MostrarDatos(ordenar, MAX);

/*Finalización*/
  printf("\n============================================");
  printf("\nLa cantidad de datos ordenados es: %ld", MAX);
  fin=time(NULL);
  printf("\nEl programa ha tardado: %.f segundos", difftime(fin,inicio));
  printf("\n=========================================\n\n");
  return 0;
}


Pues eso que bubblesort es lentillo.

Edit funcionar, funciona:
============================================
La cantidad de datos ordenados es: 100000
El programa ha tardado: 142 segundos
=========================================

Que conste que mi ordenador tiene una atom.
#15
Yo creo que tendrás que conectar el modem al pc y no el teléfono al PC.
He estado mirando y parece que se usa el protocolo SIP. No se mucho de esto, no te puedo ayudar más :/
#16
Oh dios mío eres tú, SHELDON!

Ya se apañará.
A ver, ¿cuánto pagas?¿en que consiste el trabajo?
#17
Pues es raro que no te funcione mi código porque a mi si me funciona, puede que el error esté en otro sitio.
Mi código completo es este:
Código (cpp) [Seleccionar]
#include<iostream>
#include<fstream>

using namespace std;

int main(){
ofstream outputfile;
outputfile.open("file1",ios::out);
ifstream readfile;
readfile.open("file2",ios::in);


while(readfile.good()){
char writebuffer=readfile.get();

if(readfile.good())outputfile.put(writebuffer);
}
readfile.close();
outputfile.close();
}


Tenías razón sobre lo del read y write, si que desplazan.
Otra manera que me funciona es esta:

Código (cpp) [Seleccionar]
#include<iostream>
#include<fstream>

using namespace std;

int main(){
ofstream outputfile;
outputfile.open("file1",ios::out);
ifstream readfile;
readfile.open("file2",ios::in);

char writebuffer;
while(readfile.read(&writebuffer,1)){
if(readfile.good())outputfile.write(&writebuffer,1);
}
readfile.close();
outputfile.close();
}
#18
Programación C/C++ / Re: If o Switch?
15 Junio 2013, 20:48 PM
La ventaja que tine el map es que tiene un coste constante.
Por otra parte, en una sucesión de ifs el coste depende linealmente de el número de ifs.
Si tienes poquitos ifs vale la pena. Pero si tienes un muchos imagínate si será costoso comprobar todas las condiciones una a una.
Los maps tinen una función hash que permite calcular el puntero sin depender del número de entradas que tenga.
#19
Vale, ya sé cual es un fallo. Resulta que read y write no se desplazan por el fichero solo leen y escriben empezando por el principio(a no ser que especifiques un offset).
Tendrías que usar put y get:
Código (cpp) [Seleccionar]
while(readfile.good()){
char writebuffer=readfile.get();

if(readfile.good())outputfile.put(writebuffer);
}
readfile.close();
outputfile.close();


A ver si te funciona esto...

Por otra parte tengo que decir que el error que te da no tiene pinta de ser por eso. Tengo la impresión de que en algún lugar se ha modificado un puntero. La dirección 0x20202020 es muy sospechosa, 0x20 en ascii es un espacio. ¿Cabe la posibilidad de que el error esté en otro sitio?
#20
Pues no se lo único que veo es que en la función "tellFileSizeSTREAM" creo que deberías cambiar esta línea:
Código (cpp) [Seleccionar]
retorno=FileToAnalize.tellg()-startpoint;

Pero no estoy seguro por que no se para que usas esa función.

Una pregunta, ¿el archivo que intentas copiar tiene muchos espacios al principio?