| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  17-02-2008, 10:39 | #1 | 
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | 
				
				[C] richiamare in main un valore in funzione void
			 
		salve a tutti,,, poniamo il caso che in una funzione void ci sia un calcolo... (una espressione, il calcolo dell'epsilon macchina, qualcosa che dia un numero...) è possibile in qualche modo che nel main() riesca ad estrarre quel numero che mi interessa e stamparlo magari col printf ? esempio... questa dovrebbe essere la funzione dell'epsilon... Codice: 
float eps,f1,f2;
f1=1.0;
while(f2!=1)	
    {
     eps=f1;
     f1=f1/2.0;
     f2=f1+1.0;
     }
printf("Epsilon Macchina: %e \n", eps);
/* il valore che mi interessa è eps */    grazie   
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | 
|   |   | 
|  17-02-2008, 10:53 | #2 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		E' possibile, ma devi passare un parametro come puntatore alla funzione. Ad esempio: float epsilon; miafunzione(&epsilon); e poi lo stampi. La funzione resta void, ma operi sul puntatore per ritornare il valore al chiamante. La funzione diventa: Codice: void miafunzione(float *eps)
{
float f1,f2;
f1=1.0;
while(f2!=1)	
    {
     *eps=f1;
     f1=f1/2.0;
     f2=f1+1.0;
     }
} | 
|   |   | 
|  17-02-2008, 11:07 | #3 | 
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | 
		grazie   ok... fin qui più o meno c'ero arrivato (girando su internet...  ) ma con i puntatori non sono ancora molto abile   quindi dandomele col cucchiaino queste cose... prima del main ci metto il prototipo void miafunzione(float *eps) poi nel main? per stampare il valore che vado a scrivere? Codice: #include <stdio.h>
void miafunzione(float *eps);
main()
{
printf (valore epsilon: %e, /* ??? */ );
}  
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | 
|   |   | 
|  17-02-2008, 11:24 | #4 | |
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | Quote: 
  Codice: main()
{
    float epsilon;
    miafunzione(&epsilon);
    printf ("valore epsilon: %e", epsilon);
}Ultima modifica di cionci : 17-02-2008 alle 11:33. | |
|   |   | 
|  17-02-2008, 11:30 | #5 | 
| Senior Member Iscritto dal: May 2005 
					Messaggi: 564
				 | 
		devi passare il parametro come indirizzo, nel tuo esempio:
 Codice: #include <stdio.h>
void miafunzione(float *eps);
main()
{
  float e = 1.0;
  miafunzione (&e);
  printf ("valore epsilon: %e", e);
}
void miafunzione(float *eps)
{
float f1,f2;
f1=*eps;
while(f2!=1)	
    {
     *eps=f1;
     f1=f1/2.0;
     f2=f1+1.0;
     }
} | 
|   |   | 
|  17-02-2008, 11:43 | #6 | 
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | 
		ora provo... grazie 1000 a tutti   
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | 
|   |   | 
|  17-02-2008, 23:29 | #7 | 
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | 
		ragazzi... per prima tutto ok e vi ringrazio ancora   ora c'è un altro problemino... in pratica l'ordinamento INSERTION SORT fatto sempre come void(...) pure dovrei farlo funzionare chiamandolo dal main() con un output del tipo... Codice: quanti numeri vuoi inserire? 3 inserisci i 3 numeri: 20 -5 12 la lista ordinata è: -5 12 20 se questo http://it.wikipedia.org/wiki/Insertion_sort#C questo: http://www.mat.uniroma3.it/users/liv...ion_sort.shtml o un altro...    ho fatto qualcosa ricollegandomi alla tecnica di prima... ma sono andato un pò per tentativi e sinceramente mi vergogno pure di postarlo...   ve ne sarò grato!   
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | 
|   |   | 
|  18-02-2008, 00:49 | #8 | ||
| Senior Member Iscritto dal: Dec 2005 
					Messaggi: 7258
				 | Quote: 
  Quote: 
  posta che verrai aiutato  altrimenti non possiamo capire dove sbagli | ||
|   |   | 
|  18-02-2008, 09:18 | #9 | |
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | Quote: 
  ma non mi linciate   mi sono usciti questi orrori... il risultato finale è questo che ovviamente non funziona... piccole modifiche o da rifare tutto?  Codice: #include <stdlib.h>
#include <stdio.h>
#define MAX 100
void insertion_sort(int x[], int n);
int main()
{
 int v, i, x[i], n;
/*lettura*/
  printf("Numero di elementi: ");
  scanf("%d", &n);
  printf("Inserisci %d elementi: \n", n);
  for (i=0; i<n; i++)
    scanf("%d", &x[i]);
/*chiamata insertionsort*/  
insertion_sort(&x, n);
/*stampa*/
for (i=0; i<n; i++)
    printf("%d ", x[i]);
  printf("\n");
}/*__fine main()__*/
void insertion_sort(int x[], int n) 
{
  int i, j, app;
  for (i=1; i<n; i++) {
    app = x[i];
    j = i-1;
    while (j>=0 && x[j]>app) {
      x[j+1] = x[j];
      j--;
    }
    x[j+1] = app;
  }
}Codice: #include <stdio.h>
#include <stdlib.h>
void InsertionSort(int *x[], int n);
main()
{
int i, x[i], n;
printf("numero elementi da inserire: ");
scanf ("%d", &n);
printf("\ninserire gli elementi (max %d):\n", n);
for (i=0; i<n; i++)
scanf("%d", &x[i]);
InsertionSort(&x[], n);
printf ("Lista ordinata con InsertionSort: \n");
for (i=0; i<n; i++)
   {
   printf ("%d ", x[i]);
   }
}/*__fine main()__*/
void InsertionSort(int *x[], int n) 
{
   int i, a[i],  j, app;
 
   for (i = 1; i < n; i++)
   {
      app = a[i];
      for (j = i - 1; (j >= 0) && (a[j] > app); j--)
      {
         x[j+1] = x[j];
      }
      a[j + 1] = app;
   }
for (i=0; i=n; i++)
  *x[i]=a[i]  ;
   
}come modifico quello che più si avvicina al funzionante?    
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | |
|   |   | 
|  18-02-2008, 09:39 | #10 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Questo non si può fare: int v, i, x[i], n; insertion_sort(&x, n); La chiamata è errata. J3X: ci sono una marea di errori. Difficile correggere, credo che tu faccia prima a studiarti il tutto  Se chiedi in ingresso il numero di elementi devi fare l'allocazione dinamica del vettore. | 
|   |   | 
|  18-02-2008, 09:45 | #11 | 
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 |   quelli che vedi su sono il risultato di tentativi.... sono partito con cose un pò più logiche, poi dove mi dava errori rattoppavo  mi diceva che in x[] non era dichiarata la grandezza... quindi ho messo x[i], ma non era dichiarato i, e quindi l'ho messo prima e tutto ok  per allocazione dinamica intendi malloc? tipo A=(int*)malloc(sizeof(int)*n); ma dove lo vado a posizionare e come lo collego? ho provato qualcosa pure con questo ma non mi è uscito granchè... come posso fare per richiamare l'insertion sort nel main?   
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | 
|   |   | 
|  18-02-2008, 09:52 | #12 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		La firma della funzione insertion sort deve essere questa. void InsertionSort(int *x, int n); x è un vettore allocato dinamicamente e lo usi come un vettore normale. | 
|   |   | 
|  18-02-2008, 10:08 | #13 | 
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | 
		quindi nel secondo codice che ho scritto prima dovrei mettere il prototipo come hai scritto tu... però nel main mi esce sempre che per x[] -array size missing in `x'- ma esistono degli esempi già fatti e me li studio da lì... perchè mi servirebbe sapere come si fa per capirlo... con le funzioni prima ho fatto pure altri esercizi e si sono trovati  questo lo so che è più complicato e mi servirebbe vederlo...   
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | 
|   |   | 
|  18-02-2008, 10:12 | #14 | |
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | Quote: 
 O fai: int *x; x = (int *)malloc(sizeof(int) * n); //solo dopo che hai già preso in input n o fai: int x[10]; //e non prendi in input n, ma ti limiti a 10 elementi | |
|   |   | 
|  18-02-2008, 10:19 | #15 | 
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | 
		benissimo... grazie   ho scritto questo... nessun errore al compilatore...  ma mi riscrive i numeri così come li ho messi...   Codice: #include <stdio.h>
#include <stdlib.h>
void InsertionSort(int *x, int n);
main()
{
int *x, i, n;
printf("numero elementi da inserire: ");
scanf ("%d", &n);
x=(int*)malloc(sizeof(int)*n);
printf("\ninserire gli elementi (max %d):\n", n);
for (i=0; i<n; i++)
scanf("%d", &x[i]);
InsertionSort(&x[0], n);
printf ("Lista ordinata con InsertionSort: \n");
for (i=0; i<n; i++)
   {
   printf ("%d ", x[i]);
   }
}/*__fine main()__*/
void InsertionSort(int *x, int n)
{
   int i, a[i],  j, app;
 
   for (i = 1; i < n; i++)
   {
      app = a[i];
      for (j = i - 1; (j >= 0) && (a[j] > app); j--)
      {
         x[j+1] = x[j];
      }
      a[j + 1] = app;
   }
   
}
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | 
|   |   | 
|  18-02-2008, 10:37 | #16 | 
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | 
		ma che de....pravato   nei fasulli tentativi ho modificato il sacro codice dell'insertion sort di wikipedia.. e rimettendolo preciso preciso ora si trova  Codice: #include <stdio.h>
#include <stdlib.h>
void InsertionSort(int *x, int n);
main()
{
int *x, i, n;
printf("numero elementi da inserire: ");
scanf ("%d", &n);
x=(int*)malloc(sizeof(int)*n);
printf("\ninserire gli elementi (max %d):\n", n);
for (i=0; i<n; i++)
scanf("%d", &x[i]);
InsertionSort(&x[0], n);
printf ("Lista ordinata con InsertionSort: \n");
for (i=0; i<n; i++)
   {
   printf ("%d ", x[i]);
   }
}/*__fine main()__*/
void InsertionSort(int *x, int n)
{
  int i, j, app;
 
   for (i = 1; i < n; i++)
   {
      app = x[i];
 
      for (j = i - 1; (j >= 0) && (x[j] > app); j--)
      {
         x[j+1] = x[j];
      }
 
      x[j + 1] = app;
   }
   
}  ora me lo studio e faccio anche altri esempi con array e allocazione dinamica  grazieeeeeeeeeeeeeeeeeeeeeeeeeeee 
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | 
|   |   | 
|  18-02-2008, 10:47 | #17 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Questo: InsertionSort(&x[0], n); equivale a questo: InsertionSort(x, n); | 
|   |   | 
|  18-02-2008, 10:57 | #18 | |
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | Quote: 
   
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | |
|   |   | 
|  18-02-2008, 11:37 | #19 | 
| Senior Member Iscritto dal: Dec 2001 Città: ____________________  Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366 
					Messaggi: 2921
				 | 
		una info... ma nell'algoritmo insertionsort... "app" che ruolo svolge?  variabile di appoggio?   
				__________________  J3X  ║ I'M ON eBay ║    [ho trattato con...] veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero | 
|   |   | 
|  18-02-2008, 11:38 | #20 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Sì, una variabile dove mettere temporaneamente un elemento.
		 | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 20:06.









 
		 
		 
		 
		









 
  
 



 
                        
                        










