|
Mostrar Temas
|
Páginas: [1]
|
1
|
Programación / Programación C/C++ / programa punteros c
|
en: 5 Marzo 2015, 22:01 pm
|
No se por que el programa se salta el segundo scanf. Ayuda plis #include <stdio.h> #include <stdlib.h>
struct D{ int dato,dato2; };
int main(){ struct D d; struct D *p=&d; printf("introduce dato: \n"); scanf("%d",&(*p).dato); printf("dato guardado con punto ((*D).dato) %d \n",(*p).dato); printf("introduce dato 2: \n"); scanf("vuelve a escribir un valor para dato(%d)\n",&p->dato2); printf("dato guardado por flecha(->) %d \n",p->dato2); system("PAUSE"); return 0; } GRACIAS.
|
|
|
2
|
Programación / Programación C/C++ / Cadenas a variables!! urgentee:(
|
en: 14 Septiembre 2014, 19:30 pm
|
alguien tiene idea de como hacer este ejercicio?? Escribir un algoritmo que lea en una línea (hasta que se pulse Return), mediante una cadena de caracteres, el nombre, la edad y el sexo de una persona y los almacene en tres variables distintas denominadas nombre, edad y sexo. Por ejemplo, para la entrada “Pepe 20 v” el contenido de nombre será “Pepe”, edad contendrá 20 y sexo ‘v’. tengo echo esto: #include<iostream>
#define Return='\n'
using namespace std;
typedef TCad [30];
typedef struct{ TCad nombre; unsigned edad; char sexo; }TPersona;
int main(){ TCad cad,cadaux; TPersona pers; char c; int i=0; cout<< "introducir en una linea nombre edad sexo: "; cin.get(c); while(c!=Return){ cad[i]=c; i++; cin.get(c); } //cin.getline(cad,30); //a partir de aqui no se que hacer....!!!!!!!!!!! //for(int j=0; j<i ;j++){ //while(cad[j]!='\n'){ //if(cad[j]!='\0'){ //} //} //} } llego a leer la cadena pero no se como separarla para meterlas en la variable TPersona.... alguna ideaa??Gracias.
|
|
|
3
|
Programación / Programación C/C++ / getline() !!!
|
en: 13 Septiembre 2014, 16:40 pm
|
HOLA, miren tengo un problema con esta programa en el getline() este al introducirle mas de un caracter me mete en un bucle he probado a introducirle un cin.ignore o un cin.get() pero nada sigue teniendo problemas el getline(), alguien que sepa su funcionamiento y me explique que le pasa, Gracias:) /*Se necesita un programa para gestión de una agencia matrimonial. Por cada cliente se almacenarán los siguientes datos: nombre, edad, sexo (M,F), aficiones (Lectura, Viajes, Deportes, Cine, Gastronomía, Ordenadores, JuegosDeRol, Modelismo,Perros). Una persona puede tener ninguna, uno o más aficiones. Implementar los subalgoritmos que permitan (definir previamente el tipo de datos adecuado para almacenar esta información): a) Introducir en la estructura los datos de una persona b) Buscar una persona (por el nombre) c) Dar de baja una persona (eliminar sus datos, se localiza por el nombre) d) Casar. Dado el nombre de una persona, se busca una afín a ella, se presentan por pantalla sus datos y se eliminan los dos de la base de datos. Una persona será afín a otra (a efectos de Casar) si coinciden todas sus aficiones.*/
#include<iostream> #include<string>
using namespace std;
typedef int listaficiones[3];
typedef struct{ string nombre; unsigned edad; char sexo; listaficiones aficiones; }cliente;
typedef cliente NClientes[100];
typedef struct { unsigned numero_de_clientes; NClientes NC; }TListaClientes;
void inicializar_registro(TListaClientes &); void menu(); void registrar(TListaClientes &); bool buscar(string , int&,TListaClientes); void mostrar(int , TListaClientes); bool casar(string , TListaClientes &); bool borrar(string, TListaClientes &); bool afic_iguales(int, int&, TListaClientes); void mosafi(int ,int,TListaClientes );
int main(){ TListaClientes lista; string n; char c='\n'; int nr; inicializar_registro(lista); menu(); while(c!='E'){ cin>>c; //toupper(c); switch(toupper(c)){ case 'A' : registrar(lista); cout<<"Persona registrada."<<endl; break; case 'B' : cout<<"Nombre buscado: "; getline(cin, n); buscar(n,nr,lista); mostrar(nr,lista); break; case 'C' : cout<<"Nombre del cliente que desea borrar: "; getline(cin, n); if (borrar(n,lista)){ cout<<endl<< "cliente borrardo."<<endl; } else cout<<"cliente no existe!!"<<endl; break; case 'D' : cout<<"Nombre del cliente que desea casar: "; getline(cin, n); if(casar(n,lista)) cout<<"operacion realizada"<<endl; else cout<<"afin no encontrado."; } } }
void inicializar_registro(TListaClientes &lis){ lis.numero_de_clientes=0; }
void menu(){ cout<<"A.Registrar persona." <<endl<<"B.Buscar persona por nombre." <<endl<<"C.Eliminar una persona." <<endl<<"D.Casar. Hay que dar un nombre." <<endl<<"E.Salir."<<endl;
} void registrar(TListaClientes &l){ int sexo; cout<<"Este es el registro numero"<<l.numero_de_clientes+1<<endl; cout<<"NOMBRE: "; getline(cin,l.NC[l.numero_de_clientes].nombre); //cin.ignore(); //cin.get(); cout<<"Sexo, 1.(masculino) 2.(femenino): "; cin>>sexo; if(sexo==1){ l.NC[l.numero_de_clientes].sexo='M'; } else l.NC[l.numero_de_clientes].sexo='F'; cout<<"Edad: "; cin>>l.NC[l.numero_de_clientes].edad; cout<<"Elige 3 aficiones: "<<endl<<" 1.Lectura "<<endl<<" 2.Viajes "<<endl<<" 3.Deportes "<<endl<<" 4.Cine "<<endl<<" 5.Gastronomía "<<endl<<" 6.Ordenadores "<<endl<<" 7.JuegosDeRol "<<endl<<" 8.Modelismo "<<endl<<" 9.Perros "<<endl; for(int j=0; j<3 ;j++){ cin>>l.NC[l.numero_de_clientes].aficiones[j]; } l.numero_de_clientes++;
} bool buscar(string nomb,int& i,TListaClientes lista){ bool a=false; for(int j=0;j<lista.numero_de_clientes;j++){ if(nomb==lista.NC[j].nombre){ a=true; i=j; } } return a; } void mostrar(int s,TListaClientes l){ cout<<endl<<"Nombre: "<<l.NC[s].nombre; cout<<endl<<"Sexo: "<<l.NC[s].sexo; cout<<endl<<"Edad: "<<l.NC[s].edad; cout<<endl<<"Aficiones: "<<endl; for(int i=0; i<3; i++){ mosafi(i,s,l); } } void mosafi(int af,int s,TListaClientes lista){ switch(lista.NC[s].aficiones[af]){ case 1: cout<<"Lectura"<<endl; break; case 2: cout<<"Viajes"<<endl; break; case 3: cout<<"Deportes"<<endl; break; case 4: cout<<"Cine"<<endl; break; case 5: cout<<"Gastronomía"<<endl; break; case 6: cout<<"Ordenadores"<<endl; break; case 7: cout<<"JuegosDeRol"<<endl; break; case 8: cout<<"Modelismo"<<endl; break; case 9: cout<<"Perros"<<endl; } } bool borrar(string n,TListaClientes &l){ int i; bool a; a=buscar(n,i,l); if(a){ for(int j=i; j<l.numero_de_clientes ; j++){ l.NC[j]=l.NC[j+1]; } l.numero_de_clientes--; } return a; } bool casar(string n,TListaClientes &lista){ bool a,b; int i,j,parej;
a=buscar(n,i,lista); if (a){ a=false; for(j=0; j<lista.numero_de_clientes || a==false ; j++){ if (lista.NC[j].nombre!=n){ if(afic_iguales(i,j,lista)) parej=j;a=true ; } } } return a; } bool afic_iguales(int i, int &j, TListaClientes l){ bool b=true; for(int k=0; k<3 ;k++){ for(int y=0; y<3 && b==true; y++){ if(l.NC[i].aficiones[k]!=l.NC[j].aficiones[y]) { b=false; } } } return b; }
|
|
|
4
|
Programación / Programación C/C++ / fallo al introducir datos!!
|
en: 20 Agosto 2014, 00:26 am
|
Hola tengo un problemiya al leer los datos, pongo el nombre y se acaba el programa porque pasa esto?? y otra cosa, el getline es como se introduce una cadena en el string?? GRACIASSS:) /*3-Una farmacia desea almacenar sus productos en una estructura. De cada producto hay que almacenar la siguiente información: código, nombre, descripción (cadena de caracteres), laboratorio, proveedor, precio y fecha de caducidad. Diseñar la estructura de datos y un procedimiento que permita introducir los datos de un medicamento en esa estructura.*/
#include <iostream>
using namespace std;
typedef struct{
unsigned codigo; char nombre; string descripcion; char laboratorio; char proveedor; unsigned precio; unsigned fechacaducidad;
}producto;
typedef producto P[20];
int main(){ P p; cout<<"introduce el producto: "<<endl; cout<<"NOMBRE: "; cin>>p[0].nombre; cout<<endl<<"CODIGO: "; cin>>p[0].codigo; cout<<endl<<"PRECIO: "; cin>>p[0].precio; cout<<endl<<"DESCRIPCION: "; getline(cin,p[0].descripcion); cout<<endl<<"LABORATORIO: "; cin>>p[0].laboratorio; cout<<endl<<"PROVEEDOR: "; cin>>p[0].proveedor; cout<<endl<<"FECHA DE CADUCIDAD(INTRODUCIR DIAMESAÑO): "; cin>>p[0].fechacaducidad;
}
|
|
|
5
|
Programación / Programación C/C++ / Devolver el menor de un array
|
en: 10 Agosto 2014, 13:55 pm
|
El programa me compila perfectamente, pero al introducirle los números se para no hace nada y no encuentro el error, podrían ayudarme por favor:( Hacer un subalgoritmo que reciba un array de N números enteros y devuelva el valor mínimo de todos. #include <iostream> using namespace std;
const unsigned MAX=20; //el array va de 0 a 19 k son los 20 cuadraditos
typedef int nument[MAX];
int minimo(nument);
int main(){ //habia que inicalizar el array?¿ nument num; int nu; cout<<" Cuentos numero vas a introducir: "; cin>>nu; cout<<"introduce una secuencia de numeros enteros: ";
for(int i=0;i<nu;i++){ cin>>num[i]; } num[nu]=' '; cout<<"El numero mas pequeño es "<<minimo(num)<<endl;
return 0; }
int minimo(nument Array){ int aux1,aux2; for(int i=0; i<MAX-1; i++){ while(Array[i+1]!=' '){ if(Array[i]>=Array[i+1]){ aux1=Array[i]; aux2=Array[i+1]; Array[i+1]=aux1; Array[i]=aux2; } } } return aux2; }
|
|
|
6
|
Programación / Programación C/C++ / Multiplicacion de matrices Anxk y Bkxm
|
en: 7 Agosto 2014, 14:40 pm
|
Tengo un pequeño problema al almacenar la matriz o al calcular el resultado en el subalgoritmo MulMatrizAB(...), podrian ayudarme ha encontrar el problema?? Graciass El enunciado decia lo siguiente: Hacer un subalgoritmo que calcule el producto de dos matrices ANxK x B KxM, y lo almacene en una matriz CNxM. Aqui les dejo mi codigo: #include<iostream>
using namespace std;
const int N=2; const int M=3; const int K=2;
typedef int MatrizA[N][K]; typedef int MatrizB[K][M]; typedef int MatrizC[N][M];
void mostarResul(MatrizC ); void MulMatrizAB(MatrizA ,MatrizB ,MatrizC &);
int main(){ MatrizA A; MatrizB B; MatrizC C;
cout<<"Introduce una matriz A 2x2, por filas " ; for(int i=0;i<N;i++){ for(int j=0;j<K; j++){ cin>>A[i][j]; } } cout<<"introduce una matriz B 2x3, por filas " ; for(int i=0;i<K;i++){ for(int j=0;j<M; j++){ cin>>B[i][j]; C[i][j]=0; } } MulMatrizAB(A,B,C); mostarResul(C); } void MulMatrizAB(MatrizA a,MatrizB b,MatrizC &c){ int z=0; for(int i=0 ; i<N ; i++){ for(int j=0 ; j<M ; j++){ for(int h=0 ; h<K ; h++){ z=(a[i][h]*b[h][j])+z; if(h==1){ c[j][i]=z; z=0; } } } } } void mostarResul(MatrizC c){ for(int i=0; i<N ; i++){ for(int j=0; j<M ;j++){ cout<<c[i][j]<<" "; } cout<<endl; } }
|
|
|
7
|
Programación / Programación C/C++ / TAB CLista de template
|
en: 10 Junio 2014, 14:02 pm
|
Buenas el problema que tengo es que no se como usar el template en el cpp del hpp en este programita: #include <iostream> #include <string> #include "TLista.hpp" using namespace std; using namespace bblLista;
int main() { char tipo; CLista<tipo> a; unsigned nnodos; char car; unsigned num;
cout<<"MENU:"<<endl<<"1.INSERTAR NODOS"<<endl<<"2.ELIMINAR NODO"<<endl<<"3.ESCRIBIR LISTA"<<endl<<"4.BORRAR LISTA"<<endl; cin>>num; switch(num){ case 1: cout<<"Cuantos nodos desea insertar? "; cin>>nnodos; for(unsigned i=0;i<=nnodos; i++){ cout<<"Introduce el caracter: "; cin>>car; insertar(a,car); } break; case 2: cout<<"Escriba el caracter del nodo que desea eliminar: "; cin>>car; eliminar(a,car); break; case 3: consultarlista(a); break; case 4: borrarlista(a); break; }
} el CLista.hpp #ifndef _TLISTA_HPP_ #define _TLISTA_HPP_
#include <iostream> #include <cstdlib>
using namespace std;
namespace bblLista{ const unsigned int MAX_LISTA = 100; // Máximo tamaño de la lista
template <typename tipo> class CLista{ public: CLista(); void insertar(CLista &lista, const char car); void eliminar(CLista &lista,const char car); void consultarlista(CLista &lista); void borrarlista(CLista &lista); private:
struct TpNodo{ tipo car; TpNodo *sig; }; typedef TpNodo *puntalista; puntalista lista; unsigned longitud; //metodos pribados void insertaralprincipio(CLista &lista, const char car); void insertaralfinal(CLista &lista, const char car); }; // Fin de CLista } // Fin de bblLista
#endif y aqui es donde tengo el problemaa: #include "CLista.hpp" #include <iostream> #include <cstdlib> using namespace std; using namespace bblLista; template <typename tipo> CLista<tipo>::CLista(): longitud(0) {};
template <typename tipo> void CLista<tipo>::insertaralprincipio(CLista lista, const tipo car){ TpNodo pun;//puntero auxiliar
pun=new TpNodo; pun->car=car; pun->sig=lista;//recuerda que esetamos insertando al principio lista=pun;//lista señalaba a otro nodoya creado. }
template <typename tipo> void CLista<tipo>::insertaralfinal(CLista &lista, const tipo car){ TpNodo pun; pun=lista; while(pun->sig != NULL){ pun=pun->sig; } pun->sig=new TpNodo; pun=pun->sig; pun->car=car; pun->sig=NULL;
}
template <typename tipo> void CLista<tipo>::insertar(CLista &lista, const tipo car){ if(lista !=NULL){ insertaralfinal(lista,car); } else insertaralprincipio(lista,car); ++longitud; } void CLista<tipo>::eliminar(CLista &lista,const tipo car){ TpNodo pun,aux; pun=lista; while(pun->car!=car || pun->sig !=NULL){ aux=pun; pun=pun->sig; } if(pun->sig==NULL){ aux->sig=NULL; delete pun; } else { aux->sig=pun->sig; delete pun; } --longitud; }
template <typename tipo> void CLista<tipo>::consultarlista(CLista &lista){ TpNodo pun; pun=lista; for(unsigned i=0; i<= longitud; i++){ cin<<pun->car; pun=pun->sig; } }
template <typename tipo> void CLista<tipo>::borrarlista(CLista &lista){ TpNodo aux; while(lista !=NULL){ aux=lista; lista=lista->sig; delete aux; } }
|
|
|
8
|
Programación / Programación C/C++ / TAB de OPERACIONES CON RACIONALES
|
en: 9 Junio 2014, 15:45 pm
|
#include<iostream> #include<fstream> #include<string> #include "CRacional.hpp"
using namespace std; using namespace racionales; void menu(){ cout<<"1.INSERTAR RACIONALES"<<endl; cout<<"2.CONSULTAR EL VALOR DEL NUMERADOR"<<endl; cout<<"3.CONSULTAR EL VALOR DEL DENOMINADOR"<<endl; cout<<"4.MOVER LOS RACIONALES AL FICHERO"<<endl; cout<<"5.SUMAR "<<endl; cout<<"6.RESTAR "<<endl; cout<<"7.MULTIPLICAR"<<endl; cout<<"8.DIVIDIR "<<endl; cout<<"10.SALIR"<<endl; cout<<"que desea hacer?"<<endl;
}; int main(){
CRacional rr1,rr2,c;
int e,d; int num1,num2; string nombrecarpeta; ofstream sal; int f; menu(); while(f!=10){ cin>>f; switch(f){ case 1: cout<<"Inserte el numerador : "; cin>>e; cout<<endl<<"Inserte el denominador : "; cin>>d; while(d==0){ cin.ignore(); cout<<"no vale 0, inserte otro numero:"; cin>>d; } rr1.leerracionales(e,d); cout<<"ahora el segundo racional; "<<endl; cout<<"Inserte el numerador : "; cin>>e; cout<<endl<<"Inserte el denominador : "; cin>>d; while(d==0){ cin.ignore(); cout<<"no vale 0, inserte otro numero:"; cin>>d; } rr2.leerracionales(e,d); menu(); break; case 2:
cout<<"Racional 1: "<< rr1.obtnumerador();
cout<<endl<<"Racional 2: "<< rr2.obtnumerador();
cout<<endl; break; case 3:
cout<<"Racional 1: "<<rr1.obtdenominador();
cout<<endl<<"Racional 2: "<<rr2.obtdenominador();
cout<<endl;
break; case 4: cout<<"nombre de la carpeta donde desea guardar el racional 1 y 2: "; cin>> nombrecarpeta; sal.open(nombrecarpeta.c_str()); if(sal.fail()){ cout<<"error fichero"; } else { sal<<"racional 1: "; rr1.volcar_a_fichero(sal); sal<<"racional 2: "; rr2.volcar_a_fichero(sal); } sal.close(); break;
case 5: c.suma(rr1,rr2); c.mostrar(); cout<<"nombre de la carpeta donde desea guardar el racional: "; cin>> nombrecarpeta; sal.open(nombrecarpeta.c_str()); if(sal.fail()){ cout<<"error fichero"; } else { sal<<"suma: "; c.volcar_a_fichero(sal); } sal.close(); break; case 6: c.resta(rr1,rr2); cout<<c.obtnumerador() << "/"<< c.obtdenominador()<<endl; cout<<"nombre de la carpeta donde desea guardar el racional: "; cin>> nombrecarpeta; sal.open(nombrecarpeta.c_str()); if(sal.fail()){ cout<<"error fichero"; } else { sal<<"resta: "; c.volcar_a_fichero(sal); } sal.close(); break; case 7: c.multiplicar(rr1,rr2); cout<<c.obtnumerador() << "/"<< c.obtdenominador()<<endl; cout<<"nombre de la carpeta donde desea guardar el racional: "; cin>> nombrecarpeta; sal.open(nombrecarpeta.c_str()); if(sal.fail()){ cout<<"error fichero"; } else { sal<<"multiplicacion: "; c.volcar_a_fichero(sal); } sal.close(); break; case 8: c.dividir(rr1,rr2); cout<<c.obtnumerador() << "/"<< c.obtdenominador()<<endl; cout<<"nombre de la carpeta donde desea guardar el racional: "; cin>> nombrecarpeta; sal.open(nombrecarpeta.c_str()); if(sal.fail()){ cout<<"error fichero"; } else { sal<<"division: "; c.volcar_a_fichero(sal); } sal.close(); break;
} cin.ignore(); } }
c es el racional el cual guarda el resultado pero este no se guarda; #ifndef __CRACIONAL__HPP__ #define __CRACIONAL__HPP__
#include <fstream> #include <string>
using namespace std;
namespace racionales{ //constantes class CRacional{ public: //costructor por defecto CRacional(); //costructor de copia CRacional (const CRacional &otroracional); //costructor extendido,leer CRacional (int &e, int &d); //destructor ~CRacional(); //leer void leerracionales(int &e,int &d); //consultar denominador y numerador int obtnumerador(); int obtdenominador(); void mostrar(); //escribir en pantalla void volcar_a_fichero(ofstream &sal); //suma CRacional suma(CRacional rr1,CRacional rr2); //resta CRacional resta(CRacional rr1,CRacional rr2); //multiplicacion CRacional multiplicar(CRacional rr1,CRacional rr2); //dividir CRacional dividir(CRacional rr1,CRacional rr2);
private:
int a; int b; void mismodenominador(CRacional &ra,CRacional &ra2); void simplificar(); int mcd (int a, int b); }; } #endif
#include <iostream> #include "CRacional.hpp" #include<fstream> using namespace std;
namespace racionales{ //constructores CRacional::CRacional(): a(0),b(0){} CRacional::CRacional (const CRacional &otroracional): a(otroracional.a),b(otroracional.b){}; CRacional::CRacional (int &a, int &b): a(a),b(b){}; CRacional::~CRacional(){}; //metodos void CRacional::leerracionales(int &e,int &d){ a=e; b=d; } int CRacional::obtnumerador(){ return a; } int CRacional::obtdenominador(){ return b; } void CRacional::mostrar(){ cout<<a<<"/"<<b<<endl; } void CRacional::volcar_a_fichero(ofstream &sal){ sal<<a<<"/"<<b<<endl; } void CRacional::mismodenominador(CRacional &ra,CRacional &ra2){ if(ra.b!=ra2.b){ CRacional aux1=ra,aux2=ra2; aux1.b=aux1.b*aux2.b; aux2.b=aux1.b; aux1.a=ra.a*ra2.b; aux2.a=ra.b*ra2.a; ra=aux1; ra2=aux2; } } int CRacional::mcd (int a, int b){ int resul=1; if(a<0){ a=a*(-1); } if(b<0){ b=b*(-1); } if(a<b){ int c; c=a; a=b; b=c; } for(int i=2;i<=b;i++){ if((a%i)==0 && (b%i)==0){ resul=i; } } return resul; } void CRacional::simplificar(){ CRacional rresul; int mccd=mcd(a,b); a=a/mccd; b=b/mccd; } CRacional CRacional::suma(CRacional rr1,CRacional rr2){ CRacional c; mismodenominador(rr1,rr2); c.a=rr1.a+rr2.a; c.b=rr1.b; c.simplificar(); cout<<"muesta desde suma: "<<c.a<<"/"<<c.b<<endl; //sale bn return c; } CRacional CRacional::resta(CRacional rr1,CRacional rr2){ CRacional c; mismodenominador(rr1,rr2); c.a=rr1.a-rr2.a; c.b=rr1.b; c.simplificar(); return c; } CRacional CRacional::multiplicar(CRacional rr1,CRacional rr2){ CRacional c; c.a=rr1.a*rr2.a; c.b=rr1.b*rr2.b; c.simplificar(); return c; } CRacional CRacional::dividir(CRacional rr1,CRacional rr2){ CRacional c; c.a=rr1.b*rr2.a; c.b=rr1.a*rr2.b; c.simplificar(); return c; }
} me podrían decir que problema hay en c.mostrar??
|
|
|
9
|
Programación / Programación C/C++ / CONTENEDORES STL vector
|
en: 7 Junio 2014, 01:43 am
|
Hola tengo una duda sobre como acceder a el nombre de esta estructura: typedef struct habitacion{ string nombre; }; typedef vector<habitacion> habitaciones; vector<habitaciones> planta;
Esta declarado dentro de una clase privada, pero al intentar incluir un nombre.. planta [hab][pla]=nombre; me sale un error, como puedo entonces acceder a nombre?
|
|
|
|
|
|
|