Torna indietro   Hardware Upgrade Forum > Software > Programmazione

 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-03-2006, 16:04   #1
vermaccio
Senior Member
 
L'Avatar di vermaccio
 
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
[c++] come estrarre da un l"main2 una serie di istruzioni e farne una funzione??

nel mio main ho una serie di istruzioni.
voglio estrarle dal main e metterle fuori dal main sotto forma di funzione.

voglio cioè creare una funzione esterna che mi dia come risultato una variabile di tipo "double" (chiamata dentro la funzione "theta1" ma che è lo stesso nome della variabile globale theta1 del main).

in ingresso devo dargli un valore double chiamato "eulero12" che è variabile globale anch'esso.

in fondo ci sono le instruzioni di cui mi serve l'intestazione della funzione in cui infilarle. è l'intestazione che non so fare!!!!!

quindi dal main io chiamerò questa funzione (la chiamiamo XXX) con un istruzione del tipo
(credo)
variabile double = XXX(eulero12);


----------------------

if (eulero12>3*pi/2-0.001) superioreatrepimezzi=1; //eseguito solo per poco ma poi la bolean rimane settata lo stesso!!!!
if (superioreatrepimezzi=1) theta1=(eulero12+2*pi); //superioreapimezzi = >3*pi/2
if (eulero12>0&&eulero12<3*pi/2) theta1=eulero12;
__________________
..strisc...strisc...oooooOOoooO
http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII
vermaccio è offline   Rispondi citando il messaggio o parte di esso
Old 17-03-2006, 21:28   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
double XXX(){
if (eulero12>3*pi/2-0.001) superioreatrepimezzi=1; //eseguito solo per poco ma poi la bolean rimane settata lo stesso!!!!
if (superioreatrepimezzi=1) theta1=(eulero12+2*pi); //superioreapimezzi = >3*pi/2
if (eulero12>0&&eulero12<3*pi/2) theta1=eulero12;
return (theta1);
}


Per richiamarla:
variabile double = XXX();

Questo funziona se tutte le variabili usate sono globali, cioè dichiarate all'inizio del programma, prima del main. Se le hai dichiarate tutte dentro al main allora dovrai passarle tutte come parametri, quindi la prima riga diventa:

double XXX(double eulero12, double pi, double superioreatrepimezzi, double theta1){

Per richiamarla:
variabile double = XXX(eulero12, pi, superioreatrepimezzi, theta1);

Controlla solo che i tipi siano giusti, io ho messo tutti double perchè non so come li hai dichiarati. Ancora una cosa, non ho capito se vuoi che la boolean, una volta uscito dalla funzione, ti resti, se è così devi fare in questo modo:

double XXX(double eulero12, double pi, double *superioreatrepimezzi, double theta1){
if (eulero12>3*pi/2-0.001) *superioreatrepimezzi=1; //eseguito solo per poco ma poi la bolean rimane settata lo stesso!!!!
if (*superioreatrepimezzi=1) theta1=(eulero12+2*pi); //superioreapimezzi = >3*pi/2
if (eulero12>0&&eulero12<3*pi/2) theta1=eulero12;
return (theta1);
}


Per richiamarla:
variabile double = XXX(eulero12, pi, &superioreatrepimezzi, theta1);

Quasi dimenticavo, la parte più lunga che ti ho scritto è la "definizione" della funzione, bisogna ancora fare la "dichiarazione" che va posta prima del main. La dichiarazione è uguale alla prima riga della definizione, togli solo la graffa in fondo.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 09:00   #3
vermaccio
Senior Member
 
L'Avatar di vermaccio
 
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
grazie!!!!

(calorosa stretta di mano)


non è che, gentile come sei, ti andrebbe di darmi una mano anche in
http://www.hwupgrade.it/forum/showth...3#post11678923

__________________
..strisc...strisc...oooooOOoooO
http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII
vermaccio è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 14:59   #4
vermaccio
Senior Member
 
L'Avatar di vermaccio
 
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
1)
---
Ipotizzando di avere una funzione:

double sommiamo(double m, double m){

c=m+n; //c è locale
return(c)

}

se nel main ho una variabile "z" di tipo double e due variabili globali v (double e =2), w (double e =3), se attivo la funzione con:

z = sommiamo(v, w);

dovrei ottenere z=2+3=5.
E' esatto?



