Ayuda con arreglos.

Iniciado por acega, 5 Marzo 2013, 21:47 PM

0 Miembros y 1 Visitante están viendo este tema.

acega

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 (cpp) [Seleccionar]
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
void main (void)
{
clrscr();
int arryc[99],arryS[99],spar=0,simp=0;
  //sleep()=[500];
  cout<<"Serie: "<<endl;
  cout<<"\n";
  for(int i=0;i<=99;i++)
  {
   arryc[i]=i+1;

   cout<<arryc[i]<<"\t";
  }
  arryS[99]=0;
  for (int i=0; i<=99;i++)
  {

   if ( arryS[i] % 2 == 0)
   {
   //arryS[i]=0;
   spar=spar+arryS[i];
   //spar+=arryS[i];
   }
   else
   {
   //arryS[i]=0;
   simp=simp+arryS[i];
   //simp+=arryS[i];
   }
  }
  cout<<"\nSuma pares:  ";
  cout<<spar<<endl;
  cout<<"\nSuma impares: ";
  cout<<simp<<endl;
  getch();
}

amchacon

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
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

dato000

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.


#include <iostream>

using namespace std;

main ()
{

  int arryc[99],arryS[99],spar=0,simp=0;
  //sleep()=[500];
  cout<<"Serie: "<<endl;
  cout<<"\n";

  for(int i=0;i<=99;i++)
  {
     arryc[i]=i+1;
     cout<<arryc[i]<<"\t";
  }


  for (int i=0; i<=99;i++)
  {
      if ( arryc[i] % 2 == 0)
      {
           //arryS[i]=0;
           spar=spar+arryc[i];
           //spar+=arryS[i];
       }
       else
       {
           //arryS[i]=0;
           simp=simp+arryc[i];
           //simp+=arryS[i];
       }
  }

  cout<<"\nSuma pares:  ";
  cout<<spar<<endl;
  cout<<"\nSuma impares: ";
  cout<<simp<<endl;

  cin.get();

}




leosansan

#3
Cita de: dato000 en  5 Marzo 2013, 22:10 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 (cpp) [Seleccionar]
Serie:

1       2       3       4       5       6       7       8       9       10      11      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      43      44      45      46      47      48      49
       50      51      52      53      54      55      56      57      58      59      60      61      62      63      64      65
       66      67      68      69      70      71      72      73      74      75      76      77      78      79      80      81
       82      83      84      85      86      87      88      89      90      91      92      93      94      95      96      97
       98      99      100

1       3       6       10      15      21      28      36      45      55      66      78      91      105     120     136     15
3       171     190     210     231     253     276     300     325     351     378     406     435     465     496     528     56
1       595     630     666     703     741     780     820     861     903     946     990     1035    1081    1128    1176    12
25      1275    1326    1378    1431    1485    1540    1596    1653    1711    1770    1830    1891    1953    2016    2080    21
45      2211    2278    2346    2415    2485    2556    2628    2701    2775    2850    2926    3003    3081    3160    3240    33
21      3403    3486    3570    3655    3741    3828    3916    4005    4095    4186    4278    4371    4465    4560    4656    47
53      4851    4950    5051

Suma pares:  5100


Suma impares: 7550


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

int main (void){
int arryc[100],arryS[100]={0},spar=0,simp=0;
 //sleep()=[500];
 cout<<"Serie: "<<endl;
 cout<<"\n";
 arryS[0]=1;
 for(int i=0;i<=99;i++){
  arryc[i]=i+1;
  if (i>0)
   arryS[i]+=i+1+arryS[i-1];
  cout<<arryc[i]<<"\t";
 }
 cout<<endl<<endl;
 for(int i=0;i<=99;i++)
   cout<<arryS[i]<<"\t";
 for (int i=0; i<=99;i++) {

  if ( arryc[i] % 2 == 0)
     spar=spar+arryc[i];
   else
       simp=simp+arryc[i];
 }
 cout<<endl<<"\nSuma pares:  ";
 cout<<spar<<endl;
 cout<<endl<<"\nSuma impares: ";
 cout<<simp<<endl;
 cin.get();
 return 0;
}


Saluditos!. ...

dato000

Cita de: leosansan en  5 Marzo 2013, 22:44 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  :¬¬ :¬¬




acega

Cita de: 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
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.

acega

Cita de: leosansan en  5 Marzo 2013, 22:44 PM


Porque además de los números se le pide que guarde en "otro" arreglo las sumas parciales
vamos algo como esto:
Saluditos!. ...


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 (cpp) [Seleccionar]
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 

leosansan

Cita de: acega en  6 Marzo 2013, 00:57 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 (cpp) [Seleccionar]
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!. ...

rir3760

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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
int arryc[100],arryS[100]={0},spar=0,simp=0;

// ...

for (int i = 0; i < 100; i++){
  arryc[i] = i + 1;

// ...


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language