Ir ao conteúdo

Posts recomendados

Postado

Olá, gostaria de saber se existe algum programa que faça a transformação de C++ para C, ou alguém poderia me ajudar a transformar esse código:

/* Solução 1 */
#include <bits/stdc++.h>
using namespace std;
 
int verificaDescolado(long long X)
{
    if (X == 1) return 0;
    int primo = 1;
    for (long long i = 2; i <= sqrt(X); i++)
    {
        if (X % (i*i) == 0)
            return 0;
        if (X % i == 0)
            primo = 0;
    }
    return !primo;
}
 
int main()
{
    long long N;
    cin >> N;
   
    int ans = 0;
    for (long long i = 1; i <= sqrt(N); i++)
    {
        if (N % i == 0)
        {
            ans += verificaDescolado(i);
            if (i != N/i) ans += verificaDescolado(N/i);
        }
    }
    cout << ans << endl;
}
 


Agradeço

Postado

@João pedro Strazzeri Ola João, Basicamente C e C++ são a mesma linguagem com exceção de que  o C++ é orientado objeto e o C não, o código acima esta parecendo um método de um código orientado a objeto. Você só teria rescrever o código de foram procedural. Já tentou rodar esse código no compilador?

  • Curtir 1
Postado

o long long int em C se não me engano so foi adicionado na versão C99. Dependendo da versão do seu compilador basta você retirar o cabeçalhos específicos do C++

 

Mais ou menos isso...

 

#include <stdio.h>

int verificaDescolado(long long X)
{
    if (X == 1) return 0;
    int primo = 1;
    for (long long i = 2; i <= sqrt(X); i++)
    {
        if (X % (i*i) == 0)
            return 0;
        if (X % i == 0)
            primo = 0;
    }
    return !primo;
}

int main()
{
    long long N;
    scanf("%lld", &N);

    int ans = 0;
    for (long long i = 1; i <= sqrt(N); i++)
    {
        if (N % i == 0)
        {
            ans += verificaDescolado(i);
            if (i != N/i) ans += verificaDescolado(N/i);
        }
    }
    printf("%d", ans);
}

Agora programa automático que converte o código de um para outro desconheço, geralmente quando se precisa programar em C partindo do C++ vai ter que lidar com uma serie de limitações do C.

 

Compilador usado:

