Ir ao conteúdo

Posts recomendados

Postado

Então, estava trabalhando nesse algoritmo em Portugol e resolvi traduzir para C, porém, se eu entro com dados em veículos maior que 2000, a Média de acidentes em cidades com menos de 2000 veículos de passeio aparece como: -nan. Alguém sabe me dizer onde estou errando?

 

#include <stdio.h>

 

int main(void) {

    //- Variáveis

    int codigo, veiculos, acidentes;

    int codigo_menos_acidente = 0;

    int codigo_mais_acidente = 0;

    int indice_menor_cidade = 0;

    int codigo_menor_cidade = 0;

    int indice_maior_cidade = 0;     

    int codigo_maior_cidade = 0;

    int soma_acidentes_menor_2000 = 0;

    int menor_indice_acidentes = 0;

    int maior_indice_acidentes = 0;

int soma_geral_de_veiculos = 0;

int numero_cidades = 0;

    float media_de_veiculos_cidades = 0;

    float numero_cidades_veiculos_menor_2000 = 0;

float media_de_acidentes_menor_2000 = 0;

    char continuar_a_pedir_dados = 1;

 

do{

        //- Entrada de dados

        printf("\nEntrada de dados \n\n");

    //- Código da cidade;

    printf("Insira o Código da Cidade: ");

    scanf("%d", &codigo);

    //- Número de veículos de passeio;

    printf("Insira o número de veículos de passeio: ");

    scanf("%d", &veiculos);

    //- Número de acidentes de trânsito com vítimas;

    printf("Insira número de acidentes de trânsito com vítimas: ");

    scanf("%d", &acidentes);

 

    soma_geral_de_veiculos += veiculos;

    numero_cidades += 1;

 

    if(acidentes< indice_menor_cidade || indice_menor_cidade == 0) {

            codigo_menor_cidade = codigo;

            indice_menor_cidade = acidentes;

        }

    if(acidentes > indice_maior_cidade || indice_maior_cidade == 0) {

        codigo_maior_cidade = codigo;

            indice_maior_cidade = acidentes;

    }

    if(veiculos < 2000) {

        soma_acidentes_menor_2000 += acidentes;

        numero_cidades_veiculos_menor_2000 += 1;

    }

    if(acidentes < menor_indice_acidentes || menor_indice_acidentes == 0) {

        codigo_menos_acidente = codigo;

        menor_indice_acidentes = acidentes;

    }

    if(acidentes > maior_indice_acidentes || maior_indice_acidentes == 0) {

            codigo_mais_acidente = codigo;

        maior_indice_acidentes = acidentes;

    }

        printf("\nPara inserir novos dados digite \"1\", para sair do programa digite outro valor: ");

    scanf("%s", &continuar_a_pedir_dados);

    }

    while(continuar_a_pedir_dados == '1');

        printf("\n\nResultado da pesquisa\n");  

        media_de_veiculos_cidades = soma_geral_de_veiculos / numero_cidades;

        media_de_acidentes_menor_2000 = soma_acidentes_menor_2000 / numero_cidades_veiculos_menor_2000;

    //- Qual o maior índice de acidente de trânsito;

    printf("\nMaior índice de acidentes: %d\n", maior_indice_acidentes);

    //- Qual cidade pertence o maior índice de acidente de trânsito;

    printf("\nCidade com mais acidentes: %.d\n", codigo_maior_cidade);

    //- Qual o menor índice de acidente de trânsito;

    printf("\nMenor índice de acidentes: %d\n", menor_indice_acidentes);

    //- Qual cidade pertence o menor índice de acidente de trânsito;

    printf("\nCidade com menos acidentes: %d\n", codigo_menor_cidade);

    //- Qual a média de veículos nas0 cidades juntas;

    printf("\nMédia de víiculos: %.f\n", media_de_veiculos_cidades);

    //- Qual a média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio.

    printf("\nMédia de acidentes em cidades com menos de 2000 veículos de passeio: %.f\n", media_de_acidentes_menor_2000);  

    printf("\n");

return 0;

}

Postado

@KXSY

Bom, resolvi de outra forma, que quando tiver dados de cidades com 2000 ou mais veículos aparecerá uma mensagem no final, se tiver o calculo ficará normal.

 

Aqui está minha alteração

#include <stdio.h>

 

int main(void) {

    //- Variáveis

    int codigo, veiculos, acidentes;

    int codigo_menos_acidente = 0;

    int codigo_mais_acidente = 0;

    int indice_menor_cidade = 0;

    int codigo_menor_cidade = 0;

    int indice_maior_cidade = 0;     

    int codigo_maior_cidade = 0;

    int soma_acidentes_menor_2000 = 0;

    int menor_indice_acidentes = 0;

    int maior_indice_acidentes = 0;

    int soma_geral_de_veiculos = 0;

    int numero_cidades = 0;

    float media_de_veiculos_cidades = 0;

    float numero_cidades_veiculos_menor_2000 = 0;

    float media_de_acidentes_menor_2000 = 0;

    char continuar_a_pedir_dados = 1;

do{

    //- Entrada de dados

    printf("\nEntrada de dados \n\n");

    //- Código da cidade;

    printf("Insira o Código da Cidade: ");

    scanf("%d", &codigo);

    //- Número de veículos de passeio;

    printf("Insira o número de veículos de passeio: ");

    scanf("%d", &veiculos);

    //- Número de acidentes de trânsito com vítimas;

    printf("Insira número de acidentes de trânsito com vítimas: ");

    scanf("%d", &acidentes);

    soma_geral_de_veiculos += veiculos;

    numero_cidades += 1;

    if(acidentes< indice_menor_cidade || indice_menor_cidade == 0) {

            codigo_menor_cidade = codigo;

            indice_menor_cidade = acidentes;

    }

    if(acidentes > indice_maior_cidade || indice_maior_cidade == 0) {

        codigo_maior_cidade = codigo;

            indice_maior_cidade = acidentes;

    }

    if(veiculos < 2000) {

        soma_acidentes_menor_2000 += acidentes;

        numero_cidades_veiculos_menor_2000 += 1;

    }

    if(acidentes < menor_indice_acidentes || menor_indice_acidentes == 0) {

        codigo_menos_acidente = codigo;

        menor_indice_acidentes = acidentes;

    }

    if(acidentes > maior_indice_acidentes || maior_indice_acidentes == 0) {

            codigo_mais_acidente = codigo;

        maior_indice_acidentes = acidentes;

    }

        printf("\nPara inserir novos dados digite \"1\", para sair do programa digite outro valor: ");

    scanf("%s", &continuar_a_pedir_dados);

    }

    while(continuar_a_pedir_dados == '1');

        printf("\n\nResultado da pesquisa\n");  

        media_de_veiculos_cidades = soma_geral_de_veiculos / numero_cidades;

        media_de_acidentes_menor_2000 = soma_acidentes_menor_2000 / numero_cidades_veiculos_menor_2000;

    //- Qual o maior índice de acidente de trânsito;

    printf("\nMaior índice de acidentes: %d\n", maior_indice_acidentes);

    //- Qual cidade pertence o maior índice de acidente de trânsito;

    printf("\nCidade com mais acidentes: %.d\n", codigo_maior_cidade);

    //- Qual o menor índice de acidente de trânsito;

    printf("\nMenor índice de acidentes: %d\n", menor_indice_acidentes);

    //- Qual cidade pertence o menor índice de acidente de trânsito;

    printf("\nCidade com menos acidentes: %d\n", codigo_menor_cidade);

    //- Qual a média de veículos somando todas as cidades;

    printf("\nMédia de veículos: %.f\n", media_de_veiculos_cidades);

    //- Qual a média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio.

        //*essa é a parte que eu alterei

        if(media_de_acidentes_menor_2000 < 2000) {

            printf("\nMédia de acidentes em cidades com menos de 2000 veículos de passeio: %.f\n", media_de_acidentes_menor_2000);

         }

         else {

            printf("\nNão existe média de acidentes em cidades com menos de 2000 veículos de passeio, pois não dados respectivos");

         }

         printf("\n");

return 0;

}

adicionado 3 minutos depois

Quem tiver algum comentário a fazer sobre a organização do código ou algum outro conselho será muito bem vindo. Obrigado

Postado
2 minutos atrás, KXSY disse:

@Anderson Roldão Eu não entendi direito o que o seu algorítimo faz então não dá nem pra opinar, mas ao meu ver tem muitas variáveis que simplesmente trocam valores sem provocar nenhum efeito no programa.

e isso não é muito recomendado, mostrando que só estão ali para ocupar espaço.

no caso esse algoritmo é como se fosse uma pesquisa, onde nos inserimos os dados da cidade quanto veículos ela possui e quantos acidentes possui em cada cidade. Eu sou muito iniciante então há redundâncias. Com o tempo vou tentando melhorar, obrigado. 

Postado
3 minutos atrás, AdrianoSiqueira disse:

O algoritmo precisa desconsiderar cidades com mais de 2000 veículos?

para a média sim

adicionado 0 minutos depois
1 minuto atrás, KXSY disse:

Recomendo escrever tudo no papel antes de começar a escrever o código, isso evita redundância e mostra claramente o que tem que ser feito.

obrigado pela dica :joia:

Postado

Acredito que assim deva resolver. Sem o enunciado não dá para dar uma opinião mais exata:

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

#define limparTela system("clear")  // No Windows mude para "cls"

typedef struct {
    int codigo;
    int veiculos;
    int acidentes;
} Cidade_t;

int main(void) {
    const int quantidade = 5;           // Quantidade máxima de cidades

    int totalCidades = 0;               // Total de cidades
    int totalCidadesMenor2000 = 0;      // Total de cidades com menos de 2000 veículos
    int totalAcidentes = 0;             // Total de acidentes no geral
    int totalAcidentesMenor2000 = 0;    // Total de acidentes com menos de 2000 veículos
    int totalVeiculos = 0;              // Total de veículos
    int totalVeiculosMenor2000 = 0;     // Total de veículos com menos de 2000 veículos

    double mediaAcidentes = 0.0;            // Média de acidentes
    double mediaAcidentesMenor2000 = 0.0;   // Média de acidentes nas cidades com menos de 2000 veículos

    Cidade_t cidades[quantidade];                       // Vetor com todas as cidades
    Cidade_t cidadeMaisAcidentes = {0, 0, INT_MIN};     // Quarda os dados da cidade com mais acidentes
    Cidade_t cidadeMenosAcidentes = {0, 0, INT_MAX};    // Quarda os dados da cidade com menos acidentes

    char opcao = ' ';   // Opção do menu

    do {
        limparTela;
        printf("MENU \n");
        printf("[1] - Adicionar cidade \n");
        printf("[0] - Finalizar \n");
        printf("> ");
        scanf(" %c", &opcao);

        if (opcao == '1') {
            printf("Código: ");
            scanf(" %i", &cidades[totalCidades].codigo);
            printf("Quantidade de veículos: ");
            scanf(" %i", &cidades[totalCidades].veiculos);
            printf("Quantidade de acidentes: ");
            scanf(" %i", &cidades[totalCidades].acidentes);

            // Cidades com menos de 2000 veiculos possuem estatísticas diferenciadas
            if (cidades[totalCidades].veiculos < 2000) {
                totalVeiculosMenor2000 += cidades[totalCidades].veiculos;
                totalAcidentesMenor2000 += cidades[totalCidades].acidentes;
                mediaAcidentesMenor2000 += cidades[totalCidades].acidentes;
                totalCidadesMenor2000 += 1;
            }

            totalVeiculos += cidades[totalCidades].veiculos;
            totalAcidentes += cidades[totalCidades].acidentes;
            mediaAcidentes += cidades[totalCidades].acidentes;

            // Define as cidades com mais e menos acidentes
            if (totalCidades == 0) {
                cidadeMaisAcidentes = cidades[totalCidades];
                cidadeMenosAcidentes = cidades[totalCidades];
            } else if (cidades[totalCidades].acidentes > cidadeMaisAcidentes.acidentes) {
                cidadeMaisAcidentes = cidades[totalCidades];
            } else if (cidades[totalCidades].acidentes < cidadeMenosAcidentes.acidentes) {
                cidadeMaisAcidentes = cidades[totalCidades];
            }

            totalCidades += 1;
        }
    } while (opcao != '0' && totalCidades < quantidade);

    if (totalCidades > 0) {
        mediaAcidentes /= totalCidades;
    }

    if (totalCidadesMenor2000 > 0) {
        mediaAcidentesMenor2000 /= totalCidadesMenor2000;
    }

    limparTela;

    if (totalCidades > 0) {
        printf("----------------------------------- \n");
        printf("Cidade com mais acidentes \n");
        printf("   Código: %i \n", cidadeMaisAcidentes.codigo);
        printf(" Veículos: %i \n", cidadeMaisAcidentes.veiculos);
        printf("Acidentes: %i \n", cidadeMaisAcidentes.acidentes);
        printf("----------------------------------- \n");
        printf("Cidade com menos acidentes \n");
        printf("   Código: %i \n", cidadeMenosAcidentes.codigo);
        printf(" Veículos: %i \n", cidadeMenosAcidentes.veiculos);
        printf("Acidentes: %i \n", cidadeMenosAcidentes.acidentes);
    }

    printf("----------------------------------- \n");
    printf("     Total cidades: %i \n", totalCidades);
    printf("   Total acidentes: %i \n", totalAcidentes);
    printf("Média de acidentes: %.2f \n", mediaAcidentes);
    printf("     Total cidades (< 2000): %i \n", totalCidadesMenor2000);
    printf("   Total acidentes (< 2000): %i \n", totalAcidentesMenor2000);
    printf("Média de acidentes (< 2000): %.2f \n", mediaAcidentesMenor2000);
    printf("----------------------------------- \n");

    return 0;
}

 

  • Curtir 1
Postado
37 minutos atrás, KXSY disse:

Outra pratica boa e começar com algo mais simples só para testar os conceitos.

exemplo


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

#define INDICE_ALTO 2000

int main()
{
  int cont_veiculos,cont_acidentes;
  printf("\nDigite a quantidade de veiculos na cidade:\t");
  scanf("%i",&cont_veiculos);
  printf("\nDigite a quantidade de acidentes:\t");
  scanf("%i",&cont_acidentes);
  if(cont_acidentes>INDICE_ALTO)
  {
    printf("\nO indice de acidentes está muito alto.");
    printf("\nA media de acidentes e:%.2f",(float)cont_veiculos/cont_acidentes);
  }
  else
  {
    printf("\nO indice de acidentes está baixo.");
    if(cont_acidentes)
      printf("\nA media de acidente e:%.2f",(float)cont_veiculos/cont_acidentes);
    else
      printf("\nEssa cidade não teve nenhum acidente.\n");
  }
  printf("\nA quantidade de carros da cidade e:\t%i",cont_veiculos);
  printf("\nA quantidade de acidentes totais e:\t%i",cont_acidentes);
  getchar();
  return(0);
}

 

 

4 minutos atrás, AdrianoSiqueira disse:

Acredito que assim deva resolver. Sem o enunciado não dá para dar uma opinião mais exata:


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

#define limparTela system("clear")  // No Windows mude para "cls"

typedef struct {
    int codigo;
    int veiculos;
    int acidentes;
} Cidade_t;

