Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: raullopez en 28 Mayo 2014, 06:10 am



Título: me explican que hace cada ciclo
Publicado por: raullopez en 28 Mayo 2014, 06:10 am
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
 
void estadisticaArray(double *array, int t, double *mayor, double *menor, double *media);
 
int main(){
double A[]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8};
double mx, mn, md;
estadisticaArray(A,8,&mx,&mn,&md);
printf("Mayor %lf, Menor %lf, Media %lf", mx, mn, md);
getch();
}
 
void estadisticaArray(double *array, int t, double *mayor, double *menor, double *media){
int i;
double suma=0; /* Almacena la suma de los contenidos del array */

*mayor=*array;*menor=*array;
for(i=0;i<t;i++){
if(*mayor<array) *mayor=array;
if(*menor>array) *menor=array;
suma+=array;
}
*media=suma/t;
}


Título: Re: me explican que hace cada ciclo
Publicado por: engel lex en 28 Mayo 2014, 06:56 am
el tipo de preguntas que haces y hacer múltiples respuestas a tu mismo tema seguido va a llevar a que no te respondan, si necesitas añadir algo usa el botón de modificar, no respondas 2 veces seguidas un post, y cuando publiques código usa las etiquetas GeSHi (arriba de los emoticones a la derecha)

este es un foro para practicar y aprender, recomiendo que leas lo básico de c++ y analices tu mismo, es muy poco probable que respondan un "me explican todo el programa" en relación a  "qué hace específicamente esta linea?" con la segunda no solo responderían brevemente (si hay gente viendo), sino que tendrías varias opiniones

por otro lado la mayor parte de los compiladores tiene debugger, te permite correr el programa paso a paso y ver que hace en todo momento, puedes buscar en google como usar el debugger de el IDE que estés usando


Título: Re: me explican que hace cada ciclo
Publicado por: Yoel Alejandro en 30 Mayo 2014, 03:14 am
Bueno, en líneas generales te voy a decir que la función estadisticaArray toma como primer ()argumento un array de números reales, como segundo argumento la cantidad de elementos del vector, y los argumentos tercero, cuarto y quinto (pasados por "referencia") son para obtener el mayor, menor y promedio de los elementos del vector, respectivamente.

Para comprender mejor el funcionamiento debes estudiar el tema de punteros o apuntadores en C, así como paso a funciones de argumentos por referencia.

Y aprovecho para declarar que estoy en desacuerdo con la línea del programa:

suma += array

puesto que no está sumando los elementos del arreglo, como cabría esperar. Debería ser:

suma += array[ i ]

¿no?

También, tiene otras cosas extrañas, por ejemplo

if(*mayor<array) *mayor=array;

para empezar no debería ser '<', sino '>', y tampoco se accede a un elemento específico dentro del array. Pienso que debería ser:

if(*mayor > array) *mayor = array[ i ];

o a menos que incrementes el valor de array en cada ejecución del ciclo, cosa que tampoco veo que se haga.

Cuéntanos de dónde sacaste este programa, porque tiene como varios errores ...  :rolleyes:


Título: Re: me explican que hace cada ciclo
Publicado por: eferion en 30 Mayo 2014, 08:26 am
Y aprovecho para declarar que estoy en desacuerdo con la línea del programa:

suma += array

puesto que no está sumando los elementos del arreglo, como cabría esperar. Debería ser:

suma += array[ i ]

¿no?

Exacto, array es un puntero... sin el asterisco el código suma posiciones de memoria, no valores.

También, tiene otras cosas extrañas, por ejemplo

if(*mayor<array) *mayor=array;

para empezar no debería ser '<', sino '>' ...

¿¿??

Si el programa pretende almacenar en "mayor" el número más alto dentro de un array... debería actualizar "mayor" cada vez que el número correspondiente en "array" es más grande, no?

En consecuencia el operador está bien... lo que sucede es como has coemntado, que se siguen sumando posiciones de memoria.


o a menos que incrementes el valor de array en cada ejecución del ciclo, cosa que tampoco veo que se haga

O usa el operador de indización o usa asteriscos, si usa el puntero como lo está haciendo únicamente obtendrá posiciones de memoria.


Título: Re: me explican que hace cada ciclo
Publicado por: Yoel Alejandro en 1 Junio 2014, 01:55 am
En efecto eferion, disculpen todos mi lapsus, la relación de orden está bien. Pero lo malo sigue siendo que no indexa el array. Para mí que la idea original del programa era hacer
Código
  1. *(array + i)
o también hubiera servido incrementar el valor del puntero array
Código
  1. for(i=0; i<t; i++, array++){
  2.    if(*mayor < *array) *mayor = *array;
  3.    if(*menor > *array) *menor = *array;
  4.    suma+= *array;
  5. }

Yo particularmente entre ambas, prefiero la forma que mencioné primero pues así damos uso a la variable i para algo más que como contador.