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

#1
Programación C/C++ / Re: Ayuda para programa en c++
22 Septiembre 2011, 20:42 PM
Tu problema es que actualizas el valor de la variable b tantas veces como notas quieres ingresar, perdiendo todas las anteriores. Deberías modificarlo de la siguiente forma:

cout << "Ingrese Numero: ";
cin >> b;
maximo = b;
for (x=1;x<a;x++){
  cout << "Ingrese Numero:"<<x<<"   ";
  cin >> b;
  if(b>maximo){
     maximo = b;
}
#2
He seguido con los demás apartados y creo que tengo mal los últimos registros. A ver si consigo modificarlo...

EDIT: Aqui os dejo el código modificado, a ver si podéis echarme un cable, que tengo el miércoles el examen y estoy acojonao XDD

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
using namespace std;

const unsigned MAX_TIPOS = 4;
enum TInformacion{tecnica,economica,humanistica,ocio};
const unsigned AUTORES = 10;
typedef string TAutores[AUTORES];
struct TNumAutores{
  TAutores a;
  unsigned num;
};
struct TEjemplar{
  unsigned volumen, num_art;
  string fecha_p;
  TNumAutores num_a;
};
const unsigned MAX_EJEMPLARES = 100;
typedef TEjemplar TEjemplares[MAX_EJEMPLARES];
struct TNumEjemplares{
  TEjemplares e;
  unsigned num;
};
struct TRevista{
  string nombre, ISSN, editorial;
  TNumEjemplares ejemplares;
};
const unsigned MAX_UNIDADES = 500;
typedef TRevista TUnidades[MAX_UNIDADES];
struct TNumUnidades{
  TUnidades n;
  unsigned num;
};
typedef TNumUnidades TArray[MAX_TIPOS];
struct THemeroteca{
  TInformacion info;
  TArray a;
  unsigned num;
};


Aunque no me sirve de mucho el campo info en THemeroteca, lo pongo para convertirlo a número e introducirlo en la correspondiente celda del array.

Gracias!!
#3
Programación C/C++ / Ayuda con un ejercicio en C++
10 Septiembre 2011, 16:45 PM
Hola, os pongo el enunciado:
CitarSe pretende informatizar la gestión de una hemeroteca. Esta cuenta con cuatro tipos de revistas según la información que contiene: técnica, económica, humanística y ocio. Se calcula que de cada tipo de revista la hemeroteca tendrá un máximo de 500 unidades. El tipo de revista deberá ser definido como un enumerado. De cada revista se ha de almacenar la siguiente información: Nombre de la revista, ISSN (cadena de al menos 10 caracteres) y editorial.
Por otra parte, de cada revista también se desea mantener información de todos los ejemplares que de ella están almacenadas en la hemeroteca. Las características de cada ejemplar son: volumen, fecha de publicación, número de artículos y nombres de los autores de la revista (como máximo habrá 10). Suponemos que cada revista puede tener un máximo de 100 ejemplares. Se pide:
a) Define los tipos de datos TRevista, TEjemplar y THemeroteca. Usa tipos enumerados siempre que sea posible.
b) Implementa un subalgoritmo para inicializar la estructura de tipo THemeroteca.
c) Dados una revista y su tipo, implementa un subalgoritmo para darla de alta en la estructura. En caso de que no haya sitio libre en la estructura se dará el correspondiente error.
d) Dados un ejemplar de revista y el ISSN de la revista a la qu ecorresponde dicho ejemplar, implementa un subalgoritmo para dar de alta dicho ejemplar. En caso de no haber sitio libre en la estructura se dará el correspondiente error.
e) Implementa un subalgoritmo que, dados un tipo de revista y un mes y un año, devuelva el número de ejemplares almacenados de ese tipo de revista y cuya fecha de publicación es posterior a la fecha indicada por dicho mes y año.
f) Implementa un subalgoritmo que dado el ISSN de una revista muestre toda la información almacenada en la estructura relativa a dicha revista y sus ejemplares. En caso de no existir dicha revista, se dará el correspondiente mensaje de error.

Con este tipo de ejercicios siempre he tenido "problemas" con la definición de los tipos, ya que me cuesta un poco el definirlos.
He hecho el apartado a), pero como os acabo de decir, siempre me ha costado un poco este tipo de ejercicios y al no tener la solución del ejercico, estoy muy inseguro con la forma en la que lo he resuelto.
Me preguntaba si podríais echarle un vistazo e indicarme si algo está mal o darme algún consejo sobre la solución.

