Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-10-2007, 10:07   #1
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
[C++] Elemento massimo di un vettore ricorsivamente

Non capisco perchè non funziona questo programma che calcola ricorsivamente il massimo elemento di un vettore

Codice HTML:
#include <iostream>

using namespace std;

int massimo(int v[], int n, int& max){
    if(n>0){
            if(v[n-1]>max){
                           max=v[n-1];
                           return massimo(v,n,max);}
                           else return massimo(v,n,max);}
                           else return max;}
    
main(){
       
       int max=0;
       int i;
       cin >>i;
       int* v = new int v[i];
       
       for(int j=0;j<i;j++){
               cin >> v[i];}
               
               cout << massimo(v, i);
               
               system ("pause");}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 10:23   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
Codice HTML:
#include <iostream>

using namespace std;

int massimo(int v[], int n, int& max){
    if(n>0){
            if(v[n-1]>max){
                           max=v[n-1];
                           return massimo(v,n,max);}
                           else return massimo(v,n,max);}
                           else return max;}
    
main(){
       
       int max=0;
       int i;
       cin >>i;
       int* v = new int v[i];
       
       for(int j=0;j<i;j++){
               cin >> v[i];}
               
               cout << massimo(v, i);
               
               system ("pause");}
A parte l'errore nella riga
Codice:
cout << massimo(v, i);
che dovrebbe essere
Codice:
cout << massimo(v, i, max);
nella funzione ricorsiva passi sempre il valore di n, mai n-1. Oltretutto mi sembra inutile fare:
Codice:
if(v[n-1]>max){
 ...
return massimo(v,n,max);}
else
return massimo(v,n,max);}
Secondo me volendo seguire la tua traccia dovresti fare
Codice:
int massimo(int v[], int n, int& max)
{
    if(n>0)
    {
         if(v[n-1]>max)
             max=v[n-1];
         return massimo(v,n-1,max);
    }
    return max;
}
[EDIT] Non avevo letto il ricorsivamente nel titolo, la parte sotto può essere ignorata

Usando un pò di C++ per trovare il massimo di un vettore io farei così:

Codice:
#include <algorithm>
#include <vector>
#include <iostream>

	class MaxVector
	{
	public:
		MaxVector() : max(0xFFFFFFFF) {}
		void operator() (int value)
		{
                      if (value>max) 
                           max = value;
		}
		int GetMax() { return max; }
	private:
		int max;
	};

...
vector<int> v;
...
int val = 0;
cin >> val;
v.push_back(val);
...
MaxVector v = for_each(v.begin(), v.end(), MaxVector());
int max = v.GetMax();
...

Ultima modifica di tomminno : 12-10-2007 alle 10:36.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 10:36   #3
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
Codice HTML:
#include <iostream>

using namespace std;

int massimo(int v[], int n, int& max)
{
    if(n>0)
    {
         if(v[n-1]>max)
             max=v[n-1];
         return massimo(v,n-1,max);
    }
    return max;
}
    
main(){
       
       int max=0;
       int i;
       cin >>i;
       int* v = new int v[i];
       
       for(int j=0;j<i;j++){
               cin >> v[i];}
               
               cout << massimo(v, i, max);
               
               system ("pause");}

Non funziona lo stesso, mi da errore su questa riga int* v = new int v[i];21 expected `,' or `;' before "v"



comq le classi ancora non le ho fatte
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 11:10   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
xubbax: di nuovo con questa indentazione ?
Ti invito ad usare una indentazione standard quando posti problemi in questa sezione. Lo capisci che così facendo costringi chi legge il tuo codice a copiarlo, metterlo in un editor e applicare l'indentazione prima di risponderti ?
Fallo almeno come forma di rispetto per chi legge il tuo codice.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 11:11   #5
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
guarda che non lo faccio mica apposta.. sono abituato cosi
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 11:12   #6
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
E sei abituato male
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 11:18   #7
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
e lo so, ma mica posso aspettare di identare benissimo per scrivere una cosa sul forum
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 11:21   #8
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Per quelle 4 righe potevi fare lo sforzo
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 11:22   #9
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
ma per me quello è identato benissimo, non capisco cosa c'è che non va, per me è leggibilissimo
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 11:30   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
guarda che non lo faccio mica apposta.. sono abituato cosi
Disabituati...cambia le tue abitudini. In queste cose essere originali è solo dannoso. Inoltre se un giorno farai un progetto in C++ in collaborazione con altre persone sarai comunque costretto a cambiare le tue abitudini.

Almeno prima di postare il codice qui passalo da un indentatore automatico
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 11:38   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Cosa c'è che non va nel tuo modo di indentare ormai te l'ho già detto diverse volte.

Ad ogni modo per calcolare il max in maniera ricorsiva farei così:
Codice:
int getMax(int v[],int n){if(n>1){int prevMax=getMax(v,n-1);return (prevMax>v[n-1])?prevMax:v[n-1];}return v[0];}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 11:40   #12
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Non ci indurre in indentazione amen
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 12:05   #13
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
[html]
Non funziona lo stesso, mi da errore su questa riga int* v = new int v[i];21 expected `,' or `;' before "v"

comq le classi ancora non le ho fatte
Mi era sfuggito:
Codice:
int * v = new int[i];
già che ci sei, per buona abitudine, io metterei anche una delete prima dell'uscita dal main.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2007, 14:46   #14
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Spero bene che il problema sia un problema didattico...
Perchè risolvere un problema di complessità n con la ricorsione è come usare un transatlantico per attraversare un fiume...
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 13-10-2007, 09:57   #15
Furla
Senior Member
 
Iscritto dal: Feb 2004
Messaggi: 1454
Codice:
int max(int* v, int n)
{
 if (n==1) return *v;
 return *v>(n=max(v+1,n-1))?*v:n;
}
impara ad indentare, nel main l'indice del ciclo è j.

Ultima modifica di Furla : 13-10-2007 alle 10:00.
Furla è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Shutterstock diventa una piattaforma cre...
Prime Day anticipato, le offerte sui rob...
Microsoft: l'obbligo dell'account online...
Prime Day anticipato, i migliori Roboroc...
'Case distrutte dai razzi di Musk': il l...
Meno 50% dal picco: Bitcoin a $64.394 e ...
MOVA, guida all'acquisto dei tagliaerba ...
Come potrebbero essere le CPU Intel Rapt...
DJI Osmo 360 Combo Essenziale a 395€: 1 ...
Teste di bambola e foto finte: cos&igrav...
Haier rilancia con due TV da tenere d'oc...
Easy Anti-Cheat sul kernel Linux: Epic G...
Amazon Fire TV Stick 4K Select a 24,99€:...
Una teoria matematica cambia i datacente...
Prime Day in anticipo, giorno 1: tutte l...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v