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

#11
Cita de: programator11 en  6 Agosto 2014, 15:01 PM
Entiendo...tendria que implementar entonces otra libreria para ello?

Muchas gracias por tu tiempo ;)

No, no, no tienes que implementar ninguna librería nueva (aunque podrías implementar las funciones necesarias para operar con complejos, sería un buen ejercicio). No hace falta que incluyas la biblioteca math. La complex ya te viene con las funciones sqrt y pow preparadas para operar con complejos. Quita el include de math.h, que no te hace falta. Y haz que res1 y res2 sean objetos de la clase complex<double>, en lugar de float. http://www.cplusplus.com/reference/complex/

Podrías, ya que estás, completar el programa para que el usuario pueda introducir coeficientes que no sean necesariamente reales, sino complejos también.

Cita de: eferion en  6 Agosto 2014, 15:19 PM
No necesariamente... tienes que separar los diferentes elementos de la ecuación... por un lado la parte real y por otro la "posible" imaginaria. Es decir, si tenemos que las dos raices son:

y1 = -b/2a + sqrt(b^2-4ac)/2a
y2 = -b/2a - sqrt(b^2-4ac)/2a

Hacemos la separación:

r = -b/2a
i = sqrt(b^2-4ac)/2a

De tal forma que:

y1 = r + i
y2 = r - i

Ahora ya tenemos que R siempre es real, mientras que I será real sólo si el interior de la raiz cuadrada no es negativo. Es decir, podríamos tener algo del tipo:

x = b^2-4ac
r = -b/2a
i = sqrt(x)

entonces, si x >= 0 podemos calcular las dos raices de la forma acostumbrada... pero si x < 0, entonces tenemos número imaginario... dado que ya tienes separada la parte imaginaria es facil conformar el número complejo:


double _Complex resimag1 = r + i * I;
double _Complex resimag2 = r - i * I;



Correcto, pero originalmente programator11 quería hacerlo utilizando la clase complex, que ya tiene preparadas funciones para no tener que preocuparse de separar la parte imaginaria de la real. Con la clase complex, puedes hacer la raiz cuadrada de un número negativo o complejo tranquilamente, sin realizar tú las comprobaciones.
#12
Corrección al moderador. Es corregido, no correjido.
#13
Bueno, creo que ya va siendo hora de que ponga las respuestas. Tengo algunos problemas personales y por ende no podré dedicar más tiempo al foro durante un largo tiempo.



Es exactamente lo mismo. Supongamos que x es el precio del producto en el primer establecimiento, y que y es el precio del producto en el segundo. Entonces x = (1-0.2353)·y, o lo que es exactamente lo mismo, y = (1+0.3077)·x



Bueno, la probabilidad de acertar comprando un sólo número es 1/1435. La probabilidad de fallar es 1-1/1435. La probabilidad de fallar sacando 1435 boletos es (1-1/1435)^1435 (suponiendo cada intento independiente del anterior), que, curiosamente y en virtud de un límite asintótico conocidísimo en el mundo de las matemáticas, es aproximadamente 1 entre el número e. Y la probabilidad de acertar comprando 1435 números es 1-(1-1/1435)^1435 que es aproximadamente 1-1/e = 0.6321. Es decir, hay un 63.21% de probabilidad de que al menos una vez nos toque el premio.



Modelo de probabilidad binomial. La respuesta es C(1435,k)·1/1435^k·(1-1/1435)^(1435-k), siendo C(1435,k) el coeficiente binomial 1435 sobre k, que es igual a 1435!/(k!·(1435-k)!), con ! siendo el signo del factorial. Vemos que la respuesta anterior se deduce particularizando esta expresión para k = 0. C(1435,0) = 1 por definición del coeficiente binomial. 1/1435^0 = 1, y en la expresión queda que la probabilidad de que nos toque la lotería 0 veces es (1-1/1435)^1435 = 1/e aproximadamente. Luego, la probabilidad de que nos toque una o más veces es 1-1/e



Un mentiroso



Es Washington D.C.



Con permiso de platonak, copio su respuesta que es correcta (yo no tengo ganas de escribirla).

CitarEra un abogado que iba a salvar a algún cliente de la pena de muerte por silla eléctrica, al irse la luz, se dio cuenta que el cliente ya ha sido ejecutado. En la maleta llevaba los papeles del juzgado o Alcalde que indicaban que se anulaba la ejecución. (Me ha costado, pero creo que hace años ya me tocó resolverlo, en aquella ocasión sin éxito XD)

Eso es todo. Gracias a los que han participado.

Saludos
#14
¡Autóctono no! ¡Autónomo!

namespace std no es una librería. Es un "espacio de nombres", como su propio nombre indica (valga la redundancia). Todas las funciones y objetos de la librería estándar C++ están declaradas dentro del espacio de nombres std. Si no pusieras el using namespace std tendrías que añadir el prefijo std:: a todas las funciones que utilices de la librería estándar.

Saludos

P.S.  >:( Vigilemos el lenguaje (y no me refiero al de programación)...
#15
Cita de: [Case] en  7 Abril 2012, 20:09 PM
Pues a lo mejor aprender otro paradigmas de programación te gusta, yo recomiendo haskell.
También puedes probar con ruby es es orientado a objetos, pero que va mas al extremo, por que en ruby todo es un objeto, como los números por ejemplo.

En lo que se refiere al replanteamiento de la programación orientada a objetos, también está el Smalltalk. Uno de sus creadores es Alan Kay, pionero en el concepto de objeto en programación.

Y en una línea completamente distinta de los lenguajes de programación, tienes también el MATLAB/Octave. Son interpretados, de alto nivel y enfocados (pero no limitados) a aplicaciones de ingeniería y ciencia. Además, con el objetivo de lograr una ejecución más rápida, se pueden ampliar con C/C++ y Fortran.

De todas formas, sigo recomendando Python (que también se puede ampliar con C/C++). Soy muy pro-Python  ;D

Saludos
#16
Programación C/C++ / Re: del programa A al C
7 Abril 2012, 22:38 PM
Supuse que tenía que ver con Blackzero. ¡Podemos ponernos a criticarlo a muerte, just for fun  ;-)!

#17
Programación C/C++ / Re: del programa A al C
7 Abril 2012, 18:06 PM
Cita de: guillem_bm en  6 Abril 2012, 17:47 PM
muchisimas gracias...

he puesto el siguiente codigo:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>

void fn_programa_a();
void fn_programa_b();
void fn_programa_c();

int main()
{
   int number, opcion;
   if( opcion == 1 ) {
       fn_programa_a();
       if ( opcion == 2 ) {
       fn_programa_b();
       if ( opcion == 3){
       fn_programa_c();
       if (opcion == 4){


       return 0;
}
}
}
}
}
   // llamada a la primer función}
void fn_programa_a()
{
             int ch;
   
   
  do {
     ch = _getch();
  }while (ch != EOF && ch != 'a');
   printf("opcion A\n");
   
   getch();
   
   }

void fn_programa_b()
{
         int ch;
   
   
  do {
     ch = _getch();
  }while (ch != EOF && ch != 'b');
   printf("opcion B\n");
 
   
   
getch();
}

void fn_programa_c()
{
         int ch;
   
   
  do {
     ch = _getch();
  }while (ch != EOF && ch != 'a');
   printf("opcion C\n");
   
   getch();
   

}

pero aora mi problema es que cuando lo coopilarlo, se me cierra en el instante...
por que me pasa eso???

Ehmm... Fíjate en una cosa. ¿En qué momento lees un valor para opción? Exacto, no lo haces  ;). Por otro lado, estas anidando los if's. Sin embargo, estos son excluyentes, deberían ir así:

Código (cpp) [Seleccionar]
if (opcion == 1) {// haz lo que sea}
else if (opcion == 2) {// haz lo que sea}
//...


CrisQC, ¿por qué odias las dulces lunas? :-(


EDITO:
Cita de: durasno en  6 Abril 2012, 19:08 PM
Como diria aristoteles, t responde a tu pregunta con otra pregunta(asi era :S)
¿en que momento le almacenas un valor a la variable opcion?

Perdona, durasno, no había visto que ya habías respondido tú   :silbar:
#18
Me suscribo a lo comentado por los usuarios anteriores (excepto jacosito). Al que más puntos le doy es a Python (entre otras cosas, porque el creador, Guido van Rossum, le puso el nombre pensando en los Monty Python  ;D).

Cita de: jacosito en  6 Abril 2012, 20:53 PM
Creo que no has aprendido nada de c++ ya que con los procesadores modernos se necesitan programadores para programación paralela.

Yo por ejemplo, se programación paralela y no digo que quiero aprender otro lenguaje. Habemos muy pocos que sabemos programación paralela y no somos arrogantes.

Saludos

Está tan fuera de lugar eso que dices que la única explicación plausible que le doy es que se trata de una broma o que te has equivocado de tema y/o subforo. Relájate un poco. Disfruta de la vida. Si las ballenas sonríen, ¿por qué no tú  :D?

Saludos

EDITO:

Me he permitido cotillear mirando tus otros mensajes, jacosito. Muy serios. Y, ciertamente, la teoría de la broma me parece poco satisfactoria. Me inclino más por una confusión. O tal vez tu respuesta a lupitapro deriva otra discusión que hayas tenido con él/ella.
#19
No lo mostró porque asumió que ustedes tenían suficiente autonomía y desenvoltura para aprender rudimentos de C++ por cuenta propia, y este problema parece un medio para aprender precisamente esos fundamentos. Dices que tienes problemas con la sintaxis, pero que llevas bien la algoritmia. Bueno, este problema que nos planteas aquí no requiere en absoluto soluciones algorítmicas sofisticadas, es muy básico. Es más bien para coger soltura con los elementos básicos del lenguaje de programación (en este caso, C++), como ya he comentado.

Yo siempre he dicho que aprender a programar sólo se aprende una vez. Ya para el tema del lenguaje y tal, se mira un manual sobre la marcha para aprender la sintaxis, las bibliotecas estándar que ofrece y poco más.

En fin, dejando atrás todo esto. Voy a contestar a la primera pregunta que formulas en los comentarios de tu programa.

Citar// que es esto de include vector?

Es una inclusión de una biblioteca. Una biblioteca contiene la definición de funciones y (en el caso de lenguajes orientados a objetos) clases (es decir, tipos de datos con métodos y atributos asociados). En este caso, vector forma parte de la STL (Standard Template Library) y básicamente es una biblioteca que provee al programador de la clase vector, que es una estructura de datos lineal (que almacena datos en posiciones consecutivas de memoria) que se puede dimensionar dinámicamente (es decir, que puedes cambiar su tamaño en tiempo de ejecución... no son como los arrays, para los cuales tienes que tener claro el tamaño que van a tener al declararlos). Ya que estas empezando, de todo este rollo que te he soltado (y que no es ni mucho menos tan extenso como podría ser) te tienes que quedar con que necesitas incluir la biblioteca vector para poder declarar cosas como esta:

Código (cpp) [Seleccionar]
int n;
cin >> n;
vector<int> v(n)


Con eso declaras un vector de n elementos (siendo n un dato que introduce el usuario).

También puedes crear vectores de vectores (A.K.A. matrices):

Código (cpp) [Seleccionar]
vector<vector<int> > v(n,vector<int>(n)) // declaración de una matriz cuadrada de orden n

Con eso contesto más o menos tu primera pregunta.

Por lo demás, no puedo más que recomendarte que sigas algún manual para que tu mismo puedas contestar tus otras dudas. Debes acostumbrarte a ser algo autónomo. No es que no debas preguntar nada nunca, pero debes tener ese poquito de sentido común que te dice cuando una duda no es lo suficientemente específica como para que ya haya sido contestada millones de veces por ahí (sobre todo en este caso, en que tus preguntas derivan directamente del hecho de que estás empezando a aprender C++). En este mismo foro encontrarás entre las chinchetas manuales y libros que puedes consultar. También tienes este otro manual, todo un hito en el aprendizaje de C++. ¿Tienes hasta el lunes, dices? Hay tiempo de sobra para aprender todo esto y más.

Saludos.

P.S. Y a modo de consejo totalmente amistoso, te diría que en el título de un post no pongas cosas como "ayudaaaaaa!! help". Restan seriedad y provocan justo el efecto contrario al que deseas (que más gente mire tu post)
#20
CitarCiertamente ya lo hago, porqué cada vez que vuelve al menu, tengo inicializado a 0 "afegir"

Cierto, no lo vi en su momento. Pero siendo así, ¿cuál es el objeto de decrementar la variable afegir? No la vuelves a utilizar en lo que queda del case 3 ni tampoco en el fragmento de código antes de entrar en el bloque switch.

Si me lo permites, pongo tu código con sangrías y entre etiquetas geshi:

Código (cpp) [Seleccionar]
#include <cstdio>
#include <iostream>

int main () {
bool sortir=false; // bolea, controla sortida 5


while(!sortir){ //bucle , sortida seleccio 1 - 5
int seleccio;

bool ok_seleccio=false; //boolea per controlar letras

//while(!ok_seleccio) { //controla que sean numeros

printf("\n********************\n");
printf("Menu ");
printf("\n********************\n");
printf("1.Introducir nuevo telefono \n2.Buscar por nombre  \n3.Guardar en disco \n4.Cargar listado  \n5.Salir\n\nSeleccion: ");
scanf("%d",&seleccio);

bool in_sortir=false; //boolea case 2
FILE *fp;
int espais=1;

//case 1, guarda numero i nom de contacte , variables
int afegir=0;
int numero[10];
char contacte[10];

switch(seleccio) {
                         
case 1:       
printf("Introduce el numero : ");
scanf("%d", &numero[afegir]);
                     
printf("Introduce el nombre del contacto : ");
scanf("%s", &contacte[afegir]);
afegir++;
                     
break;
case 2:
while(!in_sortir){
char nom[15];
printf("Introduce el nombre : ");
scanf("%s",&nom);
//... falta desarrollar ...

                         
                           
}
                     
break;
case 3:
afegir = afegir -1;
printf("Guardando cambios....");
fp=fopen("telefons.txt","a");
fprintf(fp,"%s %d\n" ,contacte,numero);         
printf("\nTots els canvis han sigut guardats");
fclose(fp);
for (int i=0;i<10;i++) { contacte[i]=0; numero[i]=0; }
break;
case 4:
                     
printf("Carregant llisti telefonic...\n");
fp = fopen("telefons.txt","r");
                     
char content[20];
while(!feof(fp)){
fscanf (fp, "%s", &content);
printf("\n%s ", content);
espais++;
if(espais==2){ printf("\n"); espais=0;}
}
fclose(fp);
                     
break;
case 5:
printf("Saliendo del programa...");
sortir=true;
break;
default:
if(seleccio<0 || seleccio>6){
printf("error en la seleccion, las opciones son del 1 al 5");
}
break;
                 
}
}
system("PAUSE");
   
return 0;   
}


CitarCiertamente ya lo hago, porqué cada vez que vuelve al menu, tengo inicializado a 0 "afegir"

En cualquier caso, ten en cuenta lo de que si pones numero a secas como parámetro del fprintf en el case 3, estás imprimiendo una posición de memoria. Eso sí que no creo que sea el comportamiento que buscas. En todo caso me imagino que querrás imprimir una o varias posiciones del array numero (para lo cual has de usar los corchetes []).

Por otro lado, claro que te peta cuando haces

Código (cpp) [Seleccionar]
for (int i=0;i<=afegir;i++){ fscanf("%s %d", contacte[i], numero[i]}

Para hacer algo en esa tesitura, tienes que declarar contacte como un array de arrays de caracteres. Exempli gratia, supongamos que quieres guardar 10 nombres de, como mucho, 50 caracteres cada uno. Entonces deberías declarar contacte como char contacte[10][50]. Entonces sí que podrías usar un bucle como el anterior.

Saludos