Ir ao conteúdo
  • Cadastre-se

sannoy

Membro Pleno
  • Posts

    51
  • Cadastrado em

  • Última visita

posts postados por sannoy

  1. @edupiombini  Olá,

    Preste atenção no nome das variáveis, Você está especificando errado. na hora de pegar os valores com scanf().

    1 hora atrás, edupiombini disse:

    scanf("%d", &c1);

    Você está recebendo os valores duas vezes na mesma variável.

     

    Recomendo testar com valores pré definidos primeiro depois fazer o input, E utilizar nomes maiores e mais claros em variáveis para evitar que você cometa estes erros.

     

    Espero ter lhe ajudado, até mais!

    • Obrigado 2
  2. @Luis Felipe Aparecido  Olá,

    Mostrarei de uma forma mais simples, o seu código estava muito complicado para uma questão simples (Acontece todos já foram iniciantes em algo, alguma vez).

     

    Para fazer isto basta salvar o input utilizando fgets() e depois analisar o input e fazer o que @rjjj já sugeriu (exceto o sprintf() que neste caso não seria necessário), segue exemplo em código (Apenas um vetor):

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int msize = 10000; // Tamanho máximo
    	int xpos = 0; // Marca a posição do algarismo
    	int vsize = 0; // Quantidade de digitos
    	int va[msize]; // Vetor, OK...
    
    	char a[msize]; // Guarda os valores de stdin
    
    	// INPUT HERE:
    	fgets(a, msize, stdin);
    	
    	// E se o input não for de numeros inteiros positivos?
    	if (atoi(a) == 0 || atoi(a) < 0)
    		return 1; // retorne 1
    
    	// Quantos digitos foram passados? Vamos ver:
    	for (size_t i = 0; a[i]; i++)
    		vsize++;
    	vsize--;
    
    	// Qual a posição do algarismo menos significativo?
    	for (int i = vsize; i > -1; i--)
    	{
    		if((a[i] - '0') > 0)
    		{
    			// Adiciona o algarismo ao vetor na posição 0
    			va[0] = a[i] - '0'; 
    			xpos = i; // Marca a posição
    			break; // Quebra o loop já achemos o algarismo
    		}
    	}
    
    	// Vetor contem apenas o algarismo menos significativo?
    	// Bora adicionar os outros digitos:
    	for (int i = 1, j = 0; j < vsize; j++)
    	{
    		// Sem contar o algarismo é claro:
    		if(a[j] != a[xpos])
    		{
    			// Adicionar digito ao vetor:
    			va[i] = ((int)a[j]) - ((int)'0');
    			i++; // Próxima posição do vetor
    		}
    	}
    
    	// Imprimir digitos do vetor:
    	for (int i = 0; i < vsize; i++)
    		printf("%d", va[i]);
    
    	// Execução completada com sucesso?
    	return 0; // retorne 0
    }

     

    Espero ter lhe ajudado, até mais!

     

  3. @Haslan Olá,

    Testei e funcionou:

    CSS:

    #interface img {
    	border: 2px solid red;
    }

     

    HTML:

    <!DOCTYPE html>
    
    <html lang="pt-BR">
    
      <head>
        <meta charset="UTF-8">
        <title>Tudo sobre Google Glass</title>
        <link rel="stylesheet" type="text/css" href="-estilo-css/-index-2-estilo.css">
      </head>
      <body>
        <div id="interface">
    
          <header id="cabecalho">
            <hgroup>
              <h1>Google Glass</h1>
              <h2>A revolução do Google está chegando</h2>
            </hgroup>
    
            <figure>
              <img src="-imagens/ocu.png.png"/>
            </figure>
            Menu Principal
    
            - Home
    
            - Especificações
    
            - Fotos
    
            - Multimídia
    
            - Fale conosco
          </header>
    
          <hgroup><h3>Tecnologia > Inovações</h3>
    
            <h1>Saiba tudo sobre o Google Glass</h1>
    
            <h2>por Hendrio Leão</h2>
    
            <h3>Atualizado em 01/Out/2020</h3>
          </hgroup>
    
    
    
          <h2>O que é</h2>
    
          <p style="text-align: justify;text-indent: 50px;"><span style="font-weight: bolder;">O Google Glass</span>  é um acessório em forma de óculos que possibilita a interação dos
    
            usuários com diversos conteúdos em realidade aumentada. Também chamado de Project Glass, o eletrônico é capaz de tirar fotos a partir de comandos de voz, enviar mensagens instantâneas e realizar vídeo&shy;confe&shy;rênci&shy;as. Seu lançamento está previsto para 2014, e seu preço deve ser de US$ 1,5 mil. Atualmente o Google Glass encontra-se em fase de testes e já possui um vídeo totalmente gravado com o dispositivo. Além disso, a companhia de buscas registrou novas patentes anti-furto e de desbloqueio de tela para o acessório.
    
          </p>
    
    
    
          <figure class="foto-legenda">
    
            <img src="-imagens/cava.jpg" width="556px" height="auto" />
    
    
    
            <figcaption>
    
              <h3>Google Glass</h3>
    
              Uma nova maneira de ver o mundo.
    
            </figcaption>
    
    
    
          </figure>
    
    
    
          </br><h2>Data de lançamento</h2>
    
        <p>Não há uma data específica e oficial para o dispositivo ser lançado, ainda. Pode ser que ele esteja disponível em demonstrações a partir de 2013, mas seu lançamento para as lojas fica para, pelo menos, 2014.
    
        </p>
    
    
    
    
        <h2>Especificações Técnicas</h2>
    
        <br>Tabela Técnica do Google Glass Mar/2013</br>
    
    
    
      Tela:Resolução equivalente a tela de 25"</br>
    
    Camera: 5MP para fotos / 720p para vídeos</br>
    
    Conectividade: Wi-Fi/ Bluetooth</br>
    
    Memória Interna: 12GB</br>
    
    </p>
    
    
    
    <h2>Como funciona</h2>
    
    <p>De acordo com fontes próximas do Google, os óculos vão contar com uma pequena tela de LCD ou AMOLED na parte superior e em frente aos olhos do usuário. Com o uso de uma câmera e GPS, você pode se situar, assim como selecionar opções com o movimento da cabeça
    
    </p>
    
    
    
    <h2>O que você pode fazer com o Google Glasses</h2>
    
    <p>O vídeo de divulgação do Google mostra que você pode se transformar em uma espécie de “super-<wbr/>humano”, já que o aparelho pode indicar a quantos metros você está de seu destino, se o metrô está aberto ou fechado, mostrar o clima, agenda e até mesmo permitir que você marque encontros apenas com comandos de voz.
    
    </p>
    
    
    
    [AQUI ENTRA UM VÍDEO]
    
    
    
    <h2>Outras Notícias</h2>
    
    Vídeo mais recente
    
    
    
    [AQUI ENTRA UM VÍDEO]
    
    
    
    <h2>Novidades no Glass</h2>
    
    <p style="text-align: justify;text-indent: 50px">O Google enfim revelou as especificações completas do Google Glass, e com ele uma surpresa ainda inédita no mercado: a gigante das buscas usará um sistema de áudio baseado na transdução por condução. Através das hastes dos óculos, o som será transmitido para o ouvido do usuário por meio de microvibrações em determinados ossos de sua cabeça, sem usar nenhum tipo de alto-falante.
    
      Além da surpresa do áudio, a tela montada a frente do olho do usuário também chamou atenção. Serão 640 x 360 pixels de resolução que, em proporção, equivaleria a um monitor de 25 polegadas de alta definição colocado a 2,5 metros de distância do espectador.
    
    </p>
    
    
    
    Copyright 2020 - by Hendrio Leão
    
    Instagran
    
    </div>
    </body>
    </html> 

    Obs.: O tamanho em <img/> foi porque a imagem que usei era 4k não tinha uma menor...

     

    adicionado 5 minutos depois
    31 minutos atrás, Haslan disse:
    adicionado 9 minutos depois

    aqui eu troquei pra absolute, mas ficou na frente das imagens.

    Ok, o CSS ficaria assim então:

    #interface > figure img {
    	border: 2px solid red;
    }

     

    Espero ter lhe ajudado, até mais!

    • Amei 1
  4. @Haslan Olá,

    Use as ferramentas de desenvolvedor do navegador e inspecione a imagem.

    Precisaríamos do .html referente a esta página para poder te ajudar mais.

     

    Se você está utilizando <img/> para mostrar a imagem, basta colocar uma class="" ou id="" e depois utilizar o css para fazer o estilo usando o valor que passou para class="" ou id="".

     

    Exemplo:

    HTML

    <img id="imageID" src=""/>

    CSS

    #imageID {
    	/*Stylesheets*/
    }

     

    Espero ter lhe ajudado em algo, até mais!

     

  5. @mauro_b  Olá,

     

    13 minutos atrás, mauro_b disse:

    Entre FOR e WHILE sou do grupo dos WHILE

    Apenas uma dica, não aconselho fechar sua cabeça desta forma, Em programação depende muito de lógica, vai de cada pessoa (programador e/ou estudante) buscar o que se encaixa melhor logicamente, as vezes pode ser while outras for.

     

    Ficar escolhendo por "fanatismo" ou simplesmente por gostar da sintaxe, algumas vezes pode dar uma dor de cabeça para outros dev's que lidarem com seu código no futuro.

     

    19 minutos atrás, mauro_b disse:

    Falando da (programação) acima,

    Se é dito que pega 1 caractere (fgets(buffer, 2, fluxo)) então o conteúdo para "buffer" é "?\0", logo o FOR será ou não otimizado para o IF que é seu conteúdo.

     

    Bom, tem diversas formas mais simples(sem e com loop) para este caso, uma possibilidade seria a seguinte:

    char * l = buff;
    if((*l >= 'a' && *l <= 'z')||(*l >= 'A' && *l <= 'Z'))
    	letter = *l;
    l = NULL;

     

    Claro que depende muito qual lógica você tem em mente mas, como @Loyanne Medrado não especificou que precisaria de um menu ou que repetisse o input, acho que neste caso ficaria aceitável.

     

    • Curtir 1
  6. Quanta complicação para um problema simples...

    @Loyanne Medrado Olá,

    Segue exemplo em código de uma possível resolução:

    #include <stdio.h>
    
    int
    main()
    {
    	int sizes = 50; // Tamanho maximo da string
    	int xpos[sizes]; // Amazena as posições
    	int count = 0; // Quantas ocorrencias
    
    	char str[sizes]; // Recebera a string (as input)
    	char buff[2]; // Recebera a letra (as input)
    	char letter; // Amazenara a letra entre aA-zZ
    
    	printf("\nDigite uma string: ");
    	fgets(str, sizes, stdin);
    	
    	printf("\nDigite um caractere entre aA-zZ: ");
    	fgets(buff, 2, stdin);
    
    	// For loop para verificar a letra passada
    	for(char * l = buff; *l; ++l)
    	{
    		if((*l >= 'a' && *l <= 'z')||(*l >= 'A' && *l <= 'Z'))
    		{
    			letter = *l;
    			break;
    		}
    	}
    
    	// For loop para verificar cada letra da string
    	for (size_t i = 0; i < sizes; i++)
    	{
    		if (str[i] == letter)
    		{
    			xpos[count] = i; // Marca as posições
    			count++; // Adiciona 1 a flag count
    		}
    	}
    
    	if(count <= 0)
    	{
    		printf("\nNão econtrado!\n");
    		return 1;
    	}
    
    	printf("\nEncontrado %d ('%c') em:", count, letter);
    	for (size_t x = 0; x < count; x++)
    		printf(" %d", xpos[x]);
    	
    	printf("\n");
    	return 0;
    }

     

    Espero ter lhe ajudado, até mais!

    • Obrigado 1
  7. @RaphiaelGamer  Sim, em C normalmente lidamos com funções tendo main() como função principal de todo programa.

    Até mesmo os comandos da linguagem C, por exemplo: fgets() e atof(), entre outros. São funções disponíveis por bibliotecas que incluímos no header do arquivo.

     

    Cada função pode ser definida para retornar um valor específico, um inteiro, caracteres, entre outros.

     

    No caso da função principal normalmente para casos desse tipo retornar 0, significa execução completada com sucesso.

     

    Espero ter lhe ajudado, até mais!

    • Amei 1
  8. @Davi Dutra Olá,

     

    Você está confundindo/bagunçando muito, a sua lógica pode não estar clara. Antes de sair escrevendo código tenha uma ideia clara ou melhor um plano do que você quer e/ou precisa.

     

    O que deu para compreender é que você precisa efetuar um saque, depois imprimir o valor do saldo após o saque e imprimir uma mensagem se o valor do saque for maior que o do saldo.

     

    Você criou a sua função main() tipo int logo você deveria utilizar o return para retornar um numero inteiro o que não acontece.

    Você está complicando o seu código com um if-else sendo que neste caso, você poderia utilizar apenas um if, como? passarei um código de exemplo:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main ()
    {
        double saldo = 1000; // valor disponivel na conta
    
        char buff[128]; // receberá o valor passado pelo usuário
    
        printf ("\n :: Digite o valor a ser sacado: ");
        // Não utilize scanf(). Acostume-se a utilizar
        // fgets() para está finalidade.
        // Troque: scanf ("%d", &ValorSaque);
        // por: fgets(var, size, stream);
        fgets(buff, 128, stdin);
    
        // Converta o valor do input para double,
        // Se o valor for invalido ficará igual a 0
        double saque = atof(buff); 
    
        // Verifica se o valor do saque é maior do que o
        // Disponivel em saldo
        if (saque > saldo)
        {
            printf("\nO valor do saque é maior do que o disponivel.\n");
            return 1;
        }
    
        saldo -= saque; // Extrai o valor do saldo
    
        printf ("\n - Sacando: R$ %.2f\n - Saldo final: R$ %.2f\n", saque, saldo);
    
        system ("pause");
    
        return 0;
    }

     

    Eu fiz um post sobre uma lógica bem similar, Recomendo olhar o post a seguir e tentar completar o código que passei:

     

    Espero ter lhe ajudado, até mais!

  9. @JoaoTesla  Olá,

    Esse problema é bem simples, você apenas deu uma complicada desnecessária no seu código mas, como este problema tem diversas formas de resolução, passarei um exemplo (INCOMPLETO) de uma possível resolução, fica por sua conta alterar e tornar o mesmo funcional:

     

    /*
    Escreva um programa em C que simule um caixa eletrônico. Ao
    executar o programa deverá apresentar um menu com as opções:
    
    	1 - Inserir dinheiro (banco)
    	2 - Mostrar saldo (banco)
    	3 - Sacar dinheiro (cliente)
    	4 - Fim
    
    Funcionalidades:
    	Inserir dinheiro (banco) - o banco insere dinheiro no
    	caixa. O programa deverá perguntar o valor inserido e
    	somar ao saldo atual no caixa eletrônico.
    
    	Mostrar saldo (banco) - o banco solicita o valor do
    	saldo atual no caixa eletrônico.
    
    	Sacar dinheiro (cliente) - O cliente saca dinheiro do
    	caixa. O programa deverá perguntar o valor desejado 
    	pelo cliente e este valor deverá ser subtraído do
    	saldo do caixa. Caso o valor informado for maior que
    	o saldo, o programa deverá informar ao cliente.
    
    	Fim (banco) - o banco finaliza o caixa e o programa
    	deverá mostrar o saldo atual do caixa.
    
    	Obs.: Ao concluir as operações 1, 2 e 3 deverá retornar
    	ao menu.
    */
    #include <stdio.h>
    #include <stdlib.h>
    
    /*
     APENAS UM EXEMPLO, VOCÊ PODE FAZER DE DIVERSAS OUTRAS
     FORMAS, NÃO SOLUCIONAREI O SEU PROBLEMA POR COMPLETO
     APENAS UMA PARTE. LEIA O CÓDIGO BUSQUE entender O
     MESMO, TEM VÁRIAS ALTERAÇÕES QUE PODERIAM SER FEITAS.
    */
    
    // Função para efetuar o depósito:
    int depositValue(double iv, double * p);
    
    // Função para efetuar o saque:
    int withdrawValue(double iv, double * p);
    
    int
    main()
    {
    	// VARIAVEL COM SALDO ATUAL:
    	double saldo = 0;
    	
    	/*
    	LEVANDO EM CONTA QUE O CÓDIGO NECESSITA
    	DE MAIS DE UM MENU UTILIZEI UMA VARIÁVEL
    	TIPO 2D ARRAY PARA AS OPÇÕES DO MENU:
    
    	OBS.: APENAS POR ESCOLHA, SE NÃO QUISER BASTA
    	CRIAR OUTRA VÁRIA E ADAPTAR O RESTANTE DO MENU:
    	*/
    	char menu[2][32];
      
    	do
    	{
    		printf("\n1 - Inserir dinheiro (banco)");
    		printf("\n2 - Mostrar saldo (banco)");
    		printf("\n3 - Sacar dinheiro (cliente)");
    		printf("\n4 - Fim\n:: Entre uma opção: ");
    		
    		// NÃO UTILIZE O scanf() ALTERNATIVA? fgets():
    		fgets(menu[0], sizeof(menu[0]), stdin);
    
    		if (atoi(menu[0]) == 1)
    		{
    			printf("\n- Valor: ");
    			fgets(menu[1], sizeof(menu[1]), stdin);
    			/*
    			USE AQUI A FUNÇÃO RELATIVA PARA FAZER O DEPOSITO,
    			CONVERTA O VALOR DE 'menu[1]' PARA DOUBLE.
    			
    			OBS.: PASSE O ENDEREÇO DA VARIÁVEL 'saldo', NÃO O VALOR.
    			*/
    		}
    		else if (atoi(menu[0]) == 2)
    		{
    			printf("\n- Saldo atual: %.2f\n", saldo);
    		}
    		else if (atoi(menu[0]) == 3)
    		{
    			printf("\n- Valor: ");
    			fgets(menu[1], sizeof(menu[1]), stdin);
    			/*
    			USE AQUI A FUNÇÃO RELATIVA PARA FAZER O SAQUE,
    			CONVERTA O VALOR DE 'menu[1]' PARA DOUBLE.
                
    			OBS.: PASSE O ENDEREÇO DA VARIÁVEL 'saldo', NÃO O VALOR.
    			*/
    		}
    		else if (atoi(menu[0]) != 4)
    		{
    			printf("\nopção invalida!\n");
    		}
    	} while(atoi(menu[0]) != 4);
    
    	/*
    		COLOQUE AQUI A MENSAGEM FINAL.
    	*/
    	return 0;
    }
    
    /*
    OBS.:
    COMO AMBAS FUNÇÕES ESTÃO UTILIZANDO PONTEIROS PARA ALTERAR O
    VALOR DA VARIÁVEL DESTINO, UTILIZE '*p' E NÃO APENAS 'p';
    */
    int
    withdrawValue(double iv, double * p)
    {
    	if (iv <= 0)
    	{
    		printf("\nvalor invalido!\n");
    		return -1;
    	}
    	if (*p < iv)
    	{
    		printf("\nsaldo insuficiente.\n");
    		return -1;
    	}
    	
    	// COLOQUE AQUI A OPERAÇÃO NECESSÁRIA PARA "SACAR".
    
    	p = NULL;
    	return 0;
    }
    
    int
    depositValue(double iv, double * p)
    {
    	if (iv <= 0)
    	{
    		printf("\nvalor invalido!\n");
    		return -1;
    	}
    	
    	// COLOQUE AQUI A OPERAÇÃO NECESSÁRIA PARA DEPOSITAR.
    
    	p = NULL;
    	return 0;
    }

     

    O ato f de estudar é muito importante! 😉

     

    Espero ter lhe ajudado em algo, até mais!

    • Curtir 1
  10. @M3onique Olá,

    Para evitar a utilização da função scanf(), poderia ser assim:

    /*
    GOSTARIA QUE ME AJUDASSEM NO SEGUINTE PROBLEMA:
    
    Escreva um programa que calcule a soma de duas frações, fornecendo o resultado
    em forma de fração, seu programa deve verificar se as frações são válidas.
    
    FORMATO DE ENTRADA:Consiste de quatro números inteiros da forma a/b + c/d
    
    EXEMPLO: 12/5 + 8/7
    
    FORMATO DE SAIDA:Consiste de uma fração seguida por um fim de linha.
    
    Deve imprimr ``entrada invalida!´´ caso uma das frações tenha denominador 0.obs:Imprimir sem as aspas.
    */
    #include <stdio.h>
    #include <stdlib.h>
    
    int test(int i);
    
    int
    main() {
    	char buff[4][56];
    	
    	int x[2], y[2], r;
    	
    	for(size_t k = 0; k < 4; k++)
    	{
    		printf("\n%ld) Valor: ", (k+1));
    		fgets(buff[k], sizeof(buff[k]), stdin);
    		
    		if (k == 0)
    		{
    			x[0] = atoi(buff[k]);
    			r = test(x[0]);
    		}
    		else if (k == 1)
    		{
    			x[1] = atoi(buff[k]);
    			r = test(x[1]);
    		}
    		else if (k == 2)
    		{
    			y[0] = atoi(buff[k]);
    			r = test(y[0]);
    		}
    		else if (k == 3)
    		{
    			y[1] = atoi(buff[k]);
    			r = test(y[1]);
    		}
    
    		if(r != 0)
    			k--;
    	}
    	
    	printf("%d/%d\n", (x[0] + y[0]), (y[1] + x[1]));
    	return 0;
    }
    
    int
    test(int i)
    {
    	if (i == 0) 
    	{
    		printf("entrada invalida!\n");
    		return -1;
    	}
    	return 0;
    }

     

    Fica até mais limpo o código, utilizando apenas um loop for().

     

    Espero ter lhe ajudado em algo, até mais!

  11. @Igor Soares da Paixão  Olá,

    Sugestões, Ok... Meu camarada, que dor!! ver está utilização do scanf() seguido de fflush(). Utilize está função como base:

    char *
    input(char *stgt, int smax){
         FILE *f = stdin;
         int s;
         char *p;
         /* get max bytes or upto a newline */
         for (p = stgt, smax--; smax > 0; smax--) {
             if ((s = fgetc(f)) == EOF)
                 break;
             if (s == '\n')
                 break;
             *p++ = s;
         }
     
         *p = 0;
         if (p == stgt || s == EOF)
             return NULL;
     
         return (p);
     }

     

    Agora você poderia utilizar está função input da seguinte forma:

    char variavelDestino[tamanho];
    input(variavelDestino,tamanho);

     

    E pelo "Santo da Engenharia de Software" se é que o mesmo existe... Remova este monte de fflush(stdin), se quiser, utilize ele desta forma:

    fflush(); // Assim ele "flushará"/"limpará" todas as streams abertas

     

    Outra utilização de fflush(): (https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rtref/fflush.htm)

    FILE *stream;
    int ch;
    unsigned int result = 0;
    
    stream = fopen("mylib/myfile", "r");
    while ((ch = getc(stream)) != EOF && isdigit(ch))
      result = result * 10 + ch - '0';
    if (ch != EOF)
      ungetc(ch,stream);
    
    fflush(stream);        /* fflush desfaz o efeito da função ungetc */
    printf("The result is: %d\n", result);
    if ((ch = getc(stream)) != EOF)
      printf("The character is: %c\n", ch);

     

    LEMBRANDO: Se for possível(caso não tenha limitações da universidade) NÃO utilize o scanf() como input de STRINGS para usuários, porque? No MÍNIMO se o usuário passar um valor maior que o do buffer pode causar  um overflow.

     

    Espero ter lhe ajudado em algo, até mais!

    • Curtir 1
  12. @Tiago L. Santos  Olá,

    Apenas para ajudar quem vier a este post no futuro, tentarei explicar uma lógica para solucionar este problema de forma mais detalhada já que tenho uma horinha livre.

     

    Definiremos 3 variáveis que receberão os valores aleatórios sem uma ordem especifica, e também uma variável tipo array/vetor/lista que receberá os dois maiores valores e uma variável que receberá o menor valor:

    float n1, n2, n3, maior[2], menor;

     

    Agora sabendo que as variáveis N1,N2 e N3 receberão valores aleatórios e sem ordem, precisamos descobrir os dois maiores valores e o menor, criaremos uma lógica para verificarmos estas variáveis.

     

    Bom, vamos lá:

    Utilizaremos uma das variáveis com um "escopo", neste caso, utilizarei a última variável(N3), Desta forma podemos criar o método de checagem que precisamos:

     

    • Primeiro utilizaremos um if(), que verificará se a primeira variável(N1) é menor que a segunda variável(N2) e se a última variável é maior que a primeira.
    if (n1 < n2 && n3 > n1) {
    	/*
    	* Aqui podem definir como valor menor da primeira variável
    	* e os maiores valores são da segunda e da terceira.
    	*/
    }

     

    • O segundo utilizaremos um else-if(), que testará se a segunda variável é menor que a primeira e se a última variável é maior que a segunda.
    else if (n2 < n1 && n3 > n2) {
    	/*
    	* Aqui podemos definir como valor menor da segunda variável
    	* e os maiores valores são da primeira e última.
    	*/
    }

     

    • O terceiro também else-fi(), testará se as duas primeiras variáveis(N1,N2) são iguais e se a ultima é maior.
    else if (n2 == n1 && n3 > n2) {
    	/*
    	* Aqui podemos definir como valor menor qualquer uma das
    	* primeiras variáveis(N1,N2), definirei sendo a N1. e como
    	* maior a segunda e terceira.
    	*/
    }
    • O quarto e último utilizaremos um else, que levará em conta caso a última variável for menor que as duas primeiras.
    else {
    	/*
    	* Aqui podemos definir como valor menor o da terceira
    	* variável e como maior os valores da primeira e segunda.
    	*/
    }

     

    Bom, lógica feita agora se aplicarmos e testarmos não importa os valores(validos) que forem colocados nas variáveis N1, N2 e N3 esperado que todos os valores sejam filtrados.

     

    Claro, que isto é um exemplo de como solucionar este problema para este caso, agora se quisermos testar mais de três valores, por exemplo, uma lista com 10.000 valores aí a lógica teria que ser alterada.

     

    Espero ter lhe ajuda em algo, até mais!

  13. @Tiago L. Santos Olá,

     

    Ficaria melhor utilizando uma lista com os valores e verificar está lista utilizando um loop, para não ficar repetindo a declaração if().

    Altere o seu método de checagem pelo o seguinte:

     

    int main(){
      float menor, vals[3];
    
      printf("\n Valor 1: ");
      scanf("%f",&vals[0]);
    
      printf("\n Valor 2: ");
      scanf("%f",&vals[1]);
    
      printf("\n Valor 3: ");
      scanf("%f",&vals[2]);
    
      for (int i = 0; i < 3; i++) {
        if (vals[i] < vals[i+1])
          menor = vals[i];
      }
      
      // --- restante do seu código ---
      
      return 0;
    }

     

     

    Espero ter lhe ajudado em algo, até mais!

    • Curtir 1
  14. @Flavio Ferrarezi  Olá,

    Você precisa apenas ler o nome do funcionário?! Se for basta utilizar fgets() e levar o nome para a sua estrutura.

    // Ficaria assim:
    // Obs.: Defina a estruturá dentro da função main()
    int main() {
        struct funcionarios {
            char nome[50];
            float salario;
        } admin;
    
        // O fgets() utilizará o fgetc() para ler os caracteres
        // que você passar via stdin e irá retornar eles quando você
        // precionar enter.
        // Lembrando, que o nome terá uma nova linha '\n' no final.
        fgets(admin.nome, 50, stdin);
      
        /*
         * --- Restante do seu código --
        **/
      
        return 0;
    }

     

    DICA: Para deixar mais limpo a sua função main(), você poderia colocar este monte de if em uma função que retorne o resultado.

     

    Exemplo:

    float teste_salario(float *s); // Define a função para fazer o teste do salario
    int main() {
        /*
         * --- Restante do seu código --
        **/
      
        printf("\n:: Digite o salario: ");
        scanf("%f", &admin.salario);
      
        printf("\n- Imposto sera: %.2f\n", teste_salario(&admin.salario));
        return 0;
    } 
    float teste_salario(float *s) {
        float i = 0; // Valor que será retornado (imposto)
        if (*s <= 1637.11) {
            printf("Isento de imposto de renda");
            i = 0;
        }
        /*
         * --- Restante do seu código --
        **/
        return (i);
    }

     

    Espero ter lhe ajudado em algo, até mais!

    • Curtir 1
  15. @Tiago L. Santos  Olá,

    Você precisa de um valor com duas casas decimais?!?! Logo seria +00.00, no entanto você está definindo uma variável para números inteiros +00.

    Se você tentar formatar o valor de número inteiro utilizando a formatação para %f (float), esperado que não de certo.

     

    Defina a variável("menor") como float e depois você vai poder utilizar a formatação (%.2f).

     

    Espero ter lhe ajudado em algo, até mais!

    • Curtir 2
  16. @Tiago L. Santos  Olá,

     

    7 horas atrás, sannoy disse:

    Para ficar mais simples para você compreender, mude os valores das variáveis para os seguintes:

    Eu mudei os nomes das variáveis para te ajudar a entender a lógica necessária. No entanto, se você não compreendeu mesmo com tudo que lhe disse. Recomendo, que estude mais sobre lógica de programação e métodos de checagem/estruturas de decisão.

     

    25 minutos atrás, Tiago L. Santos disse:

    Pois o programa deve receber os valos e em seguida tirar o menor e calcular só os dois maiores só que o menor valor pode ser qualquer uma das 3 notas e o valor maior também também pode que ser qualquer uma notas.

     

    Eu entendi, e a lógica que lhe mostrei soluciona +40% da questão. Em programação você deve tratar de forma lógica. Tem que fazer todo o processo de pensamento lógico para efetuar está ação e para fazer isto você necessita verificar as variáveis que recebem os valores(notas).

     

    Tem diversas outras formas de resolver este problema mas, escolhi essa porque adiciona apenas um método de checagem tipo else-fi.

    7 horas atrás, sannoy disse:

    if (rec > primeiraNota)

        primeiraNota = rec;

    else if (rec > segundaNota)

        segundaNota = rec;

    Seguindo o que lhe mostrei, você precisa adicionar outros filtros, no caso do primeiro if(), Se primeira nota for menor que a segunda e Se terceira nota for maior que a primeira, ficaria assim:

    if (primeiraNota < segundaNota && rec > primeiraNota)
      primeiraNota = rec;

     

    Agora apenas seguindo está lógica basta criar outros filtros/checagem necessárias.

     

    Espero ter lhe ajudado em algo, até mais!

     

  17. @Tiago L. Santos  Olá,

     

    Presumo que você esteja com dificuldades na parte de checagem dos valores?!?! Se for o caso tentarei lhe dar um norte.

    Para ficar mais simples para você compreender, mude os valores das variáveis para os seguintes:

    float primeiraNota, segundaNota, rec;

     

    Não será necessário uma variável para nota final, neste caso você pode fazer o calculo quando for mostrar a média com o printf(), da seguinte forma:

    ((primeiraNota+segundaNota)/2)

     

    Agora partimos para a parte lógica:

    Você irá receber 3 valores e você precisa descobrir a média entre os dois maiores valores. A forma mais simples para você, seria utilizar a ultima variável como um valor de recuperação, que apenas será adicionada caso ser maior que uma das outras notas.

     

    Visualmente para nós isto é uma tarefa fácil mas, para o computador você deve especificar logicamente. Então qual lógica seria?!

    Simples, se o valor de recuperação for maior que a primeira nota você altera o valor da primeira nota, caso não for, verifique se é maior que o da segunda nota se for altera o valor da segunda nota.

     

    No entanto, há alguns problemas nesta lógica, pense o seguinte e se os valores forem:

    primeiraNota = 2.0;
    segundaNota = 1.0;
    rec = 3.0;

     

    Ao invés de alterar o valor da segunda nota estaríamos alterando o valor da primeira. E no final teríamos a média entre 1.0 e 3.0 e não entre 2.0 e 3.0. E se as duas primeira notas forem iguais e a recuperação maior que as duas?!...

     

    Logo deixarei para você pensar em uma lógica um pouco melhor para solucionar este problema (Não se preocupe é bem simples, não precisa complicar muito).

     

    A lógica que utilizei como exemplo ficaria da seguinte forma:

    #include <stdio.h>
    
    int main() {
        float primeiraNota,segundaNota,rec;
    
        printf("\n Valor da primeira prova: ");
        scanf("%f",&primeiraNota);
    
        printf("\n Valor da segunda prova: ");
        scanf("%f",&segundaNota);
    
        printf("\n Valor da recuperação: ");
        scanf("%f",&rec);
      
        if (rec > primeiraNota)
            primeiraNota = rec;
        else if (rec > segundaNota)
            segundaNota = rec;
            
        printf("\n Notas: [%f], [%f]", primeiraNota, segundaNota);
        printf("\n Média: %f\n", ((primeiraNota+segundaNota)/2));
    
        return 0;
    }

     

     

    Espero ter lhe ajudado em algo, até mais!

    • Curtir 1
  18. @Cícero Santoss Olá,

    13 horas atrás, Cícero Santoss disse:

    na maioria das vezes ele é utilizado para nomes?

    Neste caso, se você utilizar char ao invés de string você teria que apenas passar apenas um caractere. Se você pegar o seu código e passar apenas uma letra(char) ele irá executar mas, um nome com apenas uma letra...

     

    O uso de string no caso é porque você quer/precisa de múltiplos caracteres, por exemplo: "Cícero" 6 caracteres unidos, e não apenas 'C'.

     

    13 horas atrás, Cícero Santoss disse:

    como um int e double que são para valores?

    É se você tentar passar caracteres para a variável salariofixo, vai acontecer algo similar que tentar passar uma string(nome) para char.

     

    Espero ter lhe ajudado, até mais!

  19. @Cícero Santoss  Olá,

     

    Você, se esqueceu de incluir as bibliotecas necessárias, não soube ou esqueceu de como definir a precisão para o salário total. O código que fiz para exemplo é bem similar ao seu, com algumas alterações:

     

     #include <iostream>
     #include <iomanip>
     #include <string>
     
     using namespace std;
     
     int main() {
         string nome;
         double salariofixo, vendasefetuadas;
         double salariototal;
     
         cout << "Nome: ";
         getline(cin, nome);
         cout << "Salario: ";
         cin >> salariofixo;
         cout << "Total de vendas: ";
         cin >> vendasefetuadas;
     
         salariototal = salariofixo+((vendasefetuadas*15)/100);
     
         cout << "Salario total = " << fixed << setprecision(2) << salariototal << "\n";
     
         return 0;
     }

     

     

    Espero ter lhe ajudado em algo, até mais!

    • Curtir 1
    • Obrigado 1
  20. @Erkling  Olá,

     

    Utilize a flag -Wall para o compilador, alterei o gets() para o fgets() e funcionou. Deixarei um código como exemplo:

     

    int main(int argc, char *argv[]){
        int opc, cont = 0;
        char nomeR[TAM_NOME];
        noContato *dados = (noContato*)malloc(sizeof(noContato));
        do{ //do..while para o menu
            printf(">> 1 para inserir um contato na agenda\n>> 2 para remover um contato na agenda\n>> 3 para listar todos os contatos da agenda\n>> 4 para sair da agenda\nDigite a opcao desejada:\n");
            scanf("%d", &opc);
            getchar();
            switch(opc){
                case 1:
                    printf("Digite o nome:");
                    fgets(dados->nome, TAM_NOME, stdin);
                    printf("Digite o telefone:");
                    fgets(dados->telefone, TAM_TELEFONE, stdin);
                    if(pesquisaContato(dados)==-1){
                        if(insereContatoNaAgenda(dados)==true){
                            printf("Nome inserido com sucesso.\n");
                        }
                        else{
                            printf("Nao foi possivel inserir o nome.\n");
                        }
                    }
                    else{
                        printf("Dados ja existentes.\n");
                    }
                    printf("\n");
                    break;
                case 2:
                    printf("Digite o nome a ser removido:");
                    fgets(nomeR, TAM_NOME, stdin);
                    if(removeContatoDaAgenda(nomeR)==true){
                        printf("Nome removido com sucesso.\n");
                    }
                    else{
                        printf("Nao foi possivel remover.\n");    
                    }
                    printf("\n");
                    break;
                case 3:
                    imprimeAgenda(prim);
                    printf("\n");
                    break;
                case 4:
                    cont++;
                    destroiAgenda();
                    break;
                default:
                    printf("Opcao invalida\n");
                    printf("\n");
                    break;
            }
        }while(cont==0);
    }//end main

     

    Espero ter lhe ajudado em algo, até mais!

    • Curtir 1
  21. @Anderson.Cruz  Olá,

     

    Utilize o botão <> para passar seu código.

     

    Eu testei este código da seguinte forma e funcionou perfeitamente, depois de alterar as aspas.

     

     #include <stdio.h>
    
    int main(){
    	char letra;
    	int a;
    
    	a = 10;
    	letra = 'L';
    	letra = letra + a%2;
    
    	printf("a = %d e letra = %c.\n", a, letra);
    
    	return 0;
    } 

     

    Era isto que você estava precisando?

     

    Espero ter lhe ajudado em algo, até mais!

    • Curtir 1
  22. @Cayê ,

    Tente da seguinte seguinte forma:

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Template</title>
    </head>
    <body>
        <div class="__site">
            <div id="player">
                <audio autoplay hidden>
                 <source src="./kddC4gi72UE.mp3" type="audio/mpeg">
                            If you're reading this, audio isn't supported. 
                </audio>
            </div>
        </div>
    </body>
    </html>

     

    Espero ter lhe ajudado, até mais!

  23. Olá @HenriqueXD,

    Basta inserir dentro de um loop tipo do-while, eu fiz deixando desta forma:

    import java.util.Scanner;
    import javax.swing.JOptionPane;
    
    class Atividade
    {
    	public static void main(String[] args)
    	{
    		Scanner teclado = new Scanner(System.in);
    			
    		int n1, n2;
    		char operacao;
    
    		do
    		{
    			System.out.println("Digite o primeiro número: ");
    			n1 = teclado.nextInt();
    
    			System.out.println("Digite o segundo número: ");
    			n2 = teclado.nextInt();
    
    			System.out.println("Escolha operação: ");
    			System.out.println("============");
    			System.out.println("CALCULADORA");
    			System.out.println("============");
    			System.out.println("[+] Para somar");
    			System.out.println("[-] Para subtrair");
    			System.out.println("[*] Para multiplicar");
    			System.out.println("[/] Para dividir");
    			System.out.println("[0] Para sair");
    			operacao = teclado.next().charAt(0);
    
    			switch(operacao)
    			{
    			case '+':
    				System.out.println("O resultado será: " + (n1 + n2));
    				break;
    			case '-':
    				System.out.println("O resultado será: " + (n1 - n2));
    				break;
    			case '*':
    				System.out.println("O resultado será: " + (n1 * n2));
    				break;
    			case '/':
    				System.out.println("O resultado será: " + (n1 / n2));
    				break;
    			}
    		} while(true && operacao != '0');
    		
    	}
    }

     

    Espero ter lhe ajudado, até mais!

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!