2)
---
tuttavia essendo z globale posso anche definire la funzione come:

void sommiamo(double m, double m){

c=m+n; //c è locale
z=c; //passo qui alla globale il risultato
return(c)

}

ed attivando la funzione con:
sommiamo(v, w);
dovrei lo stesso ritrovarmi z=5?


3)
---

e che accade se in uscita i risultati devono essere due?
Esempio:
se abbiamo sempre due numeri v=2 e w=3 double e vogliamo attivare una funziona che dia SIA la loro somma SIA la loro differenza come faccio? così?



(double,double) mistero(double m, double m){

c=m+n; //c è locale
d=m-n; //d è locale
return(c)
return(d)

}

si scrive così?


e la chiamo con

(somma,differenza)=mistero(v,w);

(dove somma e differenza sono due variabili del main o globali)


4)
---

e nel caso in uscita voglio sempre i due valori ma messi in un array?

array_creato è già esistente ed ha 2 campi

attivo la funzione sopra con
(array_creato[0],array_creato[1]=mistero(v,w);

E' così?
__________________
..strisc...strisc...oooooOOoooO
http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII
vermaccio è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 17:49   #5
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
Per il link che hai postato purtroppo non so dirti nulla, non sono espertissimo come ho detto.. Poi:
1) E' tutto giusto ma devi aggiungere all'interno della funzione la dichiarazione della variabile c.
2) Sì puoi farlo, puoi anche non usare c.
3) Questo non si può fare (almeno che io sappia no, poi non so), per avere 2 risultati devi o fare 2 funzioni differenti, oppure usare un puntatore. Il puntatore si usa come ho scritto nell'ultima parte dell'altro mio post. In pratica viene così:

mistero(double m, double n, double *d){
c=m+n; //c è locale
*d=m-n; //d è il puntatore
return(c)
}

E si richiama con:
somma=mistero(v,w,&differenza);
4) Qui puoi o richiamarla così, sempre usando la funzione con il puntatore:
array_creato[0]=mistero(v,w,&array_creato+1);
ma non sono sicuro sia giusto. Oppure puoi proprio modificare la funzione ma in questo caso viene un casino per nulla.. se proprio vuoi sapere come si fa però te la scrivo. Ciao!

Ps: ti consiglio di usare meno variabili globali possibili, perchè quando farai programmi più grossi diventerà un casino.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2006, 08:59   #6
vermaccio
Senior Member
 
L'Avatar di vermaccio
 
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
e una cosa del genere? cioè passare in "input" le variabili (globali) in cui schiaffare i risultati da calcolare?

(nel main)
double somma, differenza, a, b;
a=2;
b=3;

(la funzione)
void mistero(double m, double n, double s, double t){
s=m+n;
t=m-n;
}

E richiamo con:
mistero(a,b,somma,differenza);


dovrei ottenere
somma=2+3=5
differenza=2-3=-1
__________________
..strisc...strisc...oooooOOoooO
http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII
vermaccio è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2006, 12:27   #7
vermaccio
Senior Member
 
L'Avatar di vermaccio
 
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
test che ho fatto e che funziona

#include<stdio.h>
#include <math.h>

double somma, differenza, a, b, risultato1, risultato2;
double arraydirisultati[2]; //array di 2 elementi


// definizione funzioni
//---------------------


double somma_differenza1(double m, double n){
double s, t;
s=m+n;
t=m-n;
printf("somma tra 2 e 3 -variabili locali-: %g\n",s );
printf("differenza tra 2 e 3 -variabili locali-: %g\n",t);
return(s); //esce solo s ma non t!!!
}


void somma_differenza2(double m, double n, double uscita1, double uscita2){
double s, t;
s=m+n;
t=m-n;
printf("somma tra 2 e 3 -variabili locali-: %g\n",s );
printf("differenza tra 2 e 3 -variabili locali-: %g\n",t);
risultato1=s;
risultato2=t;
return;
//stavolta non ho nessun return(qualcosa);
}


void somma_differenza3(double m, double n, double [] ){
double s, t;
s=m+n;
t=m-n;
printf("somma tra 2 e 3 -variabili locali-: %g\n",s );
printf("differenza tra 2 e 3 -variabili locali-: %g\n",t);
arraydirisultati[0]=s;
arraydirisultati[1]=t;
return;
//stavolta non ho nessun return(qualcosa);
}



