Ir ao conteúdo
  • Cadastre-se

C++ como converte para c


Geovanecrawler

Posts recomendados

long long int merge_count(int A[], int B[], int p,int q,int r){

 int i,j,k;

  

 long long int c;

  

 for(i=p;i<=q;i++)

  B = A;

   

 for(j=q+1;j<=r;j++)

  B[r+q+1-j]=A[j];

   

 i = p;

 j = r;

 c = 0;

  

 for(k=p;k<=r;k++){

  if(B <= B[j]){

   A[k] = B;

   i = i+1;

  }else{

   A[k] = B[j];

   j = j-1;

   c = c + (q-i+1);

  }

 }

  

 return c;

 

}

 

 

 

long long int sort_count(int A[], int B[], int i,int j){

 int q;

 if(i >=j ) return 0;

 else{

  q = (i+j)/2;

  return sort_count(A, B, i, q) +

      sort_count(A, B, q+1, j)+

      merge_count(A, B, i, q, j); 

 }

  

}

Link para o comentário
Compartilhar em outros sites

15 minutos atrás, Geovanecrawler disse:

 for(i=p;i<=q;i++)

  B = A;

 

Está certo sobre essa linha ai? 

 

A e B são ponteiros para int então talvez não fosse o que quer escrever. Vai perder o acesso ao vetor B e vai repetir isso várias vezes...

 

Em relação a C e C++ não vejo nada especial aí a ser "convertido"

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Geovanecrawler disse:

Precisava desse programa em c.

 

Como eu disse não vejo nada de especial a ser "convertido". Está seguro sobre aquela linha? acho que não faz sentido nem em C nem em C++

 

A e B são int* declarados em long long int merge_count(int A[], int B[], int p,int q,int r)

Link para o comentário
Compartilhar em outros sites

Em si eu vi esse c++ para resolver este problema abaixo.

 

Neste exemplo, temos 3  inversões nestas sequência: (2,1), (4,1) e (4,3). Note que uma cada intersecção de um par de segmentos corresponde a uma inversão.

 

Seja S[0...n - 1] um vetor com n inteiros positivos distintos. Se i < j e S > S[j] então (i, j) é uma inversão de S. Dado n e um vetor S, sua tarefa é contar o número de inversões em S.

 

Para cada caso de teste, a primeira linha deve conter um identificador do conjunto de teste, no formato “Teste i”, onde i é numerado a partir de 1, na próxima linha imprima o número de inversões do “Teste i”.

 desculpe eu não especificar direito.

adicionado 0 minutos depois

precisava dele em c

Link para o comentário
Compartilhar em outros sites

Bem, como eu disse não vejo muito a ser convertido de C++ para C aí. São apenas duas funções, não tem classes, não alocam memória nem nada.

Aquele primeiro loop de que falei não tem sentido em C ou C++ por exemplo

 

O código abaixo, que é o mesmo que postou, compila em C. Mas duvido que resolva algo.

long long int merge_count(int A[], int B[], int p, int q, int r)
{
    int i, j, k;
    long long int c;

    for (i = p; i <= q; i++) B = A;

    for (j = q + 1; j <= r; j++)
        B[r + q + 1 - j] = A[j];

    i = p;
    j = r;
    c = 0;

    for (k = p; k <= r; k++) {

        if (B <= B[j])
        {
            A[k] = B;
            i = i + 1;
        }
        else
        {
            A[k] = B[j];
            j = j - 1;
            c = c + (q - i + 1);
        }    // end for
    }    // end for

    return c;
}    // end merge_count()


long long int sort_count(int A[], int B[], int i, int j)
{
    int q;
    if (i >= j) return 0;
    q = (i + j) / 2;
    return  sort_count(A, B, i, q) +
            sort_count(A, B, q + 1, j) +
            merge_count(A, B, i, q, j);
}    // end sort_count()

Por outro lado...

20 minutos atrás, Geovanecrawler disse:

Neste exemplo, temos 3  inversões nestas sequência: (2,1), (4,1) e (4,3). Note que uma cada intersecção de um par de segmentos corresponde a uma inversão.

 

Seja S[0...n - 1] um vetor com n inteiros positivos distintos. Se i < j e S > S[j] então (i, j) é uma inversão de S. Dado n e um vetor S, sua tarefa é contar o número de inversões em S

 

Aqui o texto mostra uma sequência de vetores (x,y) e depois um vetor com uma única dimensão

 

E não seria i<j e S > S[j] ? O que seria S[j] em relação a S? não é só um elemento do vetor?

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!