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

#1
Hola compañeros, tengo una gran duda sobre los punteros... ¿Es posible almacenar la direccion de memoria de un puntero * en un puntero *** o uno ** a *** y que estos sean arreglos? De ser posible, ¿Cómo accedo a sus valores?  :P

Así...

Código (cpp) [Seleccionar]
    int* p1; // lo inicializamos con el operador new...
    int** p2; // lo inicializamos con operador new y sus respectivos ciclos...
    int*** p3;
    p3 = p1;
    p3 = p2;
#2
Hola que tal, programando me surgió la duda  :huh: de si es posible copiar el texto que ya está impreso en la consola, o si hay alguna manera de seleccionarlo u obtenerlo mediante código, no sé si me explico xD ya encontré como almacenarlo en el clipboard pero me falta poder almacenarlo en una variable y más aun poder seleccionarlo  :xD  Gracias!  :P

#3
Java / [APORTE] Eliminar un retweet Twitter4j v4.0.4
30 Diciembre 2015, 05:45 AM
Buenas compañeros, hace un rato estuve buscando como poder eliminar un retweet con el paquete Twitter4j (el cual te permite obtener datos del servidor de Twitter para poder así crear tu aplicación) mi problema era que no encontraba las funciones correctas para poder eliminar un retweet hecho por ti así que después de un buen rato di con la solución, espero les sirva! ;D
Código (java) [Seleccionar]
List<Status> retweets = twitter.getRetweets(statusID);
for (Status retweet : retweets)
      if (retweet.getUser().getId() == twitter.getId())
twitter.destroyStatus(retweet.getId());


(Es una adaptación de un código que andaba por ahí el cual era incorrecto o al menos a mi no me funcionaba en esta versión  :xD )
#4
Programación C/C++ / [Consulta] Arboles binarios
11 Noviembre 2015, 04:44 AM
Buenas a quien lo lea!

Estoy programando un árbol binario, pero al momento de compilar el programa, la función virtual no la reconoce o no se linkea, ¿a qué se debe? o que hago mal?  :-\ ojalá puedan ayudarme, gracias!

BTNode.h :
Código (cpp) [Seleccionar]

#define BTNODE_H_INCLUDED

#include <sstream>

using namespace std;

template<typename IT>
struct BTNode {

 IT data;
 BTNode<IT>* left;
 BTNode<IT>* right;

 BTNode(const IT &Data, BTNode<IT>* lv = NULL, BTNode<IT>* rv = NULL) :
   data(Data), left(lv), right(rv) {}

 virtual ~BTNode() {}

 virtual string toString() const {

   ostringstream os;

   os << data;
   return os.str();
 }
};

template <typename IT>
ostream &operator<<(ostream &out, const BTNode<IT> &node) {

 return out << node.toString();
}

#endif // BTNODE_H_INCLUDED




Binary_Tree.h:
Código (cpp) [Seleccionar]


#ifndef BINARY_TREE_H_INCLUDED
#define BINARY_TREE_H_INCLUDED

#include <cstddef>
#include <sstream>
#include <stdexcept>
#include <string>
#include "BTNode.h"

using namespace std;

template <typename IT>
class Binary_Tree {

public:

 Binary_Tree(): root(NULL) {}
 Binary_Tree(const IT &Data, const Binary_Tree<IT> &lc = Binary_Tree(), const Binary_Tree<IT> &rc = Binary_Tree()):
   root(new BTNode<IT>(Data, lc.root, rc.root)) {}

 virtual ~Binary_Tree() {}

 Binary_Tree<IT> getLeftSubtree() const;
 Binary_Tree<IT> getRigthSubtree() const;
 const IT &getData() const;

 bool isNull() const;
 bool isLeaf() const;

 virtual string toString() const; //<---esta es la función!!!!

 static Binary_Tree<IT> readBinaryTree(istream& in);
Binary_Tree(BTNode<IT>* newRoot): root(newRoot) {}
protected:


 BTNode<IT>* root;
};

template<typename IT>
ostream &operator<<(ostream &out, const Binary_Tree<IT> &tree) {

 return out << tree.toString();
}

template<typename IT>
istream &operator>>(istream &in, Binary_Tree<IT> &tree) {

 tree = Binary_Tree<IT>::readBinaryTree(in);
 return in;
}

