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
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.
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 :)
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.
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.
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.