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

#141
Yo lo haria asi:


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

using namespace std;

/*
Capicupa (palindromo) ?
*/

const char* r_bool(bool b);
bool es_capicua(int x);
void print_capicua_rango(int a, int b);


int main(void)
{
cout << r_bool(es_capicua(10000)) << endl; // false
cout << r_bool(es_capicua(10001)) << endl; // true
cout << r_bool(es_capicua(10501)) << endl; // true
cout << r_bool(es_capicua(807)) << endl; // false
cout << r_bool(es_capicua(808)) << endl; // true

print_capicua_rango(19,100);

getchar();
}

void print_capicua_rango(int a, int b){
int i,count=0;
for (i=a; i<b; i++){
if (es_capicua(i)){
cout << i << endl;
count++;
}
}
cout << "El numero de terminos capicua es " << count;
}

bool es_capicua(int x){
char buffer [10];
int i;
bool exito = true;

itoa(x,buffer,10);

int len = strlen(buffer);
for (i = 0; i<(int)len/2 && exito; i++)
exito = buffer[i]==buffer[len-1-i];

return exito;
}

const char* r_bool(bool b){
 return (b ? "true" : "false");
}


#142
class_openGL te dio la respuesta, debes hacer algo asi:

Código (cpp) [Seleccionar]

#include <iostream>
#include <string>
using namespace std;

class propietario
{
 private:
           string nombre, domicilio, curp;
           int propiedades, telefono, edad;

 public:

void captura_nombre(string x){
   nombre=x;}

string imprimir_nombre(){
return nombre;}

void captura_edad(int x){
edad=x;}

int imprimir_edad(){
return(edad);}

void captura_telefono(int x){
telefono=x;}

int imprimir_telefono(){
return(telefono);}

void captura_propiedades(int x){
propiedades=x;}

int imprimir_propiedades(){
return(propiedades);}

void captura_domicilio(string x){
domicilio=x;}

string imprimir_domicilio(){
return(domicilio);}

void captura_curp(string x){
curp=x;}

string imprimir_curp(){
   return(curp);}
};

void reg_pro(propietario *registro){

   string nom, domi, curp;
   int edad, propi, tel;

   cout<<"Ingrese el nombre: ";
   cin>> nom;
   while(getchar()!='\n');
   cout<<"Ingrese edad: ";
   cin>> edad;
   while(getchar()!='\n');
   cout<<"Ingrese domicilio: ";
   cin>> domi;
   while(getchar()!='\n');
   cout<<"Ingrese telefono: ";
   cin>> tel;
   while(getchar()!='\n');
   cout<<"Ingrese curp: ";
   cin>> curp;
   while(getchar()!='\n');
   cout<<"Ingrese numero de propiedades: ";
   cin>>propi;
   while(getchar()!='\n');

   registro->captura_nombre(nom);
   registro->captura_edad(edad);
   registro->captura_domicilio(domi);
   registro->captura_telefono(tel);
   registro->captura_curp(curp);
   registro->captura_propiedades(propi);


}

void con_pro(propietario registro){
int x;
cout<<"Seleccione el campo que desea consultar:" <<endl;
cout<<"1.-Nombre\n2.-Edad\n3.-Domicilio\n4.-Telefono\n5.-Curp\n6.-Propiedades\n";
cin>> x;
switch (x){
case 1:
   cout<<"Nombre: ";
   cout<<registro.imprimir_nombre();
   break;
case 2:
   cout<<"Edad: "<<registro.imprimir_edad();
   break;
case 3:
   cout<<"Domicilio: "<<registro.imprimir_domicilio();
   break;
case 4:
   cout<<"Telefono: "<<registro.imprimir_domicilio();
   break;
case 5:
   cout<<"Curp: "<<registro.imprimir_curp();
   break;
case 6:
   cout<<"Propiedades: "<<registro.imprimir_propiedades();
   break;
default:
   break;
}

}

