Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: acega en 5 Marzo 2013, 21:47 pm



Título: Ayuda con arreglos.
Publicado por: acega en 5 Marzo 2013, 21:47 pm
Es un programa que imprime los numeros del 1 al 100, el resultado de la suma de los pares y el resultado de la suma de los impares.(debe de utilizar dos arreglos uno que arroje la serie y otro el resultado de las sumas)
La serie si la imprime bien pero al momento de que mando a imprimir las sumas me arroja valores basura, el código es este:
Código
  1. #include <stdio.h>
  2. #include <iostream.h>
  3. #include <conio.h>
  4. #include <windows.h>
  5. #include <stdlib.h>
  6. void main (void)
  7. {
  8. clrscr();
  9. int arryc[99],arryS[99],spar=0,simp=0;
  10.  //sleep()=[500];
  11.  cout<<"Serie: "<<endl;
  12.  cout<<"\n";
  13.  for(int i=0;i<=99;i++)
  14.  {
  15.   arryc[i]=i+1;
  16.  
  17.   cout<<arryc[i]<<"\t";
  18.  }
  19.  arryS[99]=0;
  20.  for (int i=0; i<=99;i++)
  21.  {
  22.  
  23.   if ( arryS[i] % 2 == 0)
  24.   {
  25.   //arryS[i]=0;
  26.   spar=spar+arryS[i];
  27.   //spar+=arryS[i];
  28.   }
  29.   else
  30.   {
  31.   //arryS[i]=0;
  32.   simp=simp+arryS[i];
  33.   //simp+=arryS[i];
  34.   }
  35.  }
  36.  cout<<"\nSuma pares:  ";
  37.  cout<<spar<<endl;
  38.  cout<<"\nSuma impares: ";
  39.  cout<<simp<<endl;
  40.  getch();
  41. }


Título: Re: Ayuda con arreglos.
Publicado por: amchacon en 5 Marzo 2013, 21:55 pm
Inicializas arryc pero no arryS.

Por cierto, para que usas las conio? No son multiplataforma y en vez de getch() puedes usar getchar().

Algo parecido te diría con windows.h


Título: Re: Ayuda con arreglos.
Publicado por: dato000 en 5 Marzo 2013, 22:10 pm
Pues viejo, no veo el porque debes usar otro arreglo para usarlo en la suma de numeros pares e impares. Simplemente reutiliza el mismo arreglo en otro ciclo por separado y lo usas para filtrar y sumas en una variable u otra y ya lo tienes, más que nada, ya que estas usando, debes saber cuales son las librerias que necesitas:

#include <stdio.h> ---> no la necesitas, es la libreria estandar de C para flujo de datos de entrada y salida, usa scanf, printf y similares, funciona en C, no para C++
#include <iostream.h> ---> el unico que necesitas, es para el cin y el cout, osease, el flujo de datos de entrada y salida en C++.
#include <conio.h> ----> no lo necesitas, es para edición de colores, solo funciona en windows
#include <windows.h> ----> no lo necesitas, es para crear y configurar interfaces de ventana o formularios graficos, no es portable para multiplataforma, es decir, funciona solo en windows
#include <stdlib.h> ---> no lo necesitas, es de C
void main (void) ---> main(), bueno, eso depende del compilador, pero generalmente es así

Va tu solución a mi me funciono bien ahora. El problema no era de iniciar las variables, es que simplemente usabas un arreglo que pues, estaba lleno de basura (no inicializado), pero que de todas maneras sobraba, con el primer arreglo es más que suficiente, lo que necesitabas es hacer otro ciclo de lectura de ese arreglo.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. main ()
  6. {
  7.  
  8.  int arryc[99],arryS[99],spar=0,simp=0;
  9.  //sleep()=[500];
  10.  cout<<"Serie: "<<endl;
  11.  cout<<"\n";
  12.  
  13.  for(int i=0;i<=99;i++)
  14.  {
  15.     arryc[i]=i+1;
  16.     cout<<arryc[i]<<"\t";
  17.  }
  18.  
  19.  
  20.  for (int i=0; i<=99;i++)
  21.  {
  22.      if ( arryc[i] % 2 == 0)
  23.      {
  24.           //arryS[i]=0;
  25.           spar=spar+arryc[i];
  26.           //spar+=arryS[i];
  27.       }
  28.       else
  29.       {
  30.           //arryS[i]=0;
  31.           simp=simp+arryc[i];
  32.           //simp+=arryS[i];
  33.       }
  34.  }
  35.  
  36.  cout<<"\nSuma pares:  ";
  37.  cout<<spar<<endl;
  38.  cout<<"\nSuma impares: ";
  39.  cout<<simp<<endl;
  40.  
  41.  cin.get();
  42.  
  43. }
  44.  


Título: Re: Ayuda con arreglos.
Publicado por: leosansan en 5 Marzo 2013, 22:44 pm
Pues viejo, no veo el porque debes usar otro arreglo
....................




Porque además de los números se le pide que guarde en "otro" arreglo las sumas parciales

Citar

(debe de utilizar dos arreglos uno que arroje la serie y otro el resultado de las sumas)

vamos algo como esto:

