Ir ao conteúdo

Posts recomendados

Postado

Estou num curso de informática e agora o professor de programação começou a dar matéria nova que envolve o switch case, if, while tudo no mesmo programa de linguagem C.

 

O problema está que não acho nenhuma informação em relação a isso.

O exercício é algo assim:

#include <stdio.h>
main (){

    setvbuf (stdout,NULL,_IONBF,0);

    int num1, mum2;

    while (op!=0){
       inserir aqui um menu, que se vai repetir até inserir o número 0
        printf ("Insira uma opção\n");
        scanf ("%d", &op);
        if(op!=0){
            printf ("Insira o primeiro número\n");
            scanf ("%f", &num1);
            printf ("Insira o segundo número\n");
            scanf ("%f", &num2);
        }
        switch (op){
        case 1 : instruções
            break;

        case 2 :
           instruções
            break;

        case 0 :
            printf ("Sair");
            break;

        default:
            printf("\nInválido");
        }
    }
}

 

 

Postado

Aconselho sempre refazer o código, para atingir uma maior qualidade e organização do código, dando uma maior performance e descartando as futilidades que venham a confundir posteriormente, enfim, seu código ta apenas com alguns errinhos, mas uma ajustada e fica show. Segue: 

#include <stdio.h>
int main (){
    setvbuf (stdout,NULL,_IONBF,0);
    int num1 = 0, num2 = 0, op = 1; //Adicionei op, declarei as variaveis
    
    while (op!=0){
    	//Introdução
        printf ("Insira uma opção\n");
        scanf ("%d", &op);
        
        //Esse menu vai mostrar, contanto que op não seja 0
        if(op!=0){
            printf ("Insira o primeiro número\n");
            scanf ("%f", &num1);//Não sei qual sua necessidade de usar %f com inteiro, deixei assim
            printf ("Insira o segundo número\n");
            scanf ("%f", &num2);
            
             //Não é necessário identificar o op 3 vezes
             //só com o if, ja podemos criar um novo conteudo,
             //o while vai decidir se sai ou não
             //A NÃO SER QUE O OP MUDE DEPOIS DA INTRODUÇÃO
       		 switch (op){
 		     	 case 1 : 
   	             //instruções 1
             	 break;
        		 case 2 :
  	    	     //instruções 2
           	     break;
        		 default:
   				 printf("\nInválido");
   				 break;
     	 	 }
        }
    }
	printf("Saindo!");
	return 0;
}

 

Postado
16 minutos atrás, 1freakday disse:

Aconselho sempre refazer o código, para atingir uma maior qualidade e organização do código, dando uma maior performance e descartando as futilidades que venham a confundir posteriormente, enfim, seu código ta apenas com alguns errinhos, mas uma ajustada e fica show. Segue: 


#include <stdio.h>
int main (){
    setvbuf (stdout,NULL,_IONBF,0);
    int num1 = 0, num2 = 0, op = 1; //Adicionei op, declarei as variaveis
    
    while (op!=0){
    	//Introdução
        printf ("Insira uma opção\n");
        scanf ("%d", &op);
        
        //Esse menu vai mostrar, contanto que op não seja 0
        if(op!=0){
            printf ("Insira o primeiro número\n");
            scanf ("%f", &num1);//Não sei qual sua necessidade de usar %f com inteiro, deixei assim
            printf ("Insira o segundo número\n");
            scanf ("%f", &num2);
            
             //Não é necessário identificar o op 3 vezes
             //só com o if, ja podemos criar um novo conteudo,
             //o while vai decidir se sai ou não
             //A NÃO SER QUE O OP MUDE DEPOIS DA INTRODUÇÃO
       		 switch (op){
 		     	 case 1 : 
   	             //instruções 1
             	 break;
        		 case 2 :
  	    	     //instruções 2
           	     break;
        		 default:
   				 printf("\nInválido");
   				 break;
     	 	 }
        }
    }
	printf("Saindo!");
	return 0;
}

 

Esse código não é preciso corrigir, eu tirei os dados do menu de propósito, o problema consistia em criar uma calculadora com operadores (+ - / *) e como se ia usar a divisão o prof recomendou usar float em vez de int .

Eu apenas quero perceber mais sobre usar if, while, switch no mesmo programa. Usar o while, if e swtich em programas separados eu sei fazer mas agora combinar tudo num único programa não acho informações nenhumas nem mesmo no livro de programação do Luís Damas.

 

Neste momento tenho em exercício que pede o seguinte:

Pedir idades ao utilizador até este inserir o numero -99:

calcular o total de pessoas com mais de 21 anos;

total de pessoas com mais de 50 anos.

 

