Ottimizazzione programma

di il
2 risposte

Ottimizazzione programma

Buonasera ragazzi, vorrei ottimizzare il mio programma dato che ho impigato elevate funzioni "macchinose" per arrivare alla conclusione. Il programma è il seguente:
void combinazioni(int credito,char array[][LARGHEZZA]){
	int i=0;
	int j=0;
	for(i=0;i<3;i++){
		if((array[i][j]=='A' && array[i][j+1]=='A') || (array[i][j]=='A' && array[i][j+1]=='A') || (array[i][j+1]=='A'&& array[i][j+2]=='A'))
			printf("Hai vinto 1 credito.\nI tuoi crediti sono%d\n",credito++);

		if((array[i][j]=='B' && array[i][j+1]=='B') || (array[i][j]=='B' && array[i][j+1]=='B') || (array[i][j+1]=='B'&& array[i][j+2]=='B'))
			printf("Hai vinto 1 credito.\nI tuoi crediti sono%d\n",credito++);

		if((array[i][j]=='C' && array[i][j+1]=='C') || (array[i][j]=='C' && array[i][j+1]=='C') || (array[i][j+1]=='A'&& array[i][j+2]=='C'))
			printf("Hai vinto 1 credito.\nI tuoi crediti sono%d\n",credito++);


		if((array[i][j]=='A') && (array[i][j+1]=='A') && (array[i][j+2]=='A'))
			printf("Hai vinto 3 crediti.\nI tuoi crediti sono%d\n",credito=credito+3);
		if((array[i][j]=='B') && (array[i][j+1]=='B') && (array[i][j+2]=='B'))
			printf("Hai vinto 3 crediti.\nI tuoi crediti sono%d\n",credito=credito+3);

		if((array[i][j]=='C') && (array[i][j+1]=='C') && (array[i][j+2]=='C'))
			printf("Hai vinto 3 credito.\nI tuoi crediti sono%d\n",credito=credito+3);
		if((array[i][j]=='X') && (array[i][j+1]=='X') && (array[i][j+2]=='X'))
			printf("Hai perso 3 credito.\nI tuoi crediti sono%d\n",credito=credito-3);
	}
}
PS: inoltre presenta un errore dato che calcola +1 anche quando calcola +3
Grazie anticipatamente

2 Risposte

  • Re: Ottimizazzione programma

    Ciao
    ma non metti la condizione per la quale j+x > di lunghezza?
    ho notato che ripeti 2 volte la stessa condizione

    executioner ha scritto:


    if((array[j]=='A' && array[j+1]=='A') || (array[j]=='A' && array[j+1]=='A')

    ammenochè non ci sia un errore di battitura tutte le prime 2 condizioni sono identiche.
    se ho capito bene dal codice
    devi verificare che 2 elementi di una riga di matrice siano uguali.
    se ho capito bene secondo me la soluzione ideale sarebbe:
    
    \ x= numero di righe
    \ y= numero di colonne
    int w,k,c;
    for (int i=0;i<x:i++)
    { 
    w=array[i][0];
    for (int j=1;j<y;j++)
    {
    c=w
    if (j+1>y) k=array[i][y] else k=array[i][j+1]
    w=w-k;
    if (k==0) fa quello che deve fare 
    w=c;
    w=w-array[i][j];
    k=k-array[i][j];
    if (w==0) fa quello che deve fare
    if (k==0) fa quello che deve fare
    w=array[i][j];
    }
    }
    cosi dovrebbe essere più performante.
    spiegazione
    k,w,c tre variabili di comodo
    k punta al elemento j+1
    w inizialmente punta al primo elemento della riga
    c conserva il primo elemento.
    [code]if (j+1>y) k=array[i][y] else k=array[i][j+1]
    verifica che k non sfondi la matrice
    w=w-k;
    if (k==0) fa quello che deve fare 
    verifica che il primo e j+1 siano uguali
    w=c; / rimetti le cose a posto
    w=w-array[i][j]; /verifica che elemento precedente della matrice sia = al corrente
    k=k-array[i][j]; / verifica che elemento corrente della matrice sia = al successivo
    if (w==0) fa quello che deve fare /condizione verificata
    if (k==0) fa quello che deve fare /condizione verificata
    w=array[i][j]; /elemento corrente diventa il precedente
    
    altra soluzione che mi è venuta in mente è:
    for (int i=0;i<x;i++)
    {
    for (int j=0;j<y;j++)
    {
    for (int w=1;w<y;w++)
    {
    c=array[i][j];
    c=c-array[i][w];
    if (c==0) fai quello che vuoi
     /prossimo elemento da dare in pasto al ciclo
    }
    }
    }
    
    quest'ultima non te la commento perchè di per se chiara.
    spero di esserti stato d'aiuto.
  • Re: Ottimizazzione programma

    Forse ci vorrebbero tutte le regole per capire come ottimizzare.
    è un gioco tipo slot machine?
    Il tu codice rimane difficilmente ottimizzabile in prestazioni...almeno che, conoscendo le regole, non salti fuori qualcosa.
Devi accedere o registrarti per scrivere nel forum
2 risposte