<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wepik</id>
	<title>Sistemi Operativi - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wepik"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php/Special:Contributions/Wepik"/>
	<updated>2026-04-16T21:57:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=857</id>
		<title>Stern-Brocot numbers</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=857"/>
		<updated>2014-12-06T10:15:06Z</updated>

		<summary type="html">&lt;p&gt;Wepik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Sequenza di Stern-Brocot ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DpwUVExX27E Spiegazione in inglese].&lt;br /&gt;
Stern-Brocot e' molto simile alla sequenza di Fibonacci. Infatti, si parte con i primi due numeri uguali a 1, si fa la loro somma e aggiunge alla sequenza. La cosa in piu' e' che dopo la somma aggiungiamo alla sequenza il secondo addendo. &lt;br /&gt;
&lt;br /&gt;
Es.: &lt;br /&gt;
&lt;br /&gt;
1, 1 -&amp;gt; 1, 1, 2, 1 -&amp;gt; 1, 1, 2, 1, 3, 2 -&amp;gt; 1, 1, 2, 1, 3, 2, 3, 1 -&amp;gt;  ecc.&lt;br /&gt;
&lt;br /&gt;
La funzione prende in input un solo numero positivo.&lt;br /&gt;
&lt;br /&gt;
== main.c ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct n {						// Nodo lista&lt;br /&gt;
	int num;							// Numero della successione&lt;br /&gt;
	struct n *next;&lt;br /&gt;
}nodo;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]) {&lt;br /&gt;
	if(argc!=2) {						// Controllo se il programma riceve esattamente un input&lt;br /&gt;
		printf(&amp;quot;Devi inserire UN argomento!\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	nodo *r;							// Root, puntatore alla testa della lista&lt;br /&gt;
	nodo *f;							// Variabile d'appoggio&lt;br /&gt;
&lt;br /&gt;
	nodo *p;							// Elemento numero uno&lt;br /&gt;
	nodo *s;							// Elemento numero due&lt;br /&gt;
&lt;br /&gt;
	nodo *t;							// Elemento numero tre&lt;br /&gt;
	nodo *q;							// Elemento numero quattro&lt;br /&gt;
&lt;br /&gt;
	int i;								// Contatore&lt;br /&gt;
	int k= atoi(argv[1]);				// Numero di passi che la sequenza deve compiere&lt;br /&gt;
&lt;br /&gt;
        if(k&amp;lt;1) {&lt;br /&gt;
		printf(&amp;quot;L'input deve essere maggiore di zero!\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	p= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	s= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	r= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
	r-&amp;gt;next= p;&lt;br /&gt;
	p-&amp;gt;next= s;&lt;br /&gt;
	s-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
	for(i= 0; i&amp;lt;k; i++) {&lt;br /&gt;
		if(i==0) {									// Alla prima iterazione&lt;br /&gt;
			t= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
			q= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
			s-&amp;gt;next= t;&lt;br /&gt;
			t-&amp;gt;next= q;&lt;br /&gt;
			q-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
			p-&amp;gt;num= 1;&lt;br /&gt;
			s-&amp;gt;num= 1;&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - %i - %i - &amp;quot;, p-&amp;gt;num, s-&amp;gt;num, t-&amp;gt;num, q-&amp;gt;num);&lt;br /&gt;
		}&lt;br /&gt;
		else {										// Iterazione successive&lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Alloco nuovo spazio in memoria&lt;br /&gt;
			p= s;&lt;br /&gt;
			s= s-&amp;gt;next;&lt;br /&gt;
&lt;br /&gt;
			q-&amp;gt;next= f;								// &lt;br /&gt;
			t= f;									// &lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Questo pezzo alloca e lega due nuove aree di memoria (nodi) al resto della lista&lt;br /&gt;
			q= f;									//&lt;br /&gt;
			t-&amp;gt;next= q;								//&lt;br /&gt;
			q-&amp;gt;next= NULL;							//&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - &amp;quot;, t-&amp;gt;num, q-&amp;gt;num);	// Stampo il terzo e il quarto elemento&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	f= r-&amp;gt;next;										// Parto dal primo elemento della lista&lt;br /&gt;
&lt;br /&gt;
	while(f-&amp;gt;next != NULL) {						// Stampo tutte le frazioni composte con i numeri della sequenza&lt;br /&gt;
		printf(&amp;quot;%i/%i  &amp;quot;, f-&amp;gt;num,f-&amp;gt;next-&amp;gt;num);&lt;br /&gt;
		f= f-&amp;gt;next;&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	free(r);&lt;br /&gt;
	free(p);&lt;br /&gt;
	free(s);&lt;br /&gt;
	free(t);&lt;br /&gt;
	free(q);&lt;br /&gt;
	free(f);										// Durante esecuzione, liberando questo puntatore ricevo il messaggio &amp;quot;pointer being freed was not allocated&amp;quot;. Non trovo il motivo di questo messaggio.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cosa c'e' di speciale in questa sequenza? Se mettiamo la barra della divisione tra ogni elemento della sequenza, otteniamo delle frazioni. Queste frazioni rappresentano TUTTI numeri razionali, in ordine, nella loro forma piu' semplice, una sola volta.&lt;/div&gt;</summary>
		<author><name>Wepik</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=856</id>
		<title>Stern-Brocot numbers</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=856"/>
		<updated>2014-12-06T10:08:57Z</updated>

		<summary type="html">&lt;p&gt;Wepik: /* main.c */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Sequenza di Stern-Brocot ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DpwUVExX27E Spiegazione in inglese].&lt;br /&gt;
Stern-Brocot e' molto simile alla sequenza di Fibonacci. Infatti, si parte con i primi due numeri uguali a 1, si fa la loro somma e aggiunge alla sequenza. La cosa in piu' e' che dopo la somma aggiungiamo alla sequenza il secondo addendo. &lt;br /&gt;
&lt;br /&gt;
Es.: &lt;br /&gt;
&lt;br /&gt;
1, 1 -&amp;gt; 1, 1, 2, 1 -&amp;gt; 1, 1, 2, 1, 3, 2 -&amp;gt; 1, 1, 2, 1, 3, 2, 3, 1 -&amp;gt;  ecc.&lt;br /&gt;
&lt;br /&gt;
La funzione prende in input un solo numero positivo.&lt;br /&gt;
&lt;br /&gt;
== main.c ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct n {						// Nodo lista&lt;br /&gt;
	int num;							// Numero della successione&lt;br /&gt;
	struct n *next;&lt;br /&gt;
}nodo;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]) {&lt;br /&gt;
	if(argc!=2) {						// Controllo se il programma riceve esattamente un input&lt;br /&gt;
		printf(&amp;quot;Devi inserire UN argomento!\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	nodo *r;							// Root, puntatore alla testa della lista&lt;br /&gt;
	nodo *f;							// Variabile d'appoggio&lt;br /&gt;
&lt;br /&gt;
	nodo *p;							// Elemento numero uno&lt;br /&gt;
	nodo *s;							// Elemento numero due&lt;br /&gt;
&lt;br /&gt;
	nodo *t;							// Elemento numero tre&lt;br /&gt;
	nodo *q;							// Elemento numero quattro&lt;br /&gt;
&lt;br /&gt;
	int i;								// Contatore&lt;br /&gt;
	int k= atoi(argv[1]);				// Numero di passi che la sequenza deve compiere&lt;br /&gt;
&lt;br /&gt;
        if(k&amp;lt;1) {&lt;br /&gt;
		printf(&amp;quot;L'input deve essere maggiore di zero!\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	p= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	s= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	r= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
	r-&amp;gt;next= p;&lt;br /&gt;
	p-&amp;gt;next= s;&lt;br /&gt;
	s-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
	for(i= 0; i&amp;lt;k; i++) {&lt;br /&gt;
		if(i==0) {									// Alla prima iterazione&lt;br /&gt;
			t= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
			q= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
			s-&amp;gt;next= t;&lt;br /&gt;
			t-&amp;gt;next= q;&lt;br /&gt;
			q-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
			p-&amp;gt;num= 1;&lt;br /&gt;
			s-&amp;gt;num= 1;&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - %i - %i - &amp;quot;, p-&amp;gt;num, s-&amp;gt;num, t-&amp;gt;num, q-&amp;gt;num);&lt;br /&gt;
		}&lt;br /&gt;
		else {										// Iterazione successive&lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Alloco nuovo spazio in memoria&lt;br /&gt;
			p= s;&lt;br /&gt;
			s= s-&amp;gt;next;&lt;br /&gt;
&lt;br /&gt;
			q-&amp;gt;next= f;								// &lt;br /&gt;
			t= f;									// &lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Questo pezzo alloca e lega due nuove aree di memoria (nodi) al resto della lista&lt;br /&gt;
			q= f;									//&lt;br /&gt;
			t-&amp;gt;next= q;								//&lt;br /&gt;
			q-&amp;gt;next= NULL;							//&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - &amp;quot;, t-&amp;gt;num, q-&amp;gt;num);	// Stampo il terzo e il quarto elemento&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	f= r-&amp;gt;next;										// Parto dal primo elemento della lista&lt;br /&gt;
&lt;br /&gt;
	while(f-&amp;gt;next != NULL) {						// Stampo tutte le frazioni composte con i numeri della sequenza&lt;br /&gt;
		printf(&amp;quot;%i/%i  &amp;quot;, f-&amp;gt;num,f-&amp;gt;next-&amp;gt;num);&lt;br /&gt;
		f= f-&amp;gt;next;&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	free(r);&lt;br /&gt;
	free(p);&lt;br /&gt;
	free(s);&lt;br /&gt;
	free(t);&lt;br /&gt;
	free(q);&lt;br /&gt;
	free(f);										// Durante esecuzione, liberando questo puntatore ricevo il messaggio &amp;quot;pointer being freed was not allocated&amp;quot;. Non trovo il motivo di questo messaggio.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cosa c'e' di speciale in questa sequenza? Se mettiamo la barra della divisione tra ogni elemento della sequenza, otteniamo delle frazioni. Queste frazioni rappresentano TUTTI numeri reali, in ordine, nella loro forma piu' semplice, una sola volta.&lt;/div&gt;</summary>
		<author><name>Wepik</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=855</id>
		<title>Stern-Brocot numbers</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=855"/>
		<updated>2014-12-06T10:07:46Z</updated>

		<summary type="html">&lt;p&gt;Wepik: /* Sequenza di Stern-Brocot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Sequenza di Stern-Brocot ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DpwUVExX27E Spiegazione in inglese].&lt;br /&gt;
Stern-Brocot e' molto simile alla sequenza di Fibonacci. Infatti, si parte con i primi due numeri uguali a 1, si fa la loro somma e aggiunge alla sequenza. La cosa in piu' e' che dopo la somma aggiungiamo alla sequenza il secondo addendo. &lt;br /&gt;
&lt;br /&gt;
Es.: &lt;br /&gt;
&lt;br /&gt;
1, 1 -&amp;gt; 1, 1, 2, 1 -&amp;gt; 1, 1, 2, 1, 3, 2 -&amp;gt; 1, 1, 2, 1, 3, 2, 3, 1 -&amp;gt;  ecc.&lt;br /&gt;
&lt;br /&gt;
La funzione prende in input un solo numero positivo.&lt;br /&gt;
&lt;br /&gt;
== main.c ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct n {						// Nodo lista&lt;br /&gt;
	int num;							// Numero della successione&lt;br /&gt;
	struct n *next;&lt;br /&gt;
}nodo;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]) {&lt;br /&gt;
	if(argc!=2) {						// Controllo se il programma riceve esattamente un input&lt;br /&gt;
		printf(&amp;quot;Devi inserire UN argomento!\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	nodo *r;							// Root, puntatore alla testa della lista&lt;br /&gt;
	nodo *f;							// Variabile d'appoggio&lt;br /&gt;
&lt;br /&gt;
	nodo *p;							// Elemento numero uno&lt;br /&gt;
	nodo *s;							// Elemento numero due&lt;br /&gt;
&lt;br /&gt;
	nodo *t;							// Elemento numero tre&lt;br /&gt;
	nodo *q;							// Elemento numero quattro&lt;br /&gt;
&lt;br /&gt;
	int i;								// Contatore&lt;br /&gt;
	int k= atoi(argv[1]);				// Numero di passi che la sequenza deve compiere&lt;br /&gt;
&lt;br /&gt;
	p= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	s= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	r= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
	r-&amp;gt;next= p;&lt;br /&gt;
	p-&amp;gt;next= s;&lt;br /&gt;
	s-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
	for(i= 0; i&amp;lt;k; i++) {&lt;br /&gt;
		if(i==0) {									// Alla prima iterazione&lt;br /&gt;
			t= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
			q= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
			s-&amp;gt;next= t;&lt;br /&gt;
			t-&amp;gt;next= q;&lt;br /&gt;
			q-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
			p-&amp;gt;num= 1;&lt;br /&gt;
			s-&amp;gt;num= 1;&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - %i - %i - &amp;quot;, p-&amp;gt;num, s-&amp;gt;num, t-&amp;gt;num, q-&amp;gt;num);&lt;br /&gt;
		}&lt;br /&gt;
		else {										// Iterazione successive&lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Alloco nuovo spazio in memoria&lt;br /&gt;
			p= s;&lt;br /&gt;
			s= s-&amp;gt;next;&lt;br /&gt;
&lt;br /&gt;
			q-&amp;gt;next= f;								// &lt;br /&gt;
			t= f;									// &lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Questo pezzo alloca e lega due nuove aree di memoria (nodi) al resto della lista&lt;br /&gt;
			q= f;									//&lt;br /&gt;
			t-&amp;gt;next= q;								//&lt;br /&gt;
			q-&amp;gt;next= NULL;							//&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - &amp;quot;, t-&amp;gt;num, q-&amp;gt;num);	// Stampo il terzo e il quarto elemento&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	f= r-&amp;gt;next;										// Parto dal primo elemento della lista&lt;br /&gt;
&lt;br /&gt;
	while(f-&amp;gt;next != NULL) {						// Stampo tutte le frazioni composte con i numeri della sequenza&lt;br /&gt;
		printf(&amp;quot;%i/%i  &amp;quot;, f-&amp;gt;num,f-&amp;gt;next-&amp;gt;num);&lt;br /&gt;
		f= f-&amp;gt;next;&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	free(r);&lt;br /&gt;
	free(p);&lt;br /&gt;
	free(s);&lt;br /&gt;
	free(t);&lt;br /&gt;
	free(q);&lt;br /&gt;
	free(f);										// Durante esecuzione, liberando questo puntatore ricevo il messaggio &amp;quot;pointer being freed was not allocated&amp;quot;. Non trovo il motivo di questo messaggio.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cosa c'e' di speciale in questa sequenza? Se mettiamo la barra della divisione tra ogni elemento della sequenza, otteniamo delle frazioni. Queste frazioni rappresentano TUTTI numeri reali, in ordine, nella loro forma piu' semplice, una sola volta.&lt;/div&gt;</summary>
		<author><name>Wepik</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=854</id>
		<title>Stern-Brocot numbers</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=854"/>
		<updated>2014-12-06T10:05:28Z</updated>

		<summary type="html">&lt;p&gt;Wepik: /* main.c */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Sequenza di Stern-Brocot ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DpwUVExX27E Spiegazione in inglese].&lt;br /&gt;
Stern-Brocot e' molto simile alla sequenza di Fibonacci. Infatti, si parte con i primi due numeri uguali a 1, si fa la loro somma e aggiunge alla sequenza. La cosa in piu' e' che dopo la somma aggiungiamo alla sequenza il secondo addendo. &lt;br /&gt;
Es.: &lt;br /&gt;
1, 1 -&amp;gt; 1, 1, 2, 1 -&amp;gt; 1, 1, 2, 1, 3, 2 -&amp;gt; 1, 1, 2, 1, 3, 2, 3, 1 -&amp;gt;  ecc.&lt;br /&gt;
&lt;br /&gt;
La funzione prende in input un solo numero positivo.&lt;br /&gt;
&lt;br /&gt;
== main.c ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct n {						// Nodo lista&lt;br /&gt;
	int num;							// Numero della successione&lt;br /&gt;
	struct n *next;&lt;br /&gt;
}nodo;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]) {&lt;br /&gt;
	if(argc!=2) {						// Controllo se il programma riceve esattamente un input&lt;br /&gt;
		printf(&amp;quot;Devi inserire UN argomento!\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	nodo *r;							// Root, puntatore alla testa della lista&lt;br /&gt;
	nodo *f;							// Variabile d'appoggio&lt;br /&gt;
&lt;br /&gt;
	nodo *p;							// Elemento numero uno&lt;br /&gt;
	nodo *s;							// Elemento numero due&lt;br /&gt;
&lt;br /&gt;
	nodo *t;							// Elemento numero tre&lt;br /&gt;
	nodo *q;							// Elemento numero quattro&lt;br /&gt;
&lt;br /&gt;
	int i;								// Contatore&lt;br /&gt;
	int k= atoi(argv[1]);				// Numero di passi che la sequenza deve compiere&lt;br /&gt;
&lt;br /&gt;
	p= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	s= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	r= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
	r-&amp;gt;next= p;&lt;br /&gt;
	p-&amp;gt;next= s;&lt;br /&gt;
	s-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
	for(i= 0; i&amp;lt;k; i++) {&lt;br /&gt;
		if(i==0) {									// Alla prima iterazione&lt;br /&gt;
			t= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
			q= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
			s-&amp;gt;next= t;&lt;br /&gt;
			t-&amp;gt;next= q;&lt;br /&gt;
			q-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
			p-&amp;gt;num= 1;&lt;br /&gt;
			s-&amp;gt;num= 1;&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - %i - %i - &amp;quot;, p-&amp;gt;num, s-&amp;gt;num, t-&amp;gt;num, q-&amp;gt;num);&lt;br /&gt;
		}&lt;br /&gt;
		else {										// Iterazione successive&lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Alloco nuovo spazio in memoria&lt;br /&gt;
			p= s;&lt;br /&gt;
			s= s-&amp;gt;next;&lt;br /&gt;
&lt;br /&gt;
			q-&amp;gt;next= f;								// &lt;br /&gt;
			t= f;									// &lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Questo pezzo alloca e lega due nuove aree di memoria (nodi) al resto della lista&lt;br /&gt;
			q= f;									//&lt;br /&gt;
			t-&amp;gt;next= q;								//&lt;br /&gt;
			q-&amp;gt;next= NULL;							//&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - &amp;quot;, t-&amp;gt;num, q-&amp;gt;num);	// Stampo il terzo e il quarto elemento&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	f= r-&amp;gt;next;										// Parto dal primo elemento della lista&lt;br /&gt;
&lt;br /&gt;
	while(f-&amp;gt;next != NULL) {						// Stampo tutte le frazioni composte con i numeri della sequenza&lt;br /&gt;
		printf(&amp;quot;%i/%i  &amp;quot;, f-&amp;gt;num,f-&amp;gt;next-&amp;gt;num);&lt;br /&gt;
		f= f-&amp;gt;next;&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	free(r);&lt;br /&gt;
	free(p);&lt;br /&gt;
	free(s);&lt;br /&gt;
	free(t);&lt;br /&gt;
	free(q);&lt;br /&gt;
	free(f);										// Durante esecuzione, liberando questo puntatore ricevo il messaggio &amp;quot;pointer being freed was not allocated&amp;quot;. Non trovo il motivo di questo messaggio.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cosa c'e' di speciale in questa sequenza? Se mettiamo la barra della divisione tra ogni elemento della sequenza, otteniamo delle frazioni. Queste frazioni rappresentano TUTTI numeri reali, in ordine, nella loro forma piu' semplice, una sola volta.&lt;/div&gt;</summary>
		<author><name>Wepik</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=853</id>
		<title>Stern-Brocot numbers</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Stern-Brocot_numbers&amp;diff=853"/>
		<updated>2014-12-06T10:03:41Z</updated>

		<summary type="html">&lt;p&gt;Wepik: Created page with &amp;quot; == Sequenza di Stern-Brocot ==  [https://www.youtube.com/watch?v=DpwUVExX27E Spiegazione in inglese]. Stern-Brocot e' molto simile alla sequenza di Fibonacci. Infatti, si par...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Sequenza di Stern-Brocot ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DpwUVExX27E Spiegazione in inglese].&lt;br /&gt;
Stern-Brocot e' molto simile alla sequenza di Fibonacci. Infatti, si parte con i primi due numeri uguali a 1, si fa la loro somma e aggiunge alla sequenza. La cosa in piu' e' che dopo la somma aggiungiamo alla sequenza il secondo addendo. &lt;br /&gt;
Es.: &lt;br /&gt;
1, 1 -&amp;gt; 1, 1, 2, 1 -&amp;gt; 1, 1, 2, 1, 3, 2 -&amp;gt; 1, 1, 2, 1, 3, 2, 3, 1 -&amp;gt;  ecc.&lt;br /&gt;
&lt;br /&gt;
La funzione prende in input un solo numero positivo.&lt;br /&gt;
&lt;br /&gt;
== main.c ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct n {						// Nodo lista&lt;br /&gt;
	int num;							// Numero della successione&lt;br /&gt;
	struct n *next;&lt;br /&gt;
}nodo;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]) {&lt;br /&gt;
	if(argc!=2) {						// Controllo se il programma riceve esattamente un input&lt;br /&gt;
		printf(&amp;quot;Devi inserire UN argomento!\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	nodo *r;							// Root, puntatore alla testa della lista&lt;br /&gt;
	nodo *f;							// Variabile d'appoggio&lt;br /&gt;
&lt;br /&gt;
	nodo *p;							// Elemento numero uno&lt;br /&gt;
	nodo *s;							// Elemento numero due&lt;br /&gt;
&lt;br /&gt;
	nodo *t;							// Elemento numero tre&lt;br /&gt;
	nodo *q;							// Elemento numero quattro&lt;br /&gt;
&lt;br /&gt;
	int i;								// Contatore&lt;br /&gt;
	int k= atoi(argv[1]);				// Numero di passi che la sequenza deve compiere&lt;br /&gt;
&lt;br /&gt;
	p= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	s= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
	r= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
	r-&amp;gt;next= p;&lt;br /&gt;
	p-&amp;gt;next= s;&lt;br /&gt;
	s-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
	for(i= 0; i&amp;lt;k; i++) {&lt;br /&gt;
		if(i==0) {									// Alla prima iterazione&lt;br /&gt;
			t= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
			q= (nodo*) malloc(sizeof(nodo));&lt;br /&gt;
&lt;br /&gt;
			s-&amp;gt;next= t;&lt;br /&gt;
			t-&amp;gt;next= q;&lt;br /&gt;
			q-&amp;gt;next= NULL;&lt;br /&gt;
&lt;br /&gt;
			p-&amp;gt;num= 1;&lt;br /&gt;
			s-&amp;gt;num= 1;&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - %i - %i - &amp;quot;, p-&amp;gt;num, s-&amp;gt;num, t-&amp;gt;num, q-&amp;gt;num);&lt;br /&gt;
		}&lt;br /&gt;
		else {										// Iterazione successive&lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Alloco nuovo spazio in memoria&lt;br /&gt;
			p= s;&lt;br /&gt;
			s= s-&amp;gt;next;&lt;br /&gt;
&lt;br /&gt;
			q-&amp;gt;next= f;								// &lt;br /&gt;
			t= f;									// &lt;br /&gt;
			f= (nodo*) malloc(sizeof(nodo));		// Questo pezzo alloca e lega due nuove aree di memoria (nodi) al resto della lista&lt;br /&gt;
			q= f;									//&lt;br /&gt;
			t-&amp;gt;next= q;								//&lt;br /&gt;
			q-&amp;gt;next= NULL;							//&lt;br /&gt;
&lt;br /&gt;
			t-&amp;gt;num= p-&amp;gt;num+s-&amp;gt;num;					// Salvo la somma s+t&lt;br /&gt;
			q-&amp;gt;num= s-&amp;gt;num;							// Copio il secondo elemento nel quarto&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%i - %i - &amp;quot;, t-&amp;gt;num, q-&amp;gt;num);	// Stampo il terzo e il quarto elemento&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	f= r-&amp;gt;next;										// Parto dal primo elemento della lista&lt;br /&gt;
&lt;br /&gt;
	while(f-&amp;gt;next != NULL) {						// Stampo tutte le frazioni composte con i numeri della sequenza&lt;br /&gt;
		printf(&amp;quot;%i/%i  &amp;quot;, f-&amp;gt;num,f-&amp;gt;next-&amp;gt;num);&lt;br /&gt;
		f= f-&amp;gt;next;&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	free(r);&lt;br /&gt;
	free(p);&lt;br /&gt;
	free(s);&lt;br /&gt;
	free(t);&lt;br /&gt;
	free(q);&lt;br /&gt;
	free(f);										// Durante esecuzione, liberando questo puntatore ricevo il messaggio &amp;quot;pointer being freed was not allocated&amp;quot;. Non trovo il motivo di questo messaggio.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cosa c'e' di speciale in questa sequenza? Se mettiamo la barra della divisione tra ogni elemento della sequenza, otteniamo delle frazioni. Queste frazioni rappresentano TUTTI numeri reali, in ordine, nella loro forma piu' semplice, una sola volta.&lt;/div&gt;</summary>
		<author><name>Wepik</name></author>
	</entry>
</feed>