#endif // BINARY_TREE_H_INCLUDED



Binary_Tree.cpp
Código (cpp) [Seleccionar]

#include "Binary_Tree.h"

using namespace std;

template<typename IT>
Binary_Tree<IT> Binary_Tree<IT>::getLeftSubtree() const {

 if(root == NULL) {

   throw invalid_argument("getLeftSubtree on empty tree");
 }

 return Binary_Tree<IT>(root->left);
}

template<typename IT>
Binary_Tree<IT> Binary_Tree<IT>::getRigthSubtree() const {

 if(root == NULL) {

   throw invalid_argument("getLeftSubtree on empty tree");
 }

 return Binary_Tree<IT>(root->right);
}

template<typename IT>
bool Binary_Tree<IT>::isLeaf() const {

 if(root != NULL) {

   return root->left == NULL && root->right == NULL;
 } else {

   return true;
 }
}

template<typename IT>
string Binary_Tree<IT>::toString() const {

 ostringstream os;

 if(isNull()) {

   os << "NULL\n";
 } else {

   os << *root << "\n";
   os << getLeftSubtree().toString();
   os << getRigthSubtree().toString();
 }

 return os.str();
}

#5
Buenas, en un ejercicio me piden crear una función con excepciones, una debe lanzar la excepción ios::failure  si el formato ingresado no es válido, y la otra es que el numero ingresado esté fuera del intervalo dado en los parámetros de la función (out_of_range), así como lo tengo funciona, pero quería saber si está en lo correcto o hay una mejor forma de ponerlo (con las mismas excepciones) ya que quiero que cuando ingresen un caracter muestre la excepción failure pero solo toma la que le sigue. Gracias!

Código (cpp) [Seleccionar]

#include <iostream>
#include <stdexcept>
#include <stdlib.h>
#include <limits>
#include <ios>

using namespace std;

int read_int(const string &Cad, const int &Min, const int &Max) {
 int x;
 while (true) {
   try {
     cout << Cad;
     cin >> x;
    } catch (ios::failure &ex) {
      cout << "Error en la cadena de numeros, intenta de nuevo.\n";
      cin.clear();
      cin.ignore(numeric_limits<int>::max(),'\n');
   }
   try {
     if(x<Min||x>Max) {
       throw out_of_range("");
     }
     return x;
   } catch (out_of_range &ex) {
      cout << "Error en el intervalo, intenta de nuevo.\n";
      cin.clear();
      cin.ignore(numeric_limits<int>::max(),'\n');
    }
 }

}

main () {
 cout << read_int("Ingresa un numero entre 4 y 10: ", 4, 10);
}





He modificado el código, ya me lanza correctamente las excepciones, pero aún me queda la duda si es lo correcto.

Código (cpp) [Seleccionar]

#include <iostream>
#include <stdexcept>
#include <stdlib.h>
#include <limits>
#include <ios>

using namespace std;

int read_int(const string &Cad, const int &Min, const int &Max) {
  cin.exceptions(ios::failbit);
  int x;
  while (true) {
    try {
      cout << Cad;
      cin >> x;
      if(x<Min||x>Max) {
        throw out_of_range("");
      }
     return x;
     } catch (out_of_range &ex) {
       cout << "Error en el intervalo, intenta de nuevo.\n";
       cin.clear();
       cin.ignore(numeric_limits<int>::max(),'\n');
     }catch (ios::failure &ex) {
       cerr << "Error en la cadena de numeros, intenta de nuevo.\n";
       cin.clear();
       cin.ignore(numeric_limits<int>::max(),'\n');
    }
  }
}

main () {
  cout << read_int("Ingresa un numero entre 4 y 10: ", 4, 10);
}
#6
Hola buenas! Tengo problemas con este código, estoy leyendo un libro "Estructura de datos con C++" viene un ejercicio de crear un directorio apartir de un archivo de texto, viene el codigo y solamente lo estoy copiando, el problema está (creo) al asignar la memoria no sé como arreglarlo, ojalá puedan decirme que está mal :C gracias!

Directory-Entry.h
Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

