Newsgroup: it.comp.lang.c++
Titolo: Aiuto!

Sto cercando di fare un esercizio, ma c'è qualcosa che non va...
Allora il problema è la funzione estrai che dovrebbe(è dico
dovrebbe...)estrarre da vett[], due array(min[],max[]) nei quali vengono
memorizzati rispettivamente i valori minori e maggiori di un certo
intero"target"  inserito in input.
Cosa c'è che non va nella funzione progettata da me?
Vi posto tutto, main e funzioni varie:
#include<iostream>
#include<stdlib.h>
char estrai(const int [],int,int [],int&,int [],int&);
void inserisci(int [],int);
void stampa(const int [],int);
main()
{
cout<<"cardinalita': \n";
int s,t=0,g=0; // perchè se non inizializzo t e g  windows mi da un
messaggio di errore? Non posso passare un oggetto non inizializzato(ma solo
dichiarato) a una funzione?
cin>>s;
int numeri[s];
int minori[t];
int maggiori[g];
inserisci(numeri,s);
stampa(numeri,s);
estrai(numeri,s,minori,t,maggiori,g);
stampa(maggiori,g);
system("pause");
}
char estrai(const int vett[],int a,int min[],int& b,int max[],int& c)//
questa è la funzione maledetta.
{
int target,i;
b=0;
c=0;
cin>>target;
for(i=0;i<a;i++)
    {
     if (vett[i]<target) {b++;min[i]=vett[i];}
      else {c++;max[i]=vett[i];}
    }
  if(b==c) return 'X';         // Restituisce X nel caso in cui i due array
risultino con lo stesso numero di elementi
  else if(b<c) return 'M';   // Restituisce M nel caso in cui l'array max[]
abbia più elementi di min[]
       else return 'm';          // Restituisce m nel caso in cui l'array
min[] abbia più elementi di max[]
}
void inserisci(int vett[],int g)
{
int i;
cout<<"inserire i numeri: \n";
  for(i=0;i<g;i++)
      cin>>vett[i];
}
void stampa(const int vett[],int g)
{
int i;
cout<<"i numeri sono memorizzati in questo ordine: \n";
 for(i=0;i<g;i++)
   cout<<"vett["<<i<<"]= "<<vett[i]<<endl;
}
p.s.
se vorrete correggere qualche altra cosa che non è molto efficiente,non
abbiate paura a farmelo notare.
Non aspetto altro...
Sono qui per imparare :-))

 Sono qui per imparare :-))
se l'esercizio richiede di usare vettori C-style, ok, altrimenti usa 
std::vector, e non ci pensi piu'.
usando la f. std::vector.size(), ti basta un controllo per stabilire la 
cardinalita' di un vettore.
sperando di non aver detto troppe cavolate...

 sperando di non aver detto troppe cavolate...
Ti ringrazio di avermi risposto.
Ma non sei arrivato al cuore del problema: la funzione
estrai non fa il suo dovere.
Questo è il problema per il quale vorrei una risposta, provate a compilarla
 e ve ne accorgerete.
Per quanto riguarda lo stile, è un esercizio e devo imparare ad usare gli
array nudi e crudi, quindi niente classe vector :-((
Ciao, e grazie ancora.

 estrai non fa il suo dovere.
ci credo: 
inizializzi array di dimensione zero
non usi memoria dinamica per dichiarare puntatori con valori non 
costanti a compile time
e tutto il resto...
come pretendi che poi la f. faccia il suo lavoro?
io ti ho segnalato gli errori che ho trovato, correggili, e poi fammi 
sapere
ti ricordo la sintassi di new:
int * numeri = new int[quanti_ne_vuoi];
...
//uso di numeri...
...
delete[] numeri;
PS patcha outlook express

 costanti a compile time
array, sorry.

using namespace std;
allora è inutile cstdlib!
--
Antonio Cuni, 18 anni, studente
Brainbench Certification: 
Master C++: 4.44, higher than 97% of all previous test takers.
Visual Basic 5: 3.06, higher than 77% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688

inietta i nomi nel namespace globale, cstdlib in std
In realtà è davvero più corretto scrivere "cstdlib". "stdlib.h" è mantenuto solo
per backward compatibility, e non dovrebbe più essere usato in codice di nuova
produzione. Questo vale per tutti gli header con suffisso ".h": è sempre
preferibile utilizzare il loro corrispondente C++.
Ciao
Domenico Barra

preferibile utilizzare il loro corrispondente C++.
secondo me se lo standard permette di scrivere un certo codice quello
è corretto. se non lo permette è scorretto.
Non esiste un più corretto o meno corretto. Cmq mi sembra una
discussione abbastanza sterile.
Anto


Beh, lo standard fa distinzione. Esiste un'appendice che specifica i
costrutti presenti per compatibilita' all'indietro e che potranno essere
omessi da una futura edizione dello standard stesso. Tra questi ci sono
gli header standard del C nella forma nome.h, che corrispondono alla
versione cnome con l'aggiunta di una dichiarazione using per ogni nome
dichiarato.
Ciao,
Nicola