Jump to content
thranduil

Exercício do "linguagem c"

Recommended Posts

thranduil

bom.. dei-me aqui com um problema que acho que alguem me deve poder ajudar. nao quero que me escrevam o codigo. so que me ajudem a intrepertar o problema para ver se eu o percebo porque nao entendi  que o homem queria dizer :S. bom, aqui vai:

pag. 191 ex. 5.

Citação
Implemente a seguinte funçao

float val(float x, int n, float t)

  devolve o val (valor actual liquido) para n anos, a*acento* taxa t e e*acento* definido atraves da seguinte formula:

  val=x/(1+t) + x/(1+t)^2 + x/(1+t)^3 + ...... + x/(1+t)^n

Sugestao: utilize a funçao pot, implementada anteriormente (exercicios resolvidos)

pag. 183 (funçao pot)

Citação

Implemente a funçao

float pot(float x, int n)

  devolve o valor de x^n

      x^0 = 1.0

      x^n = x*........*x (n vezes)


float pot(float x, int n){
  float res;
  int i;

  for (i=1,res=1.0 ; i<=n ; i++)
      res*=x;
  return res;

}

main(){
  printf("%f %f %f",pot(2.0,4), pot(1.234,3), pot(3.0,0);
}

 

se alguem me puder ajudar agradecia muito :)

e desculpem a confusao dos acentos :S

-------------

e ja agora, como e que se poe o codigo para aparecer formatado nas cores como aparece, por exemplo, no php mas numa versao c?

Share this post


Link to post
Share on other sites
thranduil

pelos vistos ninguem respondeu aquele exercicio... mas pronto. agora tenho ainda outra duvida, dois exercicios a frente :)

no exercicio 7 ele pede-nos para fazermos um programa que adquira um numero de horas e um tipo de representaçao e que depois faça a converçao de horas para horas,minutos ou segundos. e temos que o fazer com uma funçao, de 3 maneiras diferentes: switch com break, switch sem break e if-else. bom, o programa que eu fiz foi este:

#include <stdio.h>

/* switch sem break
long int num(int n_horas, char tipo){
   switch(tipo){
      case 's': n_horas*=60;
      case 'm': n_horas*=60;
      case 'h': n_horas*=1;
   }
   return n_horas;
}
*/

/* switch com break
long int num(int n_horas, char tipo){
   switch(tipo){
      case 'h': n_horas*=1; break;
      case 'm': n_horas*=60; break;
      case 's': n_horas*=3600; break;
   }
   return n_horas;
}
*/

/* if-else
long int num(int n_horas, char tipo){
   if(tipo='h')
      return n_horas*1;
   else
      if(tipo='m')
         return n_horas*60;
      else
         if(tipo='s')
            return (n_horas*3600);
}
*/

main(){
   int n_horas;
   char tipo;

   printf("Insira um numero de horas e um modo de representaçao:");
   scanf("%d %c",&n_horas, &tipo);

   printf("%d h ---> %ld %c",n_horas,num(n_horas,tipo),tipo);
   getchar();
   getchar();
}

o meu problema e que quando eu peço o modo de representaçao, o programa deve aceita-lo como sendo o enter ou o espaço do numero de horas e passa isso a frente. logo a funçao vai dar sempre o default.. se alguem me pude-se ajudar agradecia ;)

edit: ja mudei o codigo para funcar direito :D

edit2: mudei o codigo porque troquei, na funçao de switch sem break, as horas pelos segundos

Share this post


Link to post
Share on other sites
deathseeker25

Exacto está tudo muito bem menos o problema do modo de representação.

Tambem tive problemas parecidos a resolver um desses exercícios e consegui resolvê-los.Como disseste, o programa quando pedes um caracter está a ler o <enter> ou o <space>, logo visto que não é um dos caracteres que entra no ciclo sai do programa ou mostra e default.

Experimenta dar um espaço entre o "%" e o "c" no local onde está "%c".

Acho que a resolução é essa apesar de não ter a certeza. Vou investigar melhor no entanto confirma isso.

Cumps

Share this post


Link to post
Share on other sites
MaXiMuS
Experimenta dar um espaço entre o "%" e o "c" no local onde está "%c".

quase correcto..  :) então já se esqueceram do que leram umas 100 páginas  atrás?  ;)

o espaço é antes do %c, não entre  :roll:

Share this post


Link to post
Share on other sites
deathseeker25
Experimenta dar um espaço entre o "%" e o "c" no local onde está "%c".

quase correcto..  :) então já se esqueceram do que leram umas 100 páginas  atrás?  ;)

o espaço é antes do %c, não entre  :roll:

Exactamente...estive a rever umas páginas e é isso mesmo. ;)

Share this post


Link to post
Share on other sites
thranduil

sim eu lembro-me disso. mas se repararem bem isso esta la. eu ate adicionei varios espaços para ver se funcava mas nada...

edit: pois.. nao sei porque mas agora funcou, porque tirei os espaços a mais que la tinha :)

edit2: hmmm continua a haver algo mal no switch sem break. mesmo depois de trocar os segundos e as horas, aquilo nao me esta a mandar o 'h' para o sitio dele. esta a contar desde o inicio... :S

edit3: bem.. aquilo umas vezes sai bem outras nao.. deixem la ;)

edit4  8) : o if-else esta a mandar-me sempre o valor das horas... ja escrevi

long int num(int n_horas, char tipo){
   if(tipo='h')
      n_horas*=1;
   else
      if(tipo='m')
         n_horas*=60;
      else
         if(tipo='s')
            n_horas*=60;

   return n_horas;
}

e tambem ja experimentei o que esta no post acima mas mesmo assim de nenhuma das maneiras funcou.. tenho que abrir parentesis rectos ou assim??? :S

Share this post


Link to post
Share on other sites
deathseeker25

Não é parentesis rectos é chavetas ('[]'!='{') :o

Experimenta abrindo chavetas que pode ser que dê.... :roll:

Share this post


Link to post
Share on other sites
MaXiMuS
sim eu lembro-me disso. mas se repararem bem isso esta la. eu ate adicionei varios espaços para ver se funcava mas nada...

qdo for assim sempre podes usar o fflush(stdin)  ;)

Share this post


Link to post
Share on other sites
thranduil

sim eu sei que e chavetas.. confundi :)

mas tento isso do fflush para o if-else? :S nao percebi..

Share this post


Link to post
Share on other sites
MaXiMuS

em vez do espaço, que dizes s vezes dar problemas, podes usar a função fflush(stdin) para limpar o buffer do teclado

printf("introduza 1: ");
scanf("%d",&a);
fflush(stdin);
printf("introduza 2: ");
scanf("%d",&b);

Share this post


Link to post
Share on other sites
thranduil

mas a duvida ja nao e essa :P para isso ja solucionei o problema :P a duvida ta que o if-else nao funciona...

Share this post


Link to post
Share on other sites
deathseeker25
mas a duvida ja nao e essa :P para isso ja solucionei o problema :P a duvida ta que o if-else nao funciona...

Experimenta retirar os "else" e coloca apenas if em cada uma das condições.

long int num(int n_horas, char tipo){
   if(tipo='h'|| tipo='H')
      n_horas*=1;

      if(tipo='m'|| tipo='M')
         n_horas*=60;
      
        if(tipo='s'|| tipo='S')
            n_horas*=60;

   return n_horas;
}

Alem de que coloquei tambem a letra maiuscula correspondente visto que o utilizador pode ter o CAPS LOCK ligado quando responde.... :D

Share this post


Link to post
Share on other sites
SLider3

o if-else não funcionava provavelmente porque te faltavam { }.

long int num(int n_horas, char tipo){
   if(tipo='h')
      n_horas*=1;
   else {
      if(tipo='m')
         n_horas*=60;
      else {
         if(tipo='s')
            n_horas*=60;
      }
   }

   return n_horas;
}

De qualquer modo este código devia ser substituido por um switch.

Share this post


Link to post
Share on other sites
thranduil

slider tambem suspeitava que o problema era esse. mas o desafio do problema e que tem que ser feito com if-else, switch com break e switch sem break...

Share this post


Link to post
Share on other sites
deathseeker25
nao. o problema mantem-se...

Assim funciona na perfeição:

#include <stdio.h>


long int num(int n_horas, char tipo){
   if(tipo=='h'|| tipo=='H'){
      n_horas*=1;
}
      if(tipo=='m'|| tipo=='M'){
         n_horas*=60;
         }
        if(tipo=='s'|| tipo=='S'){
            n_horas*=60;
}
   return n_horas;
}

main(){
   int n_horas;
   char tipo;

   printf("Insira um numero de horas e um modo de representaçao:");
   scanf("%d %c",&n_horas, &tipo);

   printf("%d h ---> %ld %c\n",n_horas,num(n_horas,tipo),tipo);
  system("PAUSE"); 
  
}

As alterações que fiz são mais que visíveis. São poucas mas funcionam.

Cumps

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

×
×
  • 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.