Valore minimo di un array

di Anonimizzato8504 il
13 risposte
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

  • Togli la parte else. Perche DIM a 50 se hai 6 elementi?
  • Ok funziona ti ringrazio
  • 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.
  • Puoi usare, in questo caso
    int DIM=sizeof(a);
    cosi conosci la dimensione del vettore.
  • Nel codice messo da msdn inserisce la stringe uguale a come l'ho scritta.
  • 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. 
    
  • 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.
  • 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;
    }
    
  • 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);
    
  • 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;
    }
    
  • 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
  • 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