Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-04-2011, 00:41   #1
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
[c++] ricorsiva: operazioni su array(esercizio)

Ho provato a svolgere questo esercizio..c'è qualcuno che mi dice cosa sbaglio?:

Si scriva in c++ una funzione RICORSIVA che, ricevuti come paramentri un array di interi e la sua dimensione, restituisca true se e solo se è verificata la condizione descritta di seguito: l'array (la cui dimensione si suppone essere multiplo di 3) va esaminato per terne di elementi. Ciascuna terna deve avere gli elementi esterni uguali tra loro e maggiori dell'elemento centrale. Inoltre, a sequenza di terne contenuta nell'array deve essere strettamente crescente, nel senso che in ogni terna gli elementi esterni devono essere strettamente minore dell'elemento centrale della terna successiva:
esempio:dato l'array: 2 1 2 5 2 5 7 5 7 9 6 9, di dimensione 12, la funzione dovrebbe restituire true. Infatti si può notare come ciascuna delle terne abbia sempre gli elementi esterni uguali fra loro e maggiori di quello centrale (ad esempio nella prima terna gli elementi esterni valgono entrambi 2 e sono maggiori dell'elemento centra che vale 1). Inoltre, la sequenza di terne è crescente: ad esempio, gli elementi esterni della seconda terna valgono 5, strettamente minore di 7 che è il valore degli elementi esterni ella terna successiva; Inoltre l'elemento centrale della seconda terna vale 2, strettamente minore di 5 che è il valore dell'elemento centrale della terna successiva.
Specificare quale deve essere la prima invocazione per la funzione.

CODICE SVILUPPATO DA ME:
Codice:
bool ricorsiva(int array[],int dim, int i){ 
     if(dim%3!=0)
     return false;
     
     if(i==(dim+1)) //caso base
     return true;
     
     if(a[i-1]!=a[i+1] && a[i+1]<=a[i] && a[i]<=temp_centro && a[i-1]<=temp_sin && a[i+1]<=temp_des)
     return false;
     
     return ricorsiva(array, dim, i+3);
     
     temp_centro=a[i];
     temp_sin=a[i-1];
     temp_des=a[i+1]
}


La prima invocazione deve essere: ricorsiva(array, dim, 1)
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 01:24   #2
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
Quote:
Originariamente inviato da mistergks Guarda i messaggi
Ho provato a svolgere questo esercizio..c'è qualcuno che mi dice cosa sbaglio?:

Si scriva in c++ una funzione RICORSIVA che, ricevuti come paramentri un array di interi e la sua dimensione, restituisca true se e solo se è verificata la condizione descritta di seguito: l'array (la cui dimensione si suppone essere multiplo di 3) va esaminato per terne di elementi. Ciascuna terna deve avere gli elementi esterni uguali tra loro e maggiori dell'elemento centrale. Inoltre, a sequenza di terne contenuta nell'array deve essere strettamente crescente, nel senso che in ogni terna gli elementi esterni devono essere strettamente minore dell'elemento centrale della terna successiva:
esempio:dato l'array: 2 1 2 5 2 5 7 5 7 9 6 9, di dimensione 12, la funzione dovrebbe restituire true. Infatti si può notare come ciascuna delle terne abbia sempre gli elementi esterni uguali fra loro e maggiori di quello centrale (ad esempio nella prima terna gli elementi esterni valgono entrambi 2 e sono maggiori dell'elemento centra che vale 1). Inoltre, la sequenza di terne è crescente: ad esempio, gli elementi esterni della seconda terna valgono 5, strettamente minore di 7 che è il valore degli elementi esterni ella terna successiva; Inoltre l'elemento centrale della seconda terna vale 2, strettamente minore di 5 che è il valore dell'elemento centrale della terna successiva.
Specificare quale deve essere la prima invocazione per la funzione.

CODICE SVILUPPATO DA ME:
Codice:
bool ricorsiva(int array[],int dim, int i){ 
     if(dim%3!=0)
     return false;
     
     if(i==(dim+1)) //caso base
     return true;
     
     if(a[i-1]!=a[i+1] && a[i+1]<=a[i] && a[i]<=temp_centro && a[i-1]<=temp_sin && a[i+1]<=temp_des)
     return false;
     
     return ricorsiva(array, dim, i+3);
     
     temp_centro=a[i];
     temp_sin=a[i-1];
     temp_des=a[i+1]
}


