elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: [1] 2
1  Programación / Programación General / Problema de los átomos - Concurrencia en: 3 Marzo 2016, 16:43 pm
Supongamos que tenemos un sistema compuesto por infinitas unidades de átomos de
hidrógeno y oxígeno, que lo único que quieren hacer es combinarse para formar moléculas de agua.

Para ello dispondremos de una clase denominada Aire, que recibirá peticiones de los átomos mediante un método denominado combinar (id), donde id nos dirá si lo que quiere combinarse es un átomo de oxígeno o de hidrógeno.

- Cuando un átomo quiere combinarse hay que comprobar si ya existen otros 2 átomos
complementarios. En ese caso, la molécula se forma.
- Si no están todavía sus otros 2 átomos complementarios, entonces debe bloquearse y
esperar a que lleguen los 2 que faltan o el que falta. Sólo cuando lleguen los que faltan
entonces pueden seguir los tres átomos.
- Los átomos que llegan pero no pueden formar molécula porque ya hay uno (en el caso
del oxígeno

Para resolver dicho problema, he desarrollado así la clase Aire:

Código:

public class Aire {

int atomosHidrogeno = 0;
int atomosOxigeno = 0;
int atomosH_esperando;
int atomosO_esperando;

public Aire(int atH, int atO2) {
this.atomosHidrogeno = atH;
this.atomosOxigeno = atO2;
this.atomosH_esperando = 0;
this.atomosO_esperando = 0;
}

public void combinar(int id) {
if (id == 0) // Hidrogeno
{
synchronized (this) {
while (this.atomosH_esperando == 2 || (this.atomosHidrogeno < 1 && this.atomosOxigeno < 0)) {
try {
wait();
this.atomosH_esperando++;
} catch (InterruptedException ie) {
}
}
notify();
}
this.atomosH_esperando--;
System.out.println("Molécula formada");
} else if (id == 1) // Oxigeno
{
synchronized (this) {
while (this.atomosH_esperando == 2 || (this.atomosHidrogeno < 2)) {
try {
wait();
this.atomosO_esperando++;
} catch (InterruptedException ie) {
}
}
notify();
}
this.atomosO_esperando--;
System.out.println("Molécula formada");
}
}
}

MI PROBLEMA ES QUE SIEMPRE HAY ÁTOMOS SUFICIENTES PARA TODAS LAS MOLÉCULAS, PONGA LO QUE PONGA

(Sinceramente, soy novato en concurrente y...)
2  Programación / Programación C/C++ / Re: Lectura opcional de una serie de variables en: 14 Septiembre 2013, 19:56 pm
Buenas, al final lo hice como me sugeriste: haciendo uso de un string.

Muchas gracias por su respuesta.
Un saludo.
3  Programación / Programación C/C++ / Re: Lectura opcional de una serie de variables en: 14 Septiembre 2013, 15:25 pm
Hola, le agradezco su respuesta, pero voy a proceder a exponerle el código y a explicarle posteriormente, ya que ando un poco desconcertado:

Código:
int main(void)
{
int coeficiente = 0;
char variable;

while (cin >> coeficiente >> variable)
{
if (coeficiente == '\0')
cout << 1 << "." << variable;
else if (variable == '\0')
cout << coeficiente << ".";
else
cout << coeficiente << "." << variable;

cout << endl;
}
}

Como pueden ver, el código ampara el caso en el que se lee el número, sea positivo o negativo junto a la variable (una letra de la 'a' a la 'z'), pero yo quiero que se lea el número en los siguientes casos:

  • Términos con variable, todos los coeficientes aparecen explícitamente y son nºs positivos. Dos términos consecutivos se separan por un único carácter "enter"’
  • Términos de todo tipo, sean positivos o negativos; separados por un único carácter enter
  • Estos términos también pueden ir separados por espacios además de los enters; de manera arbitraria

Dada la complejidad (que haya un signo sin nº), ... no sé si utilizar int o char, o solo un string; o emplear un determinado procedimiento.

VÉASE EL ENUNCIADO EN https://docs.google.com/file/d/0B70hcRCqJ3n6Y3ludEowbThHVlk/edit?usp=sharing
4  Programación / Programación C/C++ / Lectura opcional de una serie de variables en: 14 Septiembre 2013, 12:22 pm
Buenos días, estoy intentando realizar un problema que me lea una secuencia de términos (monomios de grado 1), dentro de los cuales he de identificar el coeficiente y la variable (una letra). A cada uno de estos he dedicado una variable, respectivamente un integer y un "char".

Dado que bien el coeficiente sea uno (por lo que sobra su inserción como dato de entrada) o no exista variable (por lo que damos con un término independiente), he establecido unos enunciados condicionales a la hora de establecer las sentencias de entrada de datos (todas en base a un cin): un if para que me lea ambos y otros dos para cada uno de ellos. Pero tengo un problema, ya que no me respeta ni los espacios ni los saltos de línea; incluso es imposible continuar ya que se da una infinitud de saltos de línea, incontrolables.

De todos modos, antes de finalizar os expondré un ejemplo de entrada y otro de salida:

ENTRADA
   -13t      8k    w
       +34
-10p

SALIDA
-13.t
8.k
1.w
34.
-10.p


Agradecería vuestra ayuda.
Un saludo.
5  Sistemas Operativos / Windows / Re: Los navegadores no se conectan a Internet (tengo red) en: 9 Septiembre 2013, 16:07 pm
Lo he intentado y nada. ¿No será que debería utilizar los comandos netsh?
6  Sistemas Operativos / Windows / Re: Los navegadores no se conectan a Internet (tengo red) en: 9 Septiembre 2013, 15:50 pm
Hola, el Firefox lo desinstalamos -no pudiendo reinstalarlo nuevamente- y tenemos el problema tb en Chrome y Opera.

¿Qué hacemos?
7  Sistemas Operativos / Windows / Los navegadores no se conectan a Internet (tengo red) en: 9 Septiembre 2013, 13:19 pm
Buenas tardes, tengo un equipo Windows Vista cuyo software de seguridad es: el firewall de Windows y el antivirus de Microsoft. El problema es que teniendo conexión de red, no puedo acceder a internet a través de los navegadores.

Tenía Google Chrome (el cual he reinstalado), pero he instalado otros como Opera y Firefox, pero el problema persiste. Es absurdo pues otras apps como las de descarga de algunos instaladores y Spotify funcionan.

He comprobado los ajustes de proxy y lo del LAN está desactivado; solo está activada la casilla de detectar conexiones y cambios.

¿Qué puedo hacer para solventarlo?

Un saludo
8  Programación / Programación C/C++ / Re: Sopa de letras que recorra una matriz de direcciones en: 26 Agosto 2013, 18:56 pm
Muchas gracias por la respuesta. Aprovecho para exponer cómo quedaría con array unidimensional:

Código:
#include <iostream>

#include <vector>

using namespace std;

int arrf[8] = { 0, -1, -1, -1, 0, 1, 1, 1 };
int arrc[8] = { -1, -1, 0, 1, 1, 1, 0, -1 };
char s [] = "OIE";

int main() {
int n, m;
while (cin >> n >> m) {
int res = 0;
vector<vector<char> > S(n, vector<char>(m));
for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) cin >> S[i][j];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
for (int d = 0; d < 8; ++d) {
bool trobat = true;
for (int h = 0; h < 3 && trobat; ++h) {
int f = i + h*arrf[d], c = j + h*arrc[d];
if (f < 0 || f >= n || c < 0 || c >= m || S[f][c] != s[h])
trobat = false;
}
if (trobat) res++;
}
}
}
cout << res << endl;
}
}

Saludos. Buenas noches
9  Programación / Programación C/C++ / Re: Sopa de letras que recorra una matriz de direcciones en: 24 Agosto 2013, 18:56 pm
Me explicaré mejor. Quiero saber si esos dos arrays que almacenan direcciones, servirían si fuesen unidimensionales.
10  Programación / Programación C/C++ / Re: Sopa de letras que recorra una matriz de direcciones en: 23 Agosto 2013, 20:17 pm
Muchas gracias por su respuesta, aunque al final ya había logrado entender el código comprendiendo la relación filas-columnas con los arrays.

Respecto al planteamiento en base a estructuras condicionales del problema, cierto que puede estar mal planteada según el juez, y sería el caso (si no me equivoco) por sobrepasarse en el análisis del cumplimiento de la condición de celdas inexsistentes.

Por último, me gustaría saber si para este mismo problema así como para otros similares, vamos, sopas de letras cualesquiera, bastaría con meter en las celdas números del -1 al 1, siendo los arrays unidimensionales.

Un saludo.
Buenas tardes.
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines