Dev - C++ - Interactuar con progrmas

 
Vista:

Interactuar con progrmas

Publicado por Alberto (1 intervención) el 30/01/2008 19:29:54
Hola, buenas tardes, verán.. tengo una consulta que hacer a profesionales y aficionados a la programación en general.. me gustaría realizar un programa A que trabajase bajo windows en el cual este a su vez entre en otro programa B, rellene unos datos que pide el programa B poniendo numeros en hexadecimal en casillas y luego ejecutase el programa B. Se puede hacer? Yo he estudiado C++, lo que ocurre es que hace varios años de eso y no me acuerdo exactamente como deberia proceder.. si alguien se le ocurre alguna idea o me dice que lenjuage utilizaria para realizar este tipo de programa, le doy las gracias de antemano. Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Interactuar con progrmas

Publicado por Leo (19 intervenciones) el 31/01/2008 03:01:48
1)
Podrias usar fork() para dividir un programa en dos procesos que se ejecutan en simultaneo. Luego en esos procesos utilizas execv() o alguna de su familia para reemplazar ese proceso por un programa. Busca en la web esta lleno de manuales de esas funciones. Execv toma la ruta del programa a ejecutar.

2)
La librería pthread te permite lanzar varios procesos simultaneos, controlados por un sólo main. En la web está repleto.

3)
Si quieres dos programas totalmente separados (en los casos anteriores uno es el padre y otro es el hijo)
tienes que tener memoria compartida entre ellos. La verdad nunca hice eso, pero una manera podría ser que ambos programas lean un archivo común. Debe haber llamadas al sistema que faciliten compartir memoria entre programas, pero no lo sé. Avisa si encuentras como hacerlo.

Nos vemos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Interactuar con progrmas

Publicado por VICTOR RODRIGUEZ (2 intervenciones) el 26/02/2008 15:42:28
TENGO UN PEQUEÑO PROBLEMA CON ESTE PREGRAMA NO C QUE LE FALTA
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
void main();

