Pregunta

Tengo que encontrar una manera de mostrar el número máximo y minio en una matriz, el tamaño de la matriz es de 100 y no superior a eso y no hay necesidad de validación de entrada. El programa seguirá pidiendo la entrada hasta que se encuentre 0 y también lo conseguirá agregado a la matriz.

he dado cuenta de todo excepto cómo seguir la pista que es el valor mayor y el menor. Te agradecería que si alguien puede arreglar mi código o mostrar me.Another problema que estoy teniendo es conseguir que el bucle para terminar y hacer el cálculo max / min dentro del bucle while cuando la entrada es igual a 0.

/*
 ============================================================================
 Name        : test.c
 Author      :
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#define n  100
int main(void){


 int numbers[n];
 int i = 1;
 int j;
        int input;
 int maxvalue;
 int minvalue;

   printf("Enter the next array element>");

input = scanf("%d", &numbers[100]);



while (input != 0){

  numbers[i] = input;
  i++;
  printf("Enter the next array element, while loop>");
  input = scanf("%d", &numbers[n]);
  if (input == 0){
printf("Enter the next array element, if loop");
   numbers[i] = 0;

   for (j =2;j <= i; j++){
    minvalue = numbers[1];

    j++;
    if (numbers[j] > minvalue){
     maxvalue = numbers[j] ;
    }
    else{
     minvalue = numbers[j] ;
    }

   }


  }
 }


printf("%f\t", maxvalue);

printf("%f\n", minvalue); 
 }

EDIT: Tomé todo apagado sus sugerencias y editado mi código. Este es mi código de abajo. Sin embargo, isnt de salida de lo que estoy esperando.

#include <stdio.h>
#include <stdlib.h>
#define N  100
int main(void){


    int numbers[N];
    int i = 0;
    int j;
        int input;
    int maxvalue;
    int minvalue;

            printf("Enter the next array element>");

scanf("%d", &input);



while (input != 0){

        numbers[i] = input;
        i++;

        if (input == 0){
                   i++;
            numbers[i] = 0;
                        minvalue = numbers[0];
                        maxvalue = numbers[0];
                        for (j=0;j<=i-1;j++){

                            if (minvalue >= numbers[j]){
                                minvalue = numbers[j];
                            }else if (maxvalue <= numbers[j]){
                                maxvalue = numbers[j];
                            }


                        }

/* min = value of first array element
max = value of first array element

begin loop for each array element, index = 0 to (n-1)

--- if array element value is less than min, set min to this value
--- if array element value is more than max, set max to this value

increment index and repeat loop til last index is completed

average = sum / number of elements (n).
max and min will hold their correct values.*/




        }
                printf("Enter the next array element, while loop>");
    scanf("%d", &input);
    }


printf("%d\t", maxvalue);
printf("%d", minvalue);
    }

Esta es la salida, me estoy haciendo! Alguien puede resolver esto por mí.

Enter the next array element>1
Enter the next array element, while loop>2
Enter the next array element, while loop>3
Enter the next array element, while loop>0
12190144 l6Press [Enter] to close the terminal

edición final: He resuelto esto por mi cuenta. Pongo el min / max comprobación fuera del bucle WHILE maestro, esto permitió la entrada de 0 a ser introducido en la matriz.

#include <stdio.h>
#include <stdlib.h>
#define N  100
int main(void){


    int numbers[N];
    int i = 0;
    int j;
        int input;
    int maxvalue =1;
    int minvalue = 1;
            printf("Enter the next array element>");

scanf("%d", &input);
minvalue = input;
maxvalue = input;



while (input != 0){
    numbers[i] = input;

    ++i;
                printf("Enter the next array element>");
    scanf("%d", &input);

if (input == 0){
numbers[i] = 0;
  ++i;

  }

}
for (j =0;j<i;j++){
 if (numbers[j] >= maxvalue){
                                maxvalue = numbers[j];
                            }
                            if(numbers[j] < minvalue){
                                minvalue = numbers[j];
                            }

}

printf("%d\t", maxvalue);
printf("%d\n", minvalue);

    }
¿Fue útil?

Solución

En primer lugar, usted está asignando a input el valor de retorno de scanf(). Este es el número de elementos asignados por la llamada, y puesto que usted dice que la entrada siempre será correcta, este valor será siempre 1.

En segundo lugar, se está escribiendo más allá del final de la matriz numbers[] con la línea:

input = scanf("%d", &numbers[100]);

