[C] Ricorsione MCD
Dato il seguente frammento di codice:
typedef struct point {
float x;
float y;
} Point;
Point p = {1.2, 2.7};
p.x += 1.0;
p.y = p.x + 2.5;
mi sapreste spiegare a parole e in modo semplice cosa succede?
So che i valori di p.x e p.y alla fine dell'esecuzione saranno rispettivamente 2.2 e 4.7, ma cosa direste a parole?
Continua...(segue il codice precedente...)
Point *c; int i;
c = &p;
i = (int) (c->y/c->x);
dire quanto vale i al termine dell'esecuzione spiegandone il perche'. Cosa accade anche qui'?
Grazie!
typedef struct point {
float x;
float y;
} Point;
Point p = {1.2, 2.7};
p.x += 1.0;
p.y = p.x + 2.5;
mi sapreste spiegare a parole e in modo semplice cosa succede?
So che i valori di p.x e p.y alla fine dell'esecuzione saranno rispettivamente 2.2 e 4.7, ma cosa direste a parole?
Continua...(segue il codice precedente...)
Point *c; int i;
c = &p;
i = (int) (c->y/c->x);
dire quanto vale i al termine dell'esecuzione spiegandone il perche'. Cosa accade anche qui'?
Grazie!
Risposte
Dato il seguente frammento di codice:
char s[] = "Natale";
if (s[6] == 'e')
printf("Ok");
else
printf("No");
dire cosa stampa e perche'.
Mi sapreste dare anche una spiegazione semplice di quello che succede?
Grazie!
char s[] = "Natale";
if (s[6] == 'e')
printf("Ok");
else
printf("No");
dire cosa stampa e perche'.
Mi sapreste dare anche una spiegazione semplice di quello che succede?
Grazie!
Al termine dell'esecuzione del seguente frammento di codice:
int s[10] = {1, -1}, i;
for(i=2 ; i<10 ; i++)
if (i%2 == 0) {s = -s [i-1];}
else {s = s[i-1] -2;}
Che valori troveremo nelle celle dell'array s? Giustificare.
Chi mi sa spiegare cosa succede in questo esercizio? Non ho davvero capito niente.
Grazie!
int s[10] = {1, -1}, i;
for(i=2 ; i<10 ; i++)
if (i%2 == 0) {s = -s [i-1];}
else {s = s[i-1] -2;}
Che valori troveremo nelle celle dell'array s? Giustificare.
Chi mi sa spiegare cosa succede in questo esercizio? Non ho davvero capito niente.
Grazie!
Al termine dell'esecuzione del seguente frammento di codice:
int a[2][2] = {{1,2},{3,4}};
*a[1] = a[0][1] *a[1][0];
uno dei valori contenuti nella matrice a viene modificato dall'esecuzione dell'istruzione alla riga 2. Qual e', che valore assume e perche'?
Grazie!
int a[2][2] = {{1,2},{3,4}};
*a[1] = a[0][1] *a[1][0];
uno dei valori contenuti nella matrice a viene modificato dall'esecuzione dell'istruzione alla riga 2. Qual e', che valore assume e perche'?
Grazie!
Al termine dell'esecuzione del seguente frammento di codice:
int s[10] = {0,1}, i;
for(i=2; i<10; i++)
s = s[i-1]*2;
che valore troveremo nella k-esima cella dell'array s (espresso in funzione di k, con k < 10)? Giustificare.
Cosa succede, in poche parole, all'interno di questo frammento di codice?
Grazie!
int s[10] = {0,1}, i;
for(i=2; i<10; i++)
s = s[i-1]*2;
che valore troveremo nella k-esima cella dell'array s (espresso in funzione di k, con k < 10)? Giustificare.
Cosa succede, in poche parole, all'interno di questo frammento di codice?
Grazie!
Dato il seguente programma:
int foo (int* a) {
(*a)++;
return *a; }
int main () {
int a[1] = {1}, b;
b = foo(a);
return 0; }
commentare il codice e dire quali sono i valori contenuti nel vettore a e nella variabile b al termine dell'esecuzione dell'ultima istruzione. Come funziona?
Grazie!
int foo (int* a) {
(*a)++;
return *a; }
int main () {
int a[1] = {1}, b;
b = foo(a);
return 0; }
commentare il codice e dire quali sono i valori contenuti nel vettore a e nella variabile b al termine dell'esecuzione dell'ultima istruzione. Come funziona?
Grazie!
Data la seguente definizione di massimo comun divisore (MCD):
x se y = 0
mcd(x,y) =
mcd(y,x%y) se x >= y e y>0
fornire una versione ricorsiva della funzione che lo calcola.
Grazie!
x se y = 0
mcd(x,y) =
mcd(y,x%y) se x >= y e y>0
fornire una versione ricorsiva della funzione che lo calcola.
Grazie!
[xdom="apatriarca"]In questo sito non si forniscono soluzioni ad esercizi senza che sia stato fatto alcun tentativo da parte dello studente. Dubito che tu abbia effettivamente cercato di risolvere tali problemi visti i pochi minuti passati tra la pubblicazione delle diverse discussioni (ora unite in un'unica discussione).[/xdom]
Se volete posto anche i miei tentativi, o meglio, sono arrivata ai risultati di alcuni esercizi ma con supposizioni. Mi servivano delle argomentazioni piu' che altro.
La vicinanza delle domande e' data dal fatto che ho provato gia' da giorni a svolgere gli esercizi di questo vecchio compito e ora mi servivano delle risposte piu' chiare che speravo di trovare qui'.
Grazie lo stesso
La vicinanza delle domande e' data dal fatto che ho provato gia' da giorni a svolgere gli esercizi di questo vecchio compito e ora mi servivano delle risposte piu' chiare che speravo di trovare qui'.
Grazie lo stesso
Un linguaggio di programmazione è un linguaggio, l'unica cosa che devi fare è tradurlo in italiano. Ogni singola riga ti fornisce esattamente un comando.
Insomma, nel caso del primo codice ti dice che:
1. Point è un coppia di numeri ‘reali’ (in realtà floating point a singola precisione)
2. p è un punto di coordinate (1.2, 2.7)
3. Cambiamo la prima coordinata di p aggiungengo 1. Quindi p = ( 2.2 ,2.7).
4. Cambiamo la seconda coordinata di p scrivendola in funzione della prima. Il risultato lo lascio a te.
Ora il codice è senza dubbio ridondante. In particolare la seconda coordinata di p è settata inutilmente a 2.7 (quel valore non lo usi) e la prima viene cambiata immediatamente attraverso una costante. Di fatto siccome alla fine hai che \(p = (x, x + 2.5)\) allora p è un punto sulla retta \(y = x+ 2.5\) la cui ascissa è \(x = 1.2 + 1.0 = 2.2\)
La seconda parte presenta l'eventuale difficoltà del puntatore ma qui il puntatore viene solo assegnato e poi usato per leggere le coordinate del punto puntato. Insomma niente di complicato. Per la conversione ad int basta ricordarsi che approssima “verso zero” (per difetto per i positivi e per eccesso nei negativi).
Insomma, nel caso del primo codice ti dice che:
1. Point è un coppia di numeri ‘reali’ (in realtà floating point a singola precisione)
2. p è un punto di coordinate (1.2, 2.7)
3. Cambiamo la prima coordinata di p aggiungengo 1. Quindi p = ( 2.2 ,2.7).
4. Cambiamo la seconda coordinata di p scrivendola in funzione della prima. Il risultato lo lascio a te.
Ora il codice è senza dubbio ridondante. In particolare la seconda coordinata di p è settata inutilmente a 2.7 (quel valore non lo usi) e la prima viene cambiata immediatamente attraverso una costante. Di fatto siccome alla fine hai che \(p = (x, x + 2.5)\) allora p è un punto sulla retta \(y = x+ 2.5\) la cui ascissa è \(x = 1.2 + 1.0 = 2.2\)
La seconda parte presenta l'eventuale difficoltà del puntatore ma qui il puntatore viene solo assegnato e poi usato per leggere le coordinate del punto puntato. Insomma niente di complicato. Per la conversione ad int basta ricordarsi che approssima “verso zero” (per difetto per i positivi e per eccesso nei negativi).
Per risolvere praticamente tutti questi esercizi è sufficiente aver compreso le basi del linguaggio C. Se non riesci a risolverli vuol dire che devi riguardarti parte della teoria sulle tue dispense/manuali. Se mostri i tuoi tentativi diventa per noi più facile aiutarti a trovare tali lacune e correggerle.