gcc (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0

 

  • Curtir 2
Postado
1 hora atrás, João pedro Strazzeri disse:

Olá, gostaria de saber se existe algum programa que faça a transformação de C++ para C

 

Não, não tem.

 

 

1 hora atrás, ederlap disse:

Ola João, Basicamente C e C++ são a mesma linguagem com exceção de que  o C++ é orientado objeto e o C não, o código acima esta parecendo um método de um código orientado a objeto.

 

C e C++ definitivamente NÃO são a mesma linguagem!


Sim, o C++ originou a partir da linguagem C, e por isso é possível usar muitas das funções e recursos do C no C++, entretanto o C++ se baseou na versão C89 (de 1989) da linguagem C, mas desde então cada uma dessas linguagens seguiu seu próprio caminho. O que implica que novas versões da linguagem C adicionaram recursos que não existem no C++, logo não é possível dizer que C++ é C com mais recursos.

 

Isso é um engano que causa muitos problemas. Aqui no fórum vemos frequentemente códigos usando bibliotecas padrão do C no C++, sendo que existem bibliotecas próprias do C++ para a mesma função, ou então códigos em que, exceto pela inclusão de uma ou duas biblioteca do C++, foram escritos totalmente em C.

 

Mas o problema surge lá na frente quando o programador finalmente tentar usar algum recurso do C que não existe no C++, e vai ficar quebrando a cabeça tentando entender o que está errado.

 

Pelo menos no caso do C problemas podem ser evitados facilmente salvando o código em um arquivo com a extensão .c (e não .cpp), pois assim a IDE vai saber que o código é em C e deve ser compilado usando o compilador da linguagem C, logo não vai aceitar código usando recursos do C++.

 

Já no lado oposto é mais complicado pois muitos dos recursos do C fazem parte do C++, então é necessário saber o que está usando e porque, mas em geral não se deve usar funções do C no C++, pois o C++ possui versões próprias e melhores para fazer a mesma coisa.

 

Se você está usando algum curso/material de estudo que diz que C e C++ são a mesma coisa, e ensina os 2 como uma coisa só, procure outro curso/material de estudo!

Por exemplo, um livro de introdução ao C++ não deve usar printf ou scanf, mas sim cout e cin! Nesse caso printf e scanf podem ser mencionados como opções extras e pouco usadas herdadas do C.

 

 

1 hora atrás, ederlap disse:

Você só teria rescrever o código de foram procedural.

 

Este código postado é procedural, não há nada de orientação a objetos.

 

adicionado 2 minutos depois

 

24 minutos atrás, Benjamin Breeg disse:

scanf("%ll", N);

 

Faltou um d no "%lld" e um & antes do N.

 

scanf("%lld", &N);

 

  • Curtir 3
Postado
5 horas atrás, ederlap disse:

Ola João, Basicamente C e C++ são a mesma linguagem com exceção de que  o C++ é orientado objeto e o C não, o código acima esta parecendo um método de um código orientado a objeto. Você só teria rescrever o código de foram procedural. Já tentou rodar esse código no compilador?

 

Nem perto disso. O fato de você pode em geral portar código C para C++ em mutos casos com facilidade termina aí. C++ é uma linguagem "enorme" com um mundo de construções sem paralelo em C. A bem da verdade você pode olhar trechos de programa em java ou até javascript e achar que é C++ também, ou C#, mas dura alguns minutos só :) 

 

Essa é uma coisa que você vai ler ainda em muitos lugares, como eu vou, mas não é verdade.

 

De volta ao tópico, seu programa roda em C exceto pelas funções de biblioteca como cin e cout que na verdade não são assim parte da linguagem, seja C ou C++. Por exemplo, cin e cout estão na biblioteca iostream do C++ por exemplo, e scanf na biblioteca stdio.h do C. sqrt() está em math.h nos dois casos

  • Curtir 1
  • 2 anos depois...
Postado

Preciso converter este codigo de c++ para c 

 

#include <iostream>

using namespace std;
int main () {
    int n, i, i2, i3, a, cont=0;
    cin>>n;
    float vet[n], vet2[n], vet3[n];
    for(i=0 ; i<n ; i++){
        cin>>vet[i];
        vet2[i]=vet[i];
    }
    for(i=0 ; i<n ; i++){
        cont=0;
        for(i2=0 ; i2<n ; i2++){
            if(vet[i]==vet2[i2]){
                cont++;
                vet3[i]=vet[i];
            }
        }
        cout.precision(1);
        cout<<fixed<<vet[i]<<" ocorre "<<cont<<" vezes"<<endl;        
    }
            
    
    return 0;
}

Preciso converter este codigo de c++ para c 

 

#include <iostream>

using namespace std;
int main () {
    int n, i, i2, i3, a, cont=0;
    cin>>n;
    float vet[n], vet2[n], vet3[n];
    for(i=0 ; i<n ; i++){
        cin>>vet[i];
        vet2[i]=vet[i];
    }
    for(i=0 ; i<n ; i++){
        cont=0;
        for(i2=0 ; i2<n ; i2++){
            if(vet[i]==vet2[i2]){
                cont++;
                vet3[i]=vet[i];
            }
        }
        cout.precision(1);
        cout<<fixed<<vet[i]<<" ocorre "<<cont<<" vezes"<<endl;        
    }
            
    
    return 0;
}

@Guilherme Serako pode me ajudar

 

  • Curtir 1
Postado

No lugar de iostream use stdio.h. Nesse código é só substituir os comandos de input/output e tirar o namespace. O loop, as declarações e atribuições não precisa mudar.

  • Curtir 2

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!