(que debe hacer scanf("%d, &input) lugar, y numbers[i] asignar a la entrada en el bucle.

Por último, no es necesario volver a calcular a maxvalue y minvalue por iteración a través de numbers[] cada iteración del bucle. En cambio, sólo compararlos con input y asignar en consecuencia.

espero que esto le pone en el camino correcto.

Otros consejos

Parece que el problema central es que se compara cada número sólo contra minvalue. Eso está bien para decidir si desea reemplazar el minvalue actual, pero es obvio que no te dice nada acerca de la relación de cada elemento a maxvalue.

Otro problema: que tiene sentido para inicializar MINVALUE desde el primer elemento, pero no si lo hace en el bucle. Que sólo invalida todo su trabajo anterior.

Debe hacer lo mismo con la inicialización maxvalue también. Usted debe inicializar ese número para el primer valor.

También se debe tomar una decisión sobre el cálculo de los valores mínimo y máximo a medida que se acumulan los datos o en un pase a través de los datos cuando haya terminado. Lo que no quiere hacer, sin embargo, es bucle a través de los elementos anteriores con cada uno nuevo. Eso le da a su programa complejidad del tiempo cuadrática para ningún beneficio.

Por último, no toleran de mala muerte de formatear. Depuración siempre implica estudiar el código y lo querrá para siempre estar perfectamente formateado tanto a ser profesional acerca de las cosas y también para facilitar la lectura de su propio trabajo.

Usted está pidiendo dos preguntas, acerca de la estrategia para el min / max y computación para el bucle. No hagas eso (a sí mismo), sino resolver un problema a la vez. Así que primero poner algo como

signed int input[] = { 8, -5 , /* some more values */ };
size_t const n = sizeof input/ sizeof input[0];

al principio y olvidarse de sus problemas scanf.

A continuación, envolver su min / max detección en la instrucción de bucle adecuado.

A continuación, compilar el código con advertencias sobre:. -Wall por ejemplo para gcc, pero esto puede variar para su compilador

Mina el me dice algo:

test-numbers.c: 21: advertencia: 'maxvalue' puede ser utilizado sin inicializar en este función de prueba-numbers.c: 22: advertencia: 'MINVALUE' se puede utilizar sin inicializar en esta función

Esto le indica que usted está haciendo algo muy mal en no tener en cuenta el punto de partida de su algoritmo bien.

He reindented su código y mucha de ella reemplazó con `/ * ... * ... PLACEHOLDER /

#include <stdio.h>
#include <stdlib.h>
#define N  100
int main(void) {
    int numbers[N];
    int i = 0;
    int input;
    int maxvalue;
    int minvalue;

    printf("Enter the next array element>");
    scanf("%d", &input);

    while (input != 0) {
        numbers[i] = input;
        i++;

        if (input == 0) {
            /* ...PLACEHOLDER... */
        }
        printf("Enter the next array element, while loop>");
        scanf("%d", &input);
    }
    printf("%d\t", maxvalue);
    printf("%d", minvalue);
}

Con suerte se puede ver lo que sucede cuando se introduce 1, o 2, o 3, y cuando enetr 0.

pista:. maxvalue valores y minvalue no se cambian

Otra sugerencia: ¿cuántas veces ejecutar la línea while()


Editar con el ejemplo de ejecución

En este ejemplo de ejecución, el código está en el lado izquierdo, lo que sucede es en el lado izquierdo

        printf("Enter the next array element>"); |
        scanf("%d", &input);                     | Enter 42
                                                 |
        while (input != 0) {                     | input is 42, so you do the loop
            numbers[i] = input;                  | numbers[0] = 42
            i++;                                 | i = 1
                                                 |
            if (input == 0) {                    | input != 0; skip placeholder
                /* ...PLACEHOLDER... */          |
            }                                    |
            printf("Enter the next ...>");       |
            scanf("%d", &input);                 | enter 3
        }                                        | 
        while (input != 0) {                     | input is 3
            numbers[i] = input;                  | numbers[1] = 3
            i++;                                 | i = 2
                                                 |
            if (input == 0) {                    | input != 0; skip placeholder
                /* ...PLACEHOLDER... */          |
            }                                    |
            printf("Enter the next ...>");       |
            scanf("%d", &input);                 | enter 0
        }                                        | 
        while (input != 0) {                     | input is 0, skip while body
            /* ...PLACEHOLDER... */              |
        }                                        |
        printf("%d\t", maxvalue);                | maxvalue hasn't been initialized
        printf("%d", minvalue);                  | minvalue hasn't been changed
int cmp(const void *a,const void *b)
{
  return *(const int*)a-*(const int*)b;
}
...
qsort( numbers, 100, sizeof(numbers[0]), cmp );
printf("\nmin: %d\nmax: %d",numbers[0],numbers[99]);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top