me explican que hace cada ciclo

Iniciado por raullopez, 28 Mayo 2014, 06:10 AM

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

raullopez

#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;
}

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Yoel Alejandro

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:
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

eferion

Cita de: yoel_alejandro en 30 Mayo 2014, 03:14 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.

Cita de: yoel_alejandro en 30 Mayo 2014, 03:14 AM
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.


Cita de: yoel_alejandro en 30 Mayo 2014, 03:14 AM
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.

Yoel Alejandro

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

*(array + i)

o también hubiera servido incrementar el valor del puntero array

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


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.
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)