Double confusione

di il
27 risposte

27 Risposte - Pagina 2

  • Re: Double confusione

    Il mio intervento era un'esortazione a fornire qualche tipo di spiegazione (sai com'è... essendo su un forum), mentre i tuoi restano battute fini a sé stesse buttate lì solo per ostentare la tua "superiorità".
    Per curiosità, che valore dai al tuo ultimo intervento? Nella tua visione delle cose si tratterebbe di quella che in gergo tecnico viene chiamata "epic win"?! Chiedo, perché secondo la mia visione delle cose si tratta solo di un'uscita alquanto infelice degna dei migliori politicanti.

    Entriamo nel merito...
    Avere questo dubbio palesa il livello della tua conoscenza dell'argomento.
    Argomento? Quale?
    In ogni caso ti contestualizzo la mia risposta data a toni1705: da una rapida ricerca (circa 30 secondi) su google, leggo che in C89 le funzioni possono essere dichiarate senza specificare il tipo di ritorno (in tal caso si assume implicitamente che esse ritornino un int), mentre in C99 no. Alla luce di ciò consiglio, non avendo altri dati a mia disposizione e non avendo voglia di farmi una cultura sugli standard, i tipi supportati e le caratteristiche dei compilatori, di provare ad aggiungere il tipo di ritorno del main e a sostituire i double con i float (avendo intuito che il problema fosse in qualche modo legato al tipo double).
    Nota di servizio : per programmi così banali l'esistenza di un bug nel compilatore va esclusa categoricamente a priori.
    Premesso che nessuno ha mai parlato di bug del compilatore, ho semplicemente fatto delle ipotesi basate sui dati a mia disposizione... se intervieni prendendotela coi programmatori novizi che incolpano il compilatore, allora penso che dovresti anche spiegare quale sia stata la genesi del problema riscontrato, o almeno farlo quando ti viene chiesto esplicitamente (vedi il mio precedente post) invece di scadere nella facile retorica.
  • Re: Double confusione

    Premetto che sono stato 4 giorni a provare e riprovare lo stesso codice è il rusultato era sempre 0.0000
    resettando le impostazione del complilatore
    il problema è svanito.
    ERGO se a implica b non vuol dire che b implica a
    il non funzionamento di un codice nel 90% dei casi è a carico del programmatore(novizio o non)
    in questo caso settando di nuovo le impostazioni ( il problema è svanito con lo stesso codice...? misteri?????????
    hacker ? illuminati?
    comunque nippolo si avevo provato il fatto del numero negativo è come dicevi tu giustamente l'errore si trova nell'inizializzazione della variabile max.
  • Re: Double confusione

    Premetto che sono stato 4 giorni a provare e riprovare lo stesso codice è il rusultato era sempre 0.0000
    resettando le impostazione del complilatore
    il problema è svanito.
    ERGO se a implica b non vuol dire che b implica a
    il non funzionamento di un codice nel 90% dei casi è a carico del programmatore(novizio o non)
    in questo caso settando di nuovo le impostazioni ( il problema è svanito con lo stesso codice...? misteri?????????
    hacker ? illuminati?
    Vabbè un programmatore esperto avrebbe cmq subito individuato il problema anche se legato non al codice, ma ai settaggi del compilatore... il punto è un altro, invece di restare sul vago, perchè non fare qualche ipotesi concreta sulle cause del problema?!
    comunque nippolo si avevo provato il fatto del numero negativo è come dicevi tu giustamente l'errore si trova nell'inizializzazione della variabile max.
    Ipotesi su come aggiustare?
  • Re: Double confusione

    Inizializzare max con un il numero,più grande , negativo che la macchina può assumere...??
  • Re: Double confusione

    Inizializzare max con un il numero,più grande , negativo che la macchina può assumere...??
    sai come mi sono accorto che il codice non presentava stranezze? avevo provato il codice sul compliatore che ho scaricato su android e il programma funzionava
    online con un compiler e non dava problemi ... eh mi è sorto un dubbio ..
  • Re: Double confusione

    Inizializzare max con un il numero,più grande , negativo che la macchina può assumere...??
    O semplicemente inizializzarlo con la somma della prima colonna.
    sai come mi sono accorto che il codice non presentava stranezze? avevo provato il codice sul compliatore che ho scaricato su android e il programma funzionava
    online con un compiler e non dava problemi ... eh mi è sorto un dubbio ..
    Non ho capito cosa intendi dire.
  • Re: Double confusione

    Come posso passargli il risultato alla max?


    esistono diversi compilatori anche sul sistema android e provandolo lì il programma funzionava correttamente.
  • Re: Double confusione

    Nippolo ha scritto:


    Argomento? Quale?
    In ogni caso ti contestualizzo la mia risposta data a toni1705: da una rapida ricerca (circa 30 secondi) su google, leggo che in C89 le funzioni possono essere dichiarate senza specificare il tipo di ritorno (in tal caso si assume implicitamente che esse ritornino un int), mentre in C99 no. Alla luce di ciò consiglio, non avendo altri dati a mia disposizione e non avendo voglia di farmi una cultura sugli standard, i tipi supportati e le caratteristiche dei compilatori...
    Questo.
    Da quanto si legge riconosci che
    - non sai/sapevi quali siano gli standard
    - non sai/sapevi cosa implica tornare un valore, oppure no
    - non sai/sapevi neppure cosa ci si faccia, col valore ritornato o meno dal main
    - non hai voglia di farti una cultura eccetera...
    ...
    dovrei quindi farti uno spiegone su
    - come si scrive un compilatore in generale
    - cosa fa un compilatore C (ed un linker)
    - come si scrive un sistema operativo, e come si eseguono i programmi utente.
    - cosa ci fa il sistema operativo col valore ritornato dal main (ammesso che ci sia)
    - (...) tante altre belle cose.

    Ma, visto che non hai voglia di farti una cultura eccetera, immagina quanta ne ho io di insegnartela.
    Diciamo che, anche se non mi intendo molto di queste cose, ritengo di poter escludere che il valore/non valore ritornato dal main abbia una qualche relazione con l'asserito problema.

    Sul resto, cioè sul programma vero e proprio, riconosco che è troppo difficile comprenderne la semantica, per le mie modeste competenze.

    Certo sono curioso di sapere quali siano queste "impostazioni del compilatore" che sono state resettate.
    C'è sempre da imparare.


    http://www.apa.org/news/press/releases/2015/03/internet-knowledge.aspx
  • Re: Double confusione

    Https://ibb.co/meTYE
  • Re: Double confusione

    Come posso passargli il risultato alla max?
    Basta che modifichi la condizione dell'if, invece di aggiornare la variabile max solo quando max>somma, aggiornala anche quando j==0.
    esistono diversi compilatori anche sul sistema android e provandolo lì il programma funzionava correttamente.
    Più che altro credo sia una questione di come il compilatore sia settato, ma lascio la parola agli esperti.
    Ma, visto che non hai voglia di farti una cultura eccetera, immagina quanta ne ho io di insegnartela.
    Sono d'accordo, infatti non è quello che chiedevo.
    Diciamo che, anche se non mi intendo molto di queste cose, ritengo di poter escludere che il valore/non valore ritornato dal main abbia una qualche relazione con l'asserito problema.
    Colgo una vena di ironia, in ogni caso apprezzo la risposta.
    Certo sono curioso di sapere quali siano queste "impostazioni del compilatore" che sono state resettate.
    Da esperto credo che tu abbia più probabilità di me di sapere quali possano essere questi settaggi?
    http://www.apa.org/news/press/releases ... ledge.aspx
    Colta la frecciatina, ma sinceramente non mi tocca... ho fatto solo domande e mai preteso di avere chissà quali competenze in materia.
  • Re: Double confusione

    Allora io comincerei così, "alla vecchia maniera"
    
    #include <stdio.h>
    
    
    #define R 100
    #define C 100
    
    int g_flagdebug=1;
    
    double calcola_max(double a[][C], int r , int c)
    {
        double somma;
        double max = a[0][0];
        for(unsigned int j = 0; j < c; ++j)
        {
            somma = a[0][j];
    		if (g_flagdebug)
    		{
    			printf("DEBUG: Inizio ciclo colonna %d con somma= %lf\n",j,somma);
    		}
    		for(unsigned int i = 1; i < r; ++i)
    		{
    			somma += a[i][j];
    		}
    		if (g_flagdebug)
    		{
    			printf("DEBUG: La somma della colonna j-esima %d mi risulta %lf\n",j,somma);
    		}
            if(somma > max)
            {
    			if (g_flagdebug)
    			{
    				printf("DEBUG: Siccome la somma %lf > max %lf aggiorno max\n",somma,max);
    			}
    			max = somma;
    		
            }
        }
        return max;
    }
    
    int main()
    {
        unsigned int r;
        unsigned int c;
        double m[R][C];
    	
    	if (!g_flagdebug)
    	{
    		printf("RIGHE( <=100 ): ");
    		scanf("%d", &r);
    		printf("COLONNE( <=100 ): ");
    		scanf("%d", &c);
    	}
    	/*
    	9 2 3
       -3 1 2
       -4 5 1
    
        2 8 6
       
    	*/
    	else
    	{
    		r=3;
    		c=3;
    		m[0][0]=9;
    		m[0][1]=2;
    		m[0][2]=3;
    	
    		m[1][0]=-3;
    		m[1][1]=1;
    		m[1][2]=2;
    	
    		m[2][0]=-4;
    		m[2][1]=5;
    		m[2][2]=1;
    	}
    	
    	if (!g_flagdebug)
    	{
    		for(unsigned int i = 0; i < r; ++i)
    		{
    			for(unsigned int j = 0; j < c; ++j)
    			{
    				printf("m[%d][%d]: ", i, j);
    				scanf("%lf", &m[i][j]);
    			}
    		}
    	}
    	
        printf("MAX: %lf", calcola_max(m, r, c));
    }
  • Re: Double confusione

    toni1705 ha scritto:


    Https://ibb.co/meTYE
    E visto che usi GCC, cosa avevi cambiato (se qualcosa hai fatto)?
  • Re: Double confusione

    +m2+ ha scritto:


    Allora io comincerei così, "alla vecchia maniera"
    
    #include <stdio.h>
    
    
    #define R 100
    #define C 100
    
    int g_flagdebug=1;
    
    double calcola_max(double a[][C], int r , int c)
    {
        double somma;
        double max = a[0][0];
        for(unsigned int j = 0; j < c; ++j)
        {
            somma = a[0][j];
    		if (g_flagdebug)
    		{
    			printf("DEBUG: Inizio ciclo colonna %d con somma= %lf\n",j,somma);
    		}
    		for(unsigned int i = 1; i < r; ++i)
    		{
    			somma += a[i][j];
    		}
    		if (g_flagdebug)
    		{
    			printf("DEBUG: La somma della colonna j-esima %d mi risulta %lf\n",j,somma);
    		}
            if(somma > max)
            {
    			if (g_flagdebug)
    			{
    				printf("DEBUG: Siccome la somma %lf > max %lf aggiorno max\n",somma,max);
    			}
    			max = somma;
    		
            }
        }
        return max;
    }
    
    int main()
    {
        unsigned int r;
        unsigned int c;
        double m[R][C];
    	
    	if (!g_flagdebug)
    	{
    		printf("RIGHE( <=100 ): ");
    		scanf("%d", &r);
    		printf("COLONNE( <=100 ): ");
    		scanf("%d", &c);
    	}
    	/*
    	9 2 3
       -3 1 2
       -4 5 1
    
        2 8 6
       
    	*/
    	else
    	{
    		r=3;
    		c=3;
    		m[0][0]=9;
    		m[0][1]=2;
    		m[0][2]=3;
    	
    		m[1][0]=-3;
    		m[1][1]=1;
    		m[1][2]=2;
    	
    		m[2][0]=-4;
    		m[2][1]=5;
    		m[2][2]=1;
    	}
    	
    	if (!g_flagdebug)
    	{
    		for(unsigned int i = 0; i < r; ++i)
    		{
    			for(unsigned int j = 0; j < c; ++j)
    			{
    				printf("m[%d][%d]: ", i, j);
    				scanf("%lf", &m[i][j]);
    			}
    		}
    	}
    	
        printf("MAX: %lf", calcola_max(m, r, c));
    }
    https://ibb.co/jjqVC
    c'è qualquadra che non cosa
Devi accedere o registrarti per scrivere nel forum
27 risposte