Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
volpatoc

C Alguém poderia me ajudar no que eu estou errando?

Recommended Posts

Postado (editado)

Queria saber tambem como mudar o for por while

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

main(){

int a, b;

printf("\n Insira um numero inteiro, positivo, menor ou igual a 20: ");
scanf("%d", &a);
printf("\n Digite 1 para somar os impares ou 2 para multiplicar os pares até o numero indicado: ");
scanf("%d", &b);
{
    if (b=1);
}

int i=a;

int soma=0;

for(i=0 ; i<=a ; i++)

{
if(i%2!=0)

soma=soma+i;

}

printf("\n O valor da soma dos impares e:\%d", soma);
}
{
    if (b=2);
}
{

int i=a;

int multiplicacao=2;
while (a!=20){
        if(a%2==0){
                multiplicacao *= a;
        }
        ++a;
}
printf("multiplicacao dos numeros pares: %d", multiplicacao);
{
    if (b>=3);
    {
        printf("\n Opcao invalida");
            }
}

{
    if (a>20);
    {
        printf ("\n Opcao invalida");
    }
}
{
    if (a<0);
    {
        printf ("\n Opcao invalida");
    }
}
{
    if (b<=0);
    {
        printf ("\n Opcao invalida");
    }
}
system ("pause");
return 0;
}

 

Editado por DiF
Botão CODE <>
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@volpatoc  Antes de comentar sobre o código. Coloque ele na tag <code> e selecione a linguagem C.

image.png.bc62aafde66a20273d812d41e7de65be.png

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Se for possível da próxima vez siga o q foi dito acima para postar um código, ok?

Vou passar o básico com o uso do while:

 

Para soma:

 

soma = 0;
i = 0;

while (i <= num)
{
    if (i % 2 != 0)
          soma += i;

    i++;
}

Para multiplicação:

 

multiplicao = 1;
i = 1;
while (i <= num)
{
    if (i % 2 == 0)
           multiplicao *= i;

    i++;
}

Apesar de eu não ter feito o uso das chaves para esse exercício, devo dizer q é altamente recomendável o uso das chaves, para q você não seja induzido ao erro.

Também recomendo o uso de nomes para as variáveis mais intuitivos, como "num" por ex para armazenar o número digitado

e "opcao" por ex. para armazenar a opção q o usuário digitar

Um dos erros q você está cometendo é inicializar a sua variável "multiplicacao" com o valor 2. Isso vai gerar erro no cálculo.

Quando se trata de multiplicações inicialize a variável com o valor 1, q é o 1º número válido em casos de multiplicações 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d conseguiria me dizer aonde estou errando nesse e como substituo o for por while 

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

