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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 ... 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [27] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 ... 132
261  Programación / Programación C/C++ / Re: Problema con ciclos (ejercicio de pi) en: 30 Marzo 2014, 03:21 am


Es por pasar el tiempo, ¡ehh!.

Las salidas de leosansan, engel lex y  yoel_alejandro por un millon, diez y mil millones, pero eso si en las mismas condiciones , incluso en el tipo de variables para lo que tuve que modificar mi código y declarar i como int, así estamos todos iguales:


















Como se ve estamos todos en un puño sin apenas diferencias.


¡¡¡¡ Saluditos! ..... !!!!



262  Programación / Programación C/C++ / Re: Problema con ciclos (ejercicio de pi) en: 29 Marzo 2014, 20:19 pm
Amigo yoel_alejandro de corazón que todo es en plan buen rollo, nada de suspicacias, please!.

Antes que nada creo que se te fue un gazapo en la expresión:

...............................................................

  4 * (-1)^n
--------------
  2 * (n - 1)

..........................................

Creo que tu intención era poner:

Citar

  4 * (-1)^n
--------------
 (2*n - 1)


Por otro lado:

.......................................
donde el punto en "4." obliga la división entre doubles en lugar de enteros (gracias de nuevo por la acotación leosansan).


Esta vez no me ha hecho falta lo del "4.", es decir lo del punto decimal, al declarar la variable i como float.

Por otro lado, al ser el mismo problema que en el otro tema del número Pi, he observado esta vez que me puedo ahorrar dos operaciones en cada ciclo del bucle for usando 1/i donde i es impar al empezar el bucle en tres e incrementar de dos en dos:


Código
  1. ..................................
  2.  N=2*n-1;
  3.  for(i=3;i<=N;i+=2,signo*=-1)
  4.    b+=(1/i)*signo;
  5.  ......................................
  6.  

 que se corresponden con las que hacíamos en 2*n-1: una multiplicación y una resta en cada ciclo. Y teniendo en cuenta que para que la serie propuesta nos dé 3.1416 hay que tomar un millón, n=1 000 000, de sumandos, nos queda que con el nuevo for que propongo en el último mensaje, me ahorro dos millones de operaciones, de ahí que lo cambiará respecto del otro tema.

¡¡¡¡ Saluditos! ..... !!!!



263  Programación / Programación C/C++ / Re: [DUDA] Función mayúscula a minúscula y viceversa en: 29 Marzo 2014, 16:55 pm
Tal como lo tienes, amén del despropósito de la variable s, que declaras como char y ya me dirás como un char almacena una cadena, te falta la librería conio.h para el uso de la función getch(). Además todo parece indicar que tanto el getch como el system lo usas para frenar a la consola para que no se cierre, con lo cual intuyo que usas Dev.C++ 4.x y en ese caso es más estándar el uso de la función getchar(), y así te sobraría el getch, el system y las librerías conio y stdlib. En cualquier caso si es correcta mi sospecha, pásate a Dev-C++ 5.x o, mejor aún, a Code::Blocks.

Otro detalle es que llamas a la función toUpperCase tanto para mayúsculas como para minúsculas.

El código funcionando podría ser:


Código
  1. #include <stdio.h>
  2.  
  3. void pedir_datos(char frase[]);
  4. void toUpperCase(char frase[]);
  5. void toLowerCase(char frase[]);
  6.  
  7. int main(){
  8.    char frase[100];
  9.    pedir_datos(frase);
  10.    printf("Frase original: %s\n",frase);
  11.    toUpperCase(frase);
  12.    printf("Mayuscula: %s\n",frase);
  13.    toLowerCase(frase);
  14.    printf("Minuscula: %s\n",frase);
  15.    getchar();
  16.   return 0;
  17. }
  18.  
  19.  
  20. void pedir_datos (char frase[]){
  21.    printf("Introduce una frase: \n");
  22.    gets(frase);
  23. }
  24.  
  25.  
  26. void toUpperCase(char frase[]){
  27.    int i=0;
  28.    for( ; frase[i]!='\0'; i++)
  29.      if(frase[i]>='a' && frase[i]<='z')
  30.            frase[i]-=32;
  31.  
  32. }
  33.  
  34.  
  35. void toLowerCase(char frase[])
  36. {
  37. int i=0;
  38.  while(frase[i]!='\0') {
  39.        if(frase[i]>='A' && frase[i]<='Z')
  40.            frase[i]+=32;
  41.        i++;
  42.    }
  43. }

Aunque no sé por qué me da que de lo que se trataba era de usar punteros.

¡¡¡¡ Saluditos! ..... !!!!




264  Programación / Programación C/C++ / Re: Problema con ciclos (ejercicio de pi) en: 29 Marzo 2014, 15:23 pm
El ejercicio a programar es el siguiente:
Desarrolla una función que calcule el valor de π a partir de una serie indicada a
continuación, de la cual calcularemos la cantidad de términos indicados por el usuario.
π = 4 – 4/3 + 4/5 – 4/7 + 4/9 - ... ± 4/n
..................................................
Lo que no entiendo es porque no me da, según mi lógica y un pseudocodigo que hice eso debería funcionar...Por favor, podrían decirme en que me equivoque.

* Para empezar las instrucciones:

Código
  1. if(n%2==0){
  2.  cout<<"numero invalido"<<endl;
  3.  


están de más ya que se puede pedir un número par de términos de la sucesión. Otra cosa es que los términos de la sucesión sólo contengan números impares, pero yo puedo pedir tres o cuatro términos.

* En:


Código
  1. if(i%2==0){
  2.  while(a<=n){
  3.    b=b-(4/a);
  4.    a=a+2;
  5.  }

te sobra el while. Tal como lo tienes calcularías para cada i todos los términos de la sucesión. Y en el otro while lo mismo, además no tienes por cambiar el nombre de la variable, sigue usando b en lugar de c.

* Deberías declarar como float, ya que son valores que implican el cálculo de  decimales, a las variables b y a.

* Te falta el return de la función main e indentar el código de forma correcta.

Con esto el código corregido y funcionando;

Código
  1. #include <iostream>
  2. using namespace std;
  3. int main (){
  4.  int n,i ;
  5.  float  b=4,a=3;
  6.  cout<<"Ingrese el numero de terminos: ";
  7.  cin>>n;
  8.  cout<<endl<<endl<<"a["<<1<< "]= "<<b<<endl;
  9.  for(i=1;i<n;i++){
  10.    if(i%2!=0){
  11.      b=b-(4/a);
  12.      a=a+2;
  13.      cout<<"a["<<i+1<< "]= "<<b<<endl;
  14.    }
  15.    else{
  16.      b=b+(4/a);
  17.      a=a+2;
  18.      cout<<"a["<<i+1<< "]= "<<b<<endl;
  19.    }
  20.  }
  21.  return 0;
  22. }}

También podrías habar hecho un for que recorra sólo los impares y te ahorrarías un else y el uso del operador "%":

Código
  1. #include <iostream>
  2. using namespace std;
  3. int main (){
  4.  int N,n,signo=-1 ;
  5.  float  b=1,i;
  6.  cout<<"Ingrese el numero de terminos: ";
  7.  cin>>n;
  8.  N=2*n-1;
  9.  for(i=3;i<=N;i+=2,signo*=-1)
  10.    b+=(1/i)*signo;
  11.  cout<<"Pi= " <<4*b<<endl;
  12.  return 0;
  13. }

Citar
Ingrese el numero de terminos: 9


a[1]= 4
a[2]= 2.66667
a[3]= 3.46667
a[4]= 2.89524
a[5]= 3.33968
a[6]= 2.97605
a[7]= 3.28374
a[8]= 3.01707
a[9]= 3.25237

Process returned 0 (0x0)


Claro que si de lo que se trata es de calcular Pi y no es necesario imprimir cada termino del sumatorio, podrías hacer:

Código
  1. #include <iostream>
  2. using namespace std;
  3. int main (){
  4.  int n,signo=-1 ;
  5.  float  b=1,i;
  6.  cout<<"Ingrese el numero de terminos: ";
  7.  cin>>n;
  8.  for(i=3;i<=2*n-1;i+=2,signo*=-1)
  9.    b+=(1/i)*signo;
  10.  cout<<"Pi= " <<4*b<<endl;
  11.  return 0;
  12. }

Citar
Ingrese el numero de terminos: 1000000
Pi= 3.1416

Process returned 0 (0x0)   execution time

¡¡¡¡ Saluditos! ..... !!!!



  
265  Programación / Programación C/C++ / Re: LLENAR UNA MATRIZ DISPERSA LISTA TRIPL en: 28 Marzo 2014, 08:28 am

A simple vista observo varios errores:

* Declaras las dimensiones de las matrices antes de introducir sus dimensiones, NF y NC.

* Pides ingresar el número de dato ND cuando éste está fijado por las dimensiones de la matriz: NFxNC. Lo que tendrías es que introducir los datos.

* En la función LLENAR para introducir los datos tienes que usar dos bucles o for para ir llenando filas y columnas. El for que tienes ahí es una locura.

* Antes de sumar o multiplicar deberías comprobar si las dimensiones de las dos matrices permiten esa operación.

****** Vete arreglando esas cosas y luego hablamos.


¡¡¡¡ Saluditos! ..... !!!!



266  Programación / Programación C/C++ / Re: Alinear texto (Solucionado) en: 26 Marzo 2014, 17:46 pm
yo de hecho no me había topado nunca con esa sintaxis. si cuando digo que programar es un arte en el que no se deja de aprender...

Tengo la suerte de seguir minuciosamente los códigos que cuelga rir3760 desde hace más de un año hasta el punto de tener una carpeta exclusiva para sus códigos. No paro de aprender y cuanto más los releo más aprendo y más amplio mi campo de programación.

Es una pena que el moderador decidiera dar carpetazo al tema de los rombos con asteriscos. Para los que somos curiosos y nos gusta aprender de los demás ha sido una pena. Precisamente ahí colgó un código el amigo rir que aún me tiene anonadado. Usa lo que yo he usado del printf pero con un arte que  no veas.

Sólo me pica una curiosidad y es el 3760. Podría ser la fecha de su nacimiento pero me da que oculta otra cosa. ;)


¡¡¡¡ Saluditos! ..... !!!!


267  Programación / Programación C/C++ / Re: Alinear texto (Solucionado) en: 26 Marzo 2014, 17:18 pm
Ahora sí lo entiendo mucho más fácilmente  :), está más "despejadito". Mira, pero si acortas el código a fuerza de usar el operador ternario estás haciendo "trampa", jajaja. En esencia es el mismo if, pero escrito más brevemente  :rolleyes:

O sea, produce prácticamente el mismo ejecutable, sólo se reduce el fuente. Es lo mismo que yo cambiara

a = 1;
b = 2;
c = 3;

por

a = 1; b = 2; c = 3;

(jajaja)

Por otra parte lo de "%-*s" está genial.

Yo habría hecho:


a = 1, b = 2, c = 3;


Y gracias por lo de genial, yo sólo lo calificaría de ingenioso y oportuno.

Un fuerte saludo.


¡¡¡¡ Saluditos! ..... !!!!



268  Programación / Programación C/C++ / Re: Problema c++ con codeblocks en: 26 Marzo 2014, 00:54 am

En las etiquetas Code no hace falta que cambies el color, es más , no funciona. Ya sale de color el solo.

¡¡¡¡ Saluditos! ..... !!!!


269  Programación / Programación C/C++ / Re: Problema c++ con codeblocks en: 25 Marzo 2014, 23:15 pm

Perdona una sola cosa más. Ya que seguro serás un usuario frecuente de este foro ten en cuenta que  para cuando cuelgues código elige las etiquetas GeSHi, están a la derecha de los iconos que aparecen en la parte superior del cuadrado donde escribes los mensajes, y toma la C++. Aparecerán unas etiquetas  y en medio de dichas etiquetas Code "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

¡¡¡¡ Saluditos! ..... !!!!


270  Programación / Programación C/C++ / Re: Problema c++ con codeblocks en: 25 Marzo 2014, 20:54 pm
Vale, ya esta solucionado, incluyendo la libreria stdlib.h y añadiendo un system("pause")
; ..................................
Muchas gracias por vuestro tiempo y ayuda.


Antes que nada enhorabuena por lograr resolver ese contratiempo. Suelen ser de las cosas que comen la moral de entrada. ;)

Y ya que lo mencionas, si estas usando Code::Blocks, como comentaste en el primer mensaje, él hace una pausa de forma automática antes de cerrarse la consola por lo que es innecesario el uso del system("pause"), incluso es innecesario si usas, como creo que deberías hacer, la última versión del Dev-C++, la 5.x. No así si usas la 4.x. En este último caso es más estándar hacer uso de un getchar() en lugar del  system("pause").


¡¡¡¡ Saluditos! ..... !!!!





Páginas: 1 ... 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [27] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 ... 132
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines