Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas no uso do while e criação dos algoritmos


pedrovg

Pergunta

Não estou conseguindo criar os códigos com o while. Estou aprendendo a parte de algoritmos e whiles mas nenhum está dando certo! Se alguém puder me ajudar.

Vou passar dois programas que não sei onde está o erro, assim posso também corrigir o que estou errando.

Nesse eu queria colocar quanto de galão usado quantas milhas dirigidas, o programa calcular a relação milha/galão e fazer isso para diversos tanques e milhas. Ao final ele calcula a relação geral milha/galão considerando todos os tanques. Não sei se expliquei direito. Está travando aós colocar o 2º dado.

[ code ] /* Calculate the miles driven and gallons used for each tankful */

#include <stdio.h>

int main(void)

{

float gallons, miles, quotient, average;

gallons = 0;

miles = 0;

while ( gallons != -1){

printf("Enter the gallons used ( -1 to end): \n");

scanf("%f", &gallons);

printf("Enter the miles driven: \n");

scanf("%f", miles);

quotient = miles / gallons;

printf("The miles / gallon for this tank was %f", quotient);

gallons +=0;

miles +=0;}

average = miles / gallons;

printf("The overall average miles/gallon was %f", average);

fflush(stdin);

getchar();

return 0;

} [/ code]

O outro acho que dá para entender melhor pelo código. Só queria que pudesse colocar mais de um número de conta sem que ele fechasse. Também está apresentando algum problema no 1º float.

[ code] /* Department store program */

#include <stdio.h>

int main(void)

{

int account;

float balance, charges, credit, limit, balance;

balance += 0;

while (account != -1){

printf(" Enter account number (-1 to end): ");

scanf("f", account);

printf("Enter begining balance: ");

scanf("%f", balance);

printf("Enter total charges: ");

scanf("%f", charges);

printf("Enter total credits: ");

scanf("%f", credit);

printf("Enter credit limit: ");

scanf("%f", limit);}

printf("%f", account);

printf("%f", limit);

balance = balance + charges - credit;

printf("%f", balance);

if ( balance > credit);

printf("Credit Limit Exceeded.");

else

printf("Credit Limit Allowed"\n);

fflush(stdin);

getchar();

return 0;

}

[/ code]

Obrigado,

Editado por pedrovg
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Em relacao ao primeiro: "scanf("%f", &miles);" esqueceu do &

Em relacao ao segundo:

int main(void){
    int account;
    float balance, charges, credit, limit, balance;
    balance += 0; // <-- pode eliminar
    while( account != -1 ){
        printf(" Enter account number (-1 to end): ");
        scanf("f", account); // <-- ("%i", &account)
        printf("Enter begining balance: ");
        scanf("%f", balance); // <-- &balance
        printf("Enter total charges: ");
        scanf("%f", charges); // <-- &charges
        printf("Enter total credits: ");
        scanf("%f", credit); // <-- &credit
        printf("Enter credit limit: ");
        scanf("%f", limit); // <-- &limit
    }
    printf("%f", account);
    printf("%f", limit);
    balance = balance + charges - credit;
    printf("%f", balance);
    if ( balance > credit); // elimina o;
        printf("Credit Limit Exceeded.");
    else
        printf("Credit Limit Allowed"\n); // <-- \n entre aspas
    fflush(stdin);
    getchar();
    return 0;
}

Espero ter ajudado!

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela ajua, mas os programas ainda não funcionam. O 1º está agora com erro quando digito o -1 para acabar o while. Deveria colocar "gallons" 1º, depois "miles" e se digitar

-1 no "gallons" deveria sair do while e ir para a próxima função, mas ele ainda pede para colocar informações de "miles". E, acho que por isso, está calculando o "overall average miles/gallon" errado.

No 2º programa está apresentando erro na compilação. O problema está no float. Ele pede "redeclaration of 'float balance'", "'float balance' previusly declared here" e yambém apresenta erro na linha 29, do else: "expected primary-expression before "else" ", "expected ';' before "else", apesar de que já tem um ';' antes do else. Tentei arrumar de vários modos e nada. Já levei em consideração as modificações que você mostrou.

Link para o comentário
Compartilhar em outros sites

  • 0

Tem razao, não funciona apenas com aquelas correcoes, eu refiz, compilei e funcionou. Espero que seje o que voce quer, "Eu estou aprendendo tambem" mas então foi:

#include <stdio.h>
int main(void){
    float litro, km, kmLitro, totKm, totLitro, media; // totKm, totLitro = para que os valores não se percam
    litro = 0;
    km = 0;
    totKm = 0;
    totLitro = 0;
    while ( litro != -1 ){
        printf("\nInforme a qtd. litros ou (-1) para encerrar: ");
        scanf("%f", &litro);
        if( litro == -1 )
            break; // Caso -1, para aqui não executando o restante do loop
        printf("\nInforme a quilometragem: ");
        scanf("%f", &km);
        kmLitro = km / litro;
        printf("\nA quilometragem por litro e %f", kmLitro);
        totKm += km;
        totLitro += litro;
        km = 0;
        litro = 0;
    }
    if( totKm != 0 ){ // Caso totKm não tenha recebido um valor...
        media = totKm / totLitro;
        printf("\nA media de quilometros por litro foi: %f", media);
    }else
        printf("\n So digitaram um -1 ... :) :) :) ");
    fflush(stdin);
    getchar();
    return 0;
}

Mais tarde vou dar uma olhada no outro e caso ninguém tenha respondido eu posto!

Desta vez espero ter ajudado, pela metade ainda...

Link para o comentário
Compartilhar em outros sites

  • 0

Olha eu di novo! Esqueci de tirar uma variavel da declaracao foi mal...

float "balance", charges, credit, limit, "balance";
por isso "redeclaration of 'float balance'" redeclaracao... Olha so, como eu disse tambem sou iniciante e por isto não intendi muito bem a logica do segundo programa. <_< Neste caso me preocupo porque ao invez de ajudar posso acabar atrapalhando... :huh: Mais, Bom, eu pensei da seguinte forma: Imaginando se tratar de compras e credito, baseado no seu codigo eu fiz isto: Temos la as variaveis: conta (para receber um numero de conta ou (-1) para sair do programa) limite (para receber um limite de credito) compra (valor da compra ou (-1) para sair do loop onde se gasta o dindin) pagamento (recebe um valor que sera utilizado para abater do valor da compra no mesmo instante) cobranca (recebera o valor da "compra - pagamento" para que os valores não se percam, para depois cobrar não é? caso exista algum valor) sair (tipo bool, sera inicializada com false e recebera true caso "conta = -1 ou compra = -1" para sair dos loops) O funcionamento sera o seguinte: Teremos um loop onde tudo sera executado e dentro deste, outro loop para executar as operacoes referente a uma conta, ou seja, o codigo que voce postou ficara dentro de um loop possibilitando inserir mais contas "um loop dentro do outro". Eu refiz da seguinte forma: */
#include <stdio.h>
int main(void){
    int conta;
    float compra, limite, cobranca, pagamento;
    bool sair = false; // Para sair dos loops quando o valor assumido for true.
    while( sair == false ){
        printf("\nEntre com o numero da conta ou (-1) para sair: ");
        scanf("%i", &conta);
        if( conta == -1 ){
            sair = true; // saindo do primeiro loop e encerrando o programa.
        }else{
            cobranca = 0; // para que o calculo final seje efetuado com os valores corretos
                     // esta variavel deve ser atualizada a cada conta, senao
                     // para a proxima conta seriam utilizado os valores da mesma e da
                     // anterior, e da anterior da anterior, e da ... ai não não é?!
            printf("Informe o limite de credito para esta conta: ");
            scanf("%f", &limite);
            printf("Agora é só gastar hehehe!");
            while( sair == false ){
                printf("\nEntre com o valor da compra ou (-1) para sair: ");
                scanf("%f", &compra);
                if( compra == -1 ){
                    sair = true; // saindo do segundo loop...
                }else{
                    printf("Entre com um valor para pagamento: ");
                    scanf("%f", &pagamento);
                    cobranca = cobranca + ( compra - pagamento );
                }
            }
            printf("\nConta: %i", conta);
            printf("\nLimite: %f", limite);
            printf("\nTotal a debitar: %f", cobranca);
            // se cobranca for maior que zero é porque há algo para debitar...
            if( cobranca > 0 )
                limite = limite - cobranca;
            if ( limite < 0 ){
                printf("\nExcedeu o limite de credito.");
            }else{
                printf("\nCredito aprovado.");
                printf("\nCredito disponivel: %f", limite);
            }
            sair = false;  // para sair do segundo loop "sair recebeu true",
                   // como estamos utilizando a mesma variavel ela deve
                   // receber false para não sair do primeiro loop.
        }
        // terminado todo o processo referente a uma conta no "else", comeca tudo de novo!
    }
    fflush(stdin);
    getchar();
    return 0;
}

há muita coisa a aprimorar ai, mas eu realmente espero ter ajudado em algo. Testa ai e veja se da para aproveitar alguma coisa,

Fora isto continuamos enviando nossas duvidas não é?! Value!

