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

#1
Hola. Resulta que ayudando a una amiga, me bajé un programa HWMonitor, cuál fue mi sorpresa al ver que mi tarjeta gráfica se encuentra entre los 80 y los 85 grados centígrados sin jugar a nada. Y jugando no lo he comprobado, pero seguro que se pone peor.

Eso es mucha temperatura, y estoy preocupado. Creo que puede deberse a la forma en que está colocada (que vino así de fábrica), porque el ventilador tira el aire contra una pared de la torre y parece ser que eso la recalienta, ¿puede ser? Os pongo capturas para que lo veais vosotros mismos.

http://imageshack.us/a/img542/6519/kph0.jpg
http://imageshack.us/a/img19/9834/ve7c.jpg

Como podeis comprobar, la tarjeta está "chocando" el aire del ventilador que tiene contra la pared de la torre, a lo mejor eso le impide refrescarse bien, no sé (recuerdo que vino así de fábrica). Lo que sí que no veo normal es que esté a ochenta grados sin jugar a nada. Independientemente de que le limpie el polvo y todas esas cosas, sería buena idea abrirle un agujero a la pared de la torre? No tendría problema con eso si vosotros me dais el visto bueno.

Gracias!

PD: Es una Radeon HD 4650 (y en españa, concretamente murcia, hace un calor que flipas)
#2
Hola, resulta que estaba creando un programa que lea de un archivo de texto con el siguiente formato:

<pregunta> esta es la pregunta </pregunta> <respuesta> esta es la respuesta a la pregunta </respuesta>


Así pudiera guardar la pregunta en una cadena, y luego la respuesta en otra. De esta manera el programa iría haciendo las preguntas aleatoriamente y luego mostrando las respuestas, pero tengo un problema. La clase ifstream no la sé usar y siempre me trata una entrada más de la que quiero, lo que me hace tener que usar de forma rara el número de preguntas (restándole uno porque si no usa una entrada vacía de los arrays), ¿alguien me puede decir a qué se debe? Pongo el code completo:

main.cpp
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include "pregunta.h"

using namespace std;

int main()
{
   Pregunta p;
   p.comenzar();

   return 0;
}

pregunta.h
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>

#define MAX_LETRAS 5000
#define MAX_PREGUNTAS 200

class Pregunta{
   private:
       char pregunta[MAX_PREGUNTAS][MAX_LETRAS];
       char respuesta[MAX_PREGUNTAS][MAX_LETRAS];
       int nPreguntas;
   public:
       Pregunta();
       void comenzar();
       void auxMuestra();
};

pregunta.cpp
Código (cpp) [Seleccionar]
#include "pregunta.h"
#include <stdlib.h> //Pseudorandomizado y limpiar la pantalla
#include <time.h> //Para la semilla de randomizacion

using namespace std;

//Constructor
Pregunta::Pregunta(){
   char aux[MAX_LETRAS];
   nPreguntas = 0;
   ifstream archivo;
   archivo.open("preguntas.txt",ifstream::in);

   while(!archivo.eof()){
       //PREGUNTA
       //Comida de etiqueta <pregunta>
       archivo.getline(aux, MAX_LETRAS, '>');
       //Adquirir el texto de la pregunta
       archivo.getline(pregunta[nPreguntas], MAX_LETRAS, '<');
       //Comida de etiqueta </pregunta>
       archivo.getline(aux, MAX_LETRAS, '>');
       //RESPUESTA
       //Comida de etiqueta <respuesta>
       archivo.getline(aux, MAX_LETRAS, '>');
       //Adquirir el texto de la respuesta
       archivo.getline(respuesta[nPreguntas], MAX_LETRAS, '<');
       //Comida de etiqueta </respuesta>
       archivo.getline(aux, MAX_LETRAS, '>');
       nPreguntas++;
   }

   archivo.close();
}

void Pregunta::comenzar(){
   srand (time(NULL));
   while(true){
       int aleatorio = rand() % (nPreguntas-1);
       cout << "PREGUNTA: " << endl;
       cout << pregunta[aleatorio];
       cout << endl;
       cin.get();
       cout << "RESPUESTA: " << endl;
       cout << respuesta[aleatorio];
       cin.get();
       system("cls");
   }
}

void Pregunta::auxMuestra(){
   for(int i=0; i < nPreguntas; i++){
       cout << "PREGUNTA" << endl << pregunta[i];
       cout << endl << "RESPUESTA" << endl << respuesta[i] << endl;
   }
}