// PROGRAMMA PRINCIPALE ---------
//-------------------------------
void main()
{


a=2;
b=3;

//test1
risultato1=-99;
risultato2=-99;
printf("-------------prima funzione:\n");
risultato1=somma_differenza1(a, b);
printf("somma tra 2 e 3: %g\n",risultato1 );
printf("differenza tra 2 e 3: %g\n", risultato2);


//test2
risultato2=-88;
risultato1=-88;
printf("-------------seconda funzione:\n");
somma_differenza2(a, b, risultato1, risultato2);
printf("somma tra 2 e 3: %g\n",risultato1 );
printf("differenza tra 2 e 3: %g\n", risultato2);


//test3
risultato2=-77;
risultato1=-77;
arraydirisultati[0]=-66;
arraydirisultati[1]=-66;
printf("-------------terza funzione:\n");
somma_differenza3(a, b, arraydirisultati);
printf("somma tra 2 e 3: %g\n",arraydirisultati[0] );
printf("differenza tra 2 e 3: %g\n", arraydirisultati[1]);


}

funziona tutto.


RIMANE IL DUBBIO: è possibile passare in output un array?????
una funzione così insomma non risco a crearla:

double [] = somma_differenza4(double m, double n){
double s, t;
double arraylocale[2];
s=m+n;
t=m-n;
printf("somma tra 2 e 3 -variabili locali-: %g\n",s );
printf("differenza tra 2 e 3 -variabili locali-: %g\n",t);
arraylocale[0]=s;
arraylocale[1]=t;
return (arraylocale[]);
//stavolta non ho nessun return(qualcosa);
}



con nel main

//test4
risultato2=-45;
risultato1=-45;
arraydirisultati[0]=-44;
arraydirisultati[1]=-44;
printf("-------------quarta funzione:\n");
arraydirisultati=somma_differenza4(a, b);
printf("somma tra 2 e 3: %g\n",arraydirisultati[0] );
printf("differenza tra 2 e 3: %g\n", arraydirisultati[1]);


E' SBAGLIATO. PERCHé?
pare non accettare "double[]" nella definizione della funziona!!!!!!!!!

help!
__________________
..strisc...strisc...oooooOOoooO
http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII
vermaccio è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2006, 18:35   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
Non penso si possa fare l'output di un array in questo modo. L'unica è mettere un parametro aggiuntivo che farà poi da output:

void somma_differenza4(double m, double n, double arraylocale[]){
double s, t;
s=m+n;
t=m-n;
printf("somma tra 2 e 3 -variabili locali-: %g\n",s );
printf("differenza tra 2 e 3 -variabili locali-: %g\n",t);
arraylocale[0]=s;
arraylocale[1]=t;
}



con nel main

//test4
risultato2=-45;
risultato1=-45;
arraydirisultati[0]=-44;
arraydirisultati[1]=-44;
printf("-------------quarta funzione:\n");
somma_differenza4(a, b,arraidirisultati[]);
printf("somma tra 2 e 3: %g\n",arraydirisultati[0] );
printf("differenza tra 2 e 3: %g\n", arraydirisultati[1]);
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2006, 10:03   #9
vermaccio
Senior Member
 
L'Avatar di vermaccio
 
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
ok.
ma questo sistema pare non funzionare se ho delle sub-funzioni.
vedi
http://www.hwupgrade.it/forum/showthread.php?t=1162332
__________________
..strisc...strisc...oooooOOoooO
http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII
vermaccio è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2006, 10:04   #10
vermaccio
Senior Member
 
L'Avatar di vermaccio
 
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
domanda:

tu hai scritto

