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ú

Temas - _*p

#1
Hardware / Elección placa de video
11 Julio 2011, 18:50 PM
Que tal, que tarjeta recomendarían comprar entre estas dos?

ZOTAC GeForce GTX 465
EVGA GeForce GTX 460 SE

#2
Programación C/C++ / [C] Split
18 Febrero 2011, 20:35 PM
Que tal, hace un tiempo trato de buscar una función split como la gente y no la encuentro... Y tampoco se me ocurre la forma de hacerla...

La elaboración de la función no es muy complicada, solo basta almacenar los tokens devueltos por strtok() o strsep() en un array... Y luego devolverlos, la cabecera de la función sería algo así:

char **split( const char *s1, const char *s2 );

Supongamos que en el main tenemos declarado:

char **tokens;

La asignación sería:

tokens = split( cadena, delimitador );

Pero previamente se debería haber reservado espacio para los tokens, y he aquí el problema, ya que ¿cómo sabremos la cantidad de tokens? ¿y el tamaño de cada una de ellos?... Podríamos reservar un espacio constante, pero podríamos desperdiciar memoria, o caer en un "segmentation fault" si faltase... ¿Cómo hacen otros lenguajes para hacer eficiente esta función?
#3
Qué les parece este ejercicio que me tocó hacer? Tienen alguna mejora?


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/** Algoritmo que cuenta la cantidad de cadenas
dentro de otra cadena **/

typedef unsigned int ui;
ui cuenta_str(const char *, const char *);

int main()
{
   char *cadena = "¿MUNDO? MUNDO, SOY EL DIOS DEL MUNDO, MUNDO DOMINARE";
   char *subcad = "MUNDO";
   ui cuenta = cuenta_str(cadena, subcad);
   printf("La cantidad de veces que %s se repite en %s es: %d", subcad, cadena, cuenta);
   return 0;
}

ui cuenta_str(const char *s1, const char *s2)
{
   const char *delim = " ,.!¡¿?/-";
   char *aux = malloc(sizeof(char) * strlen(s1) + 1);
   char *token_Ptr;
   ui cnt = 0;
   if(s1 == NULL)
       return 0;
   strcpy(aux, s1);
   token_Ptr = strtok(aux, delim);
   while(token_Ptr != NULL)
   {
       if(strcmp(token_Ptr, s2) == 0)
           cnt++;
       token_Ptr = strtok(NULL, delim);
   }
   return cnt;
}


Debería liberar la memoria de aux cierto?

EDITADO: Debería también contar MUNDO en la cadena "MUNDOROLA"? creen que sea necesario? Digamos que asumí que cadena = palabra :P
#4
Programación C/C++ / Kdevelop 4.1 - Problemas
16 Febrero 2011, 16:23 PM
Que tal, tengo lo siguiente:

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

#include "Lista.h"

Lista::Lista( U_int i ) : TAM( i ), cnt( 0 )
{
  lista_Ptr = new TIPO_ELEMENTO [i];
}

Lista::~Lista()
{
  delete [] lista_Ptr;
}

void Lista::Borrar( U_int pos )
{
  if( cnt == 0 )
  {
    std::cerr << "LISTA VACIA";
    return;
  }
  if( pos < 0 || pos >= cnt)
  {
    std::cerr << "Posicion ilegal para borrar";
    return;
  }
  for( U_int i = pos; i < cnt - 2; i++ )
    lista_Ptr[i] = lista_Ptr[i + 1];
  cnt--;
}

void Lista::Insertar( TIPO_ELEMENTO e, U_int pos )
{
  if( cnt == TAM )
  {
    std::cerr << "LISTA VACIA";
    return;
  }
  if( pos < 0 || pos > cnt )
  {
    std::cerr << "Posicion ilegal para insertar";
    return;
  }
  for( U_int i = cnt; i > pos; i-- )
    lista_Ptr[i] = lista_Ptr[i-1];
  lista_Ptr[pos] = e;
  cnt++;
}

bool Lista::Vacia()
{
  return cnt == 0;
}

void Lista::Mostrar( ostream & sal) const
{
  for( U_int i = 0; i < cnt; i++ )
    sal << "Elemento[" << i + 1 << "]:" << lista_Ptr[i] << ",";
}

ostream &operator<<( ostream & salida, const Lista & L )
{
  L.Mostrar( salida );
  return salida;
}

TIPO_ELEMENTO Lista::getTAM() const
{
  return TAM;
}


Lista.h


Código (cpp) [Seleccionar]
#ifndef LISTA_H
#define LISTA_H

#include <iostream>
using std::ostream;
using std::istream;

typedef int TIPO_ELEMENTO;
typedef unsigned int U_int;

class Lista{

  public:
    Lista( U_int = 0 ); // Constructor de la clase lista
    ~Lista();
    void Mostrar( ostream &) const; // Muestra lista
    void Insertar( TIPO_ELEMENTO, U_int ); // Inserta un elemento en la lista en la posicion 'x'
    void Borrar( U_int ); // Borra un elemento en la lista en la posicion 'x'
    //void Ordenar(); // Ordena la lista en orden ascendente
    bool Vacia(); // La lista esta vacia?
    TIPO_ELEMENTO getTAM() const;
    friend ostream &operator<<( ostream &, const Lista & );
    //friend istream &operator>>( istream &, Lista & );
  private:
    U_int cnt; // Cantidad total de elementos
    U_int TAM;
    TIPO_ELEMENTO *lista_Ptr; // Puntero a lista
};

#endif


Y el main.cpp

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

#include "Lista.h"

int main() {
 U_int tam = 10;
 Lista L2( tam );
   if( L2.Vacia() )
     std::cout << "Lista Vacia" << std::endl;
   else
     std::cout << "Lista con:" << L2.getTAM() << " elementos" << std::endl;
 for( U_int i = 0; i < L2.getTAM(); i++ )
   L2.Insertar( i*i, i);
 
 std::cout << L2;
 
 return 0;
}


Cuando quiero compilar con F8, me saltan errores:

http://img832.imageshack.us/i/75593839.png/

A qué se debe?
Lo único que supongo es que tal vez no está tomando la implementación... Pero tampoco sé cómo configurarlo para que la tome...