Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Ruka284

Programa divisão

Recommended Posts

Ruka284

Aqui mais um programa feito e testado

O que podia melhorar ??


#include<stdio.h>
#include<conio.h>

/* Programa 17: Programa Divisão */
/* Autor: Marco Vital */
/*Data: 16/01/2013 */
main()
{
 float num1,num2,resultado;


 printf("\n Programa Divisao \n");

 printf("Introduzir o primeiro numero\n");
 scanf("%f",&num1);
 printf("Introduzir o segundo numero\n");
 scanf("%f",&num2);

 if (num2 == 0)
 {
 printf("inderterminação");
 }
 resultado=num1/num2;
 printf("%f",resultado);

 getch();
 }


Edited by Ruka284
Correcção das tags CODE

Share this post


Link to post
Share on other sites
thoga31

Executa o programa e introduz, no segundo valor, zero. Vais ver que de nada te serviu esse if. Tens de o estruturar como deve ser.


Knowledge is free!

Share this post


Link to post
Share on other sites
HappyHippyHippo

1- indentação

2- o protótipo da função main é uma das duas seguintes:

int main()

int main(int argc, char ** argv)

e como vês, deverá existir um valor de retorno

3- usa a função getchar em vez de getch, a segunda faz parte do ncurses e não do stdio

4- usa double em vez de float, os processadores possuem hardware para fazer contas mais rápido dessa forma

5- um valor 0 de virgula flutuante não quer dizer que seja realmente zero, o melhor usares uma verificação melhor


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pikax

primeiro o conio.h nao e' necessario, se nao utilizares o getch(), usa antes um scanf.

segundo nao tens o tipo na main, tens que meter int main

terceiro falta-te o return no main.

quarto tens que fazer verificacao se o numero e' valido!

quinto tens que verificar se o utlizador inseriu um numero, caso se insira uma letra o programa nao funciona.

O que queres mais melhorar? em termos de tamanho??


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Ruka284

Executa o programa e introduz, no segundo valor, zero. Vais ver que de nada te serviu esse if. Tens de o estruturar como deve ser.

Boas.

Eu fiz como tinha feito no papel em algoritmo.

Fiz if para senão der certo a conta sair uma mensagem de erro

1- indentação

2- o protótipo da função main é uma das duas seguintes:

int main()

int main(int argc, char ** argv)

e como vês, deverá existir um valor de retorno

3- usa a função getchar em vez de getch, a segunda faz parte do ncurses e não do stdio

4- usa double em vez de float, os processadores possuem hardware para fazer contas mais rápido dessa forma

5- um valor 0 de virgula flutuante não quer dizer que seja realmente zero, o melhor usares uma verificação melhor

1- indentação

2- o protótipo da função main é uma das duas seguintes:

int main()

int main(int argc, char ** argv)

e como vês, deverá existir um valor de retorno

3- usa a função getchar em vez de getch, a segunda faz parte do ncurses e não do stdio

4- usa double em vez de float, os processadores possuem hardware para fazer contas mais rápido dessa forma

5- um valor 0 de virgula flutuante não quer dizer que seja realmente zero, o melhor usares uma verificação melhor

Getchar não precisa de biblioteca ??

ao meter o double o programa fica mais pesado devido aos bytes

primeiro o conio.h nao e' necessario, se nao utilizares o getch(), usa antes um scanf.

segundo nao tens o tipo na main, tens que meter int main

terceiro falta-te o return no main.

quarto tens que fazer verificacao se o numero e' valido!

quinto tens que verificar se o utlizador inseriu um numero, caso se insira uma letra o programa nao funciona.

O que queres mais melhorar? em termos de tamanho??

não tenho posto int main, so tenho feito com main, sabes explicar qual a diferença na prestação do programa.

o que queres dizer se o numero e válido?

Para não aceitar numeros tenho de fazer sintaxe, if e printf dizer que não aceita letras.

tamanho esta bom

Share this post


Link to post
Share on other sites
thoga31

Boas.

Eu fiz como tinha feito no papel em algoritmo.

Fiz if para senão der certo a conta sair uma mensagem de erro

Se leres bem o teu código, o que acontece é isto: mostra a mensagem de erro e depois tenta calcular num1/num2. Isto está correcto? Não. Não devia calcular neste caso.

Getchar não precisa de biblioteca ??

Quem disse isso? Claro que precisa!

ao meter o double o programa fica mais pesado devido aos bytes

O programa é assim tão grande? Meia dúzia de bytes em nome de uma melhor computação não é propriamente um problema.


Knowledge is free!

Share this post


Link to post
Share on other sites
eatg75

(...)

2- o protótipo da função main é uma das duas seguintes:

int main()

int main(int argc, char ** argv)

Desde a standarizacao do C ate hoje (nao sei ao respeito do C11) uma funcao pode ser definido sem um valor de retorno pois implicitamente e como se ele retornase um inteiro. Com o C++ tambem e a mesma coisa! Apenas no novo standard do C++ (C++11) e que e obrigatorio definir explicitamente o valor de retorno de uma funcao.


Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Share this post


Link to post
Share on other sites
Ruka284

Se leres bem o teu código, o que acontece é isto: mostra a mensagem de erro e depois tenta calcular num1/num2. Isto está correcto? Não. Não devia calcular neste caso.

Quem disse isso? Claro que precisa!

O programa é assim tão grande? Meia dúzia de bytes em nome de uma melhor computação não é propriamente um problema.

o que eu faço e o seguinte.

mando introduzir os numeros, depois se o valor der 0 manda dizer erro ou inderterminação senão faz o calculo e manda o resultado.

qual e a biblioteca para getchar?

qual a diferença entre getchar e getch?

Share this post


Link to post
Share on other sites
thoga31

o que eu faço e o seguinte.