main(){

int a, b;
printf ("Aluno:       Matricula:");
printf ("Aluno:       Matricula: ");
printf ("Data: 04/05/2018");
printf("===================================== EXERCICIO 1 ===================================");
printf("\n Insira um numero inteiro, positivo, menor ou igual a 20: ");
scanf("%d", &a);
printf("\n Digite 1 para somar os impares ou 2 para multiplicar os pares até o numero indicado: ");
scanf("%d", &b);
{
    if (b=1);
}

int i=a;

int soma=0;

for(i=0 ; i<=a ; i++)

{
if(i%2!=0)

soma=soma+i;

}

printf("\n O valor da soma dos impares e:\%d", soma);
}
{
    if (b=2);

{

int i=a;

int multiplicacao=2;
while (a!=20){
        if(a%2==0){
                multiplicacao *= a;
        }
        ++a;
}
printf("multiplicacao dos numeros pares: %d", multiplicacao);
{
    if (b>=3);
    {
        printf("\n Opcao invalida");
            }
}

{
    if (a>20);
    {
        printf ("\n Opcao invalida");
    }
}
{
    if (a<0);
    {
        printf ("\n Opcao invalida");
    }
}
{
    if (b<=0);
    {
        printf ("\n Opcao invalida");
    }
}
system ("pause");
return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Pelo q vi aqui no caso da multiplicação se o usuário digitar o número 20, o resultado é um valor grande demais para um tipo de dado int.

Alterando a variavel multiplicacao para double é a forma de resolver o exercício usando a lógica q passei para calcular o valor da multiplicação

Se estou errado me corrijam

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@volpatoc  Olá. A princípio vamos procurar resolver o problema q, ao meu ver, é prioridade para o seu exercício.

O que está acontecendo no seu código é o uso inadequado da sintaxe para o C, como, principalmente, chaves e ponto e vírgula colocados de maneira incorreta. 

Outro ponto q gostaria de frisar é q, vendo seu código, algo q aparece umas duas vezes é isso:

if (b = 1) 

É preciso perceber q há uma grande diferença no uso de um sinal de igual para o uso de dois sinais de igual seguidos.

Quando se usa apenas um sinal de igual, o q está se fazendo é uma atribuição, por exemplo atribuir um valor a uma variável:

Por exemplo: int i = 10; // Aqui o q está acontecendo é q estou atribuindo o valor 10 a variável 'i'

No caso de verificar em um comando if se um valor é igual ao outro, seria dessa forma:

if (b == 1) 

Deu para perceber essa diferença?

Como você vinha fazendo com algo como if (b = 1) é atribuindo o valor 1 a variável b e não fazendo a comparação

Se deu para entender essa diferença maravilha!

Mas vou desde já adiantar q, pelo q percebi, você tem demonstrou encontrar uma certa dificuldade no uso do while. Logo, conclui-se q você está a pouco tempo estudando e coisas como essas que falei com relação ao seu código são comuns para quem está começando a programar. Então, nesse caso, não se preocupe e nem fique desanimado por algo assim.

Eu, por exemplo, quando comecei a estudar programação, cometia erros muito piores do q esses.

A boa notícia que tenho para dar é q, com o passar do tempo, a medida em q a gente vai estudando, as coisas vão ficando mais claras. Aquele código que parecia um "bicho d sete cabeças" se torna algo fácil de entender

 

Mas voltando p seu código, dei ênfase, do modo como vou postar abaixo, em ajustar a questão da sintaxe.

Gostaria q procurasse perceber a diferença que tem para o forma como você fez seu código.

Apenas o q fiz foi usar seu código, mas com as devidas correções com relação a sintaxe

 

Segue o código:

 

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

main(){
	
	int a, b, i, soma; // declaracao das variaveis
	double multiplicacao; 
	
	printf ("Aluno:       Matricula:");
	printf ("Aluno:       Matricula: ");
	printf ("Data: 04/05/2018");
	printf("===================================== EXERCICIO 1 ===================================");
	
	printf("\n Insira um numero inteiro, positivo, menor ou igual a 20: ");
	scanf("%d", &a);
	fflush(stdin); // esse comando e um dos comandos que servem para limpar o buffer de entrada. Isso e preciso para q, nas leituras seguintes, nao seja lido "sujeira" do buffer
	
	
	printf("\n Digite 1 para somar os impares ou 2 para multiplicar os pares ate o numero indicado: ");
	scanf("%d", &b);
	fflush(stdin);

    if (b == 1)
    {
    	i = 0;

		soma = 0;

		while (i <= a)
		{
			if (i % 2 != 0)
			{
				soma += i;
			}
			i++;
		}

		printf("\n O valor da soma dos impares e: %d\n\n", soma);
		
		system("pause");
		
		return 0;
	}

    else if (b == 2) 
	{

		i = 1;

		multiplicacao = 1.0;
		
		while (i <= a)
		{
			if (i % 2 == 0)
			{
				multiplicacao *= i;
			}
			i++;
		}
		
		printf("multiplicacao dos numeros pares: %f\n\n", multiplicacao);
		
		system("pause");
		
		return 0; // aqui é para encerrar o programa		
	}

    if (b >= 3)
    {
        printf("\n Opcao invalida");
    }

    if (a > 20)
    {
        printf ("\n Opcao invalida");
    }
    if (a < 0)
    {
        printf ("\n Opcao invalida");
    }
    if (b <= 0)
    {
        printf ("\n Opcao invalida");
    }

	system ("pause");
	
	return 0;
}

A princípio se você conseguir entender as mudanças q foram feitas no código já está bom.

Seria interessante se você pudesse dar uma olhada com calma no código q postei e procurar perceber como o código ficou bem diferente.

Seria isso por enquanto. Se você conseguir entender o q procurei passar ótimo. Devo dizer q não sou professor de programação, então não sei dizer se consegui explicar de maneira correta o que foi dito acima

Poste o que você pode aproveitar desse comentário e, caso tenha algum dúvida, fique a vontade para perguntar.

Tanto você como eu estamos aqui para aprender. Lembre disso!

Abraço! 

adicionado 4 minutos depois

Só um ponto que me passou despercebido.

a função main() deve ser declarada dessa forma:

 

int main()

{

 

 

    return 0;

}

adicionado 13 minutos depois

Só devo dizer que o código que passei não ficou bem formatado. Mas creio que já dá para entender o que procurei explicar

Compartilhar este post


Link para o post
Compartilhar em outros sites

@volpatoc  Olá, amigo. É o seguinte: apenas com o intuito de você ter uma referência para trabalhar com exercícios como esse, fiz um código q, provavelmente você pode achar até muito complexo.

Mas acredito q se você procurar fazer exercícios mais simples usando essa abordagem q faço, q é muito comum para exercícios como o seu, creio q você vai conseguir entender exatamente o q está acontecendo no código.

Mas a princípio é apenas para você ter uma referência e procurar entender o q está sendo feito.

Fiz uso de dois do/while. A diferença principal entre o while e o do/while é q no while a condição é verificado antes da execução do bloco while. Já no caso do do/while a verificação da condição é avaliada depois da execução do do/while. Isso, na prática, garante q, no mínimo, 1 vez seu código dentro do do/while seja executado. Recurso esse muito útil para esse caso.

 

Segue o código:

 

#include <stdio.h>
#include <windows.h>

int main()
{
    int opcao, soma, num = 0, i;
    long long int multiplicao;

    do
    {
        printf("\nInsira um numero inteiro, positivo, menor ou igual a 20: ");
        scanf("%d", &num);
        fflush(stdin); // esse comando limpa o buffer de entrada

        if (num > 20 || num <= 0)
        {
            printf("\nValor invalido!\n");
            continue;
        }

    } while (num > 20 || num <= 0);

    do
    {
        printf("\nDigite 1 para somar os impares e 2 para multiplicar os pares ate o numero indicado: ");
        scanf("%d", &opcao);
        fflush(stdin);

        switch (opcao)
        {
        case 1:
            soma = 0;
            i = 0;

            while (i < num)
            {
                if (i % 2 != 0)
                    soma += i;

                i++;
            }
            printf("\nO valor da soma dos impares e: %d\n\n", soma);
            break;
        case 2:
            multiplicao = 1;
            i = 1;
            while (i <= num)
            {
                if (i % 2 == 0)
                    multiplicao *= i;

                i++;
            }
            printf("\nMultiplicacao dos numeros pares: %lld\n\n", multiplicao);
            break;
        default:
            printf("\nOpcao invalida!\n");
            break;
        }

    } while (opcao != 1 && opcao != 2);

    system("pause");

    return 0;
}

Para esse exercício, perceba q se o usuário digitar um número como 20 e você fizer o cálculo vai dar erro se usar o tipo de dado int para a variável multiplicação. Para resolver esse problema, como você vai poder ver, coloquei a variável multiplicação não como int e sim como long long int. E para imprimir o valor ficaria do modo como fiz acima: %lld.

Fiz uso também do switch, q pode ser tranquilamente substituído pelo if. Mas vejo q é importante você ter uma referência com relação ao uso do switch.

Se deu ou não para entender o código poste aqui. Se ficou alguma dúvida com relação ao código fique a vontade para perguntar.

Como disse: Tanto eu como você estamos aqui para aprender

Não se incomode se  a forma como fiz o código ficou difícil para você entender. Mas, a princípio, execute o código e aí você vai entender melhor o que está sendo feito, ok?

Abraço 

adicionado 20 minutos depois

apenas uma correção no cálculo da como, na condição do while eu não estou considerando o valor digitado pelo usuário para q o mesmo também seja usado no cálculo. então, corrigindo, ficaria assim:

 

soma = 0;
i = 0;

while (i <= num) // na condicao e preciso incluir o numero digitado pelo usuario no calculo, então, o correto e essa abordagem
{
    if (i % 2 != 0)
           soma += i;

    i++;
}
printf("\nO valor da soma dos impares e: %d\n\n", soma);
break;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@volpatoc  Não sei se é permitido algo assim aqui.

Mas caso esteja encontrando muita dificuldade em entender o uso de estruturas de decisão como if/else if/else e switch e em estruturas de repetição como while, do/while e for, a sugestão q eu daria é d fazer um curso de Lógica de Programação para poder entender esses e outros pontos básicos com relação a programação.

E o curso que sugiro pode ser visto nesse link:

http://www.softblue.com.br/site/curso/id/6/CURSO+DE+LOGICA+DE+PROGRAMACAO+BASICO+ON+LINE+LO06+GRATIS

Foi o melhor curso de Lógica q encontrei e recomendo esse curso com bastante frequência, pois o mesmo é ótimo, sem falar que é totalmente gratuito e com certificado ao final do curso, caso aprovado. Até onde sei, é o curso mais acessado de Lógica de Programação do Brasil atualmente

Mas como eu disse: É apenas uma sugestão. Fica a seu critério considerar ou não essa sugestão

adicionado 5 minutos depois

Caso não seja permitido postar conteúdo como esse aqui, peço desde já desculpa aos administradores do site.

Devido a correria, devo admitir que inda não pude ler d forma adequada as regras do site

Editado por giu_d
Erro básico na colocação da resposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×