|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#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
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
#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;
}
}
|
|
|
|
|
|
#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, /* ??? */ );
}
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
#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. |
|
|
|
|
|
|
#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;
}
}
|
|
|
|
|
|
#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
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
#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!
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
#8 | ||
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7258
|
Quote:
Quote:
posta che verrai aiutato |
||
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: ____________________ Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366
Messaggi: 2921
|
Quote:
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?
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
|
#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. |
|
|
|
|
|
#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?
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
#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. |
|
|
|
|
|
#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...
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
#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 |
|
|
|
|
|
|
#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;
}
}
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
#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
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
#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 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: ____________________ Messaggi: 8532 _________ Messaggi: 2351 _________ Messaggi: 14408 ________ Messaggi: 5013 _________ Messaggi: 691366
Messaggi: 2921
|
Quote:
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
|
#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?
__________________
veryOldPost: HWUpgrade users map!//Mod1//EurO/I?//AcquistiEstero |
|
|
|
|
|
#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: 22:50.











) ma con i puntatori non sono ancora molto abile

ve ne sarò grato!
posta che verrai aiutato