mando introduzir os numeros, depois se o valor der 0 manda dizer erro ou inderterminação senão faz o calculo e manda o resultado.

Não, não fazes. Vê esta parte do teu código, e diz-me onde está o else.

        if (num2 == 0)
        {
        printf("inderterminação");
        }
        resultado=num1/num2;
        printf("%f",resultado);


Knowledge is free!

Share this post


Link to post
Share on other sites
HappyHippyHippo

Eu fiz como tinha feito no papel em algoritmo.

ainda bem

Fiz if para senão der certo a conta sair uma mensagem de erro

pois, mas como te disse, uma variável de virgula flutuante nem sempre corresponde a um valor exacto que tu queiras, pode ser somente um valor aproximado

Getchar não precisa de biblioteca ??

tanto como o getch, no entanto o getchar é mais suportado por diferentes ambientes

ao meter o double o programa fica mais pesado devido aos bytes

mais pesado mas mais rápido

agora vamos relativizar:

float = 4 bytes

double = 8 bytes

agora diz-me quantos bytes tens de disco e quantos bytes tens de memória ?

não tenho posto int main, so tenho feito com main, sabes explicar qual a diferença na prestação do programa.

não tem haver com prestação do programa, mas sim com a declaração standard da função.

o visual studio é que lhe deu na cabeça ignorar o que deveria ser feito

o que queres dizer se o numero e válido?

experimente escrever letras em vez de números

Para não aceitar numeros tenho de fazer sintaxe, if e printf dizer que não aceita letras.

é bem mais do que isso, necessitas de pedir novamente o valor ao utilizador

tamanho esta bom

não não está, para fazer correctamente necessita de crescer um bocadito

Desde a standarizacao do C ate hoje (nao sei ao respeito do C11) uma funcao pode ser definido sem um valor de retorno pois implicitamente e como se ele retornase um inteiro. Com o C++ tambem e a mesma coisa! Apenas no novo standard do C++ (C++11) e que e obrigatorio definir explicitamente o valor de retorno de uma funcao.

c99 : http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf

5.1.2.2.1 Program startup

1

The function called at program startup is named main. The implementation declares no

prototype for this function. It shall be defined with a return type of int and with no

parameters:

int main(void) { /* ... */ }

or with two parameters (referred to here as argc and argv, though any names may be

used, as they are local to the function in which they are declared):

int main(int argc, char *argv[]) { /* ... */ }

or equivalent;9) or in some other implementation-defined manner.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Ruka284

Não, não fazes. Vê esta parte do teu código, e diz-me onde está o else.

	 if (num2 == 0)
	 {
	 printf("inderterminação");
	 }
	 resultado=num1/num2;
	 printf("%f",resultado);

Ja fiz umas alterações


#include<stdio.h>
#include<conio.h>

/* Programa 17: Programa Divisão */
/* Autor: Marco Vital */
/*Data: 16/01/2013 */
int main()
{
  float num1,num2,resultado;


  printf("\n Programa Divisao \n");

  printf("Introduzir o primeiro numero\n");
  scanf("%f",&num1);
  printf("Introduzir o segundo numero\n");
  scanf("%f",&num2);

  if (num2 == 0)
  {
  printf("inderterminação");
  }
  else
  {
  resultado=num1/num2;
  printf("o resultado e= %f",resultado);
  }
  getchar();
  }

Share this post


Link to post
Share on other sites
thoga31

Ja fiz umas alterações

Uma alteração, queres tu dizer. Ainda te falta muita coisa.

btw, colocaste int main, mas onde está o valor de retorno da função?


Knowledge is free!

Share this post


Link to post
Share on other sites
HappyHippyHippo

continua porque ainda falta alterar muitas recomendações, assim como olhar para as mensagens de warning/erro do compilador


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Ruka284

continua porque ainda falta alterar muitas recomendações, assim como olhar para as mensagens de warning/erro do compilador

O compilador não dá erro, é ja testei o programa e funciona.

Essa do returno do int main e que ainda não percebi, qual a sua função

Share this post


Link to post
Share on other sites
HappyHippyHippo

O compilador não dá erro, é ja testei o programa e funciona.

eu não disse que não funcionava, disse que alguma mensagem deverá aparecer porque falta claramente o valor de retorno do main

Essa do returno do int main e que ainda não percebi, qual a sua função

se estás a dizer que a função devolve um valor e depois não devolves nada, algo bate errado.

para que serve ? um misto de legacy e inércia


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Ruka284

eu não disse que não funcionava, disse que alguma mensagem deverá aparecer porque falta claramente o valor de retorno do main

se estás a dizer que a função devolve um valor e depois não devolves nada, algo bate errado.

para que serve ? um misto de legacy e inércia

qual o valor do main que tenho de fazer retorno, qual a sintaxe?

quando o valor da-me 0, apareçe o erro.

Share this post


Link to post
Share on other sites
pikax
Desde a standarizacao do C ate hoje (nao sei ao respeito do C11) uma funcao pode ser definido sem um valor de retorno pois implicitamente e como se ele retornase um inteiro. Com o C++ tambem e a mesma coisa! Apenas no novo standard do C++ (C++11) e que e obrigatorio definir explicitamente o valor de retorno de uma funcao.

C e C++ sao diferentes. compilei o codigo com a flag -Wall e da-me estes warnings:

 warning: return type defaults to 'int' [-Wreturn-type]
In function 'main':
warning: control reaches end of non-void function [-Wreturn-type]


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
brunoais

O valor de retorno identifica "como" é que o programa correu.

Se retornar 0, então tudo correu corretamente.

Se retornar qq outro inteiro, então algo correu mal.

Se o teu programa retorna algo diferente de 0, cabe a ti especificar o seu significado.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
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

×

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.