Ir ao conteúdo
  • Cadastre-se

Compilador para notepad++?


danielpcl

Posts recomendados

Daniel,

É, não tô conseguindo...

long long int, unsigned long long int, long int, unsigned int, unsigned long long... Nenhum está funcionando.

Tô pesquisando um jeito de resolver isso, mas tá ****... Não achei nada. :(

Para situações assim, você pode lançar mão de bibliotecas que lidam com números de praticamente qualquer tamanho (limitado pela memória do PC) e precisão. Existem várias bibliotecas com esse propósito. Uma delas (bem simples) é biblioteca Big Integer: https://mattmccutchen.net/bigint

O seu código ficaria assim:

#include <cstdlib>
#include <iostream>

#include "BigIntegerLibrary.hh"

using namespace std;

int main()
{

BigInteger anoLuz = 300000;

anoLuz *= 60 * 60 * 24 * 365;

string s("9460800000000");
BigInteger anoLuz2 = stringToBigInteger(s);

cout << "Velocidade da luz : " << anoLuz << "\n";
cout << "Velocidade da luz (str2bigint) : " << anoLuz2 << "\n\n";

system("PAUSE");
return EXIT_SUCCESS;
}

Note que eu usei dois exemplos de como você pode lidar com esses números grandes. Você pode até usar strings e depois convertê-las para BigInteger.

A saída do programa:

294nsrq.png

O que você tem que fazer:

1) Baixar a biblioteca;

2) Dar uma estudada nos recursos (inclui programa exemplo);

3) Modificar o arquivo Makefile para poder compilar o seu programa junto com a biblioteca.

4) Chamar o make para compilar.

Ah.. tem uma outra opção, que é implementar uma biblioteca como essa por conta própria. :D

:)

NW

Link para o comentário
Compartilhar em outros sites

O que você tem que fazer:

1) Baixar a biblioteca;

2) Dar uma estudada nos recursos (inclui programa exemplo);

3) Modificar o arquivo Makefile para poder compilar o seu programa junto com a biblioteca.

4) Chamar o make para compilar.

E como eu faço esses dois ultimos passos? Sou bem leigo no assunto :lol:

Ah, e outra coisa.. o exercício é para usar const, apesar desse biginteger poder resolver, a resolução do exercício ainda estaria errada, pois não estaria sendo usado o const...

Mas uma dúvida:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int i = 10, j = 10;
cout << "\n*** Valores iniciais ***\n";
cout << "i = " << i << ", j = " << j;
// Aplica operadores.
i++;
++j;
cout << "\n*** Apos operadores ***\n";
cout << "i = " << i << ", j = " << j;
cout << "\n*** Exibindo usando operadores ***\n";
cout << "i = " << i++ << ", j = " << ++j << "\n";
system("PAUSE");
return EXIT_SUCCESS;
}

Saída gerada por este programa:
*** Valores iniciais ***
i = 10, j = 10
*** Apos operadores ***
i = 11, j = 11
*** Exibindo usando operadores ***
i = 11, j = 12

Alguém pode me explicar direito porque "i << i++" ficou com valor de 11 e "j << ++j" ficou com valor de 12?

Link para o comentário
Compartilhar em outros sites

existe o pré incremento e o pós,

++i; //pré

i++; //pós

o pré incremento já adiciona um ao elemento na sua chamada, o pós adiciona um na próxima chamada do elemento.

Ex:

i = 0;

j = 0;

printf("%d", i++); //exibe 0 e adiciona uma na próxima chamada do i

printf("%d", ++j); //exibe 1 pois pré incrementa, ou seja incrementa na chamada

printf("%d", i); //exibe 1, pois i foi incrementado nessa chamada

Link para o comentário
Compartilhar em outros sites

É, não tô conseguindo...

long long int, unsigned long long int, long int, unsigned int, unsigned long long... Nenhum está funcionando.

Tô pesquisando um jeito de resolver isso, mas tá ****... Não achei nada. :(

Declare a variável dessa forma:

const long long int anoLuz = 60*60*24*365*300000.l;

substitua a linha do cout por essa:

cout << "Velocidade da luz " << anoLuz << "\n";
Link para o comentário
Compartilhar em outros sites

existe o pré incremento e o pós,

++i; //pré

i++; //pós

o pré incremento já adiciona um ao elemento na sua chamada, o pós adiciona um na próxima chamada do elemento.

Ex:

i = 0;

j = 0;

printf("%d", i++); //exibe 0 e adiciona uma na próxima chamada do i

printf("%d", ++j); //exibe 1 pois pré incrementa, ou seja incrementa na chamada

printf("%d", i); //exibe 1, pois i foi incrementado nessa chamada

Agora entendi, obrigado :lol:

Declare a variável dessa forma:

substitua a linha do cout por essa:

Não deu certo, continuou apresentando um valor negativo. :(

Link para o comentário
Compartilhar em outros sites

Agora entendi, obrigado :lol:

Não deu certo, continuou apresentando um valor negativo. :(

Engraçado... aqui deu certo.

#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{

const long long int anoLuz = 60*60*24*365*300000.l;

cout << "Velocidade da luz " << anoLuz << "\n";

return 0;

}

Link para o comentário
Compartilhar em outros sites

Ah, agora deu certo... eu tinha copiado antes de você editar, quando você tinha colocado "300000L" invés de "300000.l" :lol:

Mas, pode me explicar o que o ".l" no final fez?:huh:

Quando você coloca sem o sufixo l, você está tratando aquele número como int e int só suporta 4 bytes.

No codeblocks aparece a mensagem:

warning: integer overflow in expression

Quando você coloca um .0 no final você vai tratar esse número como um double, que tem o dobro de capacidade do int(ou seja, 8 bytes).

Quando você coloca um .l você trata esse número como um long double(12 bytes).

Então você pode usar um double ou long double para representar esse número.

Rode esse código, pra você entender melhor:

#include <iostream>

using namespace std;

int main()

{

cout << "-> sem sufixo(int): " << sizeof(60*60*24*365*300000) << endl;

cout << "-> com ponto flutuante(double): " << sizeof(60*60*24*365*300000.000) << endl;

cout << "-> com sufixo .l(long double): " << sizeof(60*60*24*365*300000.l) << endl;

return 0;

}

você estava colocando um número do tipo int dentro de uma varíavel long long, ou seja este número seria colocado dentro da variável anoLuz, mas do mesmo jeito q ela surgiu(do tipo int e extravasada).

Link para o comentário
Compartilhar em outros sites

Agora consegui entender, ficou bem claro. :lol:

Mas, agora estou fazendo um exercício sobre váriaveis locais dentro de uma função, da qual eu tenho que fazer uma váriavel que só exista dentro de uma função, e não na função main()

Segue abaixo o exercício, e o que eu consegui responder, mas sem conseguir criar uma váriavel local dentro da função:

Exercício
Reescreva o programa Local.cpp, de maneira que a função faça a conversão de graus centígrados para graus
Fahrenheit.

Exemplo dado pela apostila:


// Ilustra o uso de
// variáveis locais.
#include <iostream.h>
// Protótipo.
// Converte temperatura em graus
// Fahrenheit para graus centígrados.
double FahrParaCent(double);
int main()
{
double tempFahr, tempCent;
cout << "\n*** Conversao de graus Fahrenheit "
"para graus Centigrados ***\n";
cout << "Digite a temperatura em Fahrenheit: ";
cin >> tempFahr;
tempCent = FahrParaCent(tempFahr);
cout << "\n"
<< tempFahr
<< " graus Fahrenheit = "
<< tempCent
<< " graus Centigrados.\n";
return 0;
} // Fim de main()
// Definição da função.
double FahrParaCent(double fahr)
{
// Variável local.
double cent;
cent = ((fahr - 32) * 5) / 9;
return cent;
} // Fim de FahrParaCent(double fahr)
// Local.cpp

E, abaixo o que eu consegui fazer, mas sem usar váriavel local:


#include <iostream>

using namespace std;

double CentParaFahr(double cent, double fahr)
{
fahr = cent * 1.8 + 32;
return fahr;
}

int main(int argc, char *argv[])
{
double cent;
double fahr;
cout << "\n";
cout << "Digite o grau em celcius\n";
cin >> cent;
fahr = CentParaFahr(cent, fahr);
cout << "O valor em Fahrenheit é " << fahr << "\n";
system("PAUSE");
return EXIT_SUCCESS;
}
#include <cstdlib>

Link para o comentário
Compartilhar em outros sites

Assim fica mais fácil:

#include <iostream>

using namespace std;

float Converter(float TemCelsius)
{
float TemFarenheit;
TemFarenheit = TemCelsius*1.8 +32.f;
return TemFarenheit;
}

int main()
{
cout << "Temperatura em Celsius: " << Converter(12) << endl;
return 0;
}

valeu, isso deixou bem claro :lol: e pra que aquele "endl" no final?:huh:

E, mais uma dúvida:

#include <cstdlib>
#include <iostream>

using namespace std;

inline int Vezes10();
inline int Mostra();

int main(int argc, char *argv[])
{
int num;
cout << "Digite um numero\n";
cin >> num;
Vezes10();
num = Vezes10();
system("PAUSE");
return EXIT_SUCCESS;
}

int Vezes10(int num)
{
return num * 10;
Mostra();
}

int Mostra(int num)
{
cout << "O novo valor é " << num << "\n";
}

O compilador tá acusando warning nesse códig

6 F:\c++\Inline\main.cpp [Warning] inline function `int Vezes10()' used but never defined 
7 F:\c++\Inline\main.cpp [Warning] inline function `int Mostra()' used but never defined
[Linker error] undefined reference to `Vezes10()'
[Linker error] undefined reference to `Vezes10()'
7 F:\c++\Inline\main.cpp ld returned 1 exit status
F:\c++\Inline\Makefile.win [Build Error] [Inline.exe] Error 1

E, aparentemente, eu fiz tudo certo... não tô conseguindo achar o erro... Alguma luz?:lol:

Outro probleminha: preciso fazer um exercício em que eu tenho que fazer um calculo fatorial usando uma função recursiva, mas não tô conseguindo fazer nem sem a função recursiva. Alguma ajuda?:(

Link para o comentário
Compartilhar em outros sites

Quanto é 5! ?

É 5x4!

E 4! ?

É 4x3!

E n! ?

É nx(n-1)!

É isso que: return n*fatorial(n-1);

faz. Só pára quando chega no 1!, que devolve 1 pro 2!, que devolve isso pro 3!, que devolve isso pro 4!..., que devolve tudo isso, (n-1)! pro n!

Então, no caso de 5!, ficaria assim

5x4! = 5x4x3! = 5x4x3x2! = 5x4x3x2x1

Link para o comentário
Compartilhar em outros sites

Daniel,

Sobre este seu programa? Dê uma olhada:

#include <cstdlib>
#include <iostream>

using namespace std;

int Vezes10(int);
void Mostra(int);

int main(int argc, char *argv[])
{
int num;
cout << "Digite um numero\n";
cin >> num;
num = Vezes10(num);
Mostra(num);
system("PAUSE");
return EXIT_SUCCESS;
}

int Vezes10(int num)
{
return num * 10;

}

void Mostra(int num)
{
cout << "O novo valor e: " << num << "\n";
}

NW

Link para o comentário
Compartilhar em outros sites

valeu, isso deixou bem claro :lol: e pra que aquele "endl" no final?:huh:

E, mais uma dúvida:

#include <cstdlib>
#include <iostream>

using namespace std;

inline int Vezes10();
inline int Mostra();

int main(int argc, char *argv[])
{
int num;
cout << "Digite um numero\n";
cin >> num;
Vezes10();
num = Vezes10();
system("PAUSE");
return EXIT_SUCCESS;
}

int Vezes10(int num)
{
return num * 10;
Mostra();
}

int Mostra(int num)
{
cout << "O novo valor é " << num << "\n";
}

O compilador tá acusando warning nesse códig

6 F:\c++\Inline\main.cpp [Warning] inline function `int Vezes10()' used but never defined 
7 F:\c++\Inline\main.cpp [Warning] inline function `int Mostra()' used but never defined
[Linker error] undefined reference to `Vezes10()'
[Linker error] undefined reference to `Vezes10()'
7 F:\c++\Inline\main.cpp ld returned 1 exit status
F:\c++\Inline\Makefile.win [Build Error] [Inline.exe] Error 1

E, aparentemente, eu fiz tudo certo... não tô conseguindo achar o erro... Alguma luz?:lol:

Outro probleminha: preciso fazer um exercício em que eu tenho que fazer um calculo fatorial usando uma função recursiva, mas não tô conseguindo fazer nem sem a função recursiva. Alguma ajuda?:(

endl é pra pular uma linha...

No seu código você coloca os protótipos das funções Vezes10() e Mostra() sem colocar os argumentos.

E na função main você também chama a função Vezes10() sem colocar os argumentos.

E na declaração da função Vezes10() você retorna um número antes de Mostra(), ou seja Mostra() nem vai chegar a ser executada...

Link para o comentário
Compartilhar em outros sites

Basta pôr o inline então:

inline int Vezes10(int);
inline void Mostra(int);

NW

É, então, mas também era pra fazer com que a função Vezes10() chamasse a função Mostra(), o que eu não estava conseguindo fazer... mas percebi que era por causa do return :lol:

E quanto a uma função fatorial que use recursão para fazer a conta? :(

Não estou conseguindo aqui...

Link para o comentário
Compartilhar em outros sites

É, então, mas também era pra fazer com que a função Vezes10() chamasse a função Mostra(), o que eu não estava conseguindo fazer... mas percebi que era por causa do return :lol:

E quanto a uma função fatorial que use recursão para fazer a conta? :(

Não estou conseguindo aqui...

Justamente o que o WhiteDog tinha mostrado? Qual o erro?

#include <cstdlib>
#include <iostream>

using namespace std;

int fatorial(int);

int main(int argc, char *argv[])
{
int num;

cout << "Digite um numero\n";
cin >> num;

cout << fatorial(num) <<endl;

system("PAUSE");
return EXIT_SUCCESS;
}

int fatorial(int num)
{
if ( num == 1 )
return 1;
else
return fatorial(num - 1) * num;

}

Valeu?

NW

Link para o comentário
Compartilhar em outros sites

Justamente o que o WhiteDog tinha mostrado? Qual o erro?

#include <cstdlib>
#include <iostream>

using namespace std;

int fatorial(int);

int main(int argc, char *argv[])
{
int num;

cout << "Digite um numero\n";
cin >> num;

cout << fatorial(num) <<endl;

system("PAUSE");
return EXIT_SUCCESS;
}

int fatorial(int num)
{
if ( num == 1 )
return 1;
else
return fatorial(num - 1) * num;

}

Valeu?

NW

Sim, sim, agora ficou bem claro, valeu :lol:

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!