Código
  1. Serie:
  2.  
  3. 1       2       3       4       5       6       7       8       9       10      11      12      13      14      15      16      17
  4.        18      19      20      21      22      23      24      25      26      27      28      29      30      31      32      33
  5.        34      35      36      37      38      39      40      41      42      43      44      45      46      47      48      49
  6.        50      51      52      53      54      55      56      57      58      59      60      61      62      63      64      65
  7.        66      67      68      69      70      71      72      73      74      75      76      77      78      79      80      81
  8.        82      83      84      85      86      87      88      89      90      91      92      93      94      95      96      97
  9.        98      99      100
  10.  
  11. 1       3       6       10      15      21      28      36      45      55      66      78      91      105     120     136     15
  12. 3       171     190     210     231     253     276     300     325     351     378     406     435     465     496     528     56
  13. 1       595     630     666     703     741     780     820     861     903     946     990     1035    1081    1128    1176    12
  14. 25      1275    1326    1378    1431    1485    1540    1596    1653    1711    1770    1830    1891    1953    2016    2080    21
  15. 45      2211    2278    2346    2415    2485    2556    2628    2701    2775    2850    2926    3003    3081    3160    3240    33
  16. 21      3403    3486    3570    3655    3741    3828    3916    4005    4095    4186    4278    4371    4465    4560    4656    47
  17. 53      4851    4950    5051
  18.  
  19. Suma pares:  5100
  20.  
  21.  
  22. Suma impares: 7550
  23.  

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main (void){
  5. int arryc[100],arryS[100]={0},spar=0,simp=0;
  6.  //sleep()=[500];
  7.  cout<<"Serie: "<<endl;
  8.  cout<<"\n";
  9.  arryS[0]=1;
  10.  for(int i=0;i<=99;i++){
  11.   arryc[i]=i+1;
  12.   if (i>0)
  13.    arryS[i]+=i+1+arryS[i-1];
  14.   cout<<arryc[i]<<"\t";
  15.  }
  16.  cout<<endl<<endl;
  17.  for(int i=0;i<=99;i++)
  18.    cout<<arryS[i]<<"\t";
  19.  for (int i=0; i<=99;i++) {
  20.  
  21.   if ( arryc[i] % 2 == 0)
  22.      spar=spar+arryc[i];
  23.    else
  24.        simp=simp+arryc[i];
  25.  }
  26.  cout<<endl<<"\nSuma pares:  ";
  27.  cout<<spar<<endl;
  28.  cout<<endl<<"\nSuma impares: ";
  29.  cout<<simp<<endl;
  30.  cin.get();
  31.  return 0;
  32. }
  33.  

Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Ayuda con arreglos.
Publicado por: dato000 en 5 Marzo 2013, 22:56 pm


Porque además de los números se le pide que guarde en "otro" arreglo las sumas parciales

vamos algo como esto:
ahhh pensaba que era opcional, entendi mal, bueno en fin  :¬¬ :¬¬



Título: Re: Ayuda con arreglos.
Publicado por: acega en 6 Marzo 2013, 00:31 am
Inicializas arryc pero no arryS.

Por cierto, para que usas las conio? No son multiplataforma y en vez de getch() puedes usar getchar().

Algo parecido te diría con windows.h

Porque la conio es la que me enseñaron (apenas voy comenzando con el c++) la windows es por que le queria poner un sleep a la serie del 1 al 100 pero no supe como y olvide quitarla, gracias.


Título: Re: Ayuda con arreglos.
Publicado por: acega en 6 Marzo 2013, 00:57 am


Porque además de los números se le pide que guarde en "otro" arreglo las sumas parciales
vamos algo como esto:
Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


gracias leosansan!! tu código me ayudo mucho pude resolver el problema en el mio  ;D (en lo unico que tengo duda fue en esto:
Código
  1. int arryc[99],arryS[99]={0},spar=0,simp=0;
en arryS el cero entre llaves es una forma de declararlo o la sintaxis correcta?)
gracias dato000!! yo pensé lo mismo que tu pero la maestra me pidió 2 arreglos, lo de las librerias: la conio.h stdio.h y iostream.h son las que me enseñaron que hay que poner por default(ahora veo que no gracias! :D ), la de windows es por que le quería poner un sleep y no supe cómo, las otras las ocupe para otro programa y olvide quitarlas  :xD 


Título: Re: Ayuda con arreglos.
Publicado por: leosansan en 6 Marzo 2013, 01:18 am

gracias leosansan!! tu código me ayudo mucho pude resolver el problema en el mio  ;D (en lo unico que tengo duda fue en esto:
Código
  1. int arryc[99],arryS[99]={0},spar=0,simp=0;
en arryS el cero entre llaves es una forma de declararlo o la sintaxis correcta?)
...............................................


Siempre que una varaible se va a usar de "sumador" combiene inicializar a cero para que no contenga previamente valore impredecibles asignados por el compilador o valores basura. Es lo mismo que haces inicializando spar=0,simp=0.


Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/ciao.gif)


Título: Re: Ayuda con arreglos.
Publicado por: rir3760 en 6 Marzo 2013, 02:46 am
Otro detalle que se debe corregir en el programa son los indices utilizados para acceder a los arrays. Al declararse en esta forma:
Código
  1. int arryc[99],arryS[99]={0},spar=0,simp=0;
Se declaran dos arrays con 99 elementos cada uno y cuyos indices validos son 0 .. 98.

Si la intención es declarar dos arrays de 100 elementos cada uno se debe cambiar a:
Código
  1. int arryc[100],arryS[100]={0},spar=0,simp=0;
  2.  
  3. // ...
  4.  
  5. for (int i = 0; i < 100; i++){
  6.  arryc[i] = i + 1;
  7.  
  8. // ...

Un saludo