Ir ao conteúdo

Posts recomendados

Postado

Sou do primeiro semestre do curso de Sistemas de Informação e o professor de Algoritmos passou um exercicio onde temos que desenvolver um programa em C que conte quantas copas do mundo tiveram num dado período fornecido pelo usuário, sendo que: 1) a primeira copa ocorreu em 1930 e, 2) em 1942 e 1946 não houve copa por conta da Guerra. Não estou sabendo qual lógica seguir, visto que tem essa quebra. Alguma ideia? =/

  • Curtir 1
Postado

@Gabriela.Monteiro      você pega a data inicial  do período e verifica se for menor que 1930  mostra mensagem "As Copas Começam De 1930 Em Diante "; e pega outra data inicial , depois pega  a data  final e ela não pode ser menor que a inicial se for menor pegar outra data final , e depois faça um loop for começando da data inicial até a data final de quatro em quatro e dentro verifica se não for 1942 e se não for 1946  incrementa o contador  , depois desse loop imprime o valor do contador que é a quantidade de copas que teve no período .

Postado

@devair1010 Obrigada! Consegui fazer, mas tem um problema: se o usuário dá entrada no ano inicial como 1931 e o ano final como 1951, por exemplo, o programa calcula como se tivessem ocorrido 6 copas, enquanto que na verdade ocorreram, apenas 3 copas neste período. Isso acontece, acredito que porque o incremento dos 4 anos é feito em cima  do valor de 1931. Aí fica como se as copas tivessem ocorrido em 1931,1935, 39, 43, 47 e 51. Preciso encontrar alguma forma que mesmo o usuário digitando um ano que não seja ano de copa, que o programa ainda assim, calcule corretamente. A programação ficou assim:

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

int main (){
    
    int ano1;
    
    printf ("Insira o ano inicial da consulta\n");
    scanf ("%d", &ano1);
    
        
    if (ano1<1930){
        printf ("As copas começam de 1930 em diante\n");
    }    
    
    
    int ano2;
    printf ("Insira o ano final da consulta\n");
    scanf ("%d", &ano2);
    
    if (ano2<ano1){
        printf("A data final precisa ser maior que a data inicial");
    
    }
    
    int cont = 0;
    int ano;
    
    for (ano=ano1; ano<=ano2; ano=ano+4){
        if (ano!=1942 && ano != 1946){
            cont = cont + 1;
        }else{
            cont = cont + 0;
        }
    }
    
    printf ("O numero de copas do periodo eh de %d", cont);
    
    return 0;

}
adicionado 20 minutos depois

@devair1010 Acho que eu consegui. Coloquei a data base como sendo 1930 mesmo e fui incrementando de 4 em 4, mas só conta se o ano produto do incremento for maior que o ano inicial informado pelo usuário. Ainda estou testando, mas parece certo. O que você acha?

for (ano=1930; ano<=ano2; ano=ano+4){
        if (ano>ano1 && ano!=1942 && ano != 1946){
            cont = cont + 1;
        }else{
            cont = cont + 0;
        }

 

  • Amei 1
Postado

@Gabriela.Monteiro    seu código está bom ,  e precisa mais algumas verificações  para calcular certo ,  então seu código com algumas modificações poderia ser assim  :

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

int main(){
    
    int ano1,ano2,i,h,flag,flag2;
    do{        
            flag=0;
            printf ("Insira o ano inicial da consulta\n");
            scanf ("%d",&ano1);
    
            if(ano1<1933){
                if(ano1!=1930)flag=1;
                if(ano1<1930){flag=1;printf("As copas começam de 1930 em diante\n");}
                ano1=1930;
            }
            else{
                for(i=1934;i<=10000;i+=4){
                    if(i==ano1+1||i==ano1-1 || ano1-2==i){
                        flag=1;
                        ano1=i;
                        break;
                    }
                }
            }
            if(ano1==1942 || ano1==1946){ano1=1950;flag=1;}
            if(flag==1){
                printf("Nao Teve Copa Nesse Ano !\n");
                printf("A Mais Proxima Foi Em %d\n",ano1);
            }
        printf ("Insira o ano final da consulta\n");
        scanf ("%d", &ano2);

        if (ano2<ano1){
            printf("A data final precisa ser maior que a data inicial\n");
        }
        flag=0;
        for(i=1930;i<=ano2;i+=4){
            if(ano2==i)flag2=1;
            else{flag2=0;h=i;}
            if(i==ano1)flag=1;   
        }
        if(flag!=1)printf("\nAno Inicial Errado, Nao Teve Copa Nesse Ano !\n\n");
    }while(flag!=1 || ano2<ano1);
    if(flag2==0)ano2=h;
    int cont = 0;
    int ano;
    printf("\n");
    for(ano=ano1; ano<=ano2; ano+=4){
        printf("ano %d",ano);
        if(ano!=1942 && ano != 1946){
            cont++;
        }
        else
            printf(" <- Nao Houve Copa !");
        printf("\n");
    }

    printf ("\nO Numero De Copas Do Periodo eh De %d Copas\n\n", cont);
    getch();
    
    return 0;
} 

 

  • Membro VIP
Postado
11 horas atrás, devair1010 disse:

if(i==ano1+1||i==ano1-1 || ano1-2==i){ flag=1; ano1=i; break; }

Olá.

 

1#

 

@Gabriela.Monteiro, sobre:

 

16 horas atrás, Gabriela.Monteiro disse:

@devair1010 Acho que eu consegui. Coloquei a data base como sendo 1930 mesmo e fui incrementando de 4 em 4, mas só conta se o ano produto do incremento for maior que o ano inicial informado pelo usuário. Ainda estou testando, mas parece certo. O que você acha?

 

Em relação a sua técnica utilizada, faltou apenas deixar o for que conta as copas dentro do else do if que verificar se um é maior que o outro, ou seja, só vai contar se o ano inicial for menor ou igual ao ano final.

 

 

 

2#

Tanto o código de @Gabriela.Monteiro, quanto o de @devair1010 não estão levando em consideração o ano atual. Lembrem-se que o enunciado fala em "houveram". Não tem como ter havido uma copa em 2022, 2026... etc

 

 

 

3#

@devair1010, sobre:

11 horas atrás, devair1010 disse:

                    if(i==ano1+1||i==ano1-1 || ano1-2==i){
                        flag=1;
                        ano1=i;
                        break;
                    }

 

Não poderia aproximar uma data para trás. Se eu quero de 2000 em diante, não pode me mostrar de 1998.

 

 

***

 

 

  • Curtir 1
  • Obrigado 1

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!