Ir ao conteúdo

Posts recomendados

Postado

Bom dia galera, td bem?

 

Bom, estou tentando fazer um exercício em C mas não consigo entender a lógica para começá-lo, alguém pode me ajudar nisso?

 

"As distâncias entre n cidades (em Km) são armazenadas em uma matriz M de n x n, de
forma que a distância da cidade i para a cidade j é armazenada na posição Mij. A partir
dessa matriz é possível calcular a quilometragem de um trajeto com k cidades (k >= 2).
Exemplo:
n = 4


M = 0 1 8 3

5 0 1 400
2 7 0 8
7 1 2 0

 

k = 8
Trajeto = 0 3 1 3 2 1 0 2


Quilometragem = 3 + 1 + 400 + 2 + 7 + 5 + 8 = 426 Km


Crie um programa em C que lê o valor de n e, em seguida, as distâncias entre as n cidades
para a matriz M. Depois, leia o valor de k e as k cidades do trajeto. Por fim, calcule e
imprima a quilometragem do trajeto."

meu main:

#include <stdio.h>

int main(){
    int n;
    

    printf("Insira quantas cidades deseja calcular a quilometragem: ");
    scanf("%d", &n);

    int M[n][n];

    for(int i=0; i < n; i++)
        for ( int j=0; j < n; j++ )
    {
        printf("Insira a distancia entre as cidades numero %i :", i+1);
        scanf("%d", &M[i][j]);
    }

    for(int i=0; i < n; i++){
        for ( int j=0; j < n; j++ ){
            printf(" %d", M[i][j]);
        }
        printf("\n");
    }
    return 0;
}

o que seria o K em questão? como eu faria isso?

  • Curtir 1
Postado

K é o trajeto. Um exemplo

Exemplo:

    0 1 2 3
    A B C D
0 A 0 2 3 4
1 B 2 0 5 9
2 C 3 5 0 8
3 D 4 9 8 0

Qual a distância da cidade A (0) para a D (3)? É só você ver a posição (0,3) da matriz: 4 km

Um trajeto com quatro cidades (k =4) - A->B->C-A

Qual a distância? você soma a distância de A->B (0, 1) = 2 km, B->C (1, 2) = 5 km, C->A (2, 0) = 3km

Total 10 km.

você só dever ter cuidado ao preencher a matriz para que o valor da posição (0,1) = (1,0), (0, 2) = (2, 0), etc.

  • Curtir 2
  • Obrigado 1
Postado
1 hora atrás, nagatonie disse:

o que seria o K em questão? como eu faria isso?

K é referente a posição dos quilômetros na matriz. Por isso você deve informar no mínimo dois números que devem ser tratados em par com a linha e a coluna. Além disso tem que ser menores que n que é o limite da matriz.

 

No exemplo do enunciado (Trajeto = 0 3 1 3 2 1 0 2) está pegando estas posições na matriz: (0,3), (3,1), (1,3), etc.

  • Curtir 3
Postado

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

int main(){
    int n, i, j;
   

    printf("Insira quantas cidades deseja calcular a quilometragem: ");
    scanf("%d", &n);

    int M[n][n];

    for(i=0; i < n; i++)
        for (j=0; j < n; j++ )
    {
        printf("Insira a distancia entre as cidades numero %i :", i+1);
        scanf("%d", &M[i][j]);
    }

    for(int i=0; i < n; i++){
        for ( int j=0; j < n; j++ ){
            printf(" %d", M[i][j]);
        }
        printf("\n");
}
  int k,resp = 0;
  printf("Digite o numero de cidades percorridas\n");
  scanf("%d", &k);

  int p[k];
  for(i=0;i<k;i++)
  {
                  printf("Digite a %d cidade\n", i+1);
                  scanf("%d", &p[i]);
                 
  }
  for(j=0;j<k-1;j++)
  {
                  resp += M[p[j]-1][p[j+1]-1];
  }


printf("A distancia entre as cidades requisitadas eh %d\n",resp);
             return 0;
}

seria mais ou menos isso? 

  • Curtir 1
Postado

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

void le_distancias(int &n);
void le_trajeto();
void calcula_quilometragem(int M[][], int &k, int &p[k]);

int main()
{
    int n;

    while (n < 4 || n > 20)
    {
        printf("Insira quantas cidades deseja calcular a quilometragem: ");
        scanf("%d", &n);
    }

    le_distancias(n);
}

void le_distancias(int &n)
{
    int M[n][n], i, j;

    while (M[i] == 0 || M[j] == 0)
    {
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
            {
                printf("Insira a distancia entre as cidades NUM %i :", i + 1);
                scanf("%d", &M[i][j]);
            }
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf(" %d", M[i][j]);
        }
        printf("\n");
    }
}

void le_trajeto()
{
    int k, i;

    printf("Digite o numero de cidades percorridas\n");
    scanf("%d", &k);
    while (k < 2)
    {
        printf("Digite o numero de cidades percorridas\n");
        scanf("%d", &k);
    };

    int p[k];

    for (i = 0; i < k; i++)
    {
        printf("\nTrajeto %d:", i + 1);
        scanf("%d", &p[i]);
    }
}

void calcula_quilometragem(int M[][], int &k, int &p[])
{
    int j, resp = 0;

    for (j = 0; j < k - 1; j++)
    {
        resp += M[p[j] - 1][p[j + 1] - 1];
    }

    printf("Distancia:  %dKM\n", resp);
}

alguém me ajuda com o que estou errando? desculpem mandar isso tão tarde mas eu estava sem luz, se alguém puder ajudar 🙂

  • Curtir 1
Postado

@nagatonie Seu código tem muitos erros de compilação, veja as mensagens do seu compilador. O operador & no parâmetro da função é um recurso do C++, não do C. E para passar uma matriz como argumento a sua função de deve ter pelo menos o tamanho da segunda dimenssão. Outra forma de trabalhar com isso é declarar o argumento como ponteiro de pointeiro (int **matriz). Sem funções como você estava fazendo antes fica mais simples. Um exemplo com os dados do enunciado (8 - 1 é para ficar claro que é o tamanho do vetor - 1), veja se ajuda no seu desenvolvimento,

#include <stdio.h>

int main(void){
    int matriz[4][4] = {
        {0, 1, 8, 3},
        {5, 0, 1, 400},
        {2, 7, 0, 8},
        {7, 1, 2, 0}
    };
    int pos[8] = {0, 3, 1, 3, 2, 1, 0, 2};  
    int total = 0;

    for(int i = 0; i < 8 - 1; i += 1){
        total += matriz[pos[i]][pos[i + 1]];
    }
    printf("%d\n", total);
    return 0;
}

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!