Ir ao conteúdo

Posts recomendados

Postado

Ola bom dia pessoal

Eu faco a disciplina de logica de programacao na facul porém tenho muitas dificuldades. Sera que vocês poderiam me ajudar a resolver esse exercicio de programacao. O enunciado estara abaixo:

 

DEFINIÇÃO DO PROBLEMA
Você está viajando para uma cidade turística e gostaria de visitar o maior número
de atrações que conseguir. Porém a cidade possui um número enorme de pontos
turísticos e será muito difícil visitar todas as atrações. O mapa da cidade é dividido em
quarteirões quadrados e cada quarteirão possui uma atração, exceto os que possuem
uma estação de metrô. Nela existe um excelente sistema de transporte urbano com
metrôs, porém outros tipos de locomoção não são tão eficientes. Por esse motivo você
decidiu fazer sua rota com paradas somente em pontos turísticos que ficam próximos
às estações. Com isso em mente, você quer saber quais estações possuem o maior
número de atrações turísticas ao seu redor.


TAREFA
Desenvolva um algoritmo em linguagem C que recebe o tamanho do mapa com lar-
gura x e altura y e uma matriz de tamanho (x, y) contendo zeros e uns. O tamanho do
mapa pode variar, com as dimensões x e y definidas entre 12 ≤ x ≤ 42 e 12 ≤ y ≤ 42.
Cada posição da matriz representa um quarteirão, os zeros indicam os quarteirões que
possuem estações de metrô e os uns os que possuem atrações turísticas. Com isso
você deve contar, para cada estação, o número de atrações que existem ao seu redor.
Para cada quarteirão, considere os 8 quarteirões vizinhos, porém lembre-se de cuidar
dos casos em que a estação está nas bordas do mapa. Após fazer a contagem para
cada estação, substitua o valor 0 pelo total de atrações ao redor. A saída do algo-
ritmo deve ser a matriz com os 1’s originais e os 0’s substituídos pelo total de atrações
vizinhas.

ENTRADA
A entrada contém uma linha com o tamanho (x, y) do mapa, onde x é a largura e y
a altura, e outras y linhas com os valores da matriz. Esses dados devem ser lidos do
dispositivo padrão (teclado).
• Tamanho do mapa (x, y), com 12 ≤ x ≤ 42 e 12 ≤ y ≤ 42.
• A quantidade de atrações ao redor de cada estação é a somatória (soma) das 8
posições ao seu redor. Considerando i o índice da coluna e j o índice da linha,
os 8 vizinhos de (i, j) são:
1 1 1 (i − 1, j − 1) (i, j − 1) (i + 1, j − 1)
1 0 1 -> (i − 1, j) (i, j) (i + 1, j)
1 1 1 (i − 1, j + 1) (i, j + 1) (i + 1, j + 1)
• O resultado (res) de cada posição (i, j) da matriz deve ser 1 ou a quantidade
de atrações ao redor, da seguinte forma:
resij =
(
1 , caso a posição ij tenha uma atração (1);
soma , caso a posição ij tenha uma estação (0).
• As estações podem estar nas bordas do mapa, possuindo menos do que 8
vizinhos, portanto verifique se os vizinhos são posições válidas no mapa.
SAÍDA
Seu programa deve imprimir, na saída padrão (tela), a matriz com os 1’s originais e
os 0’s substituídos pelo número de vizinhos ao seu redor. Cada posição da matriz é
separada por um espaço simples, e cada linha da matriz deve terminar com uma nova
linha (’\n’).
O exemplo abaixo mostra como deve ser a saída do programa.
1 1 1
1 8 1
1 1 1

Obrigado pela ajuda pessoal

  • Moderador
Postado

Caro usuário,

 

Seja bem-vindo ao Fórum do Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Fórum do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários.. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

  • Curtir 1
Postado

Ola bom dia,esqueci de colocar o código que fiz,eu peço desculpas,

bom pessoal meu problema e eu fiz como descrito na tarefa porém em casos onde eu digito por exemplo

uma  matriz 3 3 onde o 1 fica no centro o codigo tinha que imprimir somente valores com 1 no lugar de zero porém em alguns  casos parece que a soma  acumula e aparece 2.Sera que vocês podem me  ajudar 

agradeço a ajuda.

Segue o codigo abaixo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define M 42

int main()
{

    int p[M][M],n,m,res[M][M],soma=0,i,k,j,l,d=0;
    scanf("%d%d",&n,&m);
    for( i=0; i<n; i++)
    {
        for( k=0; k<m; k++)
        {
            scanf("%d",&p[k]);
 
        }
    }
    for( i=0; i<n; i++)
    {
        for( k=0; k<m; k++)
        {
                if(p[k]==0)
                {
                    if (i!=0&&k!=0)
                    {
                        if(p[i-1][k-1]==1)
                            soma++;
                    }
                    if (i!=0)
                    {
                        if(p[i-1][k]==1)
                            soma++;
                    }
                    if(i!=0&&k!=m)
                    {
                        if(p[i-1][k+1]==1)
                            soma++;
                    }
                    if(k!=0)
                    {
                        if(p[k-1]==1)
                            soma++;
                    }
                    if(i!=n&&k!=0)
                    {
                        if(p[i+1][k-1]==1)
                            soma++;
                    }
                    if(k!=m)
                    {
                        if(p[k+1]==1)
                            soma++;
                    }
                    if(i!=n)
                    {
                        if(p[i+1][k]==1)
                            soma++;
                    }
                    if(i!=n&&k!=m)
                    {
                        if(p[i+1][k+1]==1)
                            soma++;
                    }
                    if(soma>d)
                        d=soma;
                    soma=0;
                    res[k]=d;
                    p[k]=p[k]+res[k];
                    d=0;
                }
        }
    }
 
    for( j=0; j<n; j++)
    {
        for(l=0; l<m; l++)
        {
            if (l<m-1){
                printf("%d ",p[j][l]);
            }else{
                printf("%d",p[j][l]);
            }
 
        }
        //if(j<n-1){
            printf("\n");
        //}
    }
}

 

Visitante
Este tópico está impedido de receber novas respostas.

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!