void somma_differenza4(double m, double n, double arraylocale[]){


era uguale scrivere

void somma_differenza4(double m, double n, double *arraylocale){

notare *arraylocale al posto di arraylocale[]


???
__________________
..strisc...strisc...oooooOOoooO
http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII
vermaccio è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2006, 12:04   #11
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
si, gli array sono sempre passati per riferimento alle funzioni (a meno di non fare accrocchi strani ovviamente) in c/c++
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2006, 12:21   #12
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
Quote:
Originariamente inviato da vermaccio

E' SBAGLIATO. PERCHé?
pare non accettare "double[]" nella definizione della funziona!!!!!!!!!

help!
non puoi far ritornare un array a una funzione, però puoi farle ritornare un puntatore a un array, oppure un puntatore a un'istanza (o dirtettaemnte un'istanza) di una struct o di una classe (non di una union però); mi pare che il tuo problema sia la funzione che ritorna due valori , cioè quello che avevi scritto più sopra:

(double,double) funzione (parametri)

che non si può ovviamente fare;
il modo più semplice di gestire il problema è far ritornare alla funzione un qualcosa che dentro di sè ha i 2 valori che ti servono (o anche più di 2 ovviamente , ma la funzione ritornerà sempre e comunque un'unica "cosa";

ad esempio;

#define N_PAR 2

double* FunzioneMisteriosa(double a, double b)
{
double* puntatore = new double[N_PAR];
puntatore[0] = a-b;
puntatore[1] = a+b;
//.... altre cose se servono, modifica la macro N_PAR di conseguenza
return puntatore;
}

void main()
{
double* risultato;
double x,y;
cout<<"inserisci x/n";
cin>>x;
cout<<"inserisci y/n";
cin>>y;
risultato = FunzioneMisteriosa(x,y);
cout<<"la differenza è"<<risultato[0]<<endl;
cout<<"la somma è"<<risultato[1]<<endl;
delete [] risultato;
return;
}
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2006, 18:58   #13
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
Quote:
Originariamente inviato da vermaccio
ok.
ma questo sistema pare non funzionare se ho delle sub-funzioni.
vedi
http://www.hwupgrade.it/forum/showthread.php?t=1162332
Sì, scusa è sbagliato, ma non per quello che dici tu, ho proprio sbagliato io.. ti riscrivo il pezzo giusto:

void somma_differenza4(double m, double n, double arraylocale[]){
double s, t;
s=m+n;
t=m-n;
printf("somma tra 2 e 3 -variabili locali-: %g\n",s );
printf("differenza tra 2 e 3 -variabili locali-: %g\n",t);
arraylocale[0]=s;
arraylocale[1]=t;
}



con nel main

a=-44;
b=-44;
printf("-------------quarta funzione:\n");
somma_differenza4(a, b,arraidirisultati);
printf("somma tra 2 e 3: %g\n",arraydirisultati[0] );
printf("differenza tra 2 e 3: %g\n", arraydirisultati[1]);
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2006, 19:22   #14
vermaccio
Senior Member
 
L'Avatar di vermaccio
 
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
non dovrei passare per indirizzo invece che per5 valore l'array quando attivo la funzione nel main?

ovvero invece di
somma_differenza4(a, b,arraidirisultati);

non dovrei usare

somma_differenza4(a, b,&arraidirisultati);

e nella definizione della funzione
invece di
void somma_differenza4(double m, double n, double arraylocale[]){

non dovrei mettere

void somma_differenza4(double m, double n, double *arraylocale[]){

???
questo dubbio mi è venuto dall'altro thread
http://www.hwupgrade.it/forum/showth...5#post11724475
__________________
..strisc...strisc...oooooOOoooO
http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII
vermaccio è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2006, 21:04   #15
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
No, perchè gli array in realtà sono dei puntatori, quindi se nella funzione si aspetta un indirizzo (arraylocale[] è uguale a *arraylocale) tu gli passi un indirizzo(arraydirisultati) e non l'indirizzo del puntatore (&arraydirisultati). Prova a leggere qualche guida che spieghi bene come funzionano i puntatori, non mi è facile spiegarti così su due piedi... Ciao!
wingman87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
Blue Origin sta ricostruendo velocemente...
La sovranità digitale non è...
ESS obbligatorio da luglio: il rivoluzio...
Batterie Tesla rubate direttamente fuori...
Il Governo statunitense anticipa di 5 an...
Steam Machine costa troppo? Non per i ba...
AWS e Azure sono gatekeeper e vanno rego...
Huawei presenta una nuova infrastruttura...
Logitech G e Activision uniscono le forz...
Snapdragon Summit 2026: ecco quando sara...
Sardegna, debutta il primo treno a idrog...
CXMT non ci salverà dai prezzi de...
Tidal contro la musica creata con l'inte...
Videproiettore compatto XGIMI MoGo 2 Pro...
Narwal rilancia su Amazon per il post-Pr...
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: 20:51.


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