class Entrada_Directorio{
public:
 Entrada_Directorio(string _Nombre, string _Numero) : Nombre(_Nombre), Numero(_Numero){}
 Entrada_Directorio(){}
 string dar_Nombre() const {return Nombre;}
 string dar_Numero() const {return Numero;}
 void mod_Numero(const string &nuevo_Numero) {Numero=nuevo_Numero;}
private:
 string Nombre;
 string Numero;
};



Arreglo_PD.h
Código (cpp) [Seleccionar]

#include <string>
#include "Directory-Entry.h"

using namespace std;

class Directorio_Tel{
public:
 Directorio_Tel(){} // Cuando lo pongo como  Directorio_Tel(); me da error al crear el objeto
 ~Directorio_Tel(){}

 void cargar_datos(const string &nombre_arch);
 string buscar_nom(const string &Nombre) const;
 string anadir_modif(const string &Nombre, string &Numero);
 string eliminar(const string &Nombre);
 void guardar();
 friend ostream& operator<<(ostream &os, const Directorio_Tel &Tel);
private:
 int buscar(const string &Nombre) const;
 void agregar(const string &Nombre, string &Numero);
 void eliminar(int num);
 void realocar();
 int tamano;
 int capacidad;
 Entrada_Directorio* Directorio;
 string nombre_arch;
 bool modificado;
};


Arreglo_PD.cpp
Código (cpp) [Seleccionar]

#include "Arreglo_PD.h"
#include <fstream>
#include <conio.h>

using namespace std;

void Directorio_Tel::cargar_datos(const string &nombre_arch){
 this->nombre_arch=nombre_arch;
 ifstream in(nombre_arch.c_str());
 if (in){
   string Nombre;
   string Numero;
   while (getline(in,Nombre,'\n')){
     if (getline(in,Numero,'\n')){
       cout<<Nombre<<endl;
       cout <<Numero<<endl; //Coloqué esto para ver como se van agregando los nombres...
       agregar(Nombre, Numero); //Desde aqui todo bien al mandar a llamar esta funcion
     }
   }
   in.close();//No entiendo como es que (según el libro) esto logra cargar todo el archivo...
 }
}

string Directorio_Tel::buscar_nom(const string &Nombre) const {
 int num=buscar(Nombre);
 if(num!=-1){
   return Directorio[num].dar_Numero();
 } else {
   return "";
 }
}

string Directorio_Tel::anadir_modif(const string &Nombre, string &Numero) {
 string numero_ant="";
 int num=buscar(Nombre);
 if(num!=-1){
   numero_ant=Directorio[num].dar_Numero();
   Directorio[num].mod_Numero(Numero);
 }
 modificado=true;
 return numero_ant;
}

string Directorio_Tel::eliminar(const string &Nombre){
;
}

void Directorio_Tel::guardar() {
 if (modificado){
   ofstream out(nombre_arch.c_str());
   for(int i=0; i<tamano; i++){
     out << Directorio[i].dar_Nombre() <<endl;
     out << Directorio[i].dar_Numero() <<endl;
   }
   out.close();
   modificado=false;
 }
}

int Directorio_Tel::buscar(const string &Nombre) const {
 for(int i=0; i<tamano; i++){
   if (Directorio[i].dar_Nombre()==Nombre)
     return 1;
 }
 return -1;
}

void Directorio_Tel::agregar(const string &Nombre, string &Numero) {
 if(tamano==capacidad)
   realocar(); //Aquí llama a la función erronea
 Directorio[tamano]=Entrada_Directorio(Nombre,Numero);
 tamano++;
}

void Directorio_Tel::eliminar(int num) {
;
}

//Esta es la funcion que da error
void Directorio_Tel::realocar() {
 capacidad*=2;
 Entrada_Directorio* nuevo_Directorio=new Entrada_Directorio[capacidad];
 getch(); //Este getch lo puse por que después de aquí se hace el error
 for(int i=0; i<tamano; i++){
   nuevo_Directorio[i]=Directorio[i];
 }
 delete[] Directorio;
 Directorio=nuevo_Directorio;
}

ostream& operator<<(ostream &os, const Directorio_Tel &Tel) {
 for(int i=0; i<Tel.tamano; i++){
   os<<Tel.Directorio[i].dar_Nombre()<<endl;
   os<<Tel.Directorio[i].dar_Numero()<<endl<<endl;
 }
 return os;
}


