Ir para conteúdo

POWERED BY:

Arquivado

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

hitchhiker

menus

Recommended Posts

estou começando em programação em c e fiz um programa que calcula as

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void main(void)
{
float a, b, c, delta, resp1, resp2;

printf("este programa resolve equaçoes de segundo grau contanto \n que estejam no formaro Ax^2+Bx+C=0\n");
system("pause");//descrição do programa

printf("digite o valor A:");
scanf("%f", &a);//leitura dos componentes da equaçao

printf("digite o valor B:");
scanf("%f", &b);

printf("digite o valor c:");
scanf("%f", &c);

delta=(b*b)-(4*a*c);

if(delta<0){//para o caso de a equação não ter raízes reais
    printf("a equação não tem resposta.");
}
else if(delta==0){// para o caso de existir apenas uma raíz
    resp1=(b*-1)/2*a;
    printf("o valor de x e' %.2f", resp1);
}
else if(delta>0){
    resp1=((b*-1)+sqrt(delta))/(2*a);//calculo das duas raízes
    resp2=((b*-1)-sqrt(delta))/(2*a);
 printf("os valores sao:\n %.2f \n e %.2f \n", resp1, resp2);
}
}

 

raízes de uma equação de 2° grau mas queria que no final ele exibisse uma mensagem do tipo; deseja calcular de novo? sim(s) não(n).

e não sei que comandos usar, pfvr me ajudem com essa, segue o código-fonte do programa:

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (void)
{
    float a, b, c, delta, resp1, resp2;
    char q;

    do
    {
        printf("este programa resolve equaçoes de segundo grau contanto\n que estejam no formaro Ax^2+Bx+C=0\n");
        system("pause");//descrição do programa

        printf("digite o valor A:");
        scanf("%f%*c", &a);//leitura dos componentes da equaçao

        printf("digite o valor B:");
        scanf("%f%*c", &b);

        printf("digite o valor c:");
        scanf("%f%*c", &c);

        delta=(b*b)-(4*a*c);

        if(delta<0) //para o caso de a equação não ter raízes reais
            printf("a equação não tem resposta.\n");
        else if(delta==0)
        {// para o caso de existir apenas uma raíz
            resp1=(b*-1)/2*a;
            printf("o valor de x e' %.2f\n", resp1);
        }
        else if(delta>0)
        {
            resp1=((b*-1)+sqrt(delta))/(2*a);//calculo das duas raízes
            resp2=((b*-1)-sqrt(delta))/(2*a);
            printf("os valores sao:\n %.2f \n e %.2f \n", resp1, resp2);
        }

        /* Alterações */
        printf("deseja calcular de novo? sim(s) não(n).");
        scanf("%c%*c", &q);
    }
    while((q == 's') || (q == 'S'));
    return 0;
} 

Note que empreguei o laço do-while, mas poderia ser for ou while, talvez até goto. Utilizei %*c na função scanf, para descartar o caractere de nova linha, evitar seu armazenamento no buffer da entrada padrão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://en.wikipedia.org/wiki/Goto

http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF

http://programmers.stackexchange.com/questions/125715/do-we-still-have-a-case-against-the-goto-statement

http://programmers.stackexchange.com/questions/566/is-it-ever-worthwhile-using-goto

http://stackoverflow.com/questions/24451/goto-usage

 

Se for realmente os casos descritos nos posts e os tipos mais comuns de aplicações desenvolvidas, então acho que é realmente raro precisar de goto. Principalmente se levarmos em conta linguagens modernas de alto nível (HLL e VHLL). Tem linguagem que nem possui a instrução no léxico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Mateus GP,

É recomendável o uso de goto? Li alguns artigos sobre (que diziam para evitar o uso deste comando) e agora me bateu uma dúvida.

 

Sim, realmente não é recomendável a utilização deste comando em demasia ou em códigos maiores. O motivo? Simples, é mais difícil de ler o código (código espaguete).

 

Mas para tudo há uma exceção, goto é muito útil quando se quer sair de laços muito aninhados, mais competente que usar vários breaks e ifs, em algumas situações é mais eficiente e eficaz que um laço, talvez até terá um maior desempenho que for, do-while ou while, embora a nível de assembly sejam tratados da mesma forma (como saltos de instruções, a única diferença é que os laços são saltos condicionais), também é utilizado no tratamento de erros.

 

Perceba que há uma necessidade do comando goto, ora, caso contrario não continuaria presente na linguagem. Por exemplo no kernel do Linux (3.10.2) 50,23% de 18.600 arquivos (*.c) fazem uma ou mais menções à goto.

 

http://en.wikipedia.org/wiki/Goto

http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF

http://programmers.stackexchange.com/questions/125715/do-we-still-have-a-case-against-the-goto-statement

http://programmers.stackexchange.com/questions/566/is-it-ever-worthwhile-using-goto

http://stackoverflow.com/questions/24451/goto-usage

 

Se for realmente os casos descritos nos posts e os tipos mais comuns de aplicações desenvolvidas, então acho que é realmente raro precisar de goto. Principalmente se levarmos em conta linguagens modernas de alto nível (HLL e VHLL). Tem linguagem que nem possui a instrução no léxico.

 