La prima invocazione deve essere: ricorsiva(array, dim, 1)
credo che
Codice:
if(a[i-1]!=a[i+1] && a[i+1]<=a[i] && a[i]<=temp_centro && a[i-1]<=temp_sin && a[i+1]<=temp_des)
     return false;
dovrebbero essere tutti or qui, invece di and

cioè se una di quelle condizioni è vera devi ritornare falso, no?

e poi aggiorni quelle variabili globali dopo la chiamata ricorsiva, non credo abbia molto senso che poi alla prima chiamata chi le inizializza quelle variabili?
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 01:31   #3
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
ops mi sa che è vero....vanno sostituiti con degli OR

per quanto riguarda le variabili temporanee andrebbero messe prima della chiamata ricorsiva? ma così facendo si memorizzano le a[i] correnti..invece a me serve memorizzare quelle della passata precedente
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 11:44   #4
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
Quote:
Originariamente inviato da mistergks Guarda i messaggi
ops mi sa che è vero....vanno sostituiti con degli OR

per quanto riguarda le variabili temporanee andrebbero messe prima della chiamata ricorsiva? ma così facendo si memorizzano le a[i] correnti..invece a me serve memorizzare quelle della passata precedente
voglio dire... tu sei alla prima chiamata.. ora la seconda chiamata dovrà controllare che i valori precedenti siano minori di quelli che stai analizzando ora, ma nel momento in cui vai a fare quell'if.. nella seconda chiamata ricorsiva, nessuno modificherà mai quelle variabili, perché hai

