PDA

View Full Version : funzioni C


cabbi
17-01-2006, 14:25
Potreste aiutarmi a risolvere questo quesito?
Grazie 1000, manu



Dato il seguente comando C, dove f è una variabile di tipo funzione da int a char
e1 = f( e2 + e3 / e4);
a) Di che tipo possono essere le espressioni e1, e2, e3, e4 ?
b) In quale ordine vengono valutate le espressioni e sotto-espressioni presenti in questo comando?
c) In quale ambiente viene valutata la variabile f?
d) Quale valore viene assegnato al designatore e1?

andbin
17-01-2006, 14:59
Dato il seguente comando C, dove f è una variabile di tipo funzione da int a char
e1 = f( e2 + e3 / e4);"Variabile di tipo funzione"?? Vorrai dire "una funzione" e basta. E poi cosa intendi con "da int a char"???
a) Di che tipo possono essere le espressioni e1, e2, e3, e4 ?Dipende da come sono state definite. Questa funzione f prende 1 solo parametro (e non ci hai detto di che tipo).
b) In quale ordine vengono valutate le espressioni e sotto-espressioni presenti in questo comando?Secondo le regole del C, la divisione è prioritaria rispetto alla somma. Quindi prima e3/e4 e poi la somma con e2.
c) In quale ambiente viene valutata la variabile f?Cosa intendi per "ambiente"???
d) Quale valore viene assegnato al designatore e1?Dipende da cosa restituisce la funzione f.


Spiegati meglio ... non vorrei aver capito male io! ;)

cabbi
17-01-2006, 17:54
Grazie,
non mi so spiegare meglio perchè mi hanno assegnato il testo così senza delucidazioni. Ne invio uno simile, magari è più chiaro:
Dato il seguente comando C, dove e1, e2, e3 sono espressioni di tipo int, ed f è una variabile di tipo funzione da int a int
e1 = f( e2 * e3);
a) In quale ordine vengono valutate le espressioni presenti in questo comando?
b) Quale valore viene assegnato al designatore e1?

andbin
17-01-2006, 21:40
Grazie,
non mi so spiegare meglio perchè mi hanno assegnato il testo così senza delucidazioni. Ne invio uno simile, magari è più chiaro:
Dato il seguente comando C, dove e1, e2, e3 sono espressioni di tipo int, ed f è una variabile di tipo funzione da int a int
e1 = f( e2 * e3);
:confused: Ma ... stiamo parlando del linguaggio di programmazione "C"???

mr_hyde
17-01-2006, 22:22
Grazie,
non mi so spiegare meglio perchè mi hanno assegnato il testo così senza delucidazioni. Ne invio uno simile, magari è più chiaro:
Dato il seguente comando C, dove e1, e2, e3 sono espressioni di tipo int, ed f è una variabile di tipo funzione da int a int
e1 = f( e2 * e3);
a) In quale ordine vengono valutate le espressioni presenti in questo comando?
b) Quale valore viene assegnato al designatore e1?

Cerco di interpretare facendo le segg. supposizioni:

1) "f" e' una funzione il cui dominio e' "int" e il codominio e' sempre "int" ovvero, detto alla C:

int f(int parametro) {...};

2) "e2" ed "e3" sono
- o semplici variabili intere
- o funzioni che comunque restituiscono interi
- o costanti intere,

quindi:

int e2;
int e3;

oppure

int e2() {..};
int e3() {..};

oppure
#define e2 2
#define e3 3

3) "e1" e' una variabile intera, quindi

int e1;

(in questo momento non mi sembra ci siano altre possibilita' che abbiano senso)

A questo punto:

a) In quale ordine vengono valutate le espressioni presenti in questo comando?

Be', forse ti interessa piu' in quale ordine vengono eseguite (sul termine "valutate" secondo me si potrebbe aprire una discussione)

e1 = f( e2 * e3);

a occhio direi che:
- viene eseguita e2 (se e' una funzione)
- viene eseguita e3 (se e' una funzione)
- viene eseguita e2*e3
- viene eseguita f(e2*e3)
- viene eseguita e1=f(e2*e3)

Giusto "per fini didattici" ti ricordo inoltre che anche l'intera
e1 = f(e2*e3)
e' una funzione con un risultato e che quindi potresti scrivere

int e4 = e1 = f(e2*e3)

o anche (capita spesso questa forma)

if ((e1 = fe2*e3) == 0) {}

b) Quale valore viene assegnato al designatore e1?

C'e' forse un trabocchetto? Direi semplicemente il valore di f(e2*e3)

Quando davo ripetizioni di informatica mi capitava che alcune volte i ragazzi che venivano da me, specialmente se erano agli inizi, avessero difficolta' a capire il "verso" delle assegnazioni, ovvero che

a = b

significa, per usare una vecchia notazione

a <- b (ovvero ad a viene assegnato il valore di b e il valore di b non cambia)

Forse questa domanda serve per valutare se hai capito come funziona il "verso" delle assegnazioni?

Ciao,
Mr Hyde

anx721
18-01-2006, 13:50
Penso che stia facendo semantica operazionale su frammenti di linguaggio C; per poterti rispondere bisognerebbe vedere le regole di inferenza che state usando per il calcolo della semantica e degli ambienti.

andbin
18-01-2006, 14:06
Penso che stia facendo semantica operazionale su frammenti di linguaggio C; per poterti rispondere bisognerebbe vedere le regole di inferenza che state usando per il calcolo della semantica e degli ambienti.
Ehm ... scusa ... per me è arabo. :stordita: :confused:
Cosa vuol dire?