Link para o comentário
Compartilhar em outros sites

  • 0

Você sabe bem mais que eu heheheh.

Foram muito úteis as suas ajudas. Esse programas são apenas exercícios do livro de C. Nessa parte de algoritmo e while estou penando um pouco pra pegar o jeito. Tinha feito uns erros bobos.

Só o segundo que ficou diferente do que eu pensava, mas bem interessante. Se puder dá uma olhada no jeito que estou fazendo. Agora está funcionando como quero, exceto porque quando digito [-1] não pára e não sei porque ele está imprimindo o número da conta errado, ele deveria ser o comando mais simples:

/* Department store program */

#include <stdio.h>

int main(void)

{

int account;

float balance, charges, credit, limit;

balance = 0;

charges = 0;

credit = 0;

limit =0;

while (account != -1){

balance = 0;

printf(" Enter account number (-1 to end): ");

scanf("%f", &account);

printf("Enter begining balance: ");

scanf("%f", &balance);

printf("Enter total charges: ");

scanf("%f", &charges);

printf("Enter total credits: ");

scanf("%f", &credit);

printf("Enter credit limit: ");

scanf("%f", &limit);

printf("Account: %d\n", account);

printf("Credit limit: %.2f\n", limit);

balance = balance + charges - credit;

printf("Balance: %.2f\n", balance);

if ( balance > credit)

printf("Credit Limit Exceeded.\n");

else

printf("Credit Limit Allowed\n");

}

fflush(stdin);

getchar();

return 0;

}

Valeu

Editado por pedrovg
Link para o comentário
Compartilhar em outros sites

  • 0

Olha mim di novo! Em relacao aquela reviravolta toda que arrangei la em cima foi mal... não percebi que a chaves do loop poderia ser mais em baixo, :wacko: :wacko: hehehe o quiehh que mim foi arumahh! Em relacao ao ou aos loops voce pega rapidinho, e o codigo da uma olhada em:

scanf("%f", &account);

Ela foi declarada como int então %... se f = float então int deve ser igual a % ... moleza ne?

Em relacao ao codigo não parar quando o valor -1 for digitado, isto porque o valor é atribuido a variaval dentro do loop, ou seja, o loop já esta em execucao e neste caso não vai parar ate voltar ao inicio para nova avaliacao. Por isto, mesmo digitando -1 o programa continua a pedir dados. Existem varias solucoes para isto como fazer a pergunta antes do loop e acrescenta-la novamente no final do loop, voce poderia criar uma variavel do tipo logico "bool" para receber true or false, "s" "n", 1 ou 0 exclusiva para dizer se a execucao do loop continua ou se para, seila... por ai vai... Voce vai dar um jeito! Espero ter ajudado e bons estudos ae hehehe, valeu! :D

Link para o comentário
Compartilhar em outros sites

  • 0

1 - preste atenção, sempre falta uma besteira no código, revise com cuidado

2 - perceba que do jeito que você está fazendo, trabalhando com a variavel gallons dentro do while

está dando um 'problemão'

o mais aconselhavel é trabalhar com uma variavel especialmente para controlar esse 'loop' (while)

sua condição de parada é: "fazer enquanto gallons for diferente de -1"

vamos cria uma outra variável para isso

que tal 'sair', hein?

exemplo:

int sair;

sair = 0;

while( sair != -1){ //seguindo sua logica, irá fazer enquanto sair for diferente de -1

........ // toda a sua logica continua igual!

printf("deseja sair? (digite -1 para confirmar)"); //pergunta fundamental, no final do while SEMPRE VEM NO FINAL DO WHILE

}

esse foi um exemplo de variavel 'bool' (booleana) que o amigo mensionou acima!

o seu while so não pára de imediato, porque não tem a pergunta fundamental no final do while

ou melhor, porque você n atualiza a variavel de condiçao de saida

e porque no final?

porque apos essa linha, a proxima é: } então o while retorna ao inicio e faz a pergunta:

while(sair != -1 ){ //sair é diferente de -1?

então sair deve estar atualizado com o valor -1, se quiser sair

ou com outro valor qlqr, se quiser continuar a rodar dentro do while

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --mauro --

meu problema e que eu não consigo fazer o laço de repetiaçao usando o while.. não sei oque estou fazendo de erado por favor me ajudem

int main()

{

int t,c;

char r;

c=0;

r='s';

while(r=='s')

{

printf("Digite um numero\n");

scanf("%d",&t);

while(c<=10)

{

printf("%d x %d=%d\n\n",t,c,t*c);

c++;

}system("pause");

printf("Deseja continuar s ou n");

scanf("%c",&r);

}

}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...