Ir ao conteúdo
  • Cadastre-se

C++ váriavel char como saída sem entrada


Leonardo Y

Posts recomendados

É possível fazer um programa parecido com esse (que funcione), pois não sei se é possível e acho que seria mais fácil do que escrever vários printf. Se eu estiver comendo alguma função ou comando por favor me avise.

 

OBS: Isso foi questão de um trabalho da minha faculdade , então o "ra" era teoricamente para evitar cola.

 

Problema: Uma universidade precisa dividir os alunos do segundo ano em quatro salas. A sala A e B do primeiro andar e a sala A e B do segundo andar. Para facilitar essa divisão precisam de um programa que leia um código e o número do celular dos alunos e os divida da seguinte forma: - Alunos com (código + o seu RA) par vão para o primeiro andar; - Alunos com (código + o seu RA) ímpar vão para o segundo andar; - Alunos com número de celular par vão para sala A; - Alunos com número de celular ímpar vão para sala B; Observação: o código digitado deverá ser somado ao seu RA atual antes de fazer a separação das salas.

 

Na hora de executar ele da erro na linha : andar = "PRIMEIRO";

#include <stdio.h>
#include <locale.h>

main() 
{
    setlocale(LC_ALL,"Portuguese");
    int celular,codigo,codmaisra;
    char andar[30],sala[7];
    printf ("Digite o seu código");
    scanf ("%i",&codigo);
    printf ("Digite o número do seu celular");
    scanf ("%i",&celular);
    codmaisra = codigo+3531;
    if (codmaisra%2==0) {
        andar = "PRIMEIRO";
    } else {
        andar = "SEGUNDO";
    }
    if (celular%2==0){
        sala = "A";
    } else {
        sala = "B";
    }
    printf ("Sua sala é %s do %s andar. ",sala,andar);
    
    }


 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Leonardo Yuji, 2 pontos iniciais:

 

  1. para resolver um problema, precisa-se saber do que o problema se trata. Por favor, poste o enunciado completo.
  2. você testou o teu código, ele funcionou normalmente ou está dando erro em algum lugar? o que está acontecendo de erro?
adicionado 8 minutos depois

Para adiantar:

 

1 hora atrás, Leonardo Yuji disse:

 andar = "PRIMEIRO";

 

Creio que essa atribuição não funciona para "string". Pelo que eu sei, poderia fazer assim:

strcpy(andar, "PRIMEIRO");

E lá no topo do código insere a diretiva correspondente:

#include <string.h>

 

Faz o mesmo para as outras "string".

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <locale.h>
#include <string.h>

main() {
    setlocale(LC_ALL,"Portuguese");
    int celular,codigo,codmaisra;
    char andar[10],sala[3];
    printf ("Digite o seu código: ");
    scanf ("%i",&codigo);
    printf ("Digite o número do seu celular: ");
    scanf ("%i",&celular);
    codmaisra = codigo+3531;
    
     printf ("Código: %d\n",codigo);
     printf ("Codmaisra: %d\n",codmaisra);
     printf ("Celular: %d\n",celular);
     
    if (codmaisra%2==0) //se codmaisra for par
      strcpy(andar,"PRIMEIRO");
      
    if (codmaisra%2==1) //se codmaisra for impar
    	 strcpy(andar,"SEGUNDO");
    	 
    if (celular%2==0)//se numero do celular for par
    strcpy(sala,"A");
     
	if (celular%2==1)//se numero do celular for impar
    strcpy(sala,"B");
    
    printf ("Sua sala é %s do %s andar. ",sala,andar);
    
    }

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, Leonardo Yuji disse:

Na hora de executar ele da erro na linha : andar = "PRIMEIRO"

 

Pois é. Como @Simon Viegas disse, está errado o que escreveu: 

 

"PRIMEIRO" é um literal, uma constante do tipo string, uma coisa do tipo char*, na verdade const char* e você não pode escrever algo assim. Precisa de uma função para isso, ou um loop e atribuir letra a letra. A função seria algo como strcpy() como @herbertbahia mostrou, e o loop pode ser qualquer um, tipo um for.

 

Essa linguagem --- C --- foi escrita para resolver esse tipo de problemas. Os sistemas operacionais são cheios disso e essa linguagem foi escrita para escrever sistemas com ela.

 

2 horas atrás, Leonardo Yuji disse:

