Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
HONOR Magic V6 è arrivato in Italia a 2.299,90 euro con una promessa precisa: unire 4 mm di spessore da aperto (8,75 mm chiuso nel modello White, 9 mm negli altri colori) a una batteria da 6.660 mAh, la più capiente mai vista su un pieghevole. Lo abbiamo usato per oltre una settimana in versione Red 16/512 GB per capire se lo Snapdragon 8 Elite Gen 5 tiene testa alla concorrenza anche fuori dai benchmark ufficiali
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-03-2012, 12:52   #1
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
[c++] funzione ricorsiva definita come segue

Sia A l'insieme ricorsivo di numeri naturali definito come segue:

0 non appartiene ad A
1 appartiene ad A
X appart. ad A se e solo se (3x-2)/6 appartiene ad A, per ogni x>1


Si scriva in C++ una funzione ricorsiva che verifichi se un dato numero appartiene o meno all'insieme A.
Specificare quale deve essere la prima invocazione per la funzione.
NOTA: La divisione si intende fra interi (non negativi), quindi da approssimare per difetto.

cos'è che non va?

mio codice
Codice:
#include <iostream>
using namespace std;

bool verifica(int x);

int main(){
    int x=5;
    if(verifica(x))
    cout<<"ok"<<endl;
    else
    cout<<"no"<<endl;
    
    
system("pause");
return 0;
}

bool verifica(int x){
     int xx=0;
     
     if(x == 0 || xx == 0)
     return false;
     
     if(x == 1 || xx == 1)
     return true;
     
    if(x > 1)
    xx=(3*x-2)/6;
    
    return verifica(xx);
     
}

Ultima modifica di mistergks : 10-03-2012 alle 09:28. Motivo: errori nella traccia e nel codice
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 09-03-2012, 13:31   #2
ESSE-EFFE
Member
 
Iscritto dal: May 2009
Messaggi: 186
Quote:
Originariamente inviato da mistergks Guarda i messaggi
Sia A l'insieme ricorsivo di numeri naturali definito come segue:
Cioè come?
__________________
ESSE-EFFE.com
Sviluppo software e Web
Creazione loghi - Bergamo
ESSE-EFFE è offline   Rispondi citando il messaggio o parte di esso
Old 09-03-2012, 19:10   #3
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
C'è stato un errore di copia incolla..ora ho messo la definizione..

Inviato dal mio GT-I9003 usando Tapatalk
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2012, 00:35   #4
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da mistergks Guarda i messaggi
Sia A l'insieme ricorsivo di numeri naturali definito come segue:
0 non appartiene ad A
1 appartiene ad A
X appart. ad A se e solo se 3x-2/6 appartiene ad A

Si scriva in C++ una funzione ricorsiva che verifichi se un dato numero appartiene o meno all'insieme A.
Specificare quale deve essere la prima invocazione per la funzione.
NOTA: La divisione si intende fra interi (non negativi), quindi da approssimare per difetto.

cos'è che non va?

mio codice
Codice:
#include 
using namespace std;

bool verifica(int x);

int main(){
    int x=5;
    if(verifica(x))
               cout<<"ok";
    else   cout<<"no";

return 0;
}

bool verifica(int x){
        int xx= 0;

        if(x == 0 || xx ==0)
            return false;

         if(x == 1 || xx == 1)
            return true;

       xx=(3*x-2)/6;
          return verifica(xx);
}
Non ho ben capito la definizione...devo ricorsivamente applicare la formula fino a che il mio numero x diventa o 1 o 0?
E la formula qual è? Nella definizione hai scritto 3x-2/6, nel codice invece (3x-2)/6, che già usando 2 non da un numero intero...

A prescindere da tutto ciò, verifica uscirà sempre con false senza mai richiamarsi nemmeno una volta, perchè tu imponi xx = 0 e poi esci subito al primo if...
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2012, 09:31   #5
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
ora ho messo definitivamente apposto la traccia e il codice...scusate ma ho postato con lo smartphone e mi sono perso qualcosa

