Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Ruka284

Programa divisão

Mensagens Recomendadas

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();
 }


Editado por Ruka284
Correcção das tags CODE

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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();
  }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.