Não há uma regra para o uso de goto, se houver não é inflexível, em códigos curtos, em que a utilização do comando não resulte em um código incompreensível, o seu uso não é maléfico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não disse que tinha uma regra p/ utilização. Se você leu as fontes deve ter visto isso escrito: "Chris Gillum summarized the possible uses of goto". Aqui, o "possíveis" não está permitindo ou proibindo, e sim informando que os casos descritos são situações em que o goto pode ser incluído como opção viável de instrução.E no mesmo post é comentado que é preferível refatorar o código que deixar lotado de goto. Aí entra a capacidade de análise do profissional, coisa que, pelo menos "nas minhas vizinhanças", está difícil de ver faz 3 anos.

 

O que se vê são perguntas do tipo "se não é necessário, pq tem?" Muito possível que seja porque os professores que leram o artigo de Dijkstra entenderam tudo errado, pois é bem mais fácil dizer que a instrução não presta que assumir que você não sabe programar direito com o que tem disponível. Se o goto faz auê com o código, é problema do programador, e não da instrução. O mesmo vale para o conceito de ter apenas um ponto de saída para um função.

 

Sobre a existência do goto: creio que seja válido para o contexto de C e C++. Java possui a palavra reservada, mas não é implementada. Em compensação, o mesmo comportamento pode ser "simulado" (?) com break e continue em named loops. Python não possui a instrução goto (nem do-while). O PHP incluiu a instrução na versão 5.3, mas não sei qual foi o motivo.

 

Agora, veja esse exemplo dado em PHP: http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/

Não concordo com a utilização do goto que foi proposta. Portanto, o melhor conselho é: ao invés de se ater a fanatismos e falácias de apelo a autoridade pq kernel linux, valve, ea games, microsoft ou sei lá mais quem usa, é preferível debruçar-se sobre o código por mais um tempinho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não disse que tinha uma regra p/ utilização. Se você leu as fontes deve ter visto isso escrito: "Chris Gillum summarized the possible uses of goto". Aqui, o "possíveis" não está permitindo ou proibindo, e sim informando que os casos descritos são situações em que o goto pode ser incluído como opção viável de instrução.E no mesmo post é comentado que é preferível refatorar o código que deixar lotado de goto. Aí entra a capacidade de análise do profissional, coisa que, pelo menos "nas minhas vizinhanças", está difícil de ver faz 3 anos.

 

O que se vê são perguntas do tipo "se não é necessário, pq tem?" Muito possível que seja porque os professores que leram o artigo de Dijkstra entenderam tudo errado, pois é bem mais fácil dizer que a instrução não presta que assumir que você não sabe programar direito com o que tem disponível. Se o goto faz auê com o código, é problema do programador, e não da instrução. O mesmo vale para o conceito de ter apenas um ponto de saída para um função.

 

Sobre a existência do goto: creio que seja válido para o contexto de C e C++. Java possui a palavra reservada, mas não é implementada. Em compensação, o mesmo comportamento pode ser "simulado" (?) com break e continue em named loops. Python não possui a instrução goto (nem do-while). O PHP incluiu a instrução na versão 5.3, mas não sei qual foi o motivo.

 

Agora, veja esse exemplo dado em PHP: http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/

Não concordo com a utilização do goto que foi proposta. Portanto, o melhor conselho é: ao invés de se ater a fanatismos e falácias de apelo a autoridade pq kernel linux, valve, ea games, microsoft ou sei lá mais quem usa, é preferível debruçar-se sobre o código por mais um tempinho.

 

Desculpe-me, acaso você tenha sentido um tom pessoal nos meus comentários (não foram necessariamente respostas), nunca foi e nunca será proposital.

 

Em momento algum tive a intenção de insinuar que você disse haver regras quanto ao uso de goto, embora pela sua reação, creio, devo ter passado esta impressão, meros (talvez subestimados) erros de expressão.

 

Discordo de você, quando mencionou que fiz um "apelo a autoridade pq kernel Linux, valve...", veja bem, o que quis responder, em poucas linhas, usando exemplos, era: "A extinção (erradicação, eliminação, perda de suporte padrão et cetera) do comando goto, acarretaria, automaticamente, na inutilização de códigos fonte de softwares importantes (insubstituíveis), como o kernel Linux, pois seria necessário muito tempo e esforço para reescrever exatamente 9.342 arquivos, id est, 50,23% do código seria inválido." Entende o que quis exemplificar?

 

Não sou fanático ou uso de falácias (uso?), apenas utilizo minhas experiencias na programação (talvez sejam poucas, até inúteis, comparadas as suas, as de Neelix ou as de Guidjos), o uso de goto é polemico, não estou defendendo-o, mas enfrento um paradoxo, ele existe e apenas o mencionei (recomendei do-while).

 

