Ottimizzazione del sw

di il
117 risposte

117 Risposte - Pagina 6

  • Re: Ottimizzazione del sw

    E dagli quello al professore!
  • Re: Ottimizzazione del sw

    No lo devo ottimizzare prima
  • Re: Ottimizzazione del sw

    Ecco ho finito il codice. Ho tolto ogni funzione str e così dovrebbe essere ottimizzato. Va bene? Si potrebbe ottimizzare ancora? Come? (Solo suggerimenti, non voglio il codice)
    
        int val_dispari, val_dispari2, val_dispari3, val_dispari4;
        int vettore[]={1,0};
        int vettore2[]={11,3};
        int vettore3[]={10,22,25,24,23};
        
        //assegnare il valore ai caratteri dispari
        for (int i=0; i<strlen(dispari); i++) {
            if (dispari[i] >= '2' && dispari[i] <= '4')
                val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 1);
            if (dispari[i] >= '5' && dispari[i] <= '9')
                val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 3);
            if (dispari[i] >= 'c' && dispari[i] <= 'e')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 1);
            if (dispari[i] >= 'f' && dispari[i] <= 'j')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 3);
            if (dispari[i] >= 'k' && dispari[i] <= 'l')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 18);
            if (dispari[i] >= 'm' && dispari[i] <= 'n')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 6);
            if (dispari[i] >= 'q' && dispari[i] <= 'r')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 26);
            if (dispari[i] >= 's' && dispari[i] <= 'u')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 24 );
            if (strncmp(&dispari[i], "\0", 1)==0)
                val_dispari+=0;
            
            val_dispari+=vettore[dispari[i] - '0' ];
            val_dispari2+=vettore[dispari[i] - 'a'];
            val_dispari3+=vettore2[dispari[i] - 'a' - 14];
            val_dispari4+=vettore3[dispari[i] - 'a' - 21];
    
            printf("%d\n", val_dispari);
            printf("%d\n", val_dispari2);
            printf("%d\n", val_dispari3);
            printf("%d\n", val_dispari4);
    
            printf("%c\n", dispari[i]);
        }
    
    
  • Re: Ottimizzazione del sw

    A parte che non si capisce cosa faccia il codice che hai modificato, ma tu L'HAI PROVATO ? HAI INSERITO DEI DATI E CONTROLLATO I RISULTATI ? O lo dobbiamo fare noi?

    Comunque, sicuramente non è ottimizzato, anzi per niente. Non utilizzi correttamente i vettori e ci sono ancora strncmp ...

    Per farti scrivere il codice però qui non è possibile ... magari in altri forum ... masterdrive.it, html.it, pierotofy.it ...
  • Re: Ottimizzazione del sw

    Funziona. Non si può pubblicare codice qui? Prima lo avete fatto.
    L'unica cosa che devo cambiare
    val_dispari+=vettore[dispari[i] - '0' ];
            val_dispari2+=vettore[dispari[i] - 'a'];
            val_dispari3+=vettore2[dispari[i] - 'a' - 14];
            val_dispari4+=vettore3[dispari[i] - 'a' - 21];
    Devo usare un unica variabile che contenga tutti i 4 valori senza che vengano sovrascritti? E' possibile? Come si fa? (suggerimenti)
  • Re: Ottimizzazione del sw

    Non capisco la domanda ...
  • Re: Ottimizzazione del sw

    Mi serve una variabile, esempio val_dispari che contenga i valori di
    vettore[dispari - '0' ], vettore[dispari - 'a'], vettore2[dispari - 'a' - 14], vettore3[dispari - 'a' - 21] senza sovrascrivere ogni valore
  • Re: Ottimizzazione del sw

    Continuo a non capire, mi dispiace ...
  • Re: Ottimizzazione del sw

    Provo a risolverlo da solo tanto sono vicino, poi voglio vedere se avete ancora il coraggio di dire che la programmazione non fa per me
  • Re: Ottimizzazione del sw

    Provo a risolverlo da solo tanto sono vicino, poi voglio vedere se avete ancora il coraggio di dire che la programmazione non fa per me
    Non penso che nessuno abbia voluto dire ciò!
    L'unica cosa su cui stai sbagliando è l'approccio alla programmazione, non si fa cosi, non imparerai mai!
    COMPRATI UN LIBRO e se non sai quale cerca in internet,leggilo e rileggilo e solo dopo averlo letto almeno 3 volte apri il computer e prova a riscrivere gli esempi del libro, una volta riscritti tutti gli esempi prova a risolvere tutti gli esercizi, una volta risolti tutti gli esercizi prova a scrivere un programma e allora se avrai dei problemi tutti ti aiuteranno!

    Sei come un bambino che chiede al padre di buttarlo giu dal sesto piano su di un aereo di carta.
    non si fa cosi.

    Impara le buone mainere,impara ad ascoltare chi ti parla e non fare come i somari con i paraocchi!
  • Re: Ottimizzazione del sw

    Ho scritto il seguente codice
    
    int val_dispari1=0, val_dispari2=0, val_dispari3=0, val_dispari4=0;
        int vettore[]={1,0};
        int vettore2[]={11,3};
        int vettore3[]={10,22,25,24,23};
        
        //assegnare il valore ai caratteri dispari
        for (int i=0; i<strlen(dispari); i++) {
            if (dispari[i] >= '2' && dispari[i] <= '4')
                val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 1);
            if (dispari[i] >= '5' && dispari[i] <= '9')
                val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 3);
            if (dispari[i] >= 'c' && dispari[i] <= 'e')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 1);
            if (dispari[i] >= 'f' && dispari[i] <= 'j')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 3);
            if (dispari[i] >= 'k' && dispari[i] <= 'l')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 18);
            if (dispari[i] >= 'm' && dispari[i] <= 'n')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 6);
            if (dispari[i] >= 'q' && dispari[i] <= 'r')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 26);
            if (dispari[i] >= 's' && dispari[i] <= 'u')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 24 );
            if (strncmp(&dispari[i], "\0", 1)==0)
                val_dispari+=0;
            
            val_dispari1+=vettore[dispari[i] - '0' ];
            val_dispari2+=vettore[dispari[i] - 'a'];
            val_dispari3+=vettore2[dispari[i] - 'a' - 14];
            val_dispari4+=vettore3[dispari[i] - 'a' - 21];
            
        }
        val_dispari=val_dispari+val_dispari1+val_dispari2+val_dispari3+val_dispari4;
    
    Non mi viene corretto, mi aiutate per favore?
  • Re: Ottimizzazione del sw

    Ecco un esempio su come calcolare il codice fiscale, per ovvi motivi e per non fornirti codice completo ho tralasciato volutamente la funzione che calcola il codice catastale, tale codice lo dovrai scrivere tu.
    In caso di errore verrà inserito nel codice fiscale il carattere '?'.
    Naturalmente ho cercato di scrivere il piu umanamente possibile.
    Manca anche una buona dose di programmazione difensiva, anche se dubito che tu conosca cosa sia.
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    char* my_gets(char* d,int max)
    {
        char* st = d;
        int c;
        while ( (c = getchar()) != EOF && c != '\n' && --max > 0 ) *d++ = c;
        *d = '\0';
        return st;
    }
    
    int isvoc(char c)
    {
    	static char voc[5] = {'a','e','i','o','u'};
    	int i;
    	for ( i = 0; i < 5; ++i)
    		if (voc[i] == c) return 1;
    	return 0;
    }
    
    void cf_trel(char* cf, char* cn)
    {
    	int tre = 3;
    	char* frst = cn;
    	
    	while ( *cn && tre )
    	{
    		if ( isvoc(*cn) )
    		{
    			++cn;
    			continue;
    		}
    		
    		*cf++ = toupper(*cn++);
    		--tre;
    	}
    	
    	cn = frst;
    	while ( *cn && tre )
    	{
    		if ( !isvoc(*cn) )
    		{
    			++cn;
    			continue;
    		}
    		
    		*cf++ = toupper(*cn++);
    		--tre;
    	}
    	
    	while (tre--)
    		*cf++ = 'X';
    }
    
    void cf_anno(char* cf, char* aa)
    {
    	int l = strlen(aa);
    	switch (l)
    	{
    		case 2:
    			cf[6] = aa[0];
    			cf[7] = aa[1];
    		break;
    		case 4:
    			cf[6] = aa[2];
    			cf[7] = aa[3];
    		break;
    		default:
    			cf[6] = '?';
    			cf[7] = '?';
    		break;
    	}
    }
    
    void cf_mese(char* cf, char* mm)
    {
    	static char mmap[12] = {'A','B','C','D','E','H','L','M','P','R','S','T'};
    	int m = atoi(mm);
    	
    	if ( m <= 0 || m > 12 )
    	{
    		cf[8] = '?';
    		return;
    	}
    	
    	cf[8] = mmap[--m];
    }
    
    void cf_ggsex(char* cf, char* gg, char* s)
    {
    	int g = atoi(gg);
    	
    	if ( g <= 0 || g > 31 )
    	{
    		cf[9] = '?';
    		cf[10] = '?';
    		return;
    	}
    	
    	int onlyf = 0;
    	if ( *s != 'M' && *s != 'm')
    	{
    		if ( *s == 'F' || *s == 'f' )
    			onlyf = 40;
    		else
    		{
    			cf[9] = '?';
    			cf[10] = '?';
    			return;
    		}
    	}
    	
    	g += onlyf;
    	if (  g < 10 )
    	{
    		cf[9] = '0';
    		sprintf(&cf[10],"%d",g);
    	}
    	else
    		sprintf(&cf[9],"%d",g);
    }
    
    void cf_catasto(char* cf, char* ita, char* cit, char* pro)
    {
    	if ( *ita != 's' && *ita != 'S' )
    	{
    		//is very BIG
    		cf[11] = 'Z';
    		cf[12] = '?';
    		cf[13] = '?';
    		cf[14] = '?';
    	}
    	else
    	{
    		//is very BIG
    		cf[11] = '?';
    		cf[12] = '?';
    		cf[13] = '?';
    		cf[14] = '?';
    	}
    }
    
    void cf_cin(char* cf)
    {
    	static int dmap[256];
    	static int pmap[256];
    	static char cmap[26];
    	static int init = 0;
    	
    	if ( !init)
    	{
    		init = !init;
    		memset(dmap,0,256);
    		memset(pmap,0,256);
    		memset(cmap,0,26);
    		
    		char* al = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    		dmap['0'] = 1;
    		dmap['1'] = 0;
    		dmap['2'] = 5;
    		dmap['3'] = 7;
    		dmap['4'] = 9;
    		dmap['5'] = 13;
    		dmap['6'] = 15;
    		dmap['7'] = 17;
    		dmap['8'] = 19;
    		dmap['9'] = 21;
    		dmap['A'] = 1;
    		dmap['B'] = 0;
    		dmap['C'] = 5;
    		dmap['D'] = 7;
    		dmap['E'] = 9;
    		dmap['F'] = 13;
    		dmap['G'] = 15;
    		dmap['H'] = 17;
    		dmap['I'] = 19;
    		dmap['J'] = 21;
    		dmap['K'] = 2;
    		dmap['L'] = 4;
    		dmap['M'] = 18;
    		dmap['N'] = 20;
    		dmap['O'] = 11;
    		dmap['P'] = 3;
    		dmap['Q'] = 6;
    		dmap['R'] = 8;
    		dmap['S'] = 12;
    		dmap['T'] = 14;
    		dmap['U'] = 16;
    		dmap['V'] = 10;
    		dmap['W'] = 22;
    		dmap['X'] = 25;
    		dmap['Y'] = 24;
    		dmap['Z'] = 23;
    		dmap['?'] = 0; //for internal error
    		
    		int i;
    		for ( i = 0; i < 10; ++i);
    			pmap['0' + i ] = i;
    		char* k = al;
    		for ( i = 0; *k; ++k, ++i)
    			pmap[(unsigned)*k] = i;
    		pmap['?'] = 0; //for internal error
    		
    		k = al;
    		for ( i = 0; *k; ++k, ++i)
    			cmap[i] = *k;
    	}
    	
    	char dis[9];
    	char* pd = dis;
    	
    	char par[9];
    	char* pp = par;
    	
    	
    	//13579135
    	//2468024
    	int i;
    	for (i = 0; i < 16; ++i)
    	{
    		if ( (i +1) & 0x1 )
    			*pd++ = cf[i];
    		else
    			*pp++ = cf[i];
    	}
    	*pd = '\0';
    	*pp = '\0';
    	
    	int cin = 0;
    	for (i = 0; i < 7; ++i)
    	{
    		cin += dmap[(unsigned)dis[i]];
    		cin += pmap[(unsigned)par[i]];
    	}
    	cin += dmap[(unsigned)dis[7]];
    	
    	cf[15] = cmap[ cin % 26 ];
    }
    
    int main(int argc,char* argv[])
    {	
    	char codf[17];
    	codf[16] = '\0';
    	char inp[80];
    	char ex[80];
    	char eex[80];
    	
    	printf("Inserisci cognome:");
    	fflush(stdout);
    	my_gets(inp,80);
    	cf_trel(codf,inp);
    	
    	printf("Inserisci nome:");
    	fflush(stdout);
    	my_gets(inp,80);
    	cf_trel(&codf[3],inp);
    	
    	printf("Inserisci Anno di nascita:");
    	fflush(stdout);
    	my_gets(inp,80);
    	cf_anno(codf,inp);
    	
    	printf("Inserisci mese di nascita numericamente 1/12:");
    	fflush(stdout);
    	my_gets(inp,80);
    	cf_mese(codf,inp);
    	
    	printf("Inserisci giorno di nascita numericamente 1/31:");
    	fflush(stdout);
    	my_gets(inp,80);
    	printf("Inserisci sesso M/F:");
    	fflush(stdout);
    	my_gets(ex,80);
    	cf_ggsex(codf,inp,ex);
    	
    	printf("Inserisci sei Italiano S/N:");
    	fflush(stdout);
    	my_gets(inp,80);
    	printf("Inserisci Citta di nascita:");
    	fflush(stdout);
    	my_gets(ex,80);
    	printf("Inserisci Provincia di nascita:");
    	fflush(stdout);
    	my_gets(eex,80);
    	cf_catasto(codf,inp,ex,eex);
    	
    	cf_cin(codf);
    	
    	printf("\n\nIl tuo codice fiscale:%s\n",codf);
    	return 0;
    }
    
  • Re: Ottimizzazione del sw

    @vb ... mi sembra ovvio che non gli hai risolto il problema ... voglio vedere come potrà spiegare quel codice al professore ... E tanto meno capirlo e utilizzarlo per applicarlo nel suo codice ...
  • Re: Ottimizzazione del sw

    oregon ha scritto:


    @vb ... mi sembra ovvio che non gli hai risolto il problema ... voglio vedere come potrà spiegare quel codice al professore ... E tanto meno capirlo e utilizzarlo per applicarlo nel suo codice ...
    Sono d'accordo!

    Visto che si stà ottimizzando, suggerisco di scrivere il main così:
    
    #include <stdlib.h>
    #include <stdio.h>
    #include "CF.h"
    
    int main(int argc,char* argv[])
    {   
      
       CF_generaCodiceFiscale(); 
       
       return 0;
    }
    
    CF.h
    
    #ifndef CF_H_INCLUDED
    #define CF_H_INCLUDED
    
    void CF_generaCodiceFiscale(); 
    
    #endif // CF_H_INCLUDED
    
    
  • Re: Ottimizzazione del sw

    mi sembra ovvio che non gli hai risolto il problema
    mi sembra ovvio che in un forum non si possa postare la pappa pronta
    E tanto meno capirlo

    Se uno si legge 10 minuti la codifica ascii e 10 minuti il capitolo sui vettori ha i 3/4 del lavoro di comprensione fatto!

    Io invece sarei MOLTO curioso di vedere come fa il codice catastale! già mi immagino, 2000 if!!!
Devi accedere o registrarti per scrivere nel forum
117 risposte