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

#71
Cita de: eleon en  5 Febrero 2012, 17:17 PM
Code::Blocks
Dev-C++

No. Dev-C++ no: http://www.cplusplus.com/forum/articles/36896/

En vez de Dev-C++, es mejor usar wxDev-C++.

Ah, y has de comprender que estos programas son IDE's, no compiladores. Es decir, herramientas que incorporan editor con resaltado de palabras clave + compilador + depurador. Y lo primero en que debes pensar cuando tienes un problema al compilar no es "el compilador está mal", sino "mi código está mal". Ya veo que eleon te ha ayudado a este respecto, así que no tengo nada más que añadir.

Saludos
#72
¿?

A ver. ¿Estás seguro de que el archivo de texto está en el mismo directorio que tu programa o de que usas la ruta absoluta o relativa correcta? No ha lugar a errores con este código. Comprueba que estás introduciendo correctamente el nombre del archivo, respetando mayúsculas y minúsculas y con la extensión apropiada (en Linux es necesario que introduzcas el nombre del archivo exacto). Si acaso, introduce un printf para imprimir la cadena en que guardas el nombre del archivo y así comprobar que se guarda correctamente y que coincide exactamente con el nombre del archivo de texto.

En última instancia, dinos la ruta del ejecutable (con los nombre incluidos), la ruta del fichero de texto y la entrada de datos que efectúas cuando ejecutas el programa.

Y por cierto, no hace falta que ejecutes el programa con sudo. Usa sudo lo menos posible.

Saludos
#73
Cita de: javirk en  5 Febrero 2012, 16:46 PM
Hola, muchas gracias por vuestras respuestas, de verdad.

do-while, creo que tu solución se me queda algo grande, no sé ni por dónde empezar, pero muchas gracias, lo tendré que mirar más en detalle.

ghastlyX, aún no sé nada de vectores, pero parece que los entiendo más o menos al ver tu solución, muchas gracias.

Xandrete, creo que tu solución es la que más me interesa, posiblemente por ser la más corta, pero no me funciona cuando la compilo, es decir,  que no me sale nada, y meto 4 números y sale del programa; lo mismo me pasa con la de ghastlyX, pero este no sale, simplemente no hace nada. ¿Por qué puede ser eso?

Bueno, a lo que iba, Xandrete, lo que no entiendo del tuyo es eso del "comb[][2]", ¿por qué dos corchetes?

Un saludo y gracias a todos.

¿Quizás sea porque no existe ninguna combinación de operadores que haga que se cumpla la igualdad? No he tenido ningún problema con el código que te he propuesto. Yo lo he compilado con las opciones -Wall, -Werror y -Wextra para asegurarme de que no había ni error ni warnings de ninguna clase (siempre compilo así) y lo he probado con la entrada que das como ejemplo y con otras.

Con 7 2 1 8 la salida es:

7+2-1=8

Con 0 0 0 0 la salida es:

0-0-0=0
0+0-0=0
0-0+0=0
0+0+0=0

Con 1 1 1 1 la salida es

1+1-1=1
1-1+1=1

Y con 0 0 0 1 no se imprime nada (como ha de ser).

¿Por qué dos corchetes? Porque es un array de arrays de caracteres. O sea, una matriz o estructura de datos bidimensional. Se suelen declarar así, con un par de corchetes. Mírate bien el tema de los arrays.

Otra manera. Con if's, tal y como habías pensado tú al principio:

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

int main() {
int a,b,c,result;
cin >> a >> b >> c >> result;
if (a-b-c == result)
cout << a << "-" << b << "-" << c << "=" << result << endl;
if (a-b+c == result)
cout << a << "-" << b << "+" << c << "=" << result << endl;
if (a+b-c == result)
cout << a << "+" << b << "-" << c << "=" << result << endl;
if (a+b+c == result)
cout << a << "+" << b << "+" << c << "=" << result << endl;
}


Este último código si que es claro a más no poder. De todas formas, no nos has sacado de dudas aún acerca del número de signos que consideras. ¿Están la multiplicación y la división también incluidos? Todos estamos asumiendo que sólo te interesan sumas y restas.

Saludos



#74
¡Ah, amigo!

Diría que wxDev-C++ tiene disponible versión en español. Prueba a descargar el instalador y mira si en algún momento te pregunta por el idioma. Pero vamos, tiene que tener porque en el artículo de la wikipedia que corresponde a este IDE se dice que hay versión en español. De todas formas, en tu lugar ya me iría acostumbrando a que todo esté en inglés, es el idioma de la ciencia y la tecnología.

Saludos, jefe.
#75
Si no me equivoco, las sucesivas versiones de Windows no han comportado un cambio significativo de la API de cara al programador (en la wikipedia, sólo se mencionan 4 versiones de la WinAPI, siendo la principal diferencia entre ellas que se han reescrito para versiones de Windows que soportan distinto número de bits, sin importar si es Win7, Win Vista o Win Chueca). Además, si te fijas en las actualizaciones que se le han hecho al curso, casi todas datan del 2010 y del 2011, cuando ya había salido Windows 7 y toda la patulea, así que es un curso perfectamente válido. De hecho, ya dice mucho que cuando pones WinAPI en Google, el curso de conclase sea el primer resultado en castellano.

