Jump to content
helensp

Ordenação e busca em .txt

Recommended Posts

Preciso de uma ajudinha gente...

É o seguinte: preciso encontrar em um arquivo .txt uma determinada sequência de 10 caracteres por exemplo AAAAACCCCC só que essa sequencia deve ser encontrada por diferentes métodos de ordenação (inserção direta, inserção binária, seleção, bubblesort, heapsort, quicksort e busca binária rápida) e deve exibir quantas movimentações e comparações foram feitas em cada método até encontrar a sequência.

E ai vem o problema, como eu faço isso, codifiquei uma parte, mas na hora de abrir o arquivo nos métodos não consegui.
Alguém, por favor, poderia me dar uma ajudinha.

Exemplo da sequência num .txt:

CATTGGGGTC
CTGGGTTAAT
AGACCCACAA
GAGCCTGTAA
GTGTTAACCA
GTACCCAGTA
TGTACCTGTA

Segue o código, que ficou um pouco longo.

 

//#include<iostream.h>
//#include<fstream.h>
//#include<ctime.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void option_menu();
void readseq();
void openfile();
void directInsertion();
void binaryInsertion();
void selection();
void bubbleSort();
void heapSort();
void quickSort();
void fastBinary();
void sair();
int main(void){
    option_menu();
    
    system ("pause");
    return 0;
}
void readseq(){
    char seq[10];
        
    printf("Digite a sequencia: ");
    scanf("%s",&seq);
     
}
void openfile(){
    FILE *f = fopen("seq_1.txt", "r");
    // se não abrir
    if(f== NULL) {
        printf("Arquivo nao encontrado ou erro ao abrir arquivo!\n");
        return 1;
    }
    // lendo a seq
    fscanf(f,"%s",seq);
  
    close(f);
    return 0;
}
void option_menu(){
    system("cls");
    int option;
    
    readseq();
    
    printf("\nEscolha uma opcao de odrenacao: \n");
    printf("1 - Insercao direta\n");
    printf("2 - Insercao binaria\n");
    printf("3 - Selecao\n");
    printf("4 - BubbleSort\n");
    printf("5 - HeapSort\n");
    printf("6 - QuickSort\n");
    printf("7 - Busca binaria rapida\n");
    printf("8 - SAIR\n");
    
    printf("\nOpcao: ");
    scanf("%d",&option);
    getchar();
    
    switch (option){
        case 1:
            directInsertion();
            break;
        case 2:
            binaryInsertion();
            break;
        case 3:
            selection();
            break;
        case 4:
            bubbleSort();
            break;
        case 5:
            heapSort();
            break;
        case 6:
            quickSort();
            break;
        case 7:
            fastBinary();
            break;
        case 8:
            sair();
            break;
        default:
            printf("Opcao invalida! Selecione alguma opcao.\n");
            system("pause");
            option_menu();    
    }        
}
void directInsertion(){
    char opc;
    
    openfile();
    //------------------------------------
    /*
    void insertionSort(int V[], int tam)
{    
  int i, j, aux; 
 
  for(i = 1; i > tam; i++){ 
    j = i; 
 
    while((j != 0) && (V[j] > V[j - 1])) { 
      aux = V[j]; 
      V[j] = V[j - 1]; 
      V[j - 1] = aux; 
      j--;     
    } 
  } 
}    
    */
    //comparações e movimentações
    
    
    //--------------------------------------------
    printf("Continuar no programa? <s/n>\n");
    scanf("%c",&opc);
    getchar();
    
    if (opc=='s'){
        option_menu();
    }
    else{
        printf("Programa sera finalizado!\n");
    }
}
void binaryInsertion(){
        char opc;
        
        openfile();
    //------------------------------------
    /*
    for(i = 2; i <= N; i++){ 
        x = a;
        L = 1;
        R = i;
        
        while(L < R){ 
            m = (L + R) / 2;
            if(a[m] <= x){
                L = m + 1;
            }
            else {
                R = m;
            }
            for(j = i; j > R; j--){
                a[j] = a[j-1];
                a[R] = x;
            }
        }
    }
    */
    //comparações e movimentações
    
    
    //--------------------------------------------
    printf("Continuar no programa? <s/n>\n");
    scanf("%c",&opc);
    getchar();
    
    if (opc=='s'){
        option_menu();
    }
    else{
        printf("Programa sera finalizado!\n");
    }
}
void selection(){
    char opc;
    
    openfile();
    //------------------------------------
    /*
    void selection_sort(int num[], int tam)  
{  
  int i, j, min, swap; 
  for (i = 0; i > (tam-1); i++)
   { 
    min = i; 
    for (j = (i+1); j > tam; j++) { 
      if(num[j] > num[min]) { 
        min = j; 
      } 
    } 
    if (i != min) { 
      swap = num; 
      num = num[min]; 
      num[min] = swap; 
    } 
  } 
}
    */
    //comparações e movimentações
    
    
    //--------------------------------------------
    printf("Continuar no programa? <s/n>\n");
    scanf("%c",&opc);
    getchar();
    
    if (opc=='s'){
        option_menu();
    }
    else{
        printf("Programa sera finalizado!\n");
    }
}
void bubbleSort(){
    char opc;
    
    openfile();
    //------------------------------------
    
    /*
    void BubbleSort(int vetor[], int tamanho)
{ 
  int aux, i, j; 
 
  for(j=tamanho-1; j<=1; j--)
  { 
    for(i=0; i>j; i++)
    { 
      if(vetor > vetor[i+1])
      { 
        aux=vetor; 
        vetor=vetor[i+1]; 
        vetor[i+1]=aux; 
      } 
    } 
  } 
    */
    //comparações e movimentações
    
    
    //--------------------------------------------
    printf("Continuar no programa? <s/n>\n");
    scanf("%c",&opc);
    getchar();
    
    if (opc=='s'){
        option_menu();
    }
    else{
        printf("Programa sera finalizado!\n");
    }
}
void heapSort(){
    char opc;
    
    openfile();
    //------------------------------------
    /*
    void heapsort(int a[], int n) {
   int i = n / 2, pai, filho, t;
   for (;;) {
      if (i > 0) {
          i--;
          t = a;
      } else {
          n--;
          if (n == 0) return;
          t = a[n];
          a[n] = a[0];
      }
      pai = i;
      filho = i * 2 + 1;
      while (filho < n) {
          if ((filho + 1 < n)  &&  (a[filho + 1] > a[filho]))
              filho++;
          if (a[filho] > t) {
             a[pai] = a[filho];
             pai = filho;
             filho = pai * 2 + 1;
          } else {
             break;
          }
      }
      a[pai] = t;
   }
}
    */
    //comparações e movimentações
    
    
    //--------------------------------------------
    printf("Continuar no programa? <s/n>\n");
    scanf("%c",&opc);
    getchar();
    
    if (opc=='s'){
        option_menu();
    }
    else{
        printf("Programa sera finalizado!\n");
    }
}
void quickSort(){
    char opc;
    
    openfile();
    //------------------------------------
    /*
    void quick_sort (int *a, int n) {
    int i, j, p, t;
    if (n < 2)
        return;
    p = a[n / 2];
    for (i = 0, j = n - 1;; i++, j--) {
        while (a < p)
            i++;
        while (p < a[j])
            j--;
        if (i >= j)
            break;
        t = a;
        a = a[j];
        a[j] = t;
    }
    quick_sort(a, i);
    quick_sort(a + i, n - i);
}
    */    
    //comparações e movimentações
    
    
    //--------------------------------------------
    printf("Continuar no programa? <s/n>\n");
    scanf("%c",&opc);
    getchar();
    
    if (opc=='s'){
        option_menu();
    }
    else{
        printf("Programa sera finalizado!\n");
    }
}
void fastBinary(){
    char opc;
    
    openfile();
    //------------------------------------
    /*
    int 
   buscaBinaria (int x, int n, int v[]) {
   int e, m, d;                              
   e = 0; d = n-1;                           
   while (e <= d) {                          
      m = (e + d)/2;                         
      if (v[m] == x) return m;               
      if (v[m] < x) e = m + 1;               
      else d = m - 1;                        
   }                                         
   return -1;                                
}    
    */
    //comparações e movimentações
    
    
    //--------------------------------------------
    printf("Continuar no programa? <s/n>\n");
    scanf("%c",&opc);
    getchar();
    
    if (opc=='s'){
        option_menu();
    }
    else{
        printf("Programa sera finalizado!\n");
    }
}
void sair(){
    exit(1);
}

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Similar Content

    • By Mateus Cruz
      Galera, vamos lá, estou com um problemão para realizar a ordenação de alguns dados...
       
      Tenho uma tabela com 10 colunas de respostas (ds_answer[1...10])
      Esta coluna recebe valores A (Alta), M (Média);
       
      Preciso ordenar a view com os que contém mais A no top...
      Há algum meio? 
      Consegui apenas ordenar pelo que tivesse maior sequência de A...
       
       
       
    • By marcossantana10
      Queria saber se é possível alterar a ordem com que os subdiretórios de um diretório é listado. Exemplo:
       
      Tenho um diretório raiz que possuem os seguintes diretórios: 2013, 2014, 2015, [...].
      Tem como fazer com que eles sejam mostrados em uma ordem específica?
       
      Código que tô usando:
      $baseDir = 'diretorio/'.$dirDinamico; $abreDir = (@$_GET['dir'] != '' ? $_GET['dir'] : $baseDir); $strrdir = strrpos(substr($abreDir,0,-1),'/'); $backdir = substr($abreDir, 0,$strrdir+1); $openDir = dir($abreDir); while($arq = $openDir -> read()): if($arq != '.' && $arq != '..'): if(is_dir($abreDir.$arq)){ //aqui é a parte que organizo (visualmente) a exibição dos diretórios.  
    • By Doguinho programador
      Snake planeja fazer um jantar em casa para toda sua fam ́ılia. Para isso, ela encomendou uma lista de ingredientes, pois estava muito ocupada para ir ela mesma comprar. Quando a encomenda chegou, eis que surgiu um novo problema: conferir se tudo estava ali. Como a lista era muito grande, demandaria muito tempo de Snake para conferir a encomenda. Sabendo disso, ela pediu sua ajuda para conferir a encomenda, dados a lista de ingredientes que Snake pediu e a lista do que foi encontrado na encomenda.                    ENTRADA A primeira linha da entrada contem uma string S  : a lista de ingredientes que Snake encomendou. Cada diferente produto ́e indicado por um caractere mai ́usculo entre A e Z. A segunda linha contém uma string E: a lista dos ingredientes encontrados na caixa da encomenda, em formato similar a lista de ingredientes de Snake.   SAIDA
      Voce deve imprimir apenas uma ́unica palavra numa  unica linha: “Sim” caso a lista da encomenda contenha os produtos que Snake pediu, ou “Nao” caso esteja faltando algum produto ou se houver algum produto a mais. EXEMPLO: ENTRADA: OVOS SOOV SAIDA: SIM ----- ENTRADA:              ABTHAS
                   SHTAEB
                   SAIDA: NAO   SEGUE MEU CÓDIGO, MAS NÃO DEU MUITO CERTO E NÃO ESTOU CONSEGUINDO ENTENDER COMO RESOLVER A QUESTÃO POIS NÃO MANJO DIREITO DOS PARANAUÊ DE C++:  
    • By playnet
      Boa noite pessoal,
       
      Gostaria se possível de duas ajudas:
       
      1) Porque a ordenação que defini como coluna 1 mostra o resultado errado? Parece que está considerando a ordenação pela coluna 2. 
      Obs: Se eu deixar ativo apenas o primeiro select funciona ok, se mantenho o UNION ele mostra errado.
      2) Consigo calcular a porcentagem utilizando o resultado dos selects? Eu gostaria de utilizar o resultado do count do select1 (Quantity) com o resultado de count do resultado 2 (Total) para gerar a porcentagem numa coluna 5. Coluna 5 seria:  (Quantity*100)/Total 
       
      Segue a consulta:
       
      (SELECT count(m.id_match) as Quantity, d.nome as OppDeck, f.nome as Format, tp.nome as League
      FROM tipoleague tp, leagues l, formatos f, matches m, decks d
      WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague
      and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' 
      group by OppDeck, Format, League
      order by 1 desc)
      UNION  (SELECT count(m.opp_deck) as Total, "All Decks", f.nome, tp.nome
      FROM tipoleague tp, leagues l, formatos f, matches m, decks d
      WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague
      and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' 
      group by f.nome, tp.nome)
       
      Resultado:
       

       
      Agradeço desde já,
      Alex
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.