Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-02-2011, 00:21   #1
toz
Senior Member
 
L'Avatar di toz
 
Iscritto dal: Apr 2000
Città: Teramo
Messaggi: 685
[C]Non ridete ,ho appena iniziato....

Allora, ho questo codice che non riesco ad interpretare...se qualcuno mi da una mano....
Codice:
#include <stdio.h>
int funz (int,int);
int main ()
{
	int a=10,b=12,t;
	t=funz(a,b);
	printf("t=%d\n\n",t);
	return 0;
}
int funz (int x,int y)
{
	if(y!=0)
	   return(y+funz(y,x%y));
    else
       return x;
}
L'ho fatto girare e mi risulata che il "printf" riporta t=26.
Le mie perplessita' sono : ma la "funz" in realta' non fa nulla?Perche' y(che sarebbe b?) e' diverso da 0,quindi dovrebbe uscire con il "return x" che si dovrebbe limitare a riportare il valore di a cosi' come dichiarato nella main.
Ma allora il valore di t=26 da cosa e' dato,cioe' t=funz(a,b) che calcoli esegue ?
Grazie.
__________________
Se c'è una soluzione,perchè t'arrabbi?
Se non c'è soluzione,perchè t'arrabbi?

Nuova gloria risplende suoi tuoi circuiti o mia Kt7-a.....per sempre,nei secoli dei secoli....
http://www.zotbox.net
toz è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 01:12   #2
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
Quote:
Originariamente inviato da toz Guarda i messaggi
Allora, ho questo codice che non riesco ad interpretare...se qualcuno mi da una mano....
Codice:
#include <stdio.h>
int funz (int,int);
int main ()
{
	int a=10,b=12,t;
	t=funz(a,b);
	printf("t=%d\n\n",t);
	return 0;
}
int funz (int x,int y)
{
	if(y!=0)
	   return(y+funz(y,x%y));
    else
       return x;
}
L'ho fatto girare e mi risulata che il "printf" riporta t=26.
Le mie perplessita' sono : ma la "funz" in realta' non fa nulla?Perche' y(che sarebbe b?) e' diverso da 0,quindi dovrebbe uscire con il "return x" che si dovrebbe limitare a riportare il valore di a cosi' come dichiarato nella main.
Ma allora il valore di t=26 da cosa e' dato,cioe' t=funz(a,b) che calcoli esegue ?
Grazie.
La funzione funz è ricorsiva è bisogna ragionare un attimo per capirne il funzionamento ,
quando viene eseguita la prima volta chiamata nel main y = 12

quindi if(y!=0) è verificato
ed esegue return(y+funz(y,x%y));

che equivale a return ( 12 + funz(12,10) )
anche adesso la if è verificata quindi ritorna ( 10 + funz(10 ,2) )
che continua ad essere verificato quindi ritorna ( 2 + funz(2,0) )
adesso l'if non è piu verificato perchè la y = 0 quindi ritorna la x che è = a 2.

quindi ricapitolando
( 12 + funz(12,10) )
diventa
( 12 + ( 10 + funz(10 ,2) ) )
che diventa
( 12 + ( 10 + ( 2 + funz(2,0) ) ) )
che diventa
( 12 + ( 10 + ( 2 + (2) ) ) )

Totale 26

Spero che ti risulta piu chiaro il funzionamento di quella funzione
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati.
bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 11:13   #3
toz
Senior Member
 
L'Avatar di toz
 
Iscritto dal: Apr 2000
Città: Teramo
Messaggi: 685
Grazie mille.....ora mi e' molto piu' chiaro.....avevo fatto un madornale errore di "concentrazione" : y!=0 ,fin quando e' vero viene eseguita ricorsivamente la funz...non il contrario.....ne approfitto per chiedere una'altra cosa :ma x%y non dovrebbe riportare il resto di x/y ??Perch'e' nel primo pasaggio scrivi ( 12 + funz(12,10) ) ?
__________________
Se c'è una soluzione,perchè t'arrabbi?
Se non c'è soluzione,perchè t'arrabbi?

Nuova gloria risplende suoi tuoi circuiti o mia Kt7-a.....per sempre,nei secoli dei secoli....
http://www.zotbox.net
toz è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 12:36   #4
toz
Senior Member
 