main()...
Código (cpp) [Seleccionar]

#include <iostream>
#include "Arreglo_PD.h"

using namespace std;

int main(){
 Directorio_Tel D1;
 D1.cargar_datos("Directorio.txt");
 cout << D1;
}



Nota: Crear el archivo de texto xD De antemano muchas gracias y espero que puedan ayudarme!  :(
#7
Programación C/C++ / Menú ¿Dinámico? en C
5 Abril 2015, 20:22 PM
Buenas, no se si tenga algún nombre en especifico este tipo de menús, acabo de hacer esta "plantilla" por así decirlo, sólo que quiero saber si se puede simplificar más o que consejo me darían para hacer los menús así.  ;D


Código (cpp) [Seleccionar]

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>

using namespace std;
//Define las opciones máximas.
#define opmax 3

void SetBG(int ForgC, int BackC);
void menu ();
int tec(int *o1,int *o2,int *o3,int *y,int *t1,int *t2,int *t3);

main ()
{
 while (1)
 {
   menu();
 }
}
//Define la función de menú
void menu ()
{
 SetBG(15,0);
 static int o1=14,o2=0,o3=0,y=0,t1=0,t2=15,t3=15;

do{
   system("cls");
   cout << "\n   MENU";
   cout << "\n==========";
   SetBG(t1,o1);
   cout << "\n\n*Opcion 1";
   SetBG(t2,o2);
   cout << "\n\n*Opcion 2";
   SetBG(t3,o3);
   cout << "\n\n*Opcion 3";
   SetBG(15,0);
 }while (tec(&o1,&o2,&o3,&y,&t1,&t2,&t3)!=13);

 switch (y)
 {
   case 1: system("cls");cout << "Ejecutando 1";
           break;
   case 2: system("cls");cout << "Ejecutando 2";
           break;
   case 3: system("cls");cout << "Ejecutando 3";
           break;
   default: break;

 }
 getch();
}
//Define la función que lee las teclas usadas por el usuario.
int tec(int *o1,int *o2,int *o3,int *y,int *t1,int *t2,int *t3)
{
   int s;
   s=getch();
   switch (s)
   {
     case char(72):  *y-=1;
                     break;
     case char(80):  *y+=1;
                     break;
     case char(13):  return 13;
                     break;
     default:  break;
   }
   switch (*y)
   {
     case 1: *o1=14;*o2=0;*o3=0;
             *t1=0;*t2=15;*t3=15;
             break;
     case 2: *o1=0;*o2=14;*o3=0;
             *t1=15;*t2=0;*t3=15;
             break;
     case 3: *o1=0;*o2=0;*o3=14;
             *t1=15;*t2=15;*t3=0;
             break;
     default:  break;
   }

   if (*y==0)
     *y+=1;
   if (*y>opmax)
     *y=*y-1;
}

void SetBG(int ForgC, int BackC)
{
 WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);;
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}

#8
Buenas compañeros, he estado rompiéndome la cabeza  :-X es un pequeño ejercicio pareciera muy simple pero al final fue mas de lo que pensé, supongan que tienen un conjunto (dado por el usuario) que consta de 1 hasta n(dato del usuario), la serie va aumentando de uno en uno, y cuando llega al tope de la serie a esta se le "eliminan" los últimos 2 elementos y se le aumenta uno al elemento anterior al tope de la serie así hasta que el primer numero llegue a ser el tope. les adjunto una imagen de ejemplo de como sería si el tope o conjunto fuera 5 ojalá me explique y puedan ayudarme.


 



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

using namespace std;

main ()
{
    int n,j=0,k=0,l=1;
    cout << "Ingresa el ultimo numero del conjunto: ";
    cin >> n;
    int a[n],o[n];

    for (int i=0;i<n;i++)
    {
        a[i]=i+1;
    }

    while (a[0]!=n+1)
    {
        for (k=0;k<l;k++)
        {
            if (a[k]==n)
            {
                cout << a[k];
                l-=2;
                a[k-1]+=1;
                a[k]=a[k-1];
            }
            else if (a[k]<n)
            {
                cout << a[k];
            }

        }

        if (l<n)
        {
            l++;
        }
        cout << endl;
    }

}


Como ven CASI logro hacerla pero me salen números de más.  :-\