PDA

View Full Version : [C++] Valore piu grande in un vettore


MarcoWesley10
22-03-2010, 15:34
Ciao a tutti, il mio professore mi ha assegnato un compito vistochè stiamo studiando i vettori...
devo assegnare 10 valori in un vettore... e verificare qual'è il più grande...

per quanto riguarda l'assegnare i valori del vettore ho pensato al codice:

#include <stdio.h>
#include <stdlib.h>
main ()
{
int v[10],i;
for(i=0;i<10;i++)
{
printf("Inserisci valore %d: ",i);
scanf("%d",&v[i]);
}
system("pause");
}

ora però vorrei sapere voi cosa mi consigliate per vedere qual'è il valore maggiore inserito presente nel vettore??

Grazie in anticipo, Marco. :D

WarDuck
22-03-2010, 15:50
Tu cosa faresti se fossi una macchina che non ha alcuna idea dei numeri che hai messo nel vettore? :D.

In linea di principio non è molto diverso dal metodo che hai usato per l'inserimento.

tomminno
22-03-2010, 17:03
max_element
Comunque io userei il C++ e non il C

MarcoWesley10
22-03-2010, 19:07
Tu cosa faresti se fossi una macchina che non ha alcuna idea dei numeri che hai messo nel vettore? :D.

In linea di principio non è molto diverso dal metodo che hai usato per l'inserimento.
Tu dici che devo fare un for di controllo?

max_element
Comunque io userei il C++ e non il C
eh il prof ci ha insegnato solo il C e non il C++...infatti ho sbagliato nel titolo...

Comunque alla fine ho sviluppato questo:
#include <stdio.h>
#include <stdlib.h>
main ()
{
int v[10],i,max;
for(i=0;i<10;i++)
{
printf("Inserisci valore %d: ",i);
scanf("%d",&v[i]);
}
max=v[0];
for(i=1;i<10;i++)
{
if(max<v[i])
max=v[i];
}
printf("Il valore massimo e'%d: \n",max);
system("pause");
}


e devo dire che funziona alla meraviglia!

||ElChE||88
22-03-2010, 19:58
Non ti serve mica scorrerre il vettore due volte. Puoi fare il controllo subito dopo aver ricevuto i singoli valori.

PS: Per il codice usa il tag [‎CODE‎], non [‎QUOTE].

inkSnake
23-03-2010, 12:46
#define max 10
int v[max];

int main()
{
int i,m=0;
printf("Ins. valori:");
for(i=0;i<max;i++) {
gets(v[i]); oppure scanf("%d",&v[i]);
if(v[i]>m) m=v[i];
}
printf("Numero piu' grande: %d",m);
}




ecco un procedimento ottimale.

Volutomitra
23-03-2010, 14:26
#define max 10
int v[max];

int main()
{
int i,m=0;
printf("Ins. valori:");
for(i=0;i<max;i++) {
gets(v[i]); oppure scanf("%d",&v[i]);
if(v[i]>m) m=v[i];
}
printf("Numero piu' grande: %d",m);
}




ecco un procedimento ottimale.

E se i valori inseriti fossero tutti minori di 0?

inkSnake
23-03-2010, 14:39
E se i valori inseriti fossero tutti minori di 0?

attualmente l'utente in questione farà programmi basillari e quindi difficilmente il prof. gli fà fare una serie di controlli etc...

e cmq dubito che in un vettore di tipo int ci vai a mettere numeri minori di 0. al massimo l'unica cosa utile che si può fare,è implementare un controllo che permetta di acquisire solo numeri e non caratteri.

||ElChE||88
23-03-2010, 14:58
e cmq dubito che in un vettore di tipo int ci vai a mettere numeri minori di 0
E perché mai?

