Presentación y exposición de dudas

Iniciado por Mahlahj, 26 Febrero 2018, 00:07 AM

0 Miembros y 2 Visitantes están viendo este tema.

Mahlahj

Buenas tardes comunidad.
Soy nuevo en el mundo de la informática pues acabo de entrar a la ingeniería informática como tal.
Soy abogado de profesión e informático por convicción. Pero había estado dudando sobre la viabilidad, al menos por la edad, de cursar dicha "carrera", pero se dio la oportunidad y heme aquí.

Por otra parte, tengo dudas sobre éste código que he estado redactando. Se supone que debe arrojar el promedio, la moda, la desviación estándar, acomodar los dígitos de mayor a menor y viceversa, además de sólo poder ingresar números excluyendo las letras. Pero, por más que lo muevo, no logro dar con alguna solución para la moda, la desviación estándar ni la exclusión de letras. He borrado el ciclo de la desviación estándar pues no compila al redactarlo. Agradecería sobremanera los aportes al respecto

Así, sin más qué agregar, les dejo el código.
Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define Max_Calificacion 20
#define CLEAR "cls"

#ifdef _WIN32
#else
#endif

int calificacion[Max_Calificacion];
int i,j,aux;
int suma;
float promedio;
int rango;
int mas_grande;
int valor_moda;
int frecuencia[Max_Calificacion]={0};
int mayor=0;
int menor=100;
char Repetir;

int main()
{
   do {
   for(i=0; i<Max_Calificacion; i++)
       {
       printf("Ingresa las calificaciones\n\n");
       printf("Calificacion No.%d ", i+1);
       scanf("%d", &calificacion[i]);
       if(calificacion[i]<=100)
           {
               if(calificacion[i]>0)
               {
                   system("cls");
               }
       system("cls");
           }
       else{
           printf("Eso no es valido");
           getch();
           i--;
           }
       system("cls");
       }
   for(i=0; i<Max_Calificacion; i++)
   {
       suma=suma+calificacion[i];
   }
   promedio=suma/Max_Calificacion;
   system("cls");
   printf("Resultados");
   for(i=0; i<Max_Calificacion; i++)
       {
       printf("\nLa calificacion No.%d es %d", i+1, calificacion[i]);
       }
   getch();
   system("cls");
   for(i=0; i<Max_Calificacion; i++)
   {
       for(j=i+1; j<Max_Calificacion; j++)
       {
           if(calificacion[i]<calificacion[j])
           {
               aux=calificacion[i];
               calificacion[i]=calificacion[j];
               calificacion[j]=aux;
           }
       }
   }
   printf("Ordenados de mayor a menor\n\n");
   for(i=0; i<Max_Calificacion; i++)
   {
       printf("%d, ", calificacion[i]);
   }
   getch();
   system("cls");
   for(i=0; i<Max_Calificacion; i++)
   {
   for(j=i+1; j<Max_Calificacion; j++)
       {
       if(calificacion[i]>calificacion[j])
           {
           aux=calificacion[i];
           calificacion[i]=calificacion[j];
           calificacion[j]=aux;
           }
       }
   }
   printf("Ordenados de menor a mayor\n\n");
   for(i=0; i<Max_Calificacion; i++)
   {
       printf("%d, ", calificacion[i]);
   }
   getch();
   system("cls");
   printf("Promedio\n\n");
   printf("El promedio es %f", promedio);
   getch();
   system("cls");
   printf("Moda\n\n");
   for(i=0; i<Max_Calificacion; i++)
           {
           frecuencia[calificacion[i]]++;
           }
   for (rango = 1; rango <= Max_Calificacion; rango++)
           {
           if (frecuencia[rango] > mas_grande )
               {
               mas_grande = frecuencia[rango];
               valor_moda = rango;
               }
           }
printf("La moda es %d", valor_moda);
getch();
system("cls");
printf("Numero mayor\n\n");
for (i=0; i<Max_Calificacion; i++)
   {
   if (calificacion[i] > mayor)
       {
       mayor=calificacion[i];
       }
   }
printf("El mayor es %d\n", mayor);
getch();
system("cls");
printf("Numero menor\n\n");
for (i=0; i<Max_Calificacion; i++)
   {
   if (calificacion[i] < menor)
       {
       menor=calificacion[i];
       }
   }
printf("El menor es %d\n", menor);
getch();
system("cls");
printf("\n\n\tRepetir Programa (S) ?: ");
   scanf("%s", &Repetir);
   system("cls");
       }
   while (Repetir == 'S' || Repetir == 's');
   printf("Adios");
   getch();
return 0;
}


marcebond

No vas mal, deberías separar las tareas (como obtener media, moda, mediana y desviación) en funciones

#include <stdio.h>
#include <stdlib.h>

typedef unsigned short ushort;

void leer(float*, ushort);
void ordenar(float*, ushort);
void imprimir(float*, ushort);

float moda(float*, ushort);
float media(float*, ushort);
float mediana(float*, ushort);
float desviacion(float*, ushort);

int main(void) {
   const ushort longitud = 5;
   float notas[longitud];

   leer(notas, longitud);
   ordenar(notas, longitud);
   imprimir(notas, longitud);

   printf(
        "Menor: %.1f\n"
        "Mayor: %.1f\n"
        "Moda: %.1f\n"
        "Media: %.1f\n"
        "Mediana: %.1f\n"
        "Desviación: %.1f\n",
        notas[0],
        notas[longitud - 1],
        moda(notas, longitud),
        media(notas, longitud),
        mediana(notas, longitud),
        desviacion(notas, longitud)
   );

   return EXIT_SUCCESS;
}

void leer(float* notas, ushort longitud) {
   for(ushort nota = 0; nota < longitud; nota++) {
       printf("Nota %hu > ", nota + 1);
       scanf("%f", &notas[nota]);
   }
}

void ordenar(float *notas, ushort longitud) {
   for(ushort vuelta = 1; vuelta < longitud; vuelta++) {
       for(ushort nota = 0; nota < longitud - vuelta; nota++) {
           if (notas[nota] > notas[nota + 1]) {
               float actual = notas[nota];
               notas[nota] = notas[nota + 1];
               notas[nota + 1] = actual;
           }
       }
   }
}

void imprimir(float *notas, ushort longitud) {
   for(ushort nota = 0; nota < longitud; nota++) {
       printf("%.1f%s", notas[nota], nota < longitud - 1 ? ", " : "\n");
   }
}

float moda(float *notas, ushort longitud) {
   float moda = 0, anterior = 0;
   for (ushort vuelta = 0; vuelta < longitud; vuelta++) {
       ushort repeticiones = 0;
       for (ushort nota = 0; nota < longitud; nota++) {
           if (notas[vuelta] == notas[nota]) {
               repeticiones++;
           }
       }
       if (repeticiones > anterior) {
           anterior = repeticiones;
           moda = notas[vuelta];
       }
   }
   return moda;
}

float media(float *notas, ushort longitud) {
   float suma = 0;
   for(ushort nota = 0; nota < longitud; nota++) {
       suma += notas[nota];
   }
   return suma / longitud;
}

float mediana(float *notas, ushort longitud) {
   return
       longitud % 2 != 0 ?
       notas[(ushort) (longitud - 1) / 2] :
       (notas[(longitud - 1) / 2] + notas[(longitud - 1) / 2 + 1]) / 2;
}

float desviacion(float *notas, ushort longitud) {
   float suma = 0;
   for(ushort nota = 0; nota < longitud; nota++) {
       suma += pow(notas[nota] - media(notas, longitud), 2);
   }
   return sqrt(suma/longitud);
}

Mahlahj

MUCHAS GRACIAS ! ! !
No había pensado en ésto! :D

void leer(float*, ushort);
void ordenar(float*, ushort);
void imprimir(float*, ushort);

float moda(float*, ushort);
float media(float*, ushort);
float mediana(float*, ushort);
float desviacion(float*, ushort);