A minha alusão foi "inocente", pensei o seguinte: "Por que não aludir goto? Ora, assim ele conhecera mais um comando, mais uma forma de criar um laço, realmente goto é expurgado de muitos cursos e discussões, talvez ele ganhe uma noção mais profunda pela experiência, talvez ele pesquise mais sobre essa palavra-chave tão esquecida e maligna."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mateus, fique tranquilo.

 

Desculpe-me, acaso você tenha sentido um tom pessoal nos meus comentários (não foram necessariamente respostas), nunca foi e nunca será proposital.

 

Não, não senti tom pessoal em nada. É que goto é um assunto que já me cansou, faz tempo. Como a minha experiência é ter que explicar 1,2,3, várias vezes a mesma coisa, minha "paciência" p/ isso (ou "prolixidade" se vc preferir) é mínima. É quase como responder perguntas sobre algoritmos p/ achar números primos.

Em momento algum tive a intenção de insinuar que você disse haver regras quanto ao uso de goto, embora pela sua reação, creio, devo ter passado esta impressão, meros (talvez subestimados) erros de expressão.

 

É só interpretação de texto. Discutimos isso hoje na empresa por ser um problema sério na área de testes. Quando expliquei o que o "possíveis" queria dizer foi justamente p/ não ter ninguém mais "noob" lendo esse post e acabar tomando aquilo como regras, porque na primeira lida não havia pensado na interpretação da palavra como "só essas formas são permitidas".

 


Discordo de você, quando mencionou que fiz um "apelo a autoridade pq kernel Linux, valve...", veja bem, o que quis responder, em poucas linhas, usando exemplos, era: "A extinção (erradicação, eliminação, perda de suporte padrão et cetera) do comando goto, acarretaria, automaticamente, na inutilização de códigos fonte de softwares importantes (insubstituíveis), como o kernel Linux, pois seria necessário muito tempo e esforço para reescrever exatamente 9.342 arquivos, id est, 50,23% do código seria inválido." Entende o que quis exemplificar?

 

É que você lembrou de coisas que acontecem direto comigo no serviço. O pessoal lá usa muito o apelo à autoridade, mas muito mais caracterizado (a.k.a "escancarado"), do tipo "o Gartner falou que Cloud Computing é bom, então vamos usar" e saem implantando as coisas sem analisar a real necessidade. A última que tive que ouvir foi "metodologias ágeis pregam trazer os testadores p/ dentro da equipe de desenvolvimento, então vamos obrigar a equipe de testes a fazer isso", mas só tem 4 pessoas no teste p/ 20 equipes de 2 pessoas no desenvolvimento...Eu só distorci sua frase p/ criar um alerta.

Não sou fanático ou uso de falácias (uso?), apenas utilizo minhas experiencias na programação (talvez sejam poucas, até inúteis, comparadas as suas, as de Neelix ou as de Guidjos), o uso de goto é polemico, não estou defendendo-o, mas enfrento um paradoxo, ele existe e apenas o mencionei (recomendei do-while).

 

A minha alusão foi "inocente", pensei o seguinte: "Por que não aludir goto? Ora, assim ele conhecera mais um comando, mais uma forma de criar um laço, realmente goto é expurgado de muitos cursos e discussões, talvez ele ganhe uma noção mais profunda pela experiência, talvez ele pesquise mais sobre essa palavra-chave tão esquecida e maligna."

 

É difícil p/ mim reconhecer fanatismos pq me toma muito tempo e energia. Principalmente quando são os meus próprios. Como tive professores que proibiam de qualquer forma o uso de goto, como caloura acabei aceitando essa visão. Mas conforme a complexidade dos trabalhos foi aumentando, vi que não era uma coisa escrita na pedra, que em certas situações seria necessário. O verdadeiro problema é apresentar essa instrução de uma forma "inocente" a quem não possui experiência suficiente p/ julgar a validade da aplicação, mas assim vc tem que torcer pra que um dia ela perceba que existem "brechas na lei". Eu acho mais producente mandar a real e dizer que dá pra usar, mas com juízo, porque você acaba incentivando questionamentos e discussões, inclusive sobre projeto de linguagens de programação.

 

No final das contas, a gente joga um pouco de lenha na fogueira qdo tratamos de assunto "polêmicos" (afinal, pq uma instrução tem que ser polêmica? Não é ela que faz as coisas darem errado), p/ desespero de muitos professores. Espero que as coisas continuem assim, pegando fogo de tempos em tempos. :P

 

Mas, de novo, Mateus. Fique tranquilo. Não quis brigar com vc. Eu só ainda não aprendi a suavizar a escrita.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Estou tranquilo, apenas fiquei um pouco frustrado (não estou mais), não gosto de causar nenhum tipo de desconforto às outras pessoas, mesmo que tenha apenas impressão, fico um pouco preocupado.


Mas não foi nada com você, é apenas o meu jeito de lidar com as coisas, meus conhecidos e amigos sempre me dizem para relaxar, que conflitos entre pessoas existem, mas ainda não sei agir de forma coerente. Tento evitar, mas quando acontece uso de todas as maneiras para retratar-se, às vezes só piora.


Espero que as coisas continuem como sempre, mudar só para melhor.


Até mais, Isis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.