Come si 'spiega' un codice, passo per passo?

Messaggioda bad.alex » 12/07/2017, 11:19

Ciao ragazzi. La mia domanda è generica, in quanto avrei bisogno di capire ed entrare nel meccanismo di un codice. A volte la parte più difficile non è scriverlo ma comprendere ciò che occorre fare affinché si possa implementare una funzione, ad esempio. Non so se sia effettivamente tanto diverso dal fare "reverse engineering" per dirla tutta nel mio caso dal momento che ho difficoltà nel comprendere esercizi svolti da alcuni docenti e trovati on line. E vorrei appunto capire come "spiegare" un codice.
Al momento sto provando ad analizzare passo passo cosa faccia questo pezzo di codice:

Codice:
#include <stdio.h>

int main(){

double n;
double c;

int n_i, c_i;

double b[11][11];
int d[11][11]
for(n=0.5;n<1.;n+=0.05){
n_i=(int)(n*10.);
for(c=.1; c<1.1; c+=0.1){
c_i=(int)(c*10.);

b[n_i][c_i]=0.;
d[n_i][c_i]=0;

    }
}


Io lo spiegherei nel seguente modo: vi è un primo ciclo for in cui viene fatto scorrere un indice da 0.5 a 1. incrementandolo di volta in volta di 0.05. Ciò serve ad assegnare alla variabile int n_i il valore (n*10.), che sarà l'elemento riga delle matrici b e d, la cui massima dimensione è [11][11]. Un secondo ciclo for, in cui viene fatto scorrere un indice da 0.1 a 1.1 con incrementi uguali a 0.1, permette di assegnare alla variabile c_i il valore intero c*10.. La variabile c_i sarà l'elemento colonna delle matrici b e d. E' corretto? Serve dire altro?

Vi ringrazio.

Alex
bad.alex
Senior Member
Senior Member
 
Messaggio: 1074 di 1283
Iscritto il: 10/01/2007, 19:01

[C] Re: Come si 'spiega' un codice, passo per passo?

Messaggioda garnak.olegovitc » 13/07/2017, 03:17

bad.alex ha scritto:Ciao ragazzi. La mia domanda è generica, in quanto avrei bisogno di capire ed entrare nel meccanismo di un codice. A volte la parte più difficile non è scriverlo ma comprendere ciò che occorre fare affinché si possa implementare una funzione, ad esempio. Non so se sia effettivamente tanto diverso dal fare "reverse engineering" per dirla tutta nel mio caso dal momento che ho difficoltà nel comprendere esercizi svolti da alcuni docenti e trovati on line. E vorrei appunto capire come "spiegare" un codice.

"reverse engineering"? Calma, sei alle prime armi e non penso che i tuoi docenti non pubblicano i sorgenti. Il codice è piccolino quindi puoi partire dicendo che il tuo programma genera una matrice di elementi riga bla bla bla ciclo for bla bla bla e di elementi colonna bla bla bla ciclo for bla bla bla. Di solito la spiegazione non segue i passaggi della compilazione sennó tanto vale usare/leggere lo pseudocodice, e quando si spiega un programma di solito si indicano con mani o mouse le porzioni di codice a cui fai riferimento, insomma basta essere comprensivi e semplici a prescindere se poi il programma é semanticamente o sintatticamente errato o meno, anche se di solito non occorre spiegare se hai un bravo docente e tutto è corretto salvo domande particolari per capire se sai cosa hai fatto o se vi sono errori. Non ho controllato se il codice corretto sia o meno, prova a stampare su schermo la tua matrice in qualche modo per vedere se è quello che speravi di ottenere! :roll:
\(2592=2^59^2\)
\( 3435=3^3+4^4+3^3+5^5\)
\( [ (R|R^{-1}) \; \cap \; Di\;] \cup [(R^{-1}|R) \; \cap \; Di\;] \cup [\;\sim R \;\dagger \emptyset\;] \cup [\;\emptyset \; \dagger \sim R \;] = \emptyset \)
Avatar utente
garnak.olegovitc
Cannot live without
Cannot live without
 
Messaggio: 3726 di 7536
Iscritto il: 27/05/2011, 19:08
Località: Deutschland

Re: Come si 'spiega' un codice, passo per passo?

Messaggioda insideworld » 14/07/2017, 09:55

infatti, il "reverse engineering" è molto più difficile perché devi ricavare il codice dai sorgenti e devi capire cosa fa avendo un codice con una struttura controintuitiva (perché ottimizzato dal compilatore) e con nomi di variabili modificati.
In genere quando si scrive un codice si cerca sempre di renderlo più chiaro possibile, altrimenti chi in futuro lo dovrà riprendere in mano non ci capirà niente.
I codici del libro o proposti dai docenti sono in formato "comprensibile", il loro scopo è farti imparare a scrivere codice e a comprendere come funziona codice scritto, in modo abbastanza chiaro, da altri.
Di solito la spiegazione non segue i passaggi della compilazione sennó tanto vale usare/leggere lo pseudocodice, e quando si spiega un programma di solito si indicano con mani o mouse le porzioni di codice a cui fai riferimento, insomma basta essere comprensivi e semplici a prescindere se poi il programma é semanticamente o sintatticamente errato o meno

Quoto, quando ho dato Algoritmi e programmazione i docenti erano più interessati a:
Leggo la matrice con due cicli for annidati
e non al: ho un ciclo for da 0 a n-1, dentro il quale c'è un altro for, sempre da 0 a n-1,...
poi dipende anche dal tipo di esame... in Informatica 1 potrebbero essere più interessati agli aspetti formali, cioè vado da 0 a n-1 e non da 1 a n, cose che in un corso superiore danno per scontate
Avatar utente
insideworld
Junior Member
Junior Member
 
Messaggio: 128 di 306
Iscritto il: 13/01/2017, 15:24

Re: Come si 'spiega' un codice, passo per passo?

Messaggioda bad.alex » 16/07/2017, 00:23

Ciao ragazzi. Vi ringrazio! Si, effettivamente parlare con un codice del genere di 'reverse engineering' è esagerato ;) Non riuscivo a comprendere come si dovesse 'spiegare' un codice, anche per capirne il funzionamento, quello che fa.
Grazie ancora ( e scusate per la mia risposta tardiva).
bad.alex
Senior Member
Senior Member
 