Alunos com (código + o seu RA) par vão para o primeiro andar

 

Antes de tudo olhe para seus dados. Alunos com código + RA par vão para o primeiro andar?  Sério? Mas código é uma constante ímpar e vale 3531? E você vai somar isso toda vez ao invés de simplesmente inverter a condição? Pode ser uma pegadinha @herbertbahia @Leonardo Yuji para ver quantos alunos vão cegamente somar uma constante ímpar a um inteiro e depois testar se é ímpar ;) Já teria pego 2. Ou pode ser uma ingenuidade do cara que escreveu, claro.

 

Par + Impar é impar, ímpar + ímpar é par. Só isso. É a realidade. Inverta a condição e tire essa constante e variável daí...

 

2 horas atrás, Leonardo Yuji disse:

Alunos com número de celular par vão para sala A

 

Pois é: são duas condições binárias: Sala A ou B, Andar 1 ou 2. E uma regra precisa. Só isso.

 

Exemplo

 

Então imagine um vetor sala

    const char* sala[4] =
    { 
        "Andar 2 Sala A",
        "Andar 2 Sala B",
        "Andar 1 Sala A",
        "Andar 1 Sala B"
    };

E nossas condições dadas pelo número do celular par e o código par. Não faz diferença par/ímpar desde que monte a tabela direito. São só 4 valores. E esqueça a mágica constante 3551 :D 

 

Operadores lógicos

 

Em C alguns dos operadores

 

  • AND operador E  é o '&'. Exemplo:
c = a&b;

avalia bit a bit as variáveis a e b e o resultado em c  tem o óbvio: cada  bit vale 1 quando o correspondente bit de a E b for 1. Ou zero se não for. Afinal é a noção de E

  • OR operador OU  é o '|'. Exemplo:
c = a|b;

avalia bit a bit as variáveis a e b e o resultado tem o óbvio: o bit vale 1 quando um dos correspondentes bit de a E b for 1. Ou zero se os dois forem zero

 

 

  • operador SHIFT para a esquerda: << pega o valor e desloca para a direita o número certo de bits. Exemplo:
        c = a << 2;

    pega o valor de a e desloca 2 bits para a esquerda. Se a = 1, a<<2 = 4:
     

    char a = 1 << 2 por exemplo:
    
    1    = 0000 0001 a constante 1
    
    1<<2 = 0000 0100 a constante 1 deslocada 2 bits para a esquerda
    
    Sim, equivale a multiplicar por 4, já que é um nuúmero em binário e cadao zero a direita equivale a multiplicar por 2. 
    Em decimal seria como transformar 1 em 100: multiplica por 10 a cada shift... 10*10 é 100, 2*2 é 4.

 

Tem muitos outros operadores. Você tem um livro-texto, imagino? Um manual? Uma apostila? Uma cola com a tabela de operadores? Deveria. Veja uma em https://www.tutorialspoint.com/cprogramming/c_bitwise_operators.htm

E porque essa conversa toda afinal?

 

A expressão é o que você precisa, usando o enunciado e o vetor sala e os operadores acima. Só isso. Para um código de aluno e um número de celular ela te dá o índice certo de sala[] para onde vai o aluno... Essa expressão:

        sala[((codigo & 1) << 1) | (celular & 1)]

Esse printf()

    printf("%s\n", sala[((codigo & 1) << 1) | (celular & 1)]);

Nesse programa

#define _CRT_SECURE_NO_WARNINGS
#include <locale.h>
#include <stdio.h>

main()
{
    const char* sala[4] =
    {   "Andar 2 Sala A", "Andar 2 Sala B",
        "Andar 1 Sala A", "Andar 1 Sala B" };

    int celular, codigo;
    setlocale(LC_ALL, "Portuguese");

    printf("Digite o seu código: ");
    scanf("%i", &codigo);

    printf("Digite o número do seu celular: ");
    scanf("%i", &celular);
    printf("%s\n", sala[((codigo & 1) << 1) | (celular & 1)]);
}

Faz o serviço todo em 8 linhas. Uma linha na verdade, depois de leu os valores..

 

Como eu disse, essa linguagem foi escrita para resolver esse tipo de problema

 

Rodando o programa
 

image.png.9e88f1b77f17b85e5387c290d2ab7473.png

 

Claro, só tem 4 possibilidades.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!