Newsgroup: it.comp.lang.c++
Titolo: confronto valori array

Ciao a tutti,
 mi servirebbe un programma che faccia questo: ho due array numerici,
devo confrontarli tra loro e trovare il massimo e il minimo valore tra
i due.
Es: A[2.4.0.6] B[3.6.9.12]
il min è 0, il max è 12, come faccio?
Grazie per l'aiuto, ma sto imparando ora...

 writes:

Il tuo professore non ha spiegato nulla prima di darti questo
esercizio?
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

 esercizio?
Come sei malfidente. E se studiasse chiedilosulwebologia?
Ciao,
Nicola

mai sentito il metodo autodidatta??? i miei studi sono stati di scienze
motorie, quindi è un po' difficile che qualcuno me lo spieghi.....
comunque grazie lo stesso...
Maurizio Loreti ha scritto:


 mai sentito il metodo autodidatta???
Tale metodo consiste nello studiare e POI fare gli esercizi.
Cosa significa "mi servirebbe un programma..."?
Quali problemi incontri nel fare tale programma?
Kiuhnm

a me servono solo le righe di codice relative alla mia richiesta...
oddio, chiedo scusa se non mi sono espresso nella maniera giusta, ma,
ripeto, io sono un insegnante di boxe, mi sto avvicinando al computer
adesso....
Kiuhnm ha scritto:


 adesso....
Non credo che il C++ sia il linguaggio adatto per iniziare.
Rendendo il codice un po' generico (senza usare gli algoritmi già 
disponibili) si ottiene qualcosa del genere:
---
#include <iostream>
using namespace std;
template <class T>
struct mm_pair
{
	T min, max;
	mm_pair(T mm) : min(mm), max(mm) {}
	mm_pair(T min, T max) : min(min), max(max) {}
};
// n > 0
template <class T, class ITER>
mm_pair<T> getMinMax(ITER start, ITER end)
{
	mm_pair<T> m(*(start++));
	for (; start != end; ++start)
	{
		if (*start < m.min)
			m.min = *start;
		else if (*start > m.max)
			m.max = *start;
	}
	return m;
}
int main()
{
	int A[] = {2,4,0,6};
	int B[] = {3,6,9,12};
	const int nA = sizeof(A)/sizeof(int);
	const int nB = sizeof(B)/sizeof(int);
	mm_pair<int> mmA = getMinMax<int,int*>(A, A+nA);
	mm_pair<int> mmB = getMinMax<int,int*>(B, B+nB);
	int min = (mmA.min < mmB.min) ? mmA.min : mmB.min;
	int max = (mmA.max > mmB.max) ? mmA.max : mmB.max;
	cout << "min(A U B) = " << min << endl;
	cout << "max(A U B) = " << max << endl;
}
---

 adesso....
Come tu hanno detto, si studia e si fanno gli esercizi; se non hai
nessuna idea di come si possa fare il tuo esercizio forse è meglio
studiare ancora un po'.
Se invece un'idea ce l'hai, scrivila, compilala, eseguila, e se vuoi
postala qui sopra: qualcuno ti darà una mano.
Ciao
  Andrea

 > adesso....Non credo che il C++ sia il linguaggio adatto per iniziare.


 [...]
Per iterare sugli array (di dimensione fissa) mi piaceva particolarmente 
l'eleganza della soluzione di James Kanze di qualche giorno fa:
template<typename T, size_t N> T* begin(T (&array)[N]) {
  return array;
}
template<typename T, size_t N> T* end(T (&array)[N]) {
   return array + N ;
}
con main che diventa:
int main()
{
  int A[] = {2,4,0,6};
  int B[] = {3,6,9,12};
  mm_pair<int> mmA = getMinMax<int,int*>(begin(A), end(A));
  mm_pair<int> mmB = getMinMax<int,int*>(begin(B), end(B));
[...]
Mi sembrava carino aggiungere un altro paio di template =)
Ciao,
--Marco 

 }
Allora rendiamolo ancora più comodo.
Aggiungiamo
   if (start == end)
     return mm_pair<T>(T()+1, T());
in getMinMax() casomai il vettore fosse vuoto
(il commento "n>0" è il residuo di una versione precedente).
Poi aggiungiamo:
   template <class T, int N>
   mm_pair<T> getMinMax(T (&x)[N])
   {
     return getMinMax<T, T*>(x, x+N);
   }
in modo che main diventi semplicemente:
   int main()
   {
     int A[] = {2,4,0,6};
     int B[] = {3,6,9,12};
     mm_pair<int> mmA = getMinMax(A);
     mm_pair<int> mmB = getMinMax(B);
     int min = (mmA.min < mmB.min) ? mmA.min : mmB.min;
     int max = (mmA.max > mmB.max) ? mmA.max : mmB.max;
     cout << "min(A U B) = " << min << endl;
     cout << "max(A U B) = " << max << endl;
   }
Kiuhnm