E comunque basta inizializzare m con il valore int più basso possibile (e non è certo l'unica soluzione).

#include <limits.h>

...

int m = INT_MIN;

inkSnake
23-03-2010, 15:07
E perché mai?

E comunque basta inizializzare m con il valore int più basso possibile (e non è certo l'unica soluzione).

#include <limits.h>

...

int m = INT_MIN;


ma cosi come è impostato il codice se tu ci metti un bel - ,esso viene acquisito prima del numero che segue. non so se mi sono spiegato.

||ElChE||88
23-03-2010, 15:10
ma cosi come è impostato il codice se tu ci metti un bel - ,esso viene acquisito prima del numero che segue. non so se mi sono spiegato.
Se passi un numero con un - o un + davanti scanf("%d", v[i]) lo interpreta come parte del numero.

inkSnake
23-03-2010, 15:36
ottimo,questa non la sapevo,grazie per l'intervento.

shinya
23-03-2010, 16:41
Io al professore darei una cosa tipo questa in C++, ma non credo passerei l'esame:

#include <algorithm>
#include <iterator>
#include <vector>
#include <iostream>

int main(int argc, char** argv) {
std::vector<int> v;
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(), std::back_inserter(v));
std::cout << *std::max_element(v.begin(), v.end()) << std::endl;
return 0;
}

inkSnake
23-03-2010, 17:14
Io al professore darei una cosa tipo questa in C++, ma non credo passerei l'esame:

#include <algorithm>
#include <iterator>
#include <vector>
#include <iostream>

int main(int argc, char** argv) {
std::vector<int> v;
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(), std::back_inserter(v));
std::cout << *std::max_element(v.begin(), v.end()) << std::endl;
return 0;
}


lol tu ad uno del terzo li vai a scrivere in c++,stam bon.

MarcoWesley10
23-03-2010, 22:47
Io al professore darei una cosa tipo questa in C++, ma non credo passerei l'esame:

#include <algorithm>
#include <iterator>
#include <vector>
#include <iostream>

int main(int argc, char** argv) {
std::vector<int> v;
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(), std::back_inserter(v));
std::cout << *std::max_element(v.begin(), v.end()) << std::endl;
return 0;
}


scusami se mi permetto, ma comunque io vado al terzo anno delle superiori...non al terzo anno di univ eheh...
comunque questo credo sia c++ io ho sbagliato a scrivere nel titolo perchè intendevo C...comunque il programma che ho sviluppato e che ho postato è andato più che bene (il prof mi voleva fregare xke quando sono andato alla lavagna voleva farmi trovare il valore minimo e non il massimo, credendo che io avevo copiato il lavoro) e sono riuscito a farlo...grazie comunque per i suggerimenti :)

m0rix93
24-03-2010, 15:33
Semplice e indolore ;)

#include <stdio.h>

main ()
{
int v[10],i,k;

k=0;

for(i=0;i<10;i++)
{
printf("Inserisci valore %d: ",i);
scanf("%i",&v[i]);
}

for(i=0;i<10;i++)
if(v[i]>k)
k=v[i];

printf("\r\n");
printf("Il numero max e': %i\r\n",k);

system("pause");
}

||ElChE||88
24-03-2010, 15:34
Semplice e indolore ;)
E soprattutto inutile, visto che l'autore ha postato una soluzione uguale 2 giorni fa.

m0rix93
24-03-2010, 15:41
Ahahahha...sorry...xD

Gelert
24-03-2010, 21:53
E perché mai?

E comunque basta inizializzare m con il valore int più basso possibile (e non è certo l'unica soluzione).

#include <limits.h>

...

int m = INT_MIN;


scorretto, se passo un vettore senza elementi avrò come ritorno quel valore e non potrò stabilire se ho il valore perché il vettore era vuoto o perché effettivamente presente nel vettore.

personalmente inizierei m con il valore nella prima posizione del vettore e poi il for lo farei partire dal secondo


...
int m = v[0]
for(int i = 1; i < v.lenght ; i++){
....
}
....

||ElChE||88
24-03-2010, 22:26
scorretto, se passo un vettore senza elementi avrò come ritorno quel valore
devo assegnare 10 valori in un vettore... e verificare qual'è il più grande...
Lettura, questa sconosciuta.

Gelert
24-03-2010, 22:37
non mi sembra che tu hai proposto un controllo sulla correttezza del vettore prima di proseguire.

io presumo che il vettore possa essere generico e quindi la soluzione la do generica.

||ElChE||88
24-03-2010, 22:47
non mi sembra che tu hai proposto un controllo sulla correttezza del vettore prima di proseguire.

io presumo che il vettore possa essere generico e quindi la soluzione la do generica.
Guarda che si stava parlando del pezzo di codice postato da inkSnake... mica di una funzione generica che riceve un vettore sconosciuto come input.