Messaggio: 1075 di 1283
Iscritto il: 10/01/2007, 19:01

Re: Come si 'spiega' un codice, passo per passo?

Messaggioda vict85 » 19/07/2017, 13:33

Nota che 0,05 e 0,01 non sono esattamente rappresentabili in binario, quindi i due cicli possono avere comportamenti diversi a seconda se i due valori sono approssimati per eccesso o per difetto. Nota che il cast ad int tronca la parte decimale, quindi quasi 8 viene convertito in 7 indipendentemente da quanto sia piccolo il quasi.
vict85
Moderatore
Moderatore
 
Messaggio: 9099 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: Come si 'spiega' un codice, passo per passo?

Messaggioda vict85 » 21/07/2017, 18:36

Ho controllato e 0.05 e 0.01 non dovrebbero produrre problemi. D'altra parte questo codice dovrebbe mostrare quello che intendevo nel mio precedente messaggio. Compilalo e lancialo per capire che intendo.
Codice:
#include <stdio.h>

int main(void) {
   puts("double:");
   for (double c = .01; c < .11; c += .01) {
      const int c_i = (int) (c * 100.);
      printf("c = %f, c_i = %d\n", c * 100., c_i);
   }
        puts("float:");
   for (float c = .01f; c < .11f; c += .01f) {
      const int c_i = (int) (c * 100.);
      printf("c = %f, c_i = %d\n", c * 100.f, c_i);
   }
}
vict85
Moderatore
Moderatore
 
Messaggio: 9100 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite