Ir ao conteúdo
  • Cadastre-se
Gabriela.Monteiro

C Contar Copas do Mundo

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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;
} 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

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

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

×