Passei a tarde inteira de volta do problema e a única coisa que fui capaz de fazer foi isto (o que não está correcto):

#include <stdio.h>
main (){
    setvbuf (stdout,NULL,_IONBF,0);

    int op=1, idade=0, idade_21=0, idade_50=0;

    while (op!=99){
        printf("1 - Idade supeior a 21\n");
        printf("2 - Idade supeior a 50\n");
        printf("99 - Terminar\n");
        printf ("Insira uma opção\n");
        scanf ("%d", &op);
        if(op!=99){
            printf ("Insira uma idade supeior a 21\n");
            scanf ("%d", &idade);
            printf ("Insira uma idade supeior a 50\n");
            scanf ("%d", &idade);
        }
        switch (op){
        case 1 :
            if (idade>21){
                idade_21 = idade_21 + 1;
            }
            break;
        case 2 :
            if (idade>50){
                idade_50 = idade_50 + 1;
            }

            break;

        case 99 :
            printf ("Sair");
            break;

        default:
            printf("\nInválido");
        }
        printf ("Idade maior que 21: %d\n", idade_21);
        printf ("Idade maior que 50: %d\n", idade_50);
    }
}

Postado

Bom dia, desculpe a maneira que joguei o código, acredito que interpretei que só queria o código corrigido, e não, coteudo sobre 'laços'. Portanto, segue um documento bem explicado sobre as estruturas de repetição, envolvendo varios exemplos: http://olimpiada.ic.unicamp.br/extras/cursoC/Cap06-RepeticaoControle-texto.pdf

é um documento de faculdade, então vale a pena dar uma olhada.

Dependendo da necessidade, os loops sempre poderão ser usados dentro de uma área de código, a partir de { <sentença> }, independente se foi usado anteriormente if/switch(case)/while/do...while/ etc.

 

Em relação ao 2º código, vou dar apenas um exemplo, mas você pode melhora-lo, de acordo com seu aprendizado, segue:

//Usand if...while...switch
#include <stdio.h>
main (){
	setvbuf (stdout,NULL,_IONBF,0);
	int op=0, idade = 0, idade_21=0, idade_50=0;
	
	//Seguindo a questão, é para pedir apenas idade.
	while (op!=99){
		//Entrada de dados
		printf ("\n99: Terminar\n");
		printf ("Insira uma idade:");
		scanf ("%d", &idade);
		
		//Verifica a idade
		if (idade>21) {
			op = 21;
		}
		if (idade>50) {
			op = 50;
		}
		if (idade==99){
			op = 99;
		}
		
		//Incrementa de acordo com a idade 
		//P.S: Se maior que 21 e 50, vale 50
		switch (op){
			//Maior que 21 - incrementar
			case 21:
			idade_21++;
			break;

			//Maior que 50 - incrementar
			case 50:
			idade_50++;
			break;
		
			//Sair
			case 99:
			printf ("Sair\n");
			break;
		
			//Idade inferior a 21
			default:
			printf("Invalido\n");
		}
	}
	//Mostrar total na saida do programa
	printf ("Idade maior que 21: %d\n", idade_21);
	printf ("Idade maior que 50: %d\n", idade_50);
}

P.S: Não usei else if, pois um numero pode ser maior que 21 e 50, e preciso filtrar os dois.

Postado

Assim não aparece o menu nem tão pouco o resultado da entrada de idades.

Teria de aparecer isto quando se corre o programa:

1 - Idades
99 - Terminar
Insira uma opção
1
Insira uma idade
22
Idade maior que 21: 1
Idade maior que 50: 0

 

Segundo o professor quem tiver mais de 21 também têm 50.

O resultado seria como aparece neste vídeo:

 

Postado

Eu não entendi se era pra fazer igual o video, ou igual a sua citação, pois no video não é usado switch, enfim, eu fiz um, de acordo com a sua ultima lógica:

Citação

Teria de aparecer isto quando se corre o programa:

1 - Idades
99 - Terminar
Insira uma opção
1
Insira uma idade
22
Idade maior que 21: 1
Idade maior que 50: 0

Segue:

//Usand if...while...switch
#include <stdio.h>

int main (){
    int op = 0, idade = 0, idade_21=0, idade_50=0;
    
    while (op!=99){
    	//Menu
        printf ("1 - Idades\n");
        printf ("99 - Terminar\n");
        printf ("Insira uma opcao: ");
        scanf ("%d", &op);
        
        //Entrada de dados -  se escolheu 1
        if(op == 1){
			printf("\nInsira uma idade: ");
    	    scanf ("%d", &idade);
		}
		
		//Verificar idade
		switch (op){
			//se Maior que 21 ou Maior que 50 - incrementar
        	case 1:
				if(idade > 21 && idade <= 50)
	    			idade_21++;//Mesma coisa que idade_21 = idade_21+1; ou idade_21+=1;
				if(idade > 50)
	    			idade_50++;
  			break;
		
		   	//Sair
      	  	case 99:
   			printf ("\nSair\n");
  			break;
		
		   	//Idade inferior a 21
        	default:
			printf("\nInvalido\n");
        }
    //Mostrar total a cada entrada de dados
    printf ("\nIdade maior que 21: %d\n", idade_21);
    printf ("Idade maior que 50: %d\n", idade_50);
    printf ("-------------------------\n\n");
    }
}

 

Postado

Só há mesmo o problema de não incrementar. Tipo quem tem 50 irá ter 21 e o oposto.

Se insiro 22 o resultado será:

Idade >21 = 1

Idade > 50 = 0

Volto a inserir idade, por exemplo 55.

O resultado seria;

Idade >21 = 2

Idade > 50 = 1

 

Ao rodar o programa várias vezes ele teria de incrementar as idades em 21 e 50.

Postado

Entendi, no caso você só precisa tirar idade <= 50  de  if(idade > 21 && idade <= 50) 

Ficando:

switch (op){
   //se Maior que 21 e/ou Maior que 50 - incrementar
   case 1:
   if(idade > 21) 
     idade_21++;
   if(idade > 50)
     idade_50++;
   break;
   ...

 

Postado
12 minutos atrás, 1freakday disse:

Entendi, no caso você só precisa tirar idade <= 50  de  if(idade > 21 && idade <= 50) 

Ficando:


switch (op){
   //se Maior que 21 e/ou Maior que 50 - incrementar
   case 1:
   if(idade > 21) 
     idade_21++;
   if(idade > 50)
     idade_50++;
   break;
   ...

 

Eu fiz isso mas também não está a dar, corri o programa 4 vezes, na 1ª vez inseri 26, na 2ª inseri 30, na 3ª inseri 40 e na 4ª inseri 55 e o resultado deu:

Insira uma idade: 55

Idade maior que 21: 4
Idade maior que 50: 1
-------------------------

1 - Idades
99 - Terminar
Insira uma opcao

 

Ele incrementa no 21 mas não no 50.

Postado
//Usand if...while...switch
#include <stdio.h>

int main (){
    int op = 0, idade = 0, idade_21=0, idade_50=0;
    
    while (op!=99){
    	//Menu
        printf ("1 - Idades\n");
        printf ("99 - Terminar\n");
        printf ("Insira uma opcao: ");
        scanf ("%d", &op);
        
        //Entrada de dados -  se escolheu 1
        if(op == 1){
			printf("\nInsira uma idade: ");
    	    scanf ("%d", &idade);
		}
		
		//Verificar idade
		switch (op){
        	case 1:
				if(idade >= 21)
	    			idade_21++;
				if(idade >= 50)//nao usar else...if
	    			idade_50++;
  			break;
		
		   	//Sair
      	  	case 99:
   			printf ("\nSair\n");
  			break;
		
		   	//Idade inferior a 21
        	default:
			printf("\nInvalido\n");
        }
    //Mostrar total a cada entrada de dados
    printf ("\nIdade maior que 21: %d\n", idade_21);
    printf ("Idade maior que 50: %d\n", idade_50);
    printf ("-------------------------\n\n");
    }
}

Tente agora...

  • Curtir 1
Postado

Pode mostrar uma imagem da tela, pois aqui esta normal, ali nas condições de case 1, é bom deixar apenas > do que >=, pois só precisamos incrementar os maiores, e não 21 e 50. Enfim, com 50 aqui ta funcionando normal, no mesmo código que mandei, segue imagem em anexo.

Sem título.png

Postado

Eu acho que você está complicando um pouco o código, algo que não é bem visto na lógica, pois antes você disse que a questão era:

Citação

Pedir idades ao utilizador até este inserir o numero -99:

calcular o total de pessoas com mais de 21 anos;

total de pessoas com mais de 50 anos.

 

Recapitulando...

No básico, o código pede vários dados, as idades, e a cada dado filtramos quem tem maior de 21 e quem tem maior de 50.

Sendo que quem tem maior de 21 pode ou não ter maior 50.

No caso podemos ter:

1- Idade inferior a 21 - não incrementa

2- Idade superior/igual a 21 e menor que 50 - incrementa apenas 21

3- Idade superior/igual a 50 - porém também é superior a 21 - incrementa 21 e 50.

 

Na 2, não é preciso incrementar 50, pois é inferior a 50.

 

essa é a unica lógica segundo suas informações da questão, e segundo a imagem que você mandou, o programa esta certo. Ainda mais que foi possível usar if / while / switch.

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...