Saludos
#76
¿Has probado a incluir errno.h y a usar perror para ver exactamente que problema tienes? Cuando fopen te devuelve NULL no quiere decir necesariamente que no se pueda abrir el archivo porque no se encuentra. También puede ser un problema de permisos. Estoy en Linux y me va perfecto este código en el que sólo he cambiado el gets por el scanf, lo cual no tiene nada que ver (con el gets también me va bien):

int openbin(void) {
FILE *pfile;
char namebin[50];
printf("Name:\n");
scanf("%s",namebin);
if ((pfile = fopen(namebin, "rb"))== NULL) {
 printf("Couldn't open the file\n");
 exit(1);
}
printf("The file was opened successfully\n");

return 0;
}


Saludos
#77
Psché. Y si no, al carajo la portabilidad. En linux puedes usar esto. La función alarm es un poco tosca y sólo admite tiempos múltiplos de 1 segundo. La función setitimer es mucho más sofisticada y te permite implementar temporizadores con tiempos que van desde los microsegundos. El tema de los temporizadores... veo complicado que encuentres una solución portable decente. Lo digo porque para implementar un temporizador, sueles depender de los servicios y llamadas al sistema de los que te provee el SO. No digo que no puedas encontrar ninguna solución portable y que use la librería estándar. Está la de satu. Sin embargo, no me gusta mucho esta última por algo que detallaré más adelante.

Lo de usar un bucle a modo de temporizador, como propone ~, no es muy buena idea. Una de las razones las da el propio ~. Otro inconveniente es que consume tiempo de cálculo y mantiene la CPU ocupada. Lo mismo con la solución de satu: consume tiempo de cálculo innecesario (y además, realiza llamadas al sistema constantemente). Es mejor usar funciones bloqueantes, aunque ello signifique perder en portabilidad, porque es un desperdicio de recursos tener un programa en Run o en la cola de Ready que sólo está esperando. Y si no, se pueden usar librerías de terceros que estén disponibles para varios SO y que ofrezcan temporizadores. O implementar uno mismo esas librerías para los SO a los que se piensa dirigir el programa (en este ejemplo, se podría implementar el temporizador con sleep para Windows y con setitimer para Linux). De esa forma, el código sería portable, pero no se limitaría a la librería estándar. No obstante, la solución de satu es perfectamente válida si tu código tiene únicamente fines académicos o es para uso propio, pero no es algo que yo recomendaría para proyectos profesionales.

Saludos
#78
Programación C/C++ / Re: funcion trunc
5 Febrero 2012, 03:06 AM
Cita de: m@o_614 en  5 Febrero 2012, 02:21 AM
;D Y que pasaría si tuviera que incluir el tipo de dato char tambié. Como tendria que implementar esa parte??  :huh:

gracias

Bueno, si es necesario usar caracteres... El número lo puedes leer como double o float y luego hacer la conversión a char. Si lo has leído en f, por ejemplo, (char) f te devolvería la parte entera de f como carácter. Cuando haces la conversión, te queda la parte entera del float únicamente y no tienes que utilizar la función trunc. De todas formas, te aviso de que el rango de un char no va de -32768 a 32767, sino de 0 a 255 o de -128 a 127 (dependiendo de si lo consideras sin o con signo). Estas consideraciones sobre el rango del tipo char, en teoría, varían en función de la máquina y del compilador, pero en la práctica se cumplen en la mayoría de (por no decir todos) los casos. Así que si estas pensando en rangos mayores, no puedes usar char de esta forma.

Otra planteamiento: puedes leer de la entrada guardando los datos como cadena de caracteres y luego mirar si hay un punto. En caso afirmativo, es un float, y si no, es un int. O mejor, puedes ir leyendo carácter a carácter, comprobando si algún carácter es un punto (y si alguno lo es, cancelas la lectura e imprimes un mensaje diciendo que es un float). Si no te encuentras con ningún punto y llegas a un separador, cancelas la lectura y dices que es un int.

Saludos
#79
Cita de: Programador91 en  4 Febrero 2012, 18:15 PM
Buenas a tod@s:

Gracias eleon por resolver mi duda. Voy a ponerlo en práctica a ver que tal funciona.

Xandrete, el link que me has pasado veo que hay diversos programas, cual escojo? No hay ninguna versión en inglés?

De todos modos muchas gracias.

Ya que usas Dev-Cpp, pues te recomiendo wxDev-Cpp, para que el cambio sea lo menos radical posible. ¿Versión en inglés? Claro. De hecho, lo raro es que cualquiera de estos programas no salga originalmente en inglés. Las traducciones suelen ser cosa de las comunidades de usuarios.

Saludos
#80
Bueno, ya que hay gente que ha puesto su código, me voy a animar yo también... Como ghastlyX ya lo hizo con bucles for anidados, voy a plantear una propuesta distinta.

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

int main() {
char comb[][2] = {{'-','-'},{'-','+'},{'+','-'},{'+','+'}};
int a,b,c,result;
cin >> a >> b >> c >> result;
for (int i = 0; i < 4; ++i) {
int res;
if (comb[i][0] == '-') res = a - b;
else res = a + b;
if (comb[i][1] == '-') res -= c;
else res += c;
if (res == result) cout << a << comb[i][0] << b << comb[i][1]
<< c << "=" << result << endl;
}
}


Saludos