Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale
Forte di soluzioni tecniche specifiche, il notebook Acer TravelMate P4 14 abbina dimensioni compatte e buona robustezza per rispondere alle necessità specifiche degli utenti aziendali. La piattaforma AMD Ryzen 7 Pro assicura prestazioni elevate con i tipici ambiti di produttività personale e sul lavoro, mantenendo un'elevata autonomia.
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Dal salotto al giardino, il nuovo proiettore laser di Hisense promette esperienze cinematografiche in qualsiasi contesto: qualità d’immagine, semplicità d’uso, versatilità e prezzo competitivo il suo poker d'assi
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


Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il c...
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Xbox: dal prossimo mese verifica dell'id...
Corsair AI Workstation 300: poco pi&ugra...
Addio a Elio Marioli, un pioniere della ...
L'IA sta già diminuendo il potere...
Guida autonoma? Gli ADAS falliscono e in...
Skechers lancia le scarpe per bambini co...
Revolut e Audi F1: un’alleanza rivoluzio...
Gestione attività di Windows 11 d...
Amazon lancia il nuovo videocitofono Bli...
Robot aspirapolvere al top: i nuovi DEEB...
Opera vs Microsoft: la guerra dei browse...
Router e ripetitori FRITZ! in offerta su...
Spotify vola a quota 700 milioni di uten...
Microsoft pronta ad abbandonare il launc...
Windows 11, arriva una feature multimoni...
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: 21:51.


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