He de decir, que este ejercicio es algo antiguo y está diseñado para resolverlo a mano y en pseudocódigo, pero la asignatura este año se da en C++ y he modificado la solución acorde a lo que se ha visto en la asignatura (son muy muy parecidas).

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
using namespace std;

const unsigned MAX_TIPOS = 4;
enum TInformacion{tecnica,economica,humanistica,ocio};
const unsigned AUTORES = 10;
typedef string TAutores[AUTORES];
struct TNumAutores{
  TAutores a;
  unsigned num;
};
struct TEjemplar{
  unsigned volumen, num_art;
  string fecha_p;
  TNumAutores num_a;
};
const unsigned MAX_EJEMPLARES = 100;
typedef TEjemplar TEjemplares[MAX_EJEMPLARES];
struct TNumEjemplares{
  TEjemplares e;
  unsigned num;
};
struct TRevista{
  string nombre, ISSN, editorial;
  TNumEjemplares ejemplares;
};
const unsigned MAX_UNIDADES = 500;
typedef TRevista TUnidades[MAX_UNIDADES];
struct TNumUnidades{
  TUnidades n;
  unsigned num;
};
typedef TNumUnidades TArray[MAX_TIPOS];
struct TNumArray{
  TArray a;
  unsigned num;
};
struct THemeroteca{
  TInformacion info;
  TNumArray num;
};


Muchísimas gracias de antemano  :D
#4
Programación C/C++ / Re: Duda con ejercicio
24 Agosto 2011, 22:43 PM
Cita de: satu en 24 Agosto 2011, 21:23 PM
Hola

Ahora no puedo probar el código pero a simple vista te falta aquí

EDITO:
el fallo está en la función SUC, debes retornar
Código (cpp) [Seleccionar]
return (TPrueba)ord;

y también deberías introducir el nadador en la estructura una vez que lees los datos y no en otro case, es mi opinión

No se si habrá más cosas

Saludos

Muchísimas gracias. Creo que tienes razón, no sé por qué lo he puesto así... y lo que es peor, que no he visto un fallo tan tonto después de haber estado mirando varias veces el código.
Voy a hacer esa modificación y veré si funciona.
Muchas gracias!
#5
Programación C/C++ / Duda con ejercicio
24 Agosto 2011, 20:16 PM
Hola, me piden el siguiente ejercicio:
Diseña una estructura de datos (TNatacion) para almacenar los datos de un grupo de nadadores que se presentan a una competicion de natacion. De cada nadador (TNadador) es necesario almacenar su nombre, edad, prueba en la que participa (espalda,mariposa,croll,braza) (TPrueba) y tiempo (minutos y segundos). La estructura contendrá un máximo de 16 nadadores. Se pide:
a) Define los tipos de datos (TNatacion, TNadador, TPrueba y aquellos que consideres necesarios), asi como un procedimiento para inicializar la estructura.
b) Implementa una función que permita leer los datos de un nadador. A la hora de leer el tipo de competición en la que participa, el programa seguirá pidiendo este dato hasta que se introduzca un tipo de competición correcto.
c) Implementa un procedimiento para introducir los datos de un nadador dentro de la estructura. Controla la posibilidad de que se produzca un error por falta de espacio en la misma.
d) Implementa un procedimiento que busque si un determinado nadador (identificado por su nombre) está dentro de la competición. El procedimiento habrá de devolver si el nadador ha sido encontrado o no y en caso afirmativo la posición de la estructura donde se encuentra.
e) Implementa un procedimiento que muestre para todos los nadadores inscritos en la competición en una determinada prueba (espalda,braza...), la diferencia entre su tiempo y el tiempo medio de todos los nadadores en este tipo de prueba. Controla la posibilidad de que la estructura este vacia, o que no haya nadadores participantes en este tipo de prueba.

He implementado el siguiente código:
Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
using namespace std;

const unsigned MAX_NADADORES = 16;
enum TPrueba {espalda, mariposa, croll, braza};
struct TTiempo{
unsigned min, seg;
};
struct TNadador{
string nombre;
unsigned edad;
TPrueba prueba;
TTiempo tiempo;
};
typedef TNadador TArray[MAX_NADADORES];
struct TNatacion{
TArray datos;
unsigned num_nadadores;
};

char Menu();
void inicializarEstructura(TNatacion& n);
void leerNadador(TNadador& nadador);
void LeerPrueba(TPrueba& p);
void string_a_tipoprueba(const string& s, TPrueba& p, bool& ok);
string tipoprueba_a_string(const TPrueba& p);
TPrueba SUC(const TPrueba& p);
void introNadador(TNatacion& n, const TNadador nadador);
void buscarNadador(const TNatacion& n, const string& nombre, bool& encontrado, unsigned& pos);
void mostrarNadadores(const TNatacion& n);

