[C con Clase] Programa para sumar dos arreglos del mismo tamaño

Steven Davidson srd4121 en njit.edu
Mar Ago 19 20:23:46 CEST 2008


Hola Cristian,

Cristian wrote:
> Hoy en clase de programacion vi arreglos y me pidieron hacer un
> ejercicio de suma de dos arreglos.
> 
> me atore un una parte, esto es lo que llevo:
> 

Veamos el código fuente.

> #include <iostream.h>
> 
> main ()

Sospecho que estás usando un compilador de C++ antiguo y ya obsoleto 
como puede ser Turbo C++ o incluso Borland C++. La "preparación" 
correcta es la siguiente:

#include <iostream>

using namespace std;

int main()

> {
>      int size;
>      cout <<"Cuantos valores quieres?"

Te hace falta un punto y coma al final.

>      cin >> size;
>      int a [size];
>      int b [size];
>      int c [size];

Esto no es correcto. No puedes crear un array de esta manera. Algunos 
compiladores aceptarán esta forma, pero realmente establece 0 (cero) de 
tamaño. Por otro lado, hay algunos compiladores que sí realizarán lo que 
quieres hacer. El comportamiento estándar es no aceptar esta forma y 
simplemente marcar un error.

El array es una entidad estática. Esto significa que el compilador debe 
conocer su tamaño, obviamente en la fase de compilación. Por esta razón, 
sólo podemos usar expresiones constantes para indicar la cantidad de 
elementos para un array. Esto es,

int a[100];

o incluso,

int a[100/2+9];

(Nota: Sí existe una manera de crear "arrays dinámicos", pero necesitas 
saber punteros y memoria dinámica como el operador 'new[]').

>      generar (a,size);
>      generar (b,size);

No existe la función 'generar()'.

>      sumaArreglos (a,b,c,size);
>      cout << "Arreglo A";
>      imprimir (a, size);
>      cout <<"Arreglo B";
>      imprimir (b, size);
>      
>      
> }     

Hace falta retornar un valor. Por convenio, se retorna 0 (cero) para 
indicar que todo ha ido bien. Esto es,

int main()
{
   ...
   return 0;
}

>      
>      void imprimir(int x[],int n)
> {
>     int j;    
>     for(j=0;j<n;j++)
>       cout<<x[j]<<" ";
>     cout<<endl;   
> }    
> 
> void sumaArreglos (int a[], inte b[], int c[], int n)

Debería ser: int b[] y no 'inte'.

> {
>      int i;
>      for (1=0; i<n;i++)

Aquí tienes escrito inicialmente "uno es asignado cero". Esto debería ser:

for( i=0; i<n; i++ )

>      c[i]=a[i]

Sospecho que aquí tienes la suma:

c[i] = a[i] + b[i];


El otro problema que tienes es que no has escrito los prototipos de 
estas dos funciones antes de que las uses; o sea, antes de definir 
'main()'. Debes escribir al menos los prototipos; por ejemplo,

#include <iostream>

using namespace std;


void imprimir( int x[], int n );
void sumaArreglos( int a[], int b[], int c[], int n );
void generar( int a[], int n );

int main()
{
   ...
}


Espero haber aclarado las dudas.

Steven





Más información sobre la lista de distribución Cconclase