Ir ao conteúdo
  • Cadastre-se

como pegar a parte inteira de um numero?


Visitante: rotciv

Posts recomendados

Visitante: rotciv
 

Eu to fazendo um programa para calcular as raizes de uma equação do 2 grau

só q ele só da as respostas com numero tipo 3.00000E+00

ai eu queria q ele desse somente o 3 . Tem um comando q pega so a parte inteira q é o int(x)[pelo q eu vi na apostila q to lendo] , mas não sei usar

o codigo ta ae :

program soma;
var
a, b, c, x1, x2 , d : real;
begin
readln(a);
readln(;
readln(c);
d:= (b* - 4*a*c;
x1 :=( -b + sqrt(d))/2;
x2 :=( -b - sqrt(d))/2;
writeln( x1);
writeln( x2);

end.

Agradeço quem puder me ajudar :)

Link para o comentário
Compartilhar em outros sites

Olá!

Se quiser apenas exibir a parte inteira do número:

[color=#228b22]writeln[/color][color=#a52a2a][b]([/b][/color]x1[color=#a52a2a][b]:[/b][/color][color=#000000]0[/color][color=#a52a2a][b]:[/b][/color][color=#000000]0[/color][color=#a52a2a][b]);[/b][/color]

Sendo o primeiro 0 o número de espaços reservados e o segundo, a quantidade de casas decimais exibidas.

Ou:

[color=#228b22]writeln[/color][color=#a52a2a][b]([/b][/color][color=#228b22]trunc[/color][color=#a52a2a][b]([/b][/color]x1[color=#a52a2a][b]));[/b][/color]

Utilizando int, obtém-se a parte inteira, porém com o tipo "real", e trunc retorna a parte inteira com o tipo "integer".

Uma correção da fórmula:


x1 [color=#a52a2a][b]:= (-[/b][/color]b [color=#a52a2a][b]+[/b][/color] [color=#228b22]sqrt[/color][color=#a52a2a][b]([/b][/color]d[color=#a52a2a][b])) / ([/b][/color][color=#000000]2[/color][color=#a52a2a][b]*[/b][/color]a[color=#a52a2a][b])[/b][/color]
x2 [color=#a52a2a][b]:= (-[/b][/color]b [color=#a52a2a][b]-[/b][/color] [color=#228b22]sqrt[/color][color=#a52a2a][b]([/b][/color]d[color=#a52a2a][b])) / ([/b][/color][color=#000000]2[/color][color=#a52a2a][b]*[/b][/color]a[color=#a52a2a][b])[/b][/color]

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
rotciv disse:
valeu mesmo e obrigado por corrigir a formula

Olá,

Abaixo fiz um código baseado no seu como demonstração:

 
program EquacaoQuadratica;
uses
  CRT;
var
a, b, c,        //constantes
x1, x2,         //variáveis
delta    :real;
BEGIN
TextColor(15);
ClrScr;
writeln('CALCUlO DAS RAIZES DE EQUACOES DO SEGUNDO GRAU (aX^2 + bX + c)');
writeln;
writeln('Informe os valores das constantes "a", "b" e "c" da equacao');
writeln;
writeln;
write('A :'); readln(a);
write('B :'); readln(b);
write('C :'); readln(c);
writeln;
writeln('EQUACAO :',a:0:2,'X^2 + (',b:0:2,'X) + (',c:0:2,')');
delta:=sqr(b)-4*a*c;
writeln;
writeln('Delta = ',delta:0:2);
x1:=(-b+sqrt(delta))/(2*a);
x2:=(-b-sqrt(delta))/(2*a);
writeln;
writeln('Raizes:');
writeln('X1 :',x1:0:2);
writeln('X2 :',x2:0:2);
ReadKey;
end. 

OBS.: Como é sabido, as equações do segundo grau podem ter duas duas raízes reais, no caso incluindo duas iguais; ou então duas raízes complexas. Essas 3 possibilidades devem ser tratadas no seu algoritmo, pois por exemplo, se as raízes forem complexas o programa travará, e isso não é legal, já que é totalmente previsível!!! (Pascal não entende de raízes de números negativos, logo deve ser remediado!!!)

No aguardo

Abraços

Link para o comentário
Compartilhar em outros sites

Visitante: rotciv
 

hm, verdade. é porque eu tava querendo criar algo meu q nao fosse de uma apostila pra me testar, ai só pensei em situações simples , mas ja tava pensando em fazer para qualquer equacao polinomial, mas depois de ver q nao tem como colocar raizes complexas, fica meio chato...

sim, esse ultimo comando : ReadKey, é pra q?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
hm, verdade. é porque eu tava querendo criar algo meu q nao fosse de uma apostila pra me testar, ai só pensei em situações simples , mas ja tava pensando em fazer para qualquer equacao polinomial, mas depois de ver q nao tem como colocar raizes complexas, fica meio chato...
sim, esse ultimo comando : ReadKey, é pra q?

Olá,

Sobre:

1) Números complexos

De certo modo o Pascal não entende, mas é possível sim usar esses números complexos.

Veja que um número complexo é um abstração, ou seja, é algo que teoricamente não e real, mas que pode ser imaginado!.

Da mesma forma acontece com o Pascal (a programação em si). Ela não é entendida por si só (usado diretamente num comando preexistente), mas pode ser usada por um algoritmo que a trate... da mesmo forma que conseguimos entender, através dos seus conceitos postulados.

Ou seja, basta você tratar os valores e simular os resultados.

Exemplo (contextualizado):

Qual é a raiz de delta =-81 ?

Simples, faz da mesma forma que "na vida real": tira a raiz do módulo e multiplica por "i" (número complexo).

Logo: √-81 = 9i

Abaixo um programa que fiz para demonstrar:

[color=#0000ff]PROGRAM[/color] RaizNumeroNegativo[color=#000000];[/color]
[color=#0000ff]uses[/color]
SysUtils[color=#000000],[/color] [color=#008000]//carrega comando extras, como o FloatToStr e outros...[/color]
CRT[color=#000000];[/color] [color=#008000]//carrega comandos extras, como ClrScr, ReadKey, TextColor etc[/color]

[color=#008000]//retorna a raiz quadrada, incluíndo números negaticos (usando números imaginários)[/color]
[color=#0000ff]function[/color] [color=#000000]SQRTi[/color] [color=#000000]([/color]numero[color=#000000]:[/color][color=#0000ff]real[/color][color=#000000]):[/color][color=#0000ff]string[/color][color=#000000];[/color]
[color=#0000ff]begin[/color]
SQRTi[color=#000000]:=[/color][color=#000000]FloatToStr[/color][color=#000000]([/color][color=#000000]SQRT[/color][color=#000000]([/color][color=#000000]ABS[/color][color=#000000]([/color]numero[color=#000000])));[/color]
[color=#2b91af]if[/color] numero[color=#000000]<[/color][color=#000000]0[/color] [color=#2b91af]then[/color]
SQRTi[color=#000000]:=[/color]SQRTi[color=#000000]+[/color][color=#a31515]'i'[/color][color=#000000];[/color] [color=#008000]//inseri um "i" indicando que está sendo multiplido por um número complexo[/color]
[color=#0000ff]end[/color][color=#000000];[/color]
[color=#008000](*[/color]
[color=#008000] ABS = Valor absoluto;[/color]
[color=#008000] SQRT = Raiz quadrada;[/color]
[color=#008000] FloatToStr = Converte de Float para String[/color]
[color=#008000] *)[/color]
[color=#0000ff]var[/color]
num [color=#000000]:[/color][color=#0000ff]real[/color][color=#000000];[/color]

[color=#0000ff]BEGIN[/color]
[color=#000000]TextColor[/color][color=#000000]([/color]white[color=#000000]);[/color] [color=#008000]//blanco mais claro (white=15)[/color]
ClrScr[color=#000000];[/color] [color=#008000]//limpa a tela[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'PROGRAMA QUE TIRA A RAIZ QUADRADA ATE DE NUMEROS NEGATIVOS (raizes imaginarias)'[/color][color=#000000]);[/color]
writeln[color=#000000];[/color]
[color=#000000]write[/color][color=#000000]([/color][color=#a31515]'Numero real :'[/color][color=#000000]);[/color] [color=#000000]readln[/color][color=#000000]([/color]num[color=#000000]);[/color]
writeln[color=#000000];[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Raiz de '[/color][color=#000000],[/color]num[color=#000000]:[/color][color=#000000]0[/color][color=#000000]:[/color][color=#000000]2[/color][color=#000000],[/color][color=#a31515]' = '[/color][color=#000000],[/color][color=#000000]SQRTi[/color][color=#000000]([/color]num[color=#000000]));[/color]
ReadKey[color=#000000];[/color]
[color=#0000ff]END[/color][color=#000000].[/color]

OBS.: Primeiro veja a questão ainda do programa anterior que está inacabada (da equação do primeiro grau), e se quiser ver também algo mais sobre equações polinomiais e números complexos crie um novo tópico.

Ou seja, vamos fazer uma coisa de cada vez.

2) Comando ReadKey;

ReadKey é um comando que tem a finalidade de retornar o caractere pressionado do teclado nele mesmo. Ou seja, ele fica aguardando uma tecla ser pressionada, e retornar o código da tecla no próprio comando (é uma function).

Como ela "tem que ficar esperando", usamos ela como se fosse um "pause", ou seja, o programa para de rodar até que alguma tecla seja pressionada (no caso descartando qual foi a tecla, já que não importa).

É semelhante a usar o readln;, só que esse último só vai "continuar" quando pressionarem o ENTER. O ReadKey vai continuar com quase todas as teclas. (nem todas são reconhecíveis, ex: SHIFT, TAB etc).

OBS.: Esse comando pertence normalmente a unit (biblioteca de comandos e afins) CRT (ou WinCRT), ou seja, a depender do compilador é preciso carregá-la através do uses, com visto no código anterior.

OBS2.: Existem compiladores que NÃO é preciso carregar a CRT (ou WinCTR), acredito que isso seja devido ao compilador já pré-carregar a unit, ou alguns comandos, automaticamente, assim como faz com os comando básicos, como readln, writeln, que TAMBÉM PERTENCEM a alguma unit, no caso a System. Ou seja, alguns compiladores já carregam os principais comandos usados para facilitar o processo. É possível configurar essas units, mas é um detalhe banal e teoricamente inviável, já que pode tirar a clareza do código (saber o que está carregado ou não só pelo código, e não pela config. do compilador).

No aguardo

Abraços

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

no meu pc nao ta pegando esse comando sysutil,

ta dizendo : Error 15: File not found (SYSUTILS.TPU).

o que é isso?

e o que o comando FloatToStr faz?

obrigado.

Olá,

Vou te ajudar de uma forma diferente... Só para estimular um pouco o raciocínio... (é para isso que também ser a disciplina)

Vamos por partes..

1) Erro na compilação

Error 15: File not found (SYSUTILS.TPU)

Você já experimentou traduzir o texto do erro? :rolleyes:

Está num inglês bem simples.. (quando preciso uso o Google Translate) ^_^

PS: A gigante Google está nesse mundo pra isso: nos servir!

2) Comando desconhecido

Você nunca tinha visto falar no FloatToStr ?

Até pouco tempo eu, como muitos, também não... sabe o que eu fiz? Clique aqui e veja:

PS: Ó ela mais uma vez... :)

3) Código compilável no Turbo Pacal 7.1

Em fim, para ajudar converti o código anterior para uma versão compilável no Turbo Pascal 7.1.

Abaixo o código adaptado para Turbo Pascl:


[color=#0000ff]uses[/color]
[color=#008000]{SysUtils,}[/color] [color=#008000]{carrega comando extras, como o FloatToStr e outros...}[/color]
CRT[color=#000000];[/color] [color=#008000]{carrega comandos extras, como ClrScr, ReadKey, TextColor etc}[/color]

[color=#008000]{retorna a raiz quadrada, incluindo numeros negaticos (usando numeros imaginarios)}[/color]
[color=#0000ff]function[/color] [color=#000000]SQRTi[/color] [color=#000000]([/color]numero[color=#000000]:[/color][color=#0000ff]real[/color][color=#000000]):[/color][color=#0000ff]string[/color][color=#000000];[/color]
[color=#0000ff]var[/color]
numString [color=#000000]:[/color][color=#0000ff]string[/color][color=#000000];[/color]
[color=#0000ff]begin[/color]
[color=#008000]{SQRTi:=FloatToStr(SQRT(ABS(numero)));}[/color]
[color=#000000]STR[/color][color=#000000]([/color][color=#000000]SQRT[/color][color=#000000]([/color][color=#000000]ABS[/color][color=#000000]([/color]numero[color=#000000])):[/color][color=#000000]0[/color][color=#000000]:[/color][color=#000000]2[/color][color=#000000],[/color]numString[color=#000000]);[/color]
[color=#2b91af]if[/color] numero[color=#000000]<[/color][color=#000000]0[/color] [color=#2b91af]then[/color]
numString[color=#000000]:=[/color]numString[color=#000000]+[/color][color=#a31515]'i'[/color][color=#000000];[/color] [color=#008000]{inseri um "i" indicando que esta sendo multiplido por um numero complexo}[/color]
SQRTi[color=#000000]:=[/color]numString[color=#000000];[/color]
[color=#0000ff]end[/color][color=#000000];[/color]

[color=#008000](*[/color]
[color=#008000] ABS = Valor absoluto;[/color]
[color=#008000] SQRT = Raiz quadrada;[/color]
[color=#008000] FloatToStr = Converte de Float para String[/color]
[color=#008000] *)[/color]
[color=#0000ff]var[/color]
num [color=#000000]:[/color][color=#0000ff]real[/color][color=#000000];[/color]

[color=#0000ff]BEGIN[/color]
[color=#000000]TextColor[/color][color=#000000]([/color]white[color=#000000]);[/color] [color=#008000]{blanco mais claro (white=15)}[/color]
ClrScr[color=#000000];[/color] [color=#008000]{limpa a tela}[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'PROGRAMA QUE TIRA A RAIZ QUADRADA ATE DE NUMEROS NEGATIVOS (raizes imaginarias)'[/color][color=#000000]);[/color]
writeln[color=#000000];[/color]
[color=#000000]write[/color][color=#000000]([/color][color=#a31515]'Numero real :'[/color][color=#000000]);[/color] [color=#000000]readln[/color][color=#000000]([/color]num[color=#000000]);[/color]
writeln[color=#000000];[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Raiz de '[/color][color=#000000],[/color]num[color=#000000]:[/color][color=#000000]0[/color][color=#000000]:[/color][color=#000000]2[/color][color=#000000],[/color][color=#a31515]' = '[/color][color=#000000],[/color][color=#000000]SQRTi[/color][color=#000000]([/color]num[color=#000000]));[/color]
ReadKey[color=#000000];[/color]
[color=#0000ff]END[/color][color=#000000].[/color]
[color=#0000ff]PROGRAM[/color] RaizNumeroNegativo[color=#000000];[/color]

PS: Eu comecei a programar nele. Acredito que seja o melhor compilador para ensinar, já que ele é mais limitado, o que estimula (deveria) a criatividade!!!

PS2: Hoje ainda uso o TP7, mas o meu principal é uma mistura de NotePad++ com Free Pascal..., por causa da edição de texto, principalmente para identação.. (eu só consigo analisar um código, se ele estiver identado!!!).

4) Mais um comando novo?

Você já conhece o STR? Senão já conseguiu deduzir (pelo código, e pelas pesquisas) o que eles (+ ou FloatToStr) estão fazendo?

Vá em frente.. você está num bom caminho... ;)

***

Em fim, tente entender mais ou menos o que ocorreu para o meu programa não rodar legal no seu compilador. Daí ao mesmo tempo tentar entender as mudanças que tive que fazer para rodar no Turbo Pascal (que é o mais clássico, e deve rodar no seu também). Veja que as mudanças são poucas...

SUGESTÕES

- Sempre que possível, leia os códigos postados aqui no Fórum, mesmo que não queira ou não consiga contribuir. É sempre bom aprender com exemplos!

- Essa dica vale também para os códigos encontrados em outros lugares, como os dos seus colegas ou internet.

- Sempre que possível, dê uma pesquisadinha na internet sobre suas dúvidas...

- Replicar ideias vale, o que não vale é copiar descaradamente, rs

Ah! Para quem quiser o TP7.

Fico no aguardo, qualquer coisa é só postar!!!

Abraços

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