Valore minimo di un array

di il
13 risposte

Valore minimo di un array

Ragazzi ho un problema stavo compilando un programma dove c'era in una piccola parte di trovare il valore minimo di un array, ma niente non fa quello che gli ho chiesto
mi potreste controllare il codice se è esatto o meno?



#include<iostream>
using namespace std;
int main()
{
    const int DIM=50;
    int a[]={5,7,8,3,4,90};
    int minimo=a[0];
    int i;
    for(i=0;i<DIM;i++)
    {
        if(a[i]<minimo)
        minimo=a[i];
        else
        minimo=a[0];
    }
cout<<minimo;

return 0;
}


13 Risposte

  • Re: Valore minimo di un array

    Togli la parte else. Perche DIM a 50 se hai 6 elementi?
  • Re: Valore minimo di un array

    Ok funziona ti ringrazio
  • Re: Valore minimo di un array

    NO, non funziona. a partire da a[6] e a finire su a[49] il tuo programma va a leggere nel mondo dei sogni mandando in crash se stesso. Quindi non lasciare le cose a metà e correggi la parte del DIM = 50.
  • Re: Valore minimo di un array

    Puoi usare, in questo caso
    int DIM=sizeof(a);
    cosi conosci la dimensione del vettore.
  • Re: Valore minimo di un array

    Errore: codice giusto
    
    const int DIM = sizeof a / sizeof a[0];
    
    http://msdn.microsoft.com/en-us/library/4s7x1k91.asp
  • Re: Valore minimo di un array

    Nel codice messo da msdn inserisce la stringe uguale a come l'ho scritta.
  • Re: Valore minimo di un array

    Preso dalla stessa pagine in fondo prima di SEE ALSO
    
    The sizeof operator is often used to calculate the number of elements in an array using an expression of the form:
    
    sizeof array / sizeof array[0]
    
    
    Ciò che tu vedi in output è il sizeof di una stringa senza l'uso delle parentesi e assume che sizeof(char) == 1 per cui sizeof stringa in teoria è uguale a:
    
    int size =  sizeof stringa / sizeof stringa[0];
    ma siccome stringa[0] è un char e in win32 sizeof(char) == 1 tutto si riduce in:
    int size = sizeof stringa / 1, oppure + semplicemente sizeof stringa.
    

    Spiegato anche quà (sempre nella stessa pagina)
    
    When the sizeof operator is applied to an object of type char, it yields 1. When the sizeof operator is applied to an array, it yields the total number of bytes in that array, not the size of the pointer represented by the array identifier. 
    
  • Re: Valore minimo di un array

    Quindi ricapitolando. Metodo sempre giusto per qualsiasi tipo di array (int, char, float ecc)
    
    size_t size = sizeof array / sizeof array[0]
    
    Metodo giusto solo per array di tipo char (che è un caso speciale del metodo generico sopra)
    
    size_t size = sizeof array;
    
    Metodo sbagliato per esempio caso array di int
    
    size_t size = sizeof(array) 
    
    produce size sbagliato in quanto un int in x86 è 32bit (4 byte) e già quì ti deve venire in mente che il metodo è sbagliato, in x64 e 64bit (8 byte) quindi ancora peggio.
  • Re: Valore minimo di un array

    Ecco anche la dimostrazione
    
    #include<iostream>
    using namespace std;
    
    int main()
    {
    
    	int a[]={5,7,8,3,4,90};
    
    	cout << "int size: " << sizeof(int) << endl;
    
    	cout << "raw array size: " << sizeof a << endl;
    
    	cout << "array elements: " << sizeof a / sizeof a[0] << endl;
    }
    
  • Re: Valore minimo di un array

    Ho imparato che:
    
      long a[]={1,2,3,4,5,6,7};
      int size=sizeof(a)/sizeof(a[0]);
    
    è meglio di:
    
      long a[]={1,2,3,4,5,6,7};
      int size=sizeof(a)/sizeof(long);
    
  • Re: Valore minimo di un array

    Sostanzialmente è lo stesso modo ma te ne freghi del tipo di dato.
    Io preferisco sto modo cmq.
    
    #include<iostream>
    #include <cstddef>
    
    using namespace std;
    
    
    template<typename T, std::size_t size>
    std::size_t getsize(T (&)[size])
    {
    	return size;
    };
    
    int main()
    {
    	long a[]={1,2,3,4,5,6,7};
    	int b[]={9,5,2,2,7};
    
    	cout << "a ha " << getsize(a) << " elementi" << endl;
    
    	cout << "b ha " << getsize(b) << " elementi" << endl;
    }
    
  • Re: Valore minimo di un array

    Bello! io avevo pensato a questa soluzione:
    
    #include <iostream>
    
    template <typename T, size_t size>
    char (&array(T(&)[size]))[size];
    
    int main()
    {
      long a[]={1,2,3,4,5,6,7};
      int b[]={9,5,2,2,7};
    
      std::cout << "a ha " << sizeof array(a) << " elementi" << std::endl;
    
      std::cout << "b ha " << sizeof array(b) << " elementi" << std::endl;
    
      return 0;
    }
    
    Ciao
  • Re: Valore minimo di un array

    In C:
    
    #include <stdio.h>
    
    #define size(array) (sizeof (array) / sizeof (*array))
    
    int main()
    {
      long a[]={1,2,3,4,5,6,7};
      int b[]={9,5,2,2,7};
    
      printf ("a ha %d elementi\n",size(a));
      
      printf ("b ha %d elementi\n",size(b));
      
      return 0;
    }
    
    
Devi accedere o registrarti per scrivere nel forum
13 risposte