Quindi credo che si debba fare cosi...se x è uguale a deve ritornare false, se x è uguale a 1 true e se x>1 deve passare nella formula (3x-2)/6 .
E credo debba convergere verso uno dei casi base...altrimenti non ho capito nemmeno io la traccia!
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2012, 10:29   #6
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da mistergks Guarda i messaggi
ora ho messo definitivamente apposto la traccia e il codice...scusate ma ho postato con lo smartphone e mi sono perso qualcosa

Quindi credo che si debba fare cosi...se x è uguale a deve ritornare false, se x è uguale a 1 true e se x>1 deve passare nella formula (3x-2)/6 .
E credo debba convergere verso uno dei casi base...altrimenti non ho capito nemmeno io la traccia!
Sarà come dici tu con la formula (3x-2)/6. Ieri ho detto che usando x = 2 non si ottiene un numero intero ma in realtà essendo una divisione tra interi si otterrebbe 0.
Cmq basta che negli if tu metta il controllo solo su x e non su xx, il resto va bene.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2012, 10:56   #7
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Sarà come dici tu con la formula (3x-2)/6. Ieri ho detto che usando x = 2 non si ottiene un numero intero ma in realtà essendo una divisione tra interi si otterrebbe 0.
Cmq basta che negli if tu metta il controllo solo su x e non su xx, il resto va bene.
Ad esempio mettendo x=5...facendola a mano dopo tutte le ricorsioni verrebbe 1 e quindi restituirebbe true...invece mi dà false! (sempre arrotondando per difetto e quindi usando gli int)..

Ho inizializzato x=3 e mi stampa OK... provando a mano..viene 1 al primo passo...quindi secondo me si ferma a un solo passo e non viene richiamata piu' volte la funzione... l'errore è questo ma non so come risolverlo

Ultima modifica di mistergks : 10-03-2012 alle 11:21.
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2012, 11:18   #8
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
5 è false:
1° chiamata 5 == 0? no, 5 == 1? no, allora xx = (15-2)/6 = 13/6 = 2; return verifica(2).
E sappiamo che 2 restituisce false.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2012, 11:27   #9
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Codice:
#include <iostream>

using namespace std;

bool verifica(int x);

int main()
{
	for (int i = 0; i <= 100; ++i) {
		cout << i << " does";
		if (!verifica(i)) cout << " not";
		cout << " belong to this weird recursive sequence" << endl;
	}
	cout << endl;

	return 0;
}

bool verifica(int x)
{
	if (x == 0) return false;
	else if (x == 1) return true;
	else {
		int y = (3*x - 2)/6;
		return verifica(y);
	}     
}
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2012, 11:30   #10
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
5 è false:
1° chiamata 5 == 0? no, 5 == 1? no, allora xx = (15-2)/6 = 13/6 = 2; return verifica(2).
E sappiamo che 2 restituisce false.
opsss è vero!! non so manco fare i conti più ..
E allora qual'è un numero > 1 che restituisce true?! non riesco a trovarlo!
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2012, 21:25   #11
cenarius_88
Member
 
Iscritto dal: Nov 2007
Città: Alcamo
Messaggi: 103
Mi sbaglierò ma...

prova con x = 3.

3==0? no... procede
3==1? no... procede
(3*3-2)/6=(9-2)/6=7/6=1 (per arrotontamento all'intero più vicino)
procede con verifica(1)

1==0?no... procede
1==1?si... vero....stampa ok
cenarius_88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
GigaWiper: il malware che distrugge i di...
Lenovo Idea Tab Plus: sottile, leggero, ...
Logitech G PRO X Wireless contro HyperX ...
Il prossimo top di gamma di OPPO potrebb...
Comprare uno smartphone economico sta pe...
Google in pole position per utilizzare i...
Nintendo valuta una Switch 2 OLED con sc...
ChatGPT torna disponibile su WhatsApp in...
Non vuoi usare l'intelligenza artificial...
Metà del web ormai è bot: ...
Le big IA obbligate a cedere metà...
HP blocca anche le cartucce di inchiostr...
Acquisizione Apple: SigScalr chiude, gli...
Cooler Master HAF II 500 integra le vent...
I musulmani non dovrebbero usare le crip...
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: 08:15.


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