PDA

Visualizza la versione completa : [C] Comprensione e analisi codice


nicolo_conte
18-07-2007, 14:13
Ciao a tutti, mi sto esercitando in vista di un esame e tra i vari esercici di analisi e comprensione del codice mi capitato quest'ultimo:



#include <stdio.h>

char *g(char *c) {
int i,n=strlen(c);
char *k=(char *)malloc(sizeof(char)*(n+1));
for(i=0; i<n; i++){
k[i]=c[n-1-i];
printf("%c\n", k[i]);
}
k[n]='\0';
return k;
}

int f(char *c, int b) {
if(*c == '\0') return 0;
printf("%c %d\n", *c, b);
return *c= 10+b*f(c+1,b);
}

int main() {
int a[]={4,5,6};
char b[]="012";
int i;
for(i=0; i<3; i++) printf ("%i\n\n", f(g(b), a[i]));
getch();
}


Devo scriverne l'output. Il fatto che provando ad eseguirlo ottengo risultati completamente diversi da quelli che ho ottenuto io simulandone l'esecuzione.
Infatti i risultati che ottengo io "manualmente" sono:

210 310 430
invece quelli che ottengo eseguendo il programma sono i seguenti:

-46 54 -82
Non riesco proprio a capire come il risultato possa essere negativo...help !
:dh:

bigmickey
18-07-2007, 15:25
Innanzitutto spiega cosa vuoi che faccia il tuo programma.

nicolo_conte
18-07-2007, 15:31
Originariamente inviato da bigmickey
Innanzitutto spiega cosa vuoi che faccia il tuo programma.

proprio lo scopo dell'esercizio (trovato sul materiale che mette a disposizione il professore) comprendere che cosa faccia il programma e quindi scriverne l'output. Ma proprio non riesco a venirne a capo...come detto sopra i rusultati che ottengo sono discordanti e inoltre non sembrerebbe esserci alcuna logicit nelle operazioni svolte. Voi che dite?
:dh:

nicolo_conte
18-07-2007, 15:32
ah per informazione le printf le ho inserite io successivamente per capire dove potessero essere eventuali errori che ho commesso!

oregon
18-07-2007, 15:38
Devi fare un po' di attenzione perche' la funzione f e' ricorsiva ...

Prova ad eseguire il programma con il Debug passo passo, esaminando il contenuto delle variaibili ad ogni esecuzione di linee di codice ....

nicolo_conte
18-07-2007, 15:44
Originariamente inviato da oregon
Devi fare un po' di attenzione perche' la funzione f e' ricorsiva ...

Prova ad eseguire il programma con il Debug passo passo, esaminando il contenuto delle variaibili ad ogni esecuzione di linee di codice ....

....scusa l'ignoranza :fagiano: ma come faccio ad eseguire il programma in debug?
:ciauz:

oregon
18-07-2007, 15:47
Quale strumento utilizzi?

nicolo_conte
18-07-2007, 15:49
Originariamente inviato da oregon
Quale strumento utilizzi?

sotto windows dev c++ e invece sotto linux gcc...grazie infinite per la pazienza

oregon
18-07-2007, 15:49
Con dev, c'e' il menu Debug ... tasto F8 ...

nicolo_conte
18-07-2007, 15:53
Originariamente inviato da oregon
Con dev, c'e' il menu Debug ... tasto F8 ...

ok trovato...il fatto che lancio il debug quello che ottengo il programma gia eseguito per intero...sbaglio qualcosa? come faccio a fare passo passo?

Loading