Codice:
return ricorsiva(array, dim, i+3);
quindi nel momento in cui, ad esempio, la seconda chiamata ricorsiva terminerà (quindi saranno finite anche tutte quelle "superiori", cioè tutte tranne la prima), ritornerà anche la prima (c'è un return, insomma.. deve ritornare quello che ritorna la seconda, quando ritorna la seconda), senza nemmeno modificare mai quelle variabili

secondo me fai molto prima ad aggiungere tre argomenti alla chiamata ricorsiva, tipo "sin, centro, des", e di volta in volta chiami
Codice:
return ricorsiva(array, dim, i+3, i-1, i, i+1);
oppure semplicemente torni indietro nell'array nel caso in cui i sia maggiore di 1 per controllare i valori dietro
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 12:27   #5
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
non ho capito come faccio a dire che la variabile sin d esempio deve essere uguale a i-1?cioè come devo scrivere nei parametri della funzione??
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 12:50   #6
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
gli passi a[i-1], oppure l'indice nell'array (cioè i-1).. insomma puoi fare un po' come vuoi
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 16:41   #7
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
e poi come faccio a controllarle nell'if?se metto a[i+1] si riferisce alla posizione corrente ... boh non ho capito...mi faresti vedere un esempio ?
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 16:49   #8
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
Quote:
Originariamente inviato da tuccio` Guarda i messaggi
secondo me fai molto prima ad aggiungere tre argomenti alla chiamata ricorsiva, tipo "sin, centro, des", e di volta in volta chiami
Codice:
return ricorsiva(array, dim, i+3, i-1, i, i+1);
oppure semplicemente torni indietro nell'array nel caso in cui i sia maggiore di 1 per controllare i valori dietro
1)Questo intendo...dove devo usare nell'if queste variabili? i-1,i e i+1? ho un dubbio: è possibile passare 4 argomenti con lo stesso nome in una funzione?!
2)Cosa intendi per tornare indietro nell'array?!
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 18:22   #9
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
Quote:
Originariamente inviato da mistergks Guarda i messaggi
1)Questo intendo...dove devo usare nell'if queste variabili? i-1,i e i+1? ho un dubbio: è possibile passare 4 argomenti con lo stesso nome in una funzione?!
2)Cosa intendi per tornare indietro nell'array?!
1) dovresti sostituire quelle temp_sin, temp_centro, temp_des che non aggiorni correttamente
2) intendo, che ad esempio, se i = 1 fai soltanto il controllo

Codice:
if (a[i-1] != a[i+1] || a[i+1] <= a[i])
{
     return false;
}
se invece i è maggiore di 1, per controllare anche l'andamento crescente puoi fare così:

Codice:
int j = i - 3;

if (a[i-1] != a[i+1] || a[i+1] <= a[i] || a[i] <= a[j] || a[i-1] <= a[j-1])
{
     return false;
}
senza usare var globali o ulteriori argomenti
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2011, 01:02   #10
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
ho provato a rifarla seconde le indicazioni:
Codice:
bool ricorsiva(int a[],int dim, int i){ 
     int j=i-3;
     
     if(dim%3!=0)
     return false;
     
     if(i==(dim-1)) //caso base
     return true;
     if(i==1){
              if(a[i-1] != a[i+1] || a[i+1] <= a[i])
              return false; 

     }else if(i > 1){
     if(a[i-1] != a[i+1] || a[i+1] <= a[i] || a[i] <= a[j] || a[i-1] <= a[j-1]) || a[i+1] <= a[j+1])
     return false;
     }
     return ricorsiva(a, dim, i+3);    
}
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2011, 09:07   #11
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Non ho capito bene:

Quote:
Originariamente inviato da mistergks Guarda i messaggi
dato l'array: 2 1 2 5 2 5 7 5 7 9 6 9, di dimensione 12, la funzione dovrebbe restituire true.
pero'
Quote:
Originariamente inviato da mistergks Guarda i messaggi
Inoltre, a sequenza di terne contenuta nell'array deve essere strettamente crescente, nel senso che in ogni terna gli elementi esterni devono essere strettamente minore dell'elemento centrale della terna successiva
A meno di clamorosi svarioni (che mi capitano spesso ) dovrebbe ritornare false.
Infatti la terna 5 2 5 ha gli elementi esterni (=5) che NON sono strettamente minori dell'elemento centrale della terna successiva.
Infatti la terna successiva e' 7 5 7 e non mi sembra che 5 sia strettamente minore di 5
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2011, 14:09   #12
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Non ho capito bene:



pero'


A meno di clamorosi svarioni (che mi capitano spesso ) dovrebbe ritornare false.
Infatti la terna 5 2 5 ha gli elementi esterni (=5) che NON sono strettamente minori dell'elemento centrale della terna successiva.
Infatti la terna successiva e' 7 5 7 e non mi sembra che 5 sia strettamente minore di 5
opsss...mi sa che ho sbagliato a scrivere la traccia...
dovrebbe essere cosi, ma controllerò stasera quando torno a casa..:
Inoltre, la sequenza di terne contenuta nell'array deve essere strettamente crescente, nel senso che in ogni terna gli elementi esterni devono essere strettamente minore degli elementi esterni della terna successiva
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2011, 14:57   #13
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
ho provato a rifarla seconde le indicazioni:
Codice:
bool ricorsiva(int a[],int dim, int i){ 
     int j=i-3;
     
     if(dim%3!=0)
     return false;
     
     if(i==(dim-1)) //caso base
     return true;
     if(i==1){
              if(a[i-1] != a[i+1] || a[i+1] <= a[i])
              return false; 

     }else if(i > 1){
     if(a[i-1] != a[i+1] || a[i+1] <= a[i] || a[i] <= a[j] || a[i-1] <= a[j-1]) || a[i+1] <= a[j+1])
     return false;
     }
     return ricorsiva(a, dim, i+3);    
}
mistergks è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Google perde la testa: AI Overview conso...
Anthropic presenta Claude Sonnet 5.5, e ...
ESA e ClearSpace svilupperanno un satell...
Oracle, stock option da quasi un miliard...
Starship: si è conclusa anticipat...
Un computer quantistico ha funzionato ne...
Sovranità sui dati: AWS è ...
Il nuovo nome della distro Linux mobile ...
Due ventole da 220 mm e non solo: Cooler...
Truffa telefonica via Google Ads: il bro...
Google pensiona le Gems di Gemini: cosa ...
Flight 14: incertezza per un problema a ...
C'è un problema con i robot Tesla: i dip...
Raggi gamma anomali dalla Via Lattea sve...
NIO vende il 30% della divisione scambio...
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: 00:30.


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