Exemplo n.º 1
0
int main(){
    char in_number[MAX_NUM+1];
    int in_base = 0;
    int out_base = 0;
    char possible_characters[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    
    // Accept user input
    printf("Please enter the desired starting base: ");
    scanf("%d", &in_base);
    printf("Please enter the desired ending base: ");
    scanf("%d", &out_base);
    printf("Please enter the desired number to be converted: ");
    scanf("%s", * &in_number);
    
    // Validate input
    if (input_validation(in_base, out_base, in_number, possible_characters) == true) {
        // If input is error-free, choose the correct conversion method
        if (out_base == 10) {
            printf("Converted value: %d",to_base10(in_base, in_number, possible_characters));
        } else {
            from_base10(out_base, in_number, possible_characters);
        }
    } else {
        printf("You have entered invalid input. Please try again.");
    }
}
/* main: process parameters */
int main(int argc, char *argv[]) {
  
  FILE *fp;
  unsigned short int errnum;
  
  unsigned short int size_of_vector[3];
  char *seq_1, *seq_2;
  
  input_validation(argc, argv);

  /* Program start: read file from argv */
  fp = fopen (argv[1], "r");

  /* Validate if file exists*/
  if (fp == NULL){

    /* If not: print error */
    errnum = errno;
    fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
  }

   else{
    /* Read important values from file - 2 ints - 2 strings */
    fscanf(fp, "%d %d\n", &size_of_vector[0], &size_of_vector[1]);
    
    
    /* Start arrays to store sequences */
    seq_1 = (char *) malloc ((size_of_vector[0]) * sizeof(char));
    seq_2 = (char *) malloc ((size_of_vector[1]) * sizeof(char));
    
    /* Read arrays */
    fscanf(fp,"%s\n%s", seq_1, seq_2);
    
    fclose (fp);
  }
  
  //~ printf("%s\n",seq_1);
  //~ printf("%s\n",seq_2);
  
  unsigned short int i=0, j=0;
  unsigned short int** Matrix = (unsigned short int **) malloc( (size_of_vector[0]+1)*sizeof(unsigned short int));
  
  /* Loop to populate the matrix and give us the longest common subsequence size */
  for(i = 0; i < (size_of_vector[0]+1); i++){
    
    Matrix[i] = (unsigned short int *) malloc( (size_of_vector[1]+1)*sizeof(unsigned short int));
    
    for(j = 0; j < (size_of_vector[1]+1); j++){
      if(i==0||j==0){ 
        Matrix[i][j]=0;
        }
      else if(seq_1[i-1]==seq_2[j-1]){
        Matrix[i][j]=Matrix[i-1][j-1]+1;
        }
      else{
        Matrix[i][j]= fmax(Matrix[i-1][j],Matrix[i][j-1]);
        }
    }
  }
  
  /* Debugging code, use to print out full matrix. Comment when not using */
  //~ for( i=0; i<size_of_vector[0]+1; i++){
    //~ printf("\n");
    //~ for( j=0; j<size_of_vector[1]+1; j++){
    //~ printf("%4d ",Matrix[i][j]);
    //~ }
  //~ }
  
  printf("%d\n",Matrix[size_of_vector[0]][size_of_vector[1]]);
  
  /* Loop to discover the longest common subsequence */
  
  char *LongestSubsequence = (char *) malloc( ((Matrix[size_of_vector[0]][size_of_vector[1]]))*sizeof(char));
  
  i=size_of_vector[0]+1;
  j=size_of_vector[1]+1;
  unsigned short int CurrentNumber=Matrix[i-1][j-1];
  
  while( i>0 && j>0 ){
    if(seq_1[i-1]==seq_2[j-1]){
      LongestSubsequence[CurrentNumber]=seq_1[i-1];
      i--;
      j--;
      CurrentNumber--;
    }
    else if(Matrix[i-1][j]>Matrix[i][j-1]){
      i--;
    }
    else{
      j--;
    }
  }
    
  printf("%s\n",LongestSubsequence);

  return 0;
}