int main(void) {
    const int quantidade = 5;

    int totalCidades = 0;
    int totalCidadesMenor2000 = 0;
    int totalAcidentes = 0;
    int totalAcidentesMenor2000 = 0;
    int totalVeiculos = 0;
    int totalVeiculosMenor2000 = 0;

    double mediaAcidentes = 0.0;
    double mediaAcidentesMenor2000 = 0.0;

    Cidade_t cidades[quantidade];
    Cidade_t cidadeMaisAcidentes = {0, 0, INT_MIN};
    Cidade_t cidadeMenosAcidentes = {0, 0, INT_MAX};

    char opcao = ' ';

    do {
        limparTela;
        printf("MENU \n");
        printf("[1] - Adicionar cidade \n");
        printf("[0] - Finalizar \n");
        printf("> ");
        scanf(" %c", &opcao);

        if (opcao == '1') {
            printf("Código: ");
            scanf(" %i", &cidades[totalCidades].codigo);
            printf("Quantidade de veículos: ");
            scanf(" %i", &cidades[totalCidades].veiculos);
            printf("Quantidade de acidentes: ");
            scanf(" %i", &cidades[totalCidades].acidentes);

            // Cidades com menos de 2000 veiculos possuem estatísticas diferenciadas
            if (cidades[totalCidades].veiculos < 2000) {
                totalVeiculosMenor2000 += cidades[totalCidades].veiculos;
                totalAcidentesMenor2000 += cidades[totalCidades].acidentes;
                mediaAcidentesMenor2000 += cidades[totalCidades].acidentes;
                totalCidadesMenor2000 += 1;
            }

            totalVeiculos += cidades[totalCidades].veiculos;
            totalAcidentes += cidades[totalCidades].acidentes;
            mediaAcidentes += cidades[totalCidades].acidentes;

            // Define as cidades com mais e menos acidentes
            if (totalCidades == 0) {
                cidadeMaisAcidentes = cidades[totalCidades];
                cidadeMenosAcidentes = cidades[totalCidades];
            } else if (cidades[totalCidades].acidentes > cidadeMaisAcidentes.acidentes) {
                cidadeMaisAcidentes = cidades[totalCidades];
            } else if (cidades[totalCidades].acidentes < cidadeMenosAcidentes.acidentes) {
                cidadeMaisAcidentes = cidades[totalCidades];
            }

            totalCidades += 1;
        }
    } while (opcao != '0' && totalCidades < quantidade);

    if (totalCidades > 0) {
        mediaAcidentes /= totalCidades;
    }

    if (totalCidadesMenor2000 > 0) {
        mediaAcidentesMenor2000 /= totalCidadesMenor2000;
    }

    limparTela;

    if (totalCidades > 0) {
        printf("----------------------------------- \n");
        printf("Cidade com mais acidentes \n");
        printf("   Código: %i \n", cidadeMaisAcidentes.codigo);
        printf(" Veículos: %i \n", cidadeMaisAcidentes.veiculos);
        printf("Acidentes: %i \n", cidadeMaisAcidentes.acidentes);
        printf("----------------------------------- \n");
        printf("Cidade com menos acidentes \n");
        printf("   Código: %i \n", cidadeMenosAcidentes.codigo);
        printf(" Veículos: %i \n", cidadeMenosAcidentes.veiculos);
        printf("Acidentes: %i \n", cidadeMenosAcidentes.acidentes);
    }

    printf("----------------------------------- \n");
    printf("     Total cidades: %i \n", totalCidades);
    printf("   Total acidentes: %i \n", totalAcidentes);
    printf("Média de acidentes: %.2f \n", mediaAcidentes);
    printf("     Total cidades (< 2000): %i \n", totalCidadesMenor2000);
    printf("   Total acidentes (< 2000): %i \n", totalAcidentesMenor2000);
    printf("Média de acidentes (< 2000): %.2f \n", mediaAcidentesMenor2000);
    printf("----------------------------------- \n");

    return 0;
}

 

Muito obrigado gente, vou praticar mais e analisar o algoritmos de vcs para assimilar as ideias e chegar a resultados diferentes, vcs são dez.

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!