Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    23

    [C] Algoritmo Operazioni

    Salve, mi scuso per il titolo ambiguo o poco comprensibile, ma è difficile "dargli un nome".
    Vi spiego ciò che devo fare, e ciò che ho fatto, sperando di avere qualche consiglio sull'ottimizzazione (correzione).
    1_Allora, il programma prende in input un esadecimale di 6 caratteri.
    2_Converte tale numero in decimale
    3_Considera solo le ultime sette cifre
    4_Calcola un checksum, e una differenza.

    Esempio Numerico:

    Input=A28B36
    Output=06524708

    2__> A28B36 -> 10652470
    3__> 10652470 -> 0652470
    4__>
    codice:
    0 x3 = 00 +
    6 x1 = 06 +
    5 x3 = 15 +
    2 x1 = 02 + 
    4 x3 = 12 +
    7 x1 = 07 +
    0 x3 = 00 +
    
    Tot. = 42 , Da sottrarre al multiplo di 10 superiore, quindi 50 – 42 = 8 
    
    0652470 -> 06524708

    Spero sia chiaro.

    Questo il codice che ho scritto:

    codice:
    #include <stdio.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    
    void convertUp(char *s)
    {
    	
    	int i;
    	
    	for(i=0;i<6;i++)
    	  s[i]=toupper(s[i]);
    	
    }
    
    int calc(int *a)
    {
    	
    	int sum1=0;
    	int sum3=0;
    	int sumtot=0;
    	int i;
    	int diff=0;
    	long int decimal=0;
    	int exp=6;
    	
    	for(i=0;i<7;i++)
    	   {
    		   decimal=decimal+(a[i]*pow(10,exp));
    	     exp--;
           } 
        	 	
    	for(i=6;i>=0;i=i-2)
    	    sum3=sum3+(a[i]*3);
    	for(i=5;i>=1;i=i-2)
    	    sum1=sum1+a[i];
    	
    	sumtot=sum1+sum3;
    
    	diff=(((sumtot/10)+1)*10)-sumtot;
    	
    	printf("Calc And Adding Checksum: %d\n",sumtot);
    	printf("Difference Number: %d\n\n",diff);
    	if(diff!=10)
    	printf("OUTPUT is: %07ld%d\n\n",decimal,diff);
     	
     	else
     	{
     	  printf("The First Possible OUTPUT is:  %07ld0\n\n",decimal);
     	  printf("The Second Possible OUTPUT is: %07ld1\n\n",decimal);
        }
    
        	
    
    return 0;
    }
    
    
    
    
    int * deconversion(char *s)
    {
    	
    	long int sum=0;
    	int exp=0;
    	int i=5;
    	int *results;
    	
    	results=(int*)malloc(7*sizeof(int));
    	
    while(i>=0){
    		if(s[i]>='A' && s[i]<='F')
    	        sum=sum+(s[i]-55)*pow(16,exp);
    	     else
    	     sum=sum+(s[i]-48)*pow(16,exp);
    	 
    	  exp++;
    	  i--;   
        }
    	
    	for(i=6;i>=0;i--)
    	{
    	   results[i]=sum%10;
    	   sum=sum/10;
        }
    	
    	
    	return results;
    	
    	}
    
    
    int main()
    {
    	char wps[6];
    	int *results;
    	
    	scanf("%s",wps);
    	
    	convertUp(wps);
    
    	results=deconversion(wps);
    
    	calc(results);
    
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma il codice "non funziona" o vuoi sapere altro?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    23
    Il codice funziona senza problemi, volevo avere magari qualche consiglio su come ottimizzarlo, se ci sono scelte migliori da poter fare et similia..

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    Se il programma funziona correttamente,potresti migliorare la gestione dell'input..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.