L'Avatar di toz
 
Iscritto dal: Apr 2000
Città: Teramo
Messaggi: 685
Cerco di spiegarmi meglio:
Nel primo passaggio della funz,essendo verificato y!=0 (12!=0) si ha (y+funz(y,x%y) => (12+funz(12,10).
Nel secondo pasaggio ,essendo ancora verificato y!=0 (10!=0) si ha (y1+(y2+funz(y2,x%y2))) => (12+(10+funz(10,10%10))) ma tu scrivi ( 12 + ( 10 + funz(10 ,2) ) ) non dovrebbe essere ( 12 + ( 10 + funz(10 ,0) ) ) ? Perche' x%y e' uguale a 2 ?
Grazie.
__________________
Se c'è una soluzione,perchè t'arrabbi?
Se non c'è soluzione,perchè t'arrabbi?

Nuova gloria risplende suoi tuoi circuiti o mia Kt7-a.....per sempre,nei secoli dei secoli....
http://www.zotbox.net
toz è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 14:24   #5
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
Quote:
Originariamente inviato da toz Guarda i messaggi
Cerco di spiegarmi meglio:
Nel primo passaggio della funz,essendo verificato y!=0 (12!=0) si ha (y+funz(y,x%y) => (12+funz(12,10).
Nel secondo pasaggio ,essendo ancora verificato y!=0 (10!=0) si ha (y1+(y2+funz(y2,x%y2))) => (12+(10+funz(10,10%10))) ma tu scrivi ( 12 + ( 10 + funz(10 ,2) ) ) non dovrebbe essere ( 12 + ( 10 + funz(10 ,0) ) ) ? Perche' x%y e' uguale a 2 ?
Grazie.
Ho ricontrollato i miei calcoli è sono corretti.
Non so da dove ti esce quel 10 mod 10 , forse fai riferimento in una funzione ai ai valori delle varibili della funzione precedente piuttosto che a quelli correnti...
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati.
bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 15:12   #6
toz
Senior Member
 
L'Avatar di toz
 
Iscritto dal: Apr 2000
Città: Teramo
Messaggi: 685
I tuoi calcoli sono corretti,quello che non riesco a capire e' come varia il valore di x all'interno della funzione......
__________________
Se c'è una soluzione,perchè t'arrabbi?
Se non c'è soluzione,perchè t'arrabbi?

Nuova gloria risplende suoi tuoi circuiti o mia Kt7-a.....per sempre,nei secoli dei secoli....
http://www.zotbox.net
toz è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 15:28   #7
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
Quote:
Originariamente inviato da toz Guarda i messaggi
I tuoi calcoli sono corretti,quello che non riesco a capire e' come varia il valore di x all'interno della funzione......
ogni volta che richiami la funzione funz
è una storia a se stante che non ha nulla a che vedere con le chiamate precedenti

quindi quindi ogni chiamata ha le sue variabili che contengono i propri valori anche se hanno lo stesso nome

quindi la A del main e la X della prima chiamata di funzione sono due variabili diverse

cosi come lo sono la X della prima chiamata e la X della seconda chiamata di funz

quindi la X della prima chiamata vale 12
la X della seconda vale 10
la X della terza vale ... non mi ricordo ...
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati.
bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 16:47   #8
toz
Senior Member
 
L'Avatar di toz
 
Iscritto dal: Apr 2000
Città: Teramo
Messaggi: 685
Ti ringrazio per l'infinita pazienza......ti devo gia' una birra....
Il prototipo di funzione "int funz(int x,int y)" si prende i valori x=a=10 (dove a e' la prima variabile dichiarata nel main) e y=b=12 (dove b e' la seconda variabile dichiarata nel main).Dopodiche' i valori di x ed y
saranno assegnati dagli operandi nella funz,in particolare per qualsiasi valore che assumera' funz(pippo,pluto) io avro' x=pippo e y=pluto.
E' corretto?

x0=a=10,y0=b12
y!=0 VERO =>IF
(y+funz(y,x%y)) => (12+funz(12,10%12) => (12+funz(12,10)

x1=12,y1=10
y!=0 VERO =>IF
(y0+(y1+funz(y1,x1%y1))) => (12+(10+funz(10,12%10))) => (12+(10+funz(10,2)))

x2=10,y2=2
y!=0 VERO =>IF
(y0+(y1+(y2+funz(y2,x2%y2)))) => (12+(10+(2+funz(2,10%2)))) => (12+(10+(2+funz(2,0) => 12+10+2+2=26 => nella main funz(a,b)=26

x3=2,y3=0
y!=0 FALSO =>ELSE
return x=2 (che non viene preso in considerazione nella main)

Ci dovrei essere no?
__________________
Se c'è una soluzione,perchè t'arrabbi?
Se non c'è soluzione,perchè t'arrabbi?

Nuova gloria risplende suoi tuoi circuiti o mia Kt7-a.....per sempre,nei secoli dei secoli....
http://www.zotbox.net

Ultima modifica di toz : 21-02-2011 alle 20:36.
toz è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 20:35   #9
toz
Senior Member
 
L'Avatar di toz
 
Iscritto dal: Apr 2000
Città: Teramo
Messaggi: 685
Mi sa che ho sbagliato......cioe'
una volta arrivato all'ELSE ho return x,cioe' il valore di x sara' il valore della funzione quindi il tutto diventa cosi' :

x0=a=10,y0=b12
y!=0 VERO =>IF
(y+funz(y,x%y)) => (12+funz(12,10%12) => (12+funz(12,10)

x1=12,y1=10
y!=0 VERO =>IF
(y0+(y1+funz(y1,x1%y1))) => (12+(10+funz(10,12%10))) => (12+(10+funz(10,2)))

x2=10,y2=2
y!=0 VERO =>IF
(y0+(y1+(y2+funz(y2,x2%y2)))) => (12+(10+(2+funz(2,10%2)))) => (12+(10+(2+funz(2,0)))

x3=2,y3=0
y!=0 FALSO =>ELSE
return x=2

=> funz(y2,x2%y2) vale 2
=> (12+(10+(2+2))) = 26=funz(a,b)

sto proprio esaurito
__________________
Se c'è una soluzione,perchè t'arrabbi?
Se non c'è soluzione,perchè t'arrabbi?

Nuova gloria risplende suoi tuoi circuiti o mia Kt7-a.....per sempre,nei secoli dei secoli....
http://www.zotbox.net
toz è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 13:40   #10
toz
Senior Member
 
L'Avatar di toz
 
Iscritto dal: Apr 2000
Città: Teramo
Messaggi: 685
Sempre ste cavolo di funzioni......qualcuno mi potrebbe spiegare come avviene la ricursione della funzione di questo prog???
Codice:
#include <stdio.h>
#define N 9
int funz(int *x,int y);
int main ()
{
	int i,z=0;
	int A[N]={0,1,2,3,4,5,6,7,8};
	for(i=N-1;i>=0;i-=2)
	{
		A[i]=(i+3)/2;
		z+=A[i];
	}
	z+=funz(A,0);
	printf("z=%d A[0]=%d\n\n",z,A[0]);
	return 0;
}
int funz(int *x,int y)
{
	if (*x < *(x+y))
	return y;
	else
	return *x=funz(x,y+1)+y;
}
__________________
Se c'è una soluzione,perchè t'arrabbi?
Se non c'è soluzione,perchè t'arrabbi?

Nuova gloria risplende suoi tuoi circuiti o mia Kt7-a.....per sempre,nei secoli dei secoli....
http://www.zotbox.net
toz è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 15:29   #11
dierre
Senior Member
 
L'Avatar di dierre
 
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2125
Quote:
Originariamente inviato da toz Guarda i messaggi
Sempre ste cavolo di funzioni......qualcuno mi potrebbe spiegare come avviene la ricursione della funzione di questo prog???
Codice:
#include <stdio.h>
#define N 9
int funz(int *x,int y);
int main ()
{
	int i,z=0;
	int A[N]={0,1,2,3,4,5,6,7,8};
	for(i=N-1;i>=0;i-=2)
	{
		A[i]=(i+3)/2;
		z+=A[i];
	}
	z+=funz(A,0);
	printf("z=%d A[0]=%d\n\n",z,A[0]);
	return 0;
}
int funz(int *x,int y)
{
	if (*x < *(x+y))
	return y;
	else
	return *x=funz(x,y+1)+y;
}
La ricorsione avviene come nel caso precedente.

Ora, non tocco più il C da 4 o 5 anni, però ricordo che gli Array ed i puntatori sono in relazione molto stretta, quindi quello che vedi lì è un modo malsano per scorrere un array attraverso puntatori

Chiedo a chi ne sa più di me.
Ma se nel main chiamo
Codice:
z+=funz(A,0);
e la signature di funz è:
Codice:
int funz(int *x,int y)
vuol dire che *x è il primo elemento dell'array, giusto?


Quindi in poche parole nell'if vai a paragone il primo elemento dell'array con tutti gli elementi successivi dell'array che sono > del primo elemento.

Dovrebbe tornare:

*x = 0 + funz(x,1) = 0 + 1;

Prendi con le pinze quello che ti dico perché ripeto che il C non lo tocco da anni.

PS: concittadino!
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale.
Go to a Wormhole

Ultima modifica di dierre : 06-03-2011 alle 15:31.
dierre è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 17:29   #12
toz
Senior Member
 
L'Avatar di toz
 
Iscritto dal: Apr 2000
Città: Teramo
Messaggi: 685
Grazie concittadino!!!
Quello che non capisco pero' e',dopo il primo return dell ELSE,cosa succede...cioe' debbo sostiuire *x con 0 + funz(x,1) = 0 + 1 ?
In tal caso nell IF diventerebbe 0 + 1 < *( 0 + 1)+y) e y che valore avrebbe?

Interamnia caput mundi!!
__________________
Se c'è una soluzione,perchè t'arrabbi?
Se non c'è soluzione,perchè t'arrabbi?

Nuova gloria risplende suoi tuoi circuiti o mia Kt7-a.....per sempre,nei secoli dei secoli....
http://www.zotbox.net
toz è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 17:46   #13
dierre
Senior Member
 
L'Avatar di dierre
 
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2125
Quote:
Originariamente inviato da toz Guarda i messaggi
Grazie concittadino!!!
Quello che non capisco pero' e',dopo il primo return dell ELSE,cosa succede...cioe' debbo sostiuire *x con 0 + funz(x,1) = 0 + 1 ?
In tal caso nell IF diventerebbe 0 + 1 < *( 0 + 1)+y) e y che valore avrebbe?

Interamnia caput mundi!!
Allora: prima regola del programmatore, usare molto l'output. printati *x così vedi come cambia.
A mio parere lì x è sempre lo stesso "all'andata", quindi

*x = f(x,1) + 0

quindi

f(x,1) dovrebbe essere 0<1 perché *x punta sempre al primo elemento e *(x+y) dovrebbe puntare all'elemento 1, cioè (0+1).

Infatti nota che passa x e non *x, quindi rimane invariato nei passaggi perché x è l'indirizzo dell'array e rimane costante.

infatti tu in generale fai così:
Codice:
int a[n];
int *x;

x = a;
Tutto ciò, ribadendo che sicuramente c'è qualcuno con mente più fresca della mia sul C.
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale.
Go to a Wormhole
dierre è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
Il razzo spaziale cinese Landspace Zhuqu...
Micron uccide Crucial e dice addio agli ...
Il cosmonauta Oleg Artemyev non sar&agra...
Samsung conferma il nuovo Exynos 2600: p...
Una tecnologia spaziale verrà uti...
Anche a Bergamo controlli sulle e-bike: ...
Mario Kart World, con l'ultimo aggiornam...
Oracle apre una seconda Region per il cl...
Euro NCAP 2026, cambiano completamente i...
In Russia centinaia di Porsche diventano...
Gli operatori mobile italiani offrono se...
realme GT 8 Pro in promo lancio con 100€...
Autostrade, dal 2026 arrivano i rimborsi...
Carenza di memoria flash NAND e prezzi a...
EA Sports FC 26 fa felici i fan: tornano...
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: 22:06.


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