Ir ao conteúdo

Compilador para notepad++?


danielpcl

Posts recomendados

Postado

Pessoal, peguei o seguinte exercício na apostila:

Exercício

C++ permite o uso de operadores combinados, como +=, *=, -= e \=, para simplificar a escrita de operações

como:

a = a + b;

// Pode ser escrito como:

a += b;

Escreva um programa que utilize o operador += com strings. Faça com que o resultado exibido na tela evidencie

esse uso.

Mas, isso não está entrando de jeito nenhum na minha cabeça... como eu faço pra fazer uma soma dessas, com strings? :(

Postado
a biblioteca C++ padrão te dá o cabeçalho string que contém funções para concatenar strings, ou seja atribuir o valor a uma string de uma combinação de strings,

Acesse aí, você terá uma definição da biblioteca e o que você pode fazer com ela

http://www.cplusplus.com/reference/

Então... esse negócio de concatenar strings eu entendi, antes desse exercício eu tinha feito um sobre isso, mas eu não entendi esse negócio de "stringA = stringA + stringB"... Mas acho que agora eu consegui entender. :lol:

E, tô com mais um problema, tô com um exercício aqui, e, quando eu rodo ele, parece que o calculo estoura a váriavel, ficando um valor negativo, totalmente ao contrario do que eu precisava... Se alguém puder ajudar:

Exercício

A distância percorrida pela luz em um ano, conhecida como ano-luz, pode ser calculada pela seguinte fórmula:

anoLuz = KM_POR_SEGUNDO * SEGUNDOS_POR_MINUTO * MINUTOS_POR_HORA *

HORAS_POR_DIA * DIAS_POR_ANO;

Utilize #define de maneira que a fórmula acima possa ser usada diretamente em um programa C++. Dica:

velocidade da luz = 300.000 Km/s.

E a seguir a solução que eu tentei montar:

#include <cstdlib>

#include <iostream>

#define anoLuz 300000*60*60*24*365

using namespace std;

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

{

cout << "Velocidade da Luz: " << anoLuz << "\n";

system("PAUSE");

return EXIT_SUCCESS;

}

Mas, como eu disse, no calculo 300000*60*60*24*365 a váriavel parece que estoura...

Postado

#define anoLuz 300000*60*60*24*365

Isso aí não é variável. É macrossubstituição.

O pré-processador, antes de compilar, substitui todos os textos do #define pelo valor correspondente.

Ele não calcula. Ele só corta e cola em cima.

Tem mais coisa prá configurar.

Postado
#define anoLuz 300000*60*60*24*365

Isso aí não é variável. É macrossubstituição.

O pré-processador, antes de compilar, substitui todos os textos do #define pelo valor correspondente.

Ele não calcula. Ele só corta e cola em cima.

Tem mais coisa prá configurar.

Então, é exatamente isso que o texto da apostila deixa a entender, "A diretiva #define faz simplesmente uma substituição de texto.. Porém, o exercício diz "[i]Utilize #define de maneira que a fórmula acima possa ser usada diretamente em um programa C++. Dica:

velocidade da luz = 300.000 Km/s.". Como eu resolveria isso?

Postado
Então... esse negócio de concatenar strings eu entendi, antes desse exercício eu tinha feito um sobre isso, mas eu não entendi esse negócio de "stringA = stringA + stringB"... Mas acho que agora eu consegui entender. :lol:

E, tô com mais um problema, tô com um exercício aqui, e, quando eu rodo ele, parece que o calculo estoura a váriavel, ficando um valor negativo, totalmente ao contrario do que eu precisava... Se alguém puder ajudar:

E a seguir a solução que eu tentei montar:

Mas, como eu disse, no calculo 300000*60*60*24*365 a váriavel parece que estoura...

Se a velocidade da luz é 300.000 km/s porq você tá querendo colocar esse número gigante aí?

você ta multiplicando 300.000 por 60 e por 60 de novo e depois por 24 e depois por 365, cara tú não tá no pc da NASA :wacko:

Leia:

Inteiros

O tipo inteiro é um tipo bastante comum. Sua declaração dá-se através da palavra reservada int.

int inteiro = 500;

O tipo inteiro pode armazenar números que vão da faixa de -2.147.483.648 até 2.147.483.647 (um total de 232 números, ou 4.294.967.296).

Você pode modificar esta faixa de valores usando as palavras reservadas signed, unsigned, short e long. Veremos estas palavras reservadas (chamadas de modificadores de intervalo) logo abaixo.

Importante: se você quiser utilizar um número que esteja além dessa faixa de valores, você deve utilizar o tipo double.

double inteiro = 45687921681287; // um inteiro armazenado dentro do tipo double.

Ponto flutuante

Representa números fracionários e números reais (o que inclui os números inteiros). A faixa de valores varia de 1,2e-38 até 3,4e+38.

A declaração é feita através da palavra reservada float:

Ponto flutuante (dupla precisão)

Igualmente ao tipo float, utilizado para números fracionários e reais, porém com precisão ainda maior. A faixa de valores varia de de 2,2e-308 até 1,8e+308.

A declaração é com a palavra reservada double:

double numero=558749.16846516487975132156857452131274127412974812794812794812798412;

Essa multiplicação que você ta fazendo aí extrapola todos os limites de C++

Postado
Se a velocidade da luz é 300.000 km/s porq você tá querendo colocar esse número gigante aí?

você ta multiplicando 300.000 por 60 e por 60 de novo e depois por 24 e depois por 365, cara tú não tá no pc da NASA :wacko:

Leia:

Essa multiplicação que você ta fazendo aí extrapola todos os limites de C++

Então, é EXATAMENTE isso que pede no exercício... Pior que são dois exercícios assim seguidos, e eu não consigo resolver nenhum, poís aparenta ser impossível, pelo menos pro C++, fazer esse calculo (mas eu consegui fazer na calculadora do Windows).

Também tô com outro problema, só que dessa vez pra usar enum...

Tô tentando declarar as enum assim:

enum Horas

{

UmaHora = 1

DuasHoras = 2

TresHoras = 3

QuatroHoras = 4

CincoHoras = 5

SeisHoras = 6

SeteHoras = 7

OitoHoras = 8

NoveHoras = 9

DezHoras = 10

OnzeHoras = 11

DozeHoras = 12

}

Porém, o C++ não tá aceitando.. já tentei colocar, depois do 1, 2, 3, etc, vírgulas e ponto e vírgula, mas não adianta nada, e continua dando erro... alguma luz?

Postado
300000*60*60*24*365 = 9460800000000

O que dá 44 bits, se não errei aqui.

Ou 5 bytes e 1 nibble.

Ou 5 1/2 bytes.

Ou 11 nibbles.

Ou ...

unsigned long long int aguenta?

Sim, sim, é esse valor mesmo, porém, se eu tento executar a conta no C++, o resultado sai -1012953088... Então, como eu resolveria a questão? Já tô quase desistindo dessa questão :lol:

Postado

Espero que não saia torto.


short int <= int <= long int
float <= double <= long double


Type Bytes Bits Range

short int 2 16 -16,384 -> +16,383 (16kb)
unsigned short int 2 16 0 -> +32,767 (32Kb)
unsigned int 4 16 0 -> +4,294,967,295 ( 4Gb)
int 4 32 -2,147,483,648 -> +2,147,483,647 ( 2Gb)
long int 4 32 -2,147,483,648 -> +2,147,483,647 ( 2Gb)
signed char 1 8 -128 -> +127
unsigned char 1 8 0 -> +255
float 4 32
double 8 64
long double 12 96

Postado
Então, é EXATAMENTE isso que pede no exercício... Pior que são dois exercícios assim seguidos, e eu não consigo resolver nenhum, poís aparenta ser impossível, pelo menos pro C++, fazer esse calculo (mas eu consegui fazer na calculadora do Windows).

Também tô com outro problema, só que dessa vez pra usar enum...

Tô tentando declarar as enum assim:

Porém, o C++ não tá aceitando.. já tentei colocar, depois do 1, 2, 3, etc, vírgulas e ponto e vírgula, mas não adianta nada, e continua dando erro... alguma luz?

Tenta assim:

enum Horas

{

UmaHora = 1,

DuasHoras = 2,

TresHoras = 3,

QuatroHoras = 4,

CincoHoras = 5,

SeisHoras = 6,

SeteHoras = 7,

OitoHoras = 8,

NoveHoras = 9,

DezHoras = 10,

OnzeHoras = 11,

DozeHoras = 12,

};

-

Postado

declara a enum assim:

enum Horas {UmaHora =1,
DuasHoras,
..
DozeHoras};

você só precisa colocar o primeiro valor pois o Compilador dará o próximo valor ao próximo elemento n+1; você esqueceu as virgulas

Postado

@Listeiro 037, sim, a apostila tem uma tabela igualzinha essa, indicando os valores...

@Deadrools, eu tentei desse jeito que você fez, e foi :lol:

e @Dani0liveira, o jeito que você fez o enum também funcionou, mas eu tive que colocar ponto e vírgula depois que fecha as chaves

Cara, qual apostila você ta usando? passa o link ai onde você baixou pra mim dar uma olhada nela? fiquei abismado agoraa

Ou então coloca o enunciado da questão.

Cara, a apostila é daqui do trampo, tava no servidor aqui, mas eu achei um link pra ela, saca só:

http://pt.scribd.com/doc/68662486/5423-C-ou-C

O exercício tá na página 23 :lol:

Postado

Quebrei a cabeça e no final me lembrei disto:

#include<stdio.h>

int main(void) {

printf ("%d\n", sizeof(short int));

return 0;

}

Procura na internet por este cara aqui: Martin Leslie

Foi ele quem escreveu a referencia. Quer dizer, esta a qual me refiro.

Caramba... Até variável de shell é maior...

Postado
Quebrei a cabeça e no final me lembrei disto:

#include<stdio.h>

int main(void) {

printf ("%d\n", sizeof(short int));

return 0;

}

Procura na internet por este cara aqui: Martin Leslie

Foi ele quem escreveu a referencia. Quer dizer, esta a qual me refiro.

Caramba... Até variável de shell é maior...

Cara, não entendi esse código ai não. :huh:

Tem como você dar uma explicada?

Postado
Sim, sim, é esse valor mesmo, porém, se eu tento executar a conta no C++, o resultado sai -1012953088... Então, como eu resolveria a questão? Já tô quase desistindo dessa questão :lol:

Coloca assim:

#define anoLuz 365*24*60*60*300000.f

Ou assim:

#define anoLuz (float)365*24*60*60*300000

Vê se é isso aí q você ta querendo.

Postado
94608e+012 = ano-luz

É o mesmo valor só q aí tá simplificado.

Não achei um jeito pra mostrar com zeros :(

Ah, eu tinha feito um calculo no #define que também tinha dado esse número ai, mas considerei errado, e agora até esqueci o que tinha feito :lol:

Mas, esse "e+012" significa o que? Isso seria hexadecimal, octadecimal, ou algo assim?

Postado
Ah, eu tinha feito um calculo no #define que também tinha dado esse número ai, mas considerei errado, e agora até esqueci o que tinha feito :lol:

Mas, esse "e+012" significa o que? Isso seria hexadecimal, octadecimal, ou algo assim?

Esquece o q eu disse.

substitua a linha do cout por essa:

cout << "Velocidade da Luz: " << (long long)anoLuz << "\n";

Pode passar pro próximo exercício. :)

Postado

Atenção:

#include <stdio.h>
#include <limits.h> // obs #1

int main(void) {

printf ("%llu\n", ULLONG_MAX); // obs #2

return 0;

}

Obs #1: Isso aí é um header que tem informações sobre capacidades dos tipos pré-definidos do C.

Quanto cabe num int, num long int, num long long int, num char, num float etc.

Obs #2: Coisas diferentes (geralmente) aqui:

- A máscara "%llu" serve para mostrar formatação unsigned long long int.

Quem rodar o código acima verá que o resultado é maior que o valor do ano-luz.

- Esse valor ULLONG_MAX veio no header <limits.h>.

Ele vale pelo menos 2^64. Um acima ou um abaixo, como sempre.

Agora, falando de C++:

É vício de C não usar esses COUTs, mas eu não me lembro dos nomes e no caso, deve-se configurar um tipo de formatador que acompanha o objeto COUT. Alguma coisa que se escreve como std():: ou ::std().

Se a variável aguenta, então o problema pode ser na formatação do printf e semelhantes.

Vale prá qualquer variável gigante.

Postado
Esquece o q eu disse.

substitua a linha do cout por essa:

Pode passar pro próximo exercício. :)

AEEEEEEEEEEEEEE, agora deu certo :aplausos:

Não sabia dessa do long long :lol:

Agora sim, posso ir pro próximo exercício em paz...

Logo eu apareço com mais dúvidas :lol:

@Listeiro 037 É, aparentemente o problema era no cout...

Pessoa, cá estou eu com outro problema.

Exercício parecido, como vocês podem ver:

Utilize a palavra-chave const para calcular a distância percorrida pela luz em um ano, conhecida como ano-luz,
com a seguinte fórmula:
anoLuz = KM_POR_SEGUNDO * SEGUNDOS_POR_MINUTO * MINUTOS_POR_HORA *
HORAS_POR_DIA * DIAS_POR_ANO;
Dica: velocidade da luz = 300.000 Km/s.

E, esta é a solução que eu havia elaborado:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
const int anoLuz = 300000*60*60*24*365;
cout << "Velocidade da luz " << (long long)anoLuz << "\n";
system("PAUSE");
return EXIT_SUCCESS;
}

Porém, não importa o que eu altere, o resultado sempre volta o mesmo: -1012953088.

E agora? Alguma solução? :(

Postado

Coloque long long no lugar deste int.

Ou coloque long long int no lugar deste int.

*** ADD ***

A constante é int e vocẽ quer uma saída com número maior.

O formatador está pronto.

A variável é que não está aguentando.

Postado

É, 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. :(

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!