Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
Dopo anni di attesa e una lunga fase di sviluppo, Noctua entra nel mercato dei dissipatori a liquido AIO con la nuova serie NL-LC1. Forte dell'esperienza maturata nel raffreddamento ad aria, l'azienda austriaca promette di portare la propria filosofia fatta di qualità costruttiva, attenzione ai dettagli e silenziosità anche in questo segmento. Abbiamo provato il nuovo sistema per scoprire se riesce a distinguersi in un mercato ormai molto competitivo.
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
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
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


NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
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...
Commodore Callback 8020 è il tele...
roborock F25 Ultra a 585€ con Prime: vap...
Apple Watch SE 3 a 219€ e Series 11 a 32...
La lampadina diventa una "biblioteca dig...
Philips Airfryer Serie 1000 con cestello...
Dashcam 3 canali 4K con STARVIS 2 e parc...
Il finto colloquio su LinkedIn nasconde ...
Prime Day in anticipo - giorno 2: ecco l...
Halo: Campaign Evolved domina le classif...
I nuovi caricatori e power bank Air di U...
Red Hat rafforza la sua offerta per il c...
Meta porta l'intelligenza artificiale al...
TIMVISION: rincaro di 2 euro al mese in ...
Apple: nuovo dominio condiviso per Sign ...
XBOX, terremoto in vista: incerto il fut...
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: 13:20.


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