Jump to content

(Programa) Calculadora de passagens


Mr.Henrique
 Share

Recommended Posts

galera sou novo na area de programação e criei esse programa simples só que eu quero dar uma perfumada nele(Colocar os acentos) só que ão estou conseguindo colocar os acentos e nem o Ç.

#include<stdio.h>
main(){
    float pp,v,d,total;
    printf("***************************\n* Calculadora de passagem *\n***************************");
    printf("\nInforme o numero de viagens \n");
    scanf("%f",&pp);
    printf("Informe o preço da passagem\n");
    scanf("%f",&v);
    printf("Informe se a passagem teve desconto\n");
    scanf("%f",&d);
    total=pp*(v-v*d/100);
    printf("você gastou \nR$ %2.f \n\n",total);
    return main ();
    }

espero que vocês me ajudam.

e mais uma pergunta não tem nenhuma biblioteca que coloca os acentos automáticos ?

Edited by thoga31
Tags code + GeSHi
Link to comment
Share on other sites

Deves estar a programar em Windows. A linha de comandos do Windows usa uma configuração de caracteres arcaica onde tudo o que é acentos e cedilhas devem ser colocados à mão, ou seja, indicando directamente o caracter da tabela ASCII.

Mas antes disso, que não é o mais prioritário, tens de dar umas correcções no teu programa:

main(){

Não se declara correctamente o main desta forma. Apesar de o compilador aceitar, deve-se sempre usar uma de duas formas, sendo esta a mais compacta e essencial:

int main(void) {

return main ();

O que é isto? Retornar o main?

Tendo em conta que o main deve ser do tipo int, este deverá ser o seu retorno:

return 0;

Knowledge is free!

Link to comment
Share on other sites

só que seu eu coloco o

return 0;

ele não volta o programa novamente você saberia me explicar pq ele não volta e eu colocando

return main (); 

ele volta

Meu copilador é o DEV C++

Outra duvida que eu tenho pq o modo mais correto é esse int main(void) {

que tipo de problema ele pode me dar mais pra frente em algum programa ?

Link to comment
Share on other sites

O Sistema Operativo (OS) recebe um valor dos programas quando eles acabam a sua execução. Os sistemas Unix devem ser dos que mais usam estes dados. Este valor indica se o programa terminou com sucesso ou não. Quando o sistema recebe 0, então tudo correu bem. Um outro valor indica erro, e para cada valor existe um erro associado.

Desta forma, é uma boa prática usar int main(void) por dois motivos: int enquanto tipo de retorno do main uma vez que temos de devolver um valor ao OS, e void pois é aconselhável indicar explicitamente que não há nenhum argumento. Se o void existe é por algum motivo, e é para ser usado.

Quanto ao return 0, já expliquei: é o valor de retorno para o OS a indicar sucesso.

Mas agora temos o teu caso em que queres que o programa reinicie.

Primeiro, podes chamar o main sem nenhum return - o return obriga à devolução de um valor, e, no teu código, de cada vez que o programa recomeça, há um acumular de valores de retorno para o OS em que apenas o último de todos é enviado. Brilhantemente, neste caso, o valor é nada uma vez que main() equivale a void main(void) - não é uma boa prática enviar nada ao OS.

Mais, tu tens um problema: tens um programa que nunca termina a não ser que feches a janela. Isto não se faz. O programa deve ter obrigatoriamente uma forma de acabar por si mesmo. Portanto, se queres que o utilizador volte a inserir dados, usas uma estrutura de reptição, aka ciclo. Por exemplo:

int main(void) {
  short opcao = 1;
  do {
     // o teu código...
     printf("Recomecar? (0=nao, 1=sim) ");
     scanf("%h", &opcao);
  } while (opcao != 0);
  return 0;
}
Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

hmm tendi

o que você quer dizer ...

mais não entendi o codigo

tipo

primeira linha

printf("Recomecar? (0=não, 1=sim)"); 

esse comando dessa linha vai mostrar para o usuario e vai pedir para o usuario escolher uma das opções

2° Linha

 scanf ("%h"), &opcao);

aqui eu não sei o que seguinifica o %h .... depois &opcao quer dizer o endereço correto ?

3° linha

eu não entendi o que ela faz

e tambem quero saber aonde esta o comando do 1= sim ?

e tambem aonde eu coloco o codigo no final, meio o no inicio ?

sou meio novo no assunto então quero tirar todas as duvidas e explorar bem o codigo para aprender o mais rapido possivel kkkkk

Link to comment
Share on other sites

primeira linha

printf("Recomecar? (0=não, 1=sim)"); 

esse comando dessa linha vai mostrar para o usuario e vai pedir para o usuario escolher uma das opções

Sim, vai mostrar no ecrã a mensagem "Recomecar? (0=nao, 1=sim)".

2° Linha

 scanf ("%h"), &opcao);

aqui eu não sei o que seguinifica o %h .... depois &opcao quer dizer o endereço correto ?

Já estudaste bem o scanf? Porque é que tu usaste %f nos teus scanf's? E no teu printf? 😉

O primeiro argumento indica o tipo de dados que vai ser lido - neste caso, %h indica que é uma variável do tipo short. O &opcao é o mesmo que os teus scanf's - o queé passado ao scanf é o endereço da variável.

3° linha

eu não entendi o que ela faz

Tens de estudar estruturas de controlo:

  • Estruturas de decisão
    • If-Else
    • Switch

    [*]Estruturas de repetição

    • for( ; ; )
    • while () do
    • do { } while ()

Procura acerca desse assunto.

e tambem quero saber aonde esta o comando do 1= sim ?

Eu simplifiquei imenso o exemplo. Se eu quero apenas 0 ou 1, convém controlar isso, mas eu não controlei. O importante ali é a estrutura de repetição do-while para controlar o fluxo do programa para não usar uma chamada do main.

e tambem aonde eu coloco o codigo no final, meio o no inicio ?

Está ali um comentário a dizer "o teu código". É aí que se coloca. Tens é de perceber porquê, e para isso tens de estudar as estruturas de controlo.

sou meio novo no assunto então quero tirar todas as duvidas e explorar bem o codigo para aprender o mais rapido possivel kkkkk

Como és novo, segue este meu conselho religiosamente: mais vale devagar e bem do que depressa e mal.

Já conheci vários iniciados que começaram a aprender depressa e achavam-se génios da programação, mas os códigos deles eram de bradar aos céus de tão horríveis que eram.

Prefere sempre aprender bem do que aprender depressa, ok? 😉

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

eu não posso fazer isso né ?


#include<stdio.h>
main(){
  float p,rc,d;
  char rp;
  printf("preco do produto: ");
  scanf("%f",&p);
  prinf("o produto teve desconto?\n ");
  scanf("%s",&rp);
  switch ( toupper (s)){
     case 'S' : Printf ("informe o valor do desconto: ");
     scanf("%f",&d);
     rc=p-p*d/100;
     printf("Valor a ser pago R$ %f ",rc);
     case 'n' : printf ("Valor a ser pago R$ %f ",p);
    }   
     system("pause");
     }

para eu fazer isso deveria usar o If ?

Edited by thoga31
GeSHi
Link to comment
Share on other sites

eu não posso fazer isso né ?

Também não sei ao que te referes, mas há várias coisas que não podes fazer... Alguns exemplos:

char rp;
// ...
scanf("%s",&rp);  // what?

switch ( toupper (s))  // Chegou Deus e disse, "crie-se um 's'", e ele apareceu.

switch ( toupper (s)){
  case 'S' : Printf ("informe o valor do desconto: ");
     scanf("%f",&d);
     rc=p-p*d/100;
     printf("Valor a ser pago R$ %f ",rc);
                                             // e como não ficamos por aqui...
  case 'n' : printf ("Valor a ser pago R$ %f ",p);  // ...isto também será executado para o "case 'S'".
}

main()  // O Damas pode apresentar esta forma de declarar o main, mas não é, de longe, a mais correcta.

scanf("%f",&p);
scanf("%s",&rp);  // E o buffer vai acumulando lixo que não é limpo...
scanf("%f",&d);

Knowledge is free!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.