Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-04-2011, 01: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, 02: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, 02: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, 12: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, 13: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, 13: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, 17: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, 17: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, 19: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, 02: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, 10: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, 15: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, 15: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


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Roscosmos ha lanciato il satellite meteo...
Starship Troopers: Ultimate Bug Wars, to...
Il razzo spaziale europeo Ariane 6, per ...
Oracle Fusion Cloud Applications si pote...
OHB Italia svilupperà un satellit...
Fortinet: "Ora abbiamo una chance d...
Linux Mint chiude con gli aggiornamenti ...
Compressori portatili auto in sconto su ...
Durante il lancio della missione USSF-87...
Dopo il ritiro di Intel da Magdeburgo, l...
Xiaomi 15T scende a 388€ su Amazon: 12GB...
MSI Afterburner: arriva il monitoraggio ...
Missione cinese Chang'e-6: confermata l'...
Addio esenzione sotto i 150 euro: l'UE i...
Allarme riavvii su Windows 11 dopo il ri...
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: 23:24.


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