int main() {
TNatacion n;
TNadador nadador;
bool salir = false, encontrado;
string nombre;
unsigned pos;
char op;

inicializarEstructura(n);
while(!salir){
op = Menu();
switch(op){
case 'A': leerNadador(nadador);
break;
case 'B': introNadador(n,nadador);
break;
case 'C': cout << "Introduzca nombre: ";
 getline(cin,nombre);
 buscarNadador(n,nombre,encontrado,pos);
 if(encontrado){
 cout << "El nadador " << n.datos[pos].nombre << " se encuentra en la posicion " << pos << endl;
 }else{
 cout << "El nadador " << nombre << " no se encuentra introducido en la estructura." << endl;
 }
break;
case 'D': mostrarNadadores(n);
break;
case 'X': salir = true;
break;
default: cout << "Opcion Incorrecta." << endl;
}
}

return 0;
}

char Menu(){
char op;

cout << "A: Leer datos de un nadador." << endl;
cout << "B: Implementar datos del nadador en la estructura." << endl;
cout << "C: Buscar nadador." << endl;
cout << "D: Mostrar nadadores." << endl;
cout << "X: Salir." << endl;
cout << endl;
cout << "Introduzca opcion: ";
cin >> op;
op = toupper(op);

return op;
}

void inicializarEstructura(TNatacion& n){
n.num_nadadores = 0;
}

void leerNadador(TNadador& nadador){
TPrueba p;

cout << "Introduzca nombre: ";
getline(cin,nadador.nombre,'\n');
cout << "Introduzca edad: ";
cin >> nadador.edad;
LeerPrueba(p);
nadador.prueba = p;
cout << "Introduzca tiempo (mm ss): ";
cin >> nadador.tiempo.min >> nadador.tiempo.seg;
}

void LeerPrueba(TPrueba& p){
string s;
bool ok;

cout << "Introduzca prueba: ";
getline(cin,s,'\n');
string_a_tipoprueba(s,p,ok);
while(!ok){
cout << "Prueba erronea." << endl;
cout << "Introduzca prueba: ";
string_a_tipoprueba(s,p,ok);
}

}

void string_a_tipoprueba(const string& s, TPrueba& p, bool& ok){
ok = false;
p = espalda;

while((p<braza)&&(!ok)){
if(s==tipoprueba_a_string(p)){
ok = true;
}else{
p = SUC(p);
}
}
ok = ((ok) || tipoprueba_a_string(p)==s);
}

string tipoprueba_a_string(const TPrueba& p){
string s;
switch(p){
case espalda: s = "espalda";
break;
case mariposa: s = "mariposa";
break;
case croll: s = "croll";
break;
case braza: s = "braza";
break;
}
return s;
}

TPrueba SUC(const TPrueba& p){
unsigned ord;

ord = int(p)+1;
return p;
}

void introNadador(TNatacion& n, const TNadador nadador){
if(n.num_nadadores>=MAX_NADADORES){
cout << "La estructura esta llena" << endl;
}else{
n.datos[n.num_nadadores] = nadador;
n.num_nadadores++;
}
}

void buscarNadador(const TNatacion& n, const string& nombre, bool& encontrado, unsigned& pos){
encontrado = false;

for(unsigned i=0;i<n.num_nadadores;i++){
if(n.datos[i].nombre == nombre){
pos = i;
encontrado = true;
break;
}
}
}

void mostrarNadadores(const TNatacion& n){
TPrueba p;
bool ok = false;

LeerPrueba(p);
for(unsigned i=0;i<n.num_nadadores;i++){
if(n.datos[i].prueba == p){
ok = false;
cout << "Nombre: " << n.datos[i].nombre << endl;
cout << "Tiempo: " << n.datos[i].tiempo.min << "' " << n.datos[i].tiempo.seg << "''" << endl;
}
}
if(n.num_nadadores==0){
cout << "La estructura esta vacia." << endl;
}else if(!ok){
cout << "No hay nadadores inscritos en esa prueba." << endl;
}
}


El problema es que no funciona correctamente. Sospecho que tiene que ver con la lectura de la prueba al leer un nadador, pero la verdad, es que no tengo ni idea de porque no va... ¿le podéis echar un vistazo al código?

Muchas gracias!!
#6
Programación C/C++ / Re: Duda con tipo string
23 Agosto 2011, 21:03 PM
Cita de: Tzhed en 23 Agosto 2011, 20:05 PM
Creo que poniendo NULL en la primera posición funcionaría.
scad[0] = '\0';

¿?

Gracias por la respuesta, pero probé eso y me imprimía por pantalla el cuadradito que representa al carácter nulo...  :-\

Cita de: Queta en 23 Agosto 2011, 20:09 PM
http://www.cplusplus.com/reference/string/string/clear/
http://www.cplusplus.com/reference/string/string/erase/

Muchas gracias Queta, esa función no me venía en los apuntes.
#7
Hola, haciendo un ejercicio me ha surgido la siguiente duda:
¿Hay alguna función que limpie el contenido de un string? es decir, tengo un bucle en el que en cada iteración imprimo por pantalla el contenido de un string, pero quiero "limpiar" el contenido que tiene el string en cada iteración, como si estuviese recién declarado.
Lo he resuelto asignándole "" a la variable string (s=""), pero querría saber si hay alguna función que te haga eso o alguna forma de hacerlo mejor.

Muchas gracias, saludos.
#8
Muchas gracias a todos por las respuestas.
Tienes razón Valkyr, se me ha pasado ese detalle. La cosa es que no es la primera vez que me pasa, tengo que meterme en la cabeza que para ese caso en concreto he de declarar las variables de tipo entero.

Muchas gracias a todos!
#9
Hola, tengo el siguiente enunciado:
Un cuadrado mágico de orden n es una ordenación de los números 1 a n en una tabla cuadrada de manera que la suma de cada fila y cada columna y las dos diagonales principales es la misma. La figura muestra un cuadrado mágico de orden 5 en el que todas las filas, columnas y las dos diagonales suman 65.

He hecho este código y al ejecutarlo introduzco la matriz tal y como está en el ejemplo (es un cuadrado magico) y nunca termina, se queda ejecutándose y nunca muestra el resultado. He estado buscando una y otra vez el fallo y no he conseguido dar con él, a ver si podéis echarme una mano...

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

const unsigned N = 5;
typedef unsigned Cuadrado[N][N];

void introDatos(Cuadrado& c);
bool es_magica(const Cuadrado& c);
unsigned resultado(const Cuadrado& c);
bool filas(const Cuadrado& c, unsigned res);
bool columnas(const Cuadrado& c, unsigned res);
bool d1(const Cuadrado& c, unsigned res);
bool d2(const Cuadrado& c, unsigned res);


int main() {
Cuadrado c;

introDatos(c);
if(es_magica(c)){
cout << "El cuadrado es magico" << endl;
}else{
cout << "No es un cuadrado magico" << endl;
}

return 0;
}

void introDatos(Cuadrado& c){
cout << "Introduzca numeros entre 1 y 25 sin repetir ninguno: " << endl;
for(unsigned i=0;i<N;i++){
for(unsigned j=0;j<N;j++){
cout << "c(" << i+1 << "," << j+1 << "): ";
cin >> c[i][j];
}
}
}

bool es_magica(const Cuadrado& c){
unsigned res = resultado(c);

if((!filas(c,res))||(!columnas(c,res))||(!d1(c,res))||(!d2(c,res))){
return false;
}else{
return true;
}
}

unsigned resultado(const Cuadrado& c){
unsigned res = 0;
for(unsigned j=0;j<N;j++){
res+=c[0][j];
}
return res;
}

bool filas(const Cuadrado& c, unsigned res){
bool igual = true;
unsigned suma = 0;

for(unsigned i=0;i<N;i++){
suma = 0;
for(unsigned j=0;j<N;j++){
suma+=c[i][j];
}
if(suma!=res){
igual = false;
break;
}
}
return igual;
}

bool columnas(const Cuadrado& c, unsigned res){
bool igual = true;
unsigned suma = 0;

for(unsigned i=0;i<N;i++){
suma = 0;
for(unsigned j=0;j<N;j++){
suma+=c[j][i];
}
if(suma!=res){
igual = false;
break;
}
}
return igual;
}

bool d1(const Cuadrado& c, unsigned res){
bool igual = true;
unsigned suma = 0, i=0, j=0;

while((i<N)&&(j<N)){
suma+=c[i][j];
i++;
j++;
}
if(suma!=res){
igual = false;
}
return igual;
}

bool d2(const Cuadrado& c, unsigned res){
bool igual = true;
unsigned suma = 0, i=N-1, j=N-1;

while((i>=0)&&(j>=0)){
suma+=c[i][j];
i--;
j--;
}
if(suma!=res){
igual = false;
}
return igual;
}


Muchas gracias!!

#10
Yo lo probé y me funcionaba... al meterle los datos has tenido en cuenta que debe de haber al menos una montaña y un valle??
De todas formas, mañana volveré a echarle un vistazo.