El problema está en el constructor de la clase Pregunta, donde se inicializa el array con preguntas y respuestas. Antes hice una traza de la variable nPreguntas y siempre coge una más de la que debe, lo que me cabrea bastante y es la razón por la que pregunto esto. Es decir, si el texto tiene 2 preguntas, nPreguntas vale 3,y así, en comenzar() fijaros que tengo que hacer módulo de nPreguntas-1 y no de nPreguntas, para que funcione correctamente.

Muchas gracias de antemano y un saludo.
#3
Hola, ando trasteando con el contenedor set de la STL de C++, y me he topado con algo que me está haciendo perder los nervios. Quiero definir el puntero a una función para decirle al set de qué manera debe ordenar los elementos que yo le introduzco. Hasta ahí bien, ¿no? Pues tengo este código, que he hecho a modo de ejemplo para explicarme mejor, no tiene utilidad práctica:

#include <iostream>
#include <set>

using namespace std;

class objeto{
private:
int id;
public:

objeto(int id){
this->id = id;
}

objeto(){
id = 0;
}

void setId(int id){
this->id = id;
}

int getId(){
return id;
}
};

using namespace std;

bool comp(objeto* a, objeto* b){
return a->getId() < b->getId();
}

int main(){

bool(*fn_pt)(objeto*,objeto*) = comp;
set<objeto*, bool(*)(objeto*,objeto*)> conj (fn_pt);

objeto * apuntador;
set<objeto*>::iterator it;
objeto a(35);
objeto b(17);
objeto c(34);
objeto d(18);
objeto e(44);
objeto f(1);
objeto g(42);

conj.insert(&a);
conj.insert(&b);
conj.insert(&c);
conj.insert(&d);
conj.insert(&e);
conj.insert(&f);
conj.insert(&g);

for(it = conj.begin(); it != conj.end(); it++){
apuntador = *it;
cout << apuntador->getId() << endl;
}

return 0;
}


Bien, comp es la función de comparación, y fn_pt el puntero a dicha función, que es la que le paso al set. Todo genial, ¿verdad? Compila perfecto, y devuelve en la salida los elementos ordenados por su Id, todo genial, de maravilla. Ahora hagamos el siguiente código:

#include <iostream>
#include <set>

using namespace std;

class Objeto{
private:
int id;
public:

Objeto(int id){
this->id = id;
}

Objeto(){
id = 0;
}

void setId(int id){
this->id = id;
}

int getId(){
return id;
}
};

bool comp(Objeto* a, Objeto* b){
return a->getId() < b->getId();
}
bool(*fn_pt)(Objeto*,Objeto*) = comp;

class Contenedor{

private:

set<Objeto*, bool(*)(Objeto*,Objeto*)> conj (fn_pt);

public:

void addObjeto(Objeto* o){
conj.insert(o);
}

void mostrarObjetos(){
Objeto* aux;
set<Objeto*>::iterator it;
for(it = conj.begin(); it != conj.end(); it++){
aux = *it;
cout << aux->getId();
}
}
};

int main(){

cout << "Hola =)" << endl;

return 0;
}


Pues señoras y señores, este código no funciona, y se me está averiando el cerebro de intentar averiguar por qué. Una vez que meto el set en los datos de la clase, me tira siempre el mismo error, que el puntero fn_pt a la función comp no es un tipo, y por tanto no puede compilar, ¡¿pero por qué pasa esto si en el código anterior funcionaba perfecto?! He probado a meterlo en la parte pública y tampoco, no entiendo ya por qué pasa esto.

Si alguien me consigue explicar por qué al definirlo dentro de una clase el set deja de funcionar con el puntero a la función de comparación, le estaré profundamente agradecido.

Muchas gracias y buenos días :).
#4
Hola, estoy buscando una forma de que scanf() pueda leer un número arbitrario de entradas, es decir, que sin saber de antemano cuántos datos le van a entrar, pueda leerlos todos, ya sea mediante un bucle o como sea. La verdad es que no se me ocurre ninguna manera de hacerlo.

¿Alguna pista? Gracias




Ya lo he adivinado es con feof(stdin) en la consola. Mientras no se de feof(stdin) hay datos para leer. Gracias de todas formas.
#5
Electrónica / Diodo laser amplificado
30 Abril 2007, 11:11 AM
Salu2 a todos. Vereis yo no se nada de nada en cuanto a electronica, pero a ver si vosotros me podeis ayudar en una cosilla.
Creo que este tema es de electronica, es que no lo se  :-\.

Vereis todos conocemos los diodos laser (o punteros laser o semiconductores) que venden los moros en el mercado  ;D. Vamos, el puntero laser de toda la vida, pues vereis, tengo uno con estas caracteriscas.

630-680 nM
Menos de 1 mW

No sabeis alguna forma de ampliar el alcance o la potencia del diodo? Yo he pensado con una lupa o algo pero no lo se.
Espero respondais

Salu2