int main()
   {
   propietario registro;
   int x;

       cout << "Usted desea acceder a:"  << endl  << endl
            << "1-Propietario"  << endl
    << "2-Difunto"  << endl
    << "3-Propiedades"  << endl
    << "4-Salir";
       cin >> x;

   switch(x){

       case 1:

           reg_pro(&registro);
           con_pro(registro);
           break;
       }
}



Al pasar un puntero, usas otros operadores como -> con estructuras excepto quieras hacer algo asi:  (*registro).captura_nombre(nom);

Te cambié un poco el uso de cout en el main() para que veas que puede quedar un poco mas legible si lo usas multilinea

PD: fijate que es necesario limpiar el buffer de teclado.

#143
La direccion  que ves como del puntero es la direccion como dices del primer elemento del array.

El puntero podria estar en si en la pila, o en otro lado pero tu ves la dirección a donde apunta el contenido.   Supongo la dirección real del puntero no es algo que le concierna al programador y por eso no se provee.



PD: habia hecho una edición pero veo se perdió y vuelvo a hacerla.
#144
Programación C/C++ / Re: Base de datos c++
17 Abril 2016, 23:58 PM
.
#145
Programación C/C++ / Re: variables con &
17 Abril 2016, 20:37 PM
No veo la razon de no re-abrir temas....... pero ya dirá el moderador presente

Por otro lado...... gracias...... no sabia lo que me comentas, siempre aprendiendo algo nuevo con tu ayuda.
#146
Para empezar, no es muy ordenado mezclar funciones de sistema, entrada-salida con manejo de cadenas

Cada cosa en su lugar (su propia libreria)
#147
Programación C/C++ / Re: variables con &
17 Abril 2016, 20:15 PM
Buen consejo el que te dieron... y somos dos que debemos leer, sin embargo te aporto algo:


#include <stdio.h>


int main(void)
{
int a = 8;

int b= (int) &a;  // b = direccion de memoria de a
int *c= (int*) a; // c = apuntador a la variable a

printf("La direccion de memoria de a es %d\n",&a);
printf("b = %d\n",b);
printf("c = %d\n",c); // 8

a = 10; // cambia
printf("c = %d\n",c); // 10 <-- cambia
}
}


Ya ves, & te da la direccion de memoria de una variable y * te permite declarar una variable como tipo puntero (apuntador)

Lo que escribiste no tiene sentido........ pero si miras el ejemplo veras varias cosas como que cuando preguntas por c te da el contenido de a, eso hacen los apuntadores!

Otro ejemplo:


#include <stdio.h>

int main(void)
{
int a[2] = {8,10};
int *p= (int*) a;

printf("p = %d\n",p[0]);   // 8

*p++;  // <-- movi el puntero
printf("p = %d\n",p[0]);   // 10
}
#148
Mil gracias Ivan
#149
Gracias Ivan, me imaginaba venia por punteros dobles el tema.... estoy probando y no me compila:

int main(void)
{
// En este caso habría 2 punteros: uno en el heap (*p), y el otro en la pila (p)

int** p = (int**)malloc(sizeof(int*)); 
*p = (int*)malloc(sizeof(int));  // en la pila
**p = 5;
}


12   19   C:\C++\heap_stack_ptrs.c   [Warning] incompatible implicit declaration of built-in function 'malloc'


Gracias desde ya....... lo miro y lo veo bien pero no quiere compilarse
#150
En StackOverflow tambien dicen eso.... "es una  tipo (de variable) mas"

"Pointers are just a type of variable, so they can be wherever you want them to be (on the heap if you malloc() them, on the stack if they're local variables, or in the data section if they're global)."

Sin embargo, no entiendo bien el tema de malloc() aqui: ¿ que tiene que ver si se reserva memoria para el contenido con donde queda el puntero en memoria ? (mas alla del caso particular de un puntero nulo)