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

#1
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:



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
Buenas, al final lo hice como me sugeriste: haciendo uso de un string.

Muchas gracias por su respuesta.
Un saludo.
#3
Hola, le agradezco su respuesta, pero voy a proceder a exponerle el código y a explicarle posteriormente, ya que ando un poco desconcertado:

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
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
Lo he intentado y nada. ¿No será que debería utilizar los comandos netsh?
#6
Hola, el Firefox lo desinstalamos -no pudiendo reinstalarlo nuevamente- y tenemos el problema tb en Chrome y Opera.

¿Qué hacemos?
#7
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
Muchas gracias por la respuesta. Aprovecho para exponer cómo quedaría con array unidimensional:

#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
Me explicaré mejor. Quiero saber si esos dos arrays que almacenan direcciones, servirían si fuesen unidimensionales.
#10
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.