Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Máximo y mínimo y número de repeticiones (C)

Estas en el tema de Máximo y mínimo y número de repeticiones (C) en el foro de C/C++ en Foros del Web. Necesito crear un programa que me calcule el máximo y el mínimo de un vector y las veces que estos se repiten. Llevo toda la ...
  #1 (permalink)  
Antiguo 12/10/2012, 16:46
Avatar de rodrigoemece  
Fecha de Ingreso: septiembre-2011
Mensajes: 68
Antigüedad: 12 años, 7 meses
Puntos: 1
Exclamación Máximo y mínimo y número de repeticiones (C)

Necesito crear un programa que me calcule el máximo y el mínimo de un vector y las veces que estos se repiten. Llevo toda la tarde intentándolo pero obtengo un error de modo que no me calcula bien el número de repeticiones.

Código:
#include <stdio.h>
main() 
{ 
    int max, nmax, min, nmin, i, n, vec[100];
     
    printf("Introduza o numero de enteiros do vector :");
    scanf("%d", &n);

    nmax=1;
    nmin=1;
     
      for(i=0; i<n; i++)
        {
          printf("Introduza o enteiro coa posicion %d: ", i);
          scanf("%d", &vec[i]);
          
          if (i==0) {
            max=vec[i];
            min=vec[i];
             }
        
          else if (vec[i]>max){
            max=vec[i];
            nmax=0;
             }

          else if (vec[i]==max){
            nmax=nmax+1;
             }
        
          else  if (vec[i]<min){
            min=vec[i];
            nmin=0;
             }

          else if (vec[i]==min){
            nmin=nmin+1;
             }
      }
     
                      
    printf("O maximo e: %d e aparece %d veces.\n", max, nmax);
    printf("O minimo e: %d e aparece %d veces.\n", min, nmin);
     
    return 0;     
}
Muchas gracias de antemano :)
  #2 (permalink)  
Antiguo 12/10/2012, 16:51
Avatar de rodrigoemece  
Fecha de Ingreso: septiembre-2011
Mensajes: 68
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Máximo y mínimo y número de repeticiones (C)

Esto se supone que es el guión:

1. Declaro variables para
* -> valor máximo
* -> nº apariciones del máximo
* -> valor mínimo
* -> nº apariciones del mínimo
* -> posición actual en el vector
*
*
2. Inicializo el vector (via scanf, por ej.)
3. Inicializo el máximo con el primer elemento
* Inicializo nº apariciones del máximo a 1
*
4. Me coloco en la segunda posición
5. Mientras no haya acabado de recorrer el vector
* 5.1 Comparo el elemento actual con el máximo
* Si es mayor, lo sustituyo y pongo a 1 el contador de apariciones
* Si es igual, incremento el nº de apariciones
* 5.2 avanzo

Creo que quizás falte un while antes del bucle for... El error siempre es el contador del máximo y el mínimo.
  #3 (permalink)  
Antiguo 12/10/2012, 17:45
Avatar de rodrigoemece  
Fecha de Ingreso: septiembre-2011
Mensajes: 68
Antigüedad: 12 años, 7 meses
Puntos: 1
De acuerdo Respuesta: Máximo y mínimo y número de repeticiones (C)

Al final he conseguido hacerlo funcionar, pero me gustaría saber si existe alguna forma de hacerlo más eficiente:

Código:
/* 
 * Nome:      Repeticións do máximo e mínimo dun vector
 * Arquivo:   main.c
 * Data:      12 de Outubro de 2012
 */

#include <stdio.h>
main() 
{ 
    int max, nmax, min, nmin, i, n, vector[100];
      
    printf("Introduza o numero de enteiros do vector: ");
    scanf("%d", &n);
    
    nmax=0;
    nmin=0;
        
      for(i=0; i<n; i++)
        {
          printf("Introduza o enteiro coa posicion %d: ", i);
          scanf("%d", &vector[i]);
          
          if (i==0) max=min=vector[i];
          else if (vector[i]>max) {max=vector[i]; nmax=0;}
          if (vector[i]==max) nmax++;
          else if (vector[i]<min){min=vector[i]; nmin=0;}
          if (vector[i]==min) nmin++;
        }    
    
    printf("O maximo e: %d e aparece %d veces.\n", max, nmax);
    printf("O minimo e: %d e aparece %d veces.", min, nmin);

    return 0;     
}

Etiquetas: int, programa, repeticiones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:40.