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

#31
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!  :(
#32
¿Quieres que pida el número por pantalla?  :huh: si sí, CREO que buscas esto... :P
Código (cpp) [Seleccionar]

#include<iostream>
using namespace std;

int suma(int x)
{
  if(x==1)
    return 1;

  return x+suma(x-1);
}

int main()
{

  int x;
  cout << "Ingresa un numero: ";
  cin>> x;

  cout<<suma(x)<<endl;

  cin.get();
  cin.get();

  return 0;
}

#33
Se me hace más fácil esto  ;D
Código (cpp) [Seleccionar]

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

using namespace std;

int main()
{
  char datos[21];
  int x;

  do{
    cout << "Ingresa un numero: ";
    cin.getline(datos,20);
    x=atoi(datos);
    if (x==0)
      cout << "\nSolo ingresa numeros!!!\n\n";
  }while(x==0);

  cout <<"El numero que ingresaste es: "<< x;
  return 0;
}

#34
 ;D

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

using namespace std;

int main()
{
    int c=1, t=0, r=0, res=0;

    cout<<"ingrese la tabla que desee resolver\n";
    cin>>t;

    while (c<=10)
    {

    r=t*c;

    cout<<t<<"*"<<c<<"\n";
    cin>>res;

    c++;
    if(res==r) //Pusiste un punto y coma que no era
    cout<<"correcto\n";

     else
     cout<<"falso\n";
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}//Te faltaba cerrar la llave de tu funcion...
#35
Creo esto es lo que quieres, busca un buen libro de programación "Aprendiendo c en 21 días" tal ves te ayude un poco.
Código (cpp) [Seleccionar]

#include <iostream>

//Esto es solo si tu compilador lo necesita
using namespace std;

main()
{
  //Variables a utilizar
  int n, res, cont=0;
  char S;
  do
  {
    cout << "Ingrese la tabla que quiere evaluar: ";
    //Ingresas la tabla
    cin >> n;
   
    //Crea un ciclo de 1 a 10 que son las veces que se va
    //a repetir y de igual manera el numero por el cual se
    //va a multiplicar.
    for (int i=1;i<=10;i++)
    {
      //Muestra por pantalla la opreacion
      cout << n <<" * "<< i << "= ";
      //Introduces el resultado
      cin >> res;
      //Evalua el resultado, si es igual al de la operacion
      //se le aumenta al contador +1
      if (res==n*i)
      {
        cont++;
      }
    }
    //Imprime el resultado del contador
    cout << "\nTu resultado fue: "<< cont;
    //Pide al usuario una letra para continuar o no
    cout << "\n\nDesea continuar? S/N: ";
    //Ingresa la letra
    cin >>S;
    //evalua la letra para ver si repite el ciclo do-while
  }while (S=='S'||S=='s');
  return 0;
}
#36
Mira... esta es una idea :) falta depurarlo un poco pero fue lo mejor que pude hacer en un rato, saludos!
Código (cpp) [Seleccionar]

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

using namespace std;

void gotoxy(int x,int y);

#define MAX 40

class Grafica
{
public:

  Grafica(int y, int x)
  {
    MAX_X=x;
    MAX_Y=y;
  }

  void tabla()
  {
    cout << "\tGrafica" <<endl<<endl;
    for(int y=MAX_Y;y>=0;y--)
    {
      if(y<10)
        cout << " ";

      cout << y << "-" << char(179);
      if(y>0)
      {
        cout << endl;
      }

      if(y==0)
      {
        for(int x=0;x<MAX_X;x++)
        {
          cout << char (196)<< char(179);
        }
      }
    }
  }

  void llenar()
  {
    int j=0,x=5,y=2,cont=0;

    while(cont<MAX_X*2)
    {
      for(int i=MAX_Y;i>0;i--)
      {
        if(d[j]==i)
        {
          gotoxy(x,y++);
          cout << char (177)<< endl;
          d[j]--;
        }

        else {cout << endl; y++;}
      }

      j++; x++; cont+=2;

      if(j<MAX_Y)
      {
        x=5+cont; y=2;
      }
    }
  }

   void in_datos()
  {
    for (int i=0;i<MAX_X;i++)
    {
      cout << "Ingresa los datos de x"<<i+1<< ": ";
      cin >> d[i];
    }
  }

private:
  int MAX_X,MAX_Y;
  int d[MAX];
};

COORD coord={0,0};

void gotoxy(int x,int y)
{
    coord.X=x;
    coord.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

main ()
{
  int x,y;

  cout << "Ingresa la cantidad maxima en Y: ";
  cin >> y;
  cout << "Ingresa cuantos datos hay en X: ";
  cin >> x;

  Grafica G1(y,x);

  G1.in_datos();
  system("cls");

  G1.tabla();
  G1.llenar();

  gotoxy(x,y);
  cout << endl<<endl<<endl;

  getch();
  return 0;
}

#37
Haz intentado poner la variable "c" como tipo static int ? por que como sales de la función de tu menú SUPONGO que muere la variable. Inténtalo, si no publica tu código.

Código (cpp) [Seleccionar]
static int c=0;

Y tu código yo lo pondría así:

Código (cpp) [Seleccionar]

switch(num_op)
{
case 1:
         printf("Consulta: %d\n\n", c);
 printf("Ingrese el nombre del lugar de origen del recorrido:\n");
         scanf("%s", &s_origen); printf("\n");
         printf("Ingrese el nombre del lugar de destino del recorrido:\n");
         scanf("%s", &s_destino); printf("\n");
         ValiHora();
         ValiPresupuesto();
         break;

 default: break;
}            
#38
Cita de: ivancea96 en  5 Abril 2015, 21:55 PM
A lo mejor te interesa que menu() retorne la opción elegida, para que no haya sido en vano xD

También puedes pasarle a meno un arreglo de opciones, para no tener que andar tocando la función en sí.

https://github.com/ivancea/Varios/blob/master/C%2B%2B/selector.h
Ahí un ejemplo de una clase en C++, sin usar windows.h.

No se si te entendí bien con lo de la función menu(), pero si retoma la opción o bueno al regresar si se queda seleccionada, solo quería saber si el código que hice se puede simplificar x).
Veré si puedo hacer lo de los arreglos y gracias aunque aún no se programar en C++  :xD
#39
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);
}

#40
Programación C/C++ / Re:
5 Abril 2015, 17:34 PM
Cita de: ivancea96 en  5 Abril 2015, 14:22 PM
If(grade=='a' || grade=='A')
    ++aCount
else if(.....)

Exacto,  debes hacerlo así, sólo que no te recomiendo ese libro para empezar de nuevo a programar, en lo particular pienso que su forma de enseñar es muy enredada  :xD busca "Aprendiendo C en 21 días" te cambiará la vida  ::) o si es que tienes la posibilidad de comprar "PROGRAMACIÓN EN C /C++ JAVA Y UML." De Luis Joyanes Aguilar / Ignacio Zahonero Martinez igual es muy bueno para los demás lenguajes y reafirmar el C.
Saludos!   ;D