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

nennas

Erro no switch

Mensagens Recomendadas

nennas

Não percebo porque é que o programa me faz os dois cases do fim .

Será que alguem me pode ajudar.

  #include <stdio.h>
  #include <stdlib.h>
    int main()   
    {   
         int grau,estado,ponto,sentido,x,d,y,ponto1,var,n;
         scanf("%d",&grau);
       ponto = 0;
       estado = 0;
         do
                         { 
                                      sentido ++;
                                      x = (grau/720);
                                      d = (grau%720);
                                      if ((x>=1) && (d>=1))
                                         estado = estado + x;
                                          if ((x>=1) && (d>=1))
                                            ponto1=sentido+x;
                                          if (ponto1%2==0)
                                          ponto = ponto + ((grau/45)%8);
                                        else
                                          ponto = ponto - ((grau/45)%8);
                                       
                                                                               
                                      
                                       
                          scanf ("%d",&grau);
                          
                          }  while(grau != -1);                 
         
         if(sentido%2 ==0)
         printf("cw ");
         else
         printf("ccw ");
            if(estado%2 ==0)
         printf("Normal ");
         else
         printf("Tonto ");
        if (ponto > 0)
             {
              n=1;
                 if ((ponto/8 >0)&&(ponto%8 >=0)) 
                  var= (ponto%8);
                 else
                  var = ponto;
             }
             else
             if (ponto<0)
        {
             n=7;
             ponto= ponto +(2*ponto) ;
              if ((ponto/8 >0)&&(ponto%8 >=0)) 
                  var= (ponto%8);
                 else
                  var = ponto;
              
             }
         else
         ponto=0;
           switch (n)
           
           {
           case 1:{
           switch (var)
      {
      case 0 :
          printf("s");break;
      case 1 : 
          printf("sw");break ;
      case 2 :
           printf("w");break;
      case 3:
           printf("nw");break;
      case 4 :
            printf("n");break;
      case 5 :
            printf("ne");break;
      case 6 :
            printf("e");break;
      case 7 :
            printf("se");break;
     
      }}
      case 7:{
                 switch (var)
      {
      case 0 :
          printf("s");break;
      case 1 : 
          printf("se");break ;
      case 2 :
           printf("e");break;
      case 3:
           printf("ne");break;
      case 4 :
            printf("n");break;
      case 5 :
            printf("nw");break;
      case 6 :
            printf("w");break;
      case 7 :
            printf("s");break;
     
      }}
      }   
         
         
         
         getchar();  
         getchar();
         return 0;
         
         }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

Tomei a liberdade de te organizar um pouco o codigo, para se perceber melhor

Não andei a ver mt bem o que o teu programa faz, mas encontrei pelo menos um erro

E uma coisa que podes melhorar

Primeiro o codigo:

#include <stdio.h>
#include <stdlib.h>

int main()   
{
int grau,estado,ponto,sentido,x,d,y,ponto1,var,n;
scanf("%d",&grau);
ponto = 0;
estado = 0;
do
{ 
	sentido ++;
	x = (grau/720);
	d = (grau%720);
	if ((x>=1) && (d>=1))
		estado = estado + x;
	if ((x>=1) && (d>=1))
		ponto1=sentido+x;
	if (ponto1%2==0)
		ponto = ponto + ((grau/45)%8);
	else
		ponto = ponto - ((grau/45)%8);
                                       
	scanf ("%d",&grau);                     
}while(grau != -1);

if(sentido%2 ==0)
	printf("cw ");
else
	printf("ccw ");
if(estado%2 ==0)
	printf("Normal ");
else
	printf("Tonto ");
if (ponto > 0)
{
	n=1;
	if ((ponto/8 >0)&&(ponto%8 >=0)) 
		var= (ponto%8);
	else
		var = ponto;
}
else
	if (ponto<0)
        {
		n=7;
		ponto= ponto +(2*ponto) ;
		if ((ponto/8 >0)&&(ponto%8 >=0)) 
			var= (ponto%8);
		else
			var = ponto;
	}
	else
		ponto=0;
switch (n)
{
	case 1:
		switch (var)
		{
			case 0 :
				printf("s");break;
			case 1 : 
				printf("sw");break;
			case 2 :
				printf("w");break;
			case 3:
				printf("nw");break;
			case 4 :
				printf("n");break;
			case 5 :
				printf("ne");break;
			case 6 :
				printf("e");break;
			case 7 :
				printf("se");break;

		}
	case 7:
		switch (var)
		{
			case 0 :
				printf("s");break;
			case 1 : 
				printf("se");break;
			case 2 :
				printf("e");break;
			case 3:
				printf("ne");break;
			case 4 :
				printf("n");break;
			case 5 :
				printf("nw");break;
			case 6 :
				printf("w");break;
			case 7 :
				printf("s");break;

		}
		   
}
getchar();  
getchar();
return 0;     
}

Segundo, a variavel 'sentido' está a ser incrementada quando nunca foi definida. Define um valor para ela primeiro, ou inicializa-a com o valor que queres, antes de incrementares

Terceiro, não percebi bem o que se passa de errado com os teus switches, podes explicar melhor?

Espero resposta :thumbsup:


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

Pois por acaso aquele do sentido não ter sido inicializado a zero pode dar problemas. Mas no fim os dois switch se reparares não são iguais .

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

desculpa em relação a isso, já modifiquei o post :thumbsup:

estou bastante distraido...

não iria funcionar, eu corri o programa...

já agora contextualiza-me... que eh suposto o teu programa fazer?

eu posso ver o teu codigo mas seria-me mais facil se me dissesses...


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

14766055.jpg

Esta aqui um print que eu tirei ao problema. Se quizeres um exemplo do imput e output dix que eu ponho ai esta bem.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

programa engraçado xD

diz-me la então que está de errado na tua solução?

EDIT: eu estou mt cansado e doente hoje, espero conseguir ajudar seja como for, mas n consigo estar a pensar em algoritmos agora

mas se for um erro especifico posso-te ajudar e resolver tb

espero resposta


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

Prontos ver se esta tonto ou não é facil e esta a dar bem depois aquilo de ver se cw ou ccw esta bem. So quando vai a dizer norte (n) sul (s) faz os dois cases por exemplo faz de conta que a resposta certa era este (e) em vez de aparecer E não, aparece WE (faz os dois case).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

ah provavelmente basta meteres break; no case 1 do switch(n)

ou seja:

switch (n)
        {
                case 1:
                        switch (var)
                        {
                                case 0 :
                                        printf("s");break;
                                case 1 : 
                                        printf("sw");break;
                                case 2 :
                                        printf("w");break;
                                case 3:
                                        printf("nw");break;
                                case 4 :
                                        printf("n");break;
                                case 5 :
                                        printf("ne");break;
                                case 6 :
                                        printf("e");break;
                                case 7 :
                                        printf("se");break;

                        }
                break;  //faltava este break aqui...
                case 7:
                        switch (var)
                        {
                                case 0 :
                                        printf("s");break;
                                case 1 : 
                                        printf("se");break;
                                case 2 :
                                        printf("e");break;
                                case 3:
                                        printf("ne");break;
                                case 4 :
                                        printf("n");break;
                                case 5 :
                                        printf("nw");break;
                                case 6 :
                                        printf("w");break;
                                case 7 :
                                        printf("s");break;

                        }
                           
        }

veh se isto resolve


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

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.