public class Mochila;{
private float pesos[];
private float valores[];
private float pesoMaximo;
private boolean descartados[];
private float pctSeleccionados[];
private int numObjetos;

public Mochila(float pesos[], float valores[], float pesoMaximo) {
if (pesos.length != valores.length) {
throw new IllegalArgumentException("pesos.length != valores.length");
}
numObjetos = pesos.length;
this.pesos = pesos;
this.valores = valores;
this.pesoMaximo = pesoMaximo;
pctSeleccionados = new float[numObjetos];
descartados = new boolean[numObjetos];
}

public float[] getSolucion() {
return pctSeleccionados;
}


public float[] algoritmo(int seleccion) {
int i = 0;
float pesoActual = 0;
for (int j = 0; j < numObjetos; j++) {
pctSeleccionados[j] = 0;
descartados[j] = false;
}
do {
System.out.println("Solicitamos nuevo objeto...");
System.out.println("pesoMaximo=" + pesoMaximo);
System.out.println("pesoActual=" + pesoActual);
i = mejorObjeto(seleccion);
System.out.println("pesos[" + (i + 1) + "]=" + pesos[i]);
if (pesoActual + pesos[i] <= pesoMaximo) {
System.out.println("pesoActual + pesos[" + (i + 1) + "] <= pesoMaximo");
pctSeleccionados[i] = 100;
pesoActual += pesos[i];
}
else {
System.out.println(" pesoActual + pesos[" + (i + 1) + "] > pesoMaximo");
pctSeleccionados[i] = ( (pesoMaximo - pesoActual) * 100 / pesos[i]);
pesoActual = pesoMaximo;
}
System.out.println(" pesoActualizado=" + pesoActual);
System.out.println("Cogemos el " + pctSeleccionados[i] +
"% del elemento " + (i + 1));
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
while (pesoActual < pesoMaximo);
return pctSeleccionados;
}

private int mejorObjeto(int seleccion) {
int indiceMejorObjeto = 0;
switch (seleccion) {
case 1:
indiceMejorObjeto = maximoValor();
break;
case 2:
indiceMejorObjeto = minimoPeso();
break;
case 3:
indiceMejorObjeto = maximoValorPorUnidadDePeso();
break;
}
descartados[indiceMejorObjeto] = true;
return indiceMejorObjeto;
}

private int maximoValor() {
int indiceMejorObjeto = 0;
float maxValor = Float.MIN_VALUE;
for (int i = 0; i < numObjetos; i++) {
if (!descartados[i] && valores[i] > maxValor) {
indiceMejorObjeto = i;
maxValor = valores[i];
}
}
return indiceMejorObjeto;
}

private int minimoPeso() {
int indiceMejorObjeto = 0;
float minPeso = Float.MAX_VALUE;
for (int i = 0; i < numObjetos; i++) {
if (!descartados[i] && pesos[i] < minPeso) {
indiceMejorObjeto = i;
minPeso = pesos[i];
}
}
return indiceMejorObjeto;
}

private int maximoValorPorUnidadDePeso() {
int indiceMejorObjeto = 0;
float maxValorRelativo = Float.MIN_VALUE;
float valorRelativoActual;
for (int i = 0; i < numObjetos; i++) {
if (!descartados[i]) {
valorRelativoActual = valores[i] / pesos[i];
if (valorRelativoActual > maxValorRelativo) {
indiceMejorObjeto = i;
maxValorRelativo = valorRelativoActual;
}
}
}
return indiceMejorObjeto;
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Interactuar con progrmas

Publicado por VICTOR RODRIGUEZ (2 intervenciones) el 26/02/2008 15:42:47
TENGO UN PEQUEÑO PROBLEMA CON ESTE PREGRAMA NO C QUE LE FALTA
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
void main();

public class Mochila;{
private float pesos[];
private float valores[];
private float pesoMaximo;
private boolean descartados[];
private float pctSeleccionados[];
private int numObjetos;

public Mochila(float pesos[], float valores[], float pesoMaximo) {
if (pesos.length != valores.length) {
throw new IllegalArgumentException("pesos.length != valores.length");
}
numObjetos = pesos.length;
this.pesos = pesos;
this.valores = valores;
this.pesoMaximo = pesoMaximo;
pctSeleccionados = new float[numObjetos];
descartados = new boolean[numObjetos];
}

public float[] getSolucion() {
return pctSeleccionados;
}


public float[] algoritmo(int seleccion) {
int i = 0;
float pesoActual = 0;
for (int j = 0; j < numObjetos; j++) {
pctSeleccionados[j] = 0;
descartados[j] = false;
}
do {
System.out.println("Solicitamos nuevo objeto...");
System.out.println("pesoMaximo=" + pesoMaximo);
System.out.println("pesoActual=" + pesoActual);
i = mejorObjeto(seleccion);
System.out.println("pesos[" + (i + 1) + "]=" + pesos[i]);
if (pesoActual + pesos[i] <= pesoMaximo) {
System.out.println("pesoActual + pesos[" + (i + 1) + "] <= pesoMaximo");
pctSeleccionados[i] = 100;
pesoActual += pesos[i];
}
else {
System.out.println(" pesoActual + pesos[" + (i + 1) + "] > pesoMaximo");
pctSeleccionados[i] = ( (pesoMaximo - pesoActual) * 100 / pesos[i]);
pesoActual = pesoMaximo;
}
System.out.println(" pesoActualizado=" + pesoActual);
System.out.println("Cogemos el " + pctSeleccionados[i] +
"% del elemento " + (i + 1));
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
while (pesoActual < pesoMaximo);
return pctSeleccionados;
}

private int mejorObjeto(int seleccion) {
int indiceMejorObjeto = 0;
switch (seleccion) {
case 1:
indiceMejorObjeto = maximoValor();
break;
case 2:
indiceMejorObjeto = minimoPeso();
break;
case 3:
indiceMejorObjeto = maximoValorPorUnidadDePeso();
break;
}
descartados[indiceMejorObjeto] = true;
return indiceMejorObjeto;
}

private int maximoValor() {
int indiceMejorObjeto = 0;
float maxValor = Float.MIN_VALUE;
for (int i = 0; i < numObjetos; i++) {
if (!descartados[i] && valores[i] > maxValor) {
indiceMejorObjeto = i;
maxValor = valores[i];
}
}
return indiceMejorObjeto;
}

private int minimoPeso() {
int indiceMejorObjeto = 0;
float minPeso = Float.MAX_VALUE;
for (int i = 0; i < numObjetos; i++) {
if (!descartados[i] && pesos[i] < minPeso) {
indiceMejorObjeto = i;
minPeso = pesos[i];
}
}
return indiceMejorObjeto;
}

private int maximoValorPorUnidadDePeso() {
int indiceMejorObjeto = 0;
float maxValorRelativo = Float.MIN_VALUE;
float valorRelativoActual;
for (int i = 0; i < numObjetos; i++) {
if (!descartados[i]) {
valorRelativoActual = valores[i] / pesos[i];
if (valorRelativoActual > maxValorRelativo) {
indiceMejorObjeto = i;
maxValorRelativo = valorRelativoActual;
}
}
}
return indiceMejorObjeto;
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar