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

nennas

Erro no switch

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 .

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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).

Share this post


Link to post
Share on other 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

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.