Jump to content
Sign in to follow this  
Dar3_D3vil

Help is needed

Recommended Posts

Dar3_D3vil

Um ângulo é medido em termos de graus (º) minutos(´) e de segundos(“). Desenvolva um programa que efectue a leitura de dois ângulos positivos e calcule a respectiva soma. Descreva o algoritmo que vai utilizar na soma dos ângulos.

Exemplo: 5º 54’ 10” + 6º 2’ 51” = 11º 57’ 1”

N sei pk mas n sai do ciclo :S Se virem o erro agradecia k me explicaxem.

Obrigadao e desculpem.

Ja é o segundo hj.

Este é o codigo:

/* somador de graus */

#include <stdio.h>

int main (void) {

int g1;
int g2;
int m1;
int m2;
float s1;
float s2;
int g;
int m;
float s;
int i;
int j;


printf("Introduza o valor dos graus do primeiro angulo\n");
scanf("%d",&g1);
printf("Introduza o valor dos graus do segundo angulo\n");
scanf("%d",&g2);

printf("Introduza o valor dos minutos do primeiro angulo\n");
scanf("%d",&m1);
printf("Introduza o valor dos minutos do segundo angulo\n");
scanf("%d",&m2);

printf("Introduza o valor dos segundos do primeiro angulo\n");
scanf("%f",&s1);
printf("Introduza o valor dos segundos do segundo angulo\n");
scanf("%f",&s2);

s = s1 +s2;
while (s >= 60) {
	s - 60;
	i++;
}
m = m1 + m2 + i;
while (m >= 60) {
	m - 60;
	j++;
}
g = g1 + g2 + j;

printf(" A soma dos ângulos é %dº %d' %f''\n", g, m, s);
return 0;
}

Share this post


Link to post
Share on other sites
Dabubble

s = s1 +s2; 
  while (s >= 60) { 
     s - 60; 
     i++; 
  } 

Nao esta a fazer atribuicao da variavel....

nao é:

s - 60;

quando fazes isto nao esta a fazer uma atribuição

é:

s= s- 60;

porranto o ciclo fica:

s = s1 +s2; 
  while (s >= 60) { 
     s = s - 60; 
     i++; 
  } 

e repetes o mesmo para o ciclo seguinte

nao testei o resto do algoritmo mas o problema da condicao do while e este

Share this post


Link to post
Share on other sites
Gurzi

desculpem a ignorancia mas como é que Exemplo: 5º 54’ 10” + 6º 2’ 51” = 11º 57’ 1”

dá esse valor?

Share this post


Link to post
Share on other sites
Dabubble

gurzi somas da esquerda para a direita tendo em atencao que o numero maximo e 59 (0-59 = 60 segundos).

assim 10 + 51 = 61 > 59 portanto = 01

passa uma unidade para os minutos que ficam

54 + 02 + 1 = 57

e finalmente os graus 6 + 5 = 11.

no final 11º 57' 1''

Share this post


Link to post
Share on other sites
redhat

/* somador de graus */ 

#include <stdio.h> 

typedef struct
{
int graus;
int minutos;
int segundos;
} ANGULO;

int main (void) { 

  ANGULO a;
  ANGULO b;
  ANGULO c;

  printf("Introduza o valor dos graus do primeiro angulo\n"); 
  scanf(" %d",&a.graus); 
  printf("Introduza o valor dos graus do segundo angulo\n"); 
  scanf(" %d",&b.graus); 

  printf("Introduza o valor dos minutos do primeiro angulo\n"); 
  scanf(" %d",&a.minutos); 
  printf("Introduza o valor dos minutos do segundo angulo\n"); 
  scanf(" %d",&b.minutos); 

  printf("Introduza o valor dos segundos do primeiro angulo\n"); 
  scanf(" %d",&a.segundos); 
  printf("Introduza o valor dos segundos do segundo angulo\n"); 
  scanf(" %d",&b.segundos); 


  if((a.segundos + b.segundos) >= 60)
  {
c.segundos = (a.segundos+b.segundos) - 60;
c.minutos = 1;
  }

else

   c.segundos = a.segundos + b.segundos;

  if((a.minutos+b.minutos+c.minutos) >= 60)
  {
c.minutos = (a.minutos + b.minutos + c.minutos) - 60;
c.graus = 1;
  }
else

   c.minutos = a.minutos + b.minutos + c.minutos;

  c.graus = c.graus + b.graus + a.graus;

  printf(" A soma dos angulos e' %do %dm %ds \n", c.graus, c.minutos, c.segundos); 
  return 0; 
} 

e mais n digo... o redhat fala pouco mas qdo fala, fala a serio

testado com as flags -Wall ;)


Software is like sex... it's better when it's free

in the old days

P@P "C" && "Linux" Moderator

Share this post


Link to post
Share on other sites
jarsantos

#include <stdio.h>

typedef struct
{
  int graus;
  int minutos;
  int segundos;
} ANGULO; 

int main(){

int i, seg_totais=0, min_totais=0, graus_totais=0;
ANGULO angulos[2];
ANGULO novo_angulo;

for(i=0;i<2;i++){
	printf("Introduza o valor em graus do %dº angulo\n",i+1);
	scanf("%d",&angulos[i].graus);
	printf("Introduza o valor em minutos do %dº angulo\n",i+1);
	scanf("%d",&angulos[i].minutos);
	printf("Introduza o valor em segundos do %dº angulo\n",i+1);
	scanf("%d",&angulos[i].segundos);
}

for(i=0;i<2;i++){
	seg_totais += angulos[i].segundos;
	min_totais += angulos[i].minutos;
	graus_totais += angulos[i].graus;
}

novo_angulo.segundos = seg_totais%60;
novo_angulo.minutos = (min_totais+seg_totais/60)%60;
novo_angulo.graus = (graus_totais+(min_totais+seg_totais/60)/60)%360;

printf("A soma dos ângulos é %dº %d' %d''\n", novo_angulo.graus, novo_angulo.minutos, novo_angulo.segundos); 
return 0;
}

acho que assim o código fica mais curto.

Share this post


Link to post
Share on other sites
jarsantos

Só para relembrar o pessoal que quando querem ter uma especie de array em anel, isto é, recomeçar quando chega ao fim devem/podem utilizar o resto da divisão que faz a passagem automaticamente. Tem o exemplo de cima que foi testado e funciona.

Share this post


Link to post
Share on other sites
redhat

nunca me dei bem com esses %60 e %360 que puseste... =) mas sim, funciona =)


Software is like sex... it's better when it's free

in the old days

P@P "C" && "Linux" Moderator

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
Sign in to follow this  

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