Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gustavo Rodrigues Torre

Elementos repetidos na Matriz

Recommended Posts

Escrever um algoritmo que lê uma matriz N(5,5) e a escreve. Verifique, a seguir, quais os elementos de M que estão repetidos e quantas vezes cada um deles está repetido. Escrever cada elemento repetido com uma mensagem dizendo a quantidade de vezes que aparece M.

 

Eu fiz mas não estou conseguindo "Escrever cada elemento repetido com uma mensagem dizendo a quantidade de vezes que aparece M"

 

algoritmo "Verificar numeros repetidos"

//Função:

// Data : 17/11/07

// Seção de Declarações

var

matA : vetor [1..5,1..5] de real

i, j: inteiro //os índice sempre inteiro

iguais,c : real

//c: Contagem dos elementos repetidos na Matris

//iguais: mostra quantidade de elementos repetidos

inicio

// Seção de Comandos

c <- 0 //Contador de elementos repetidos na Matris

iguais <- 0 //mostra quantidade de elementos repetidos

 

Para i de 1 ate 5 faca

Para j de 1 ate 5 faca

escreva("Digite um valor do elemento da linha" , i, ", coluna ",j, " da matriz A: ")

leia (matA[i,j])

 

c <- c + matA[i,j]

iguais <- iguais + 1

 

fimpara

fimpara

escreval

 

escreva("A matriz A é:")

escreval

para i de 1 ate 5 faca

escreval

para j de 1 ate 5 faca

escreva (matA[i,j]," ")

fimpara

fimpara

escreval

escreval("A media dos elementos acima da diagonal secundaria eh =",c)

escreval("A quantidade de elementos repetidos na matriz =",iguais)

 

 

fimalgoritmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está incorreto, pra saber se um elemento está repetido voce deve ler primeiro toda a matriz.

 

Para i de 1 ate 5 faca
   Para j de 1 ate 5 faca
	  escreva("Digite um valor do elemento da linha" , i, ", coluna ",j, " da matriz A: ")
	  leia (matA[i,j])
   fimpara
fimpara

Agora voce precisa comparar cada elemento da matriz com todos os outros.

Se encontrar conta + 1 e no final de cada interacão mostre o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E este condição seria como?

Usando um se?

Por exemplo

se i=i ou j=j?

 

E o acumulador poderia ser como eu estava fazendo?

c <- c + matA[i,j]

iguais <- iguais + 1

 

Está incorreto, pra saber se um elemento está repetido voce deve ler primeiro toda a matriz.

 

Para i de 1 ate 5 faca
   Para j de 1 ate 5 faca
	  escreva("Digite um valor do elemento da linha" , i, ", coluna ",j, " da matriz A: ")
	  leia (matA[i,j])
   fimpara
fimpara

Agora voce precisa comparar cada elemento da matriz com todos os outros.

Se encontrar conta + 1 e no final de cada interacão mostre o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O teste é com se, mas voce não vai comparar índices da matriz e sim o valor da matriz. Algo do tipo:

 

se (Matriz[i][j] = Matriz[x][y]) entao

Veja o que o algoritmo pede:

 

Escrever cada elemento repetido com uma mensagem dizendo a quantidade de vezes que aparece M.

Voce não deve usar acumulador e sim contador e ele será incrementado dentro do se.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então eu vou precisar cirar 2 matrizes?

Ou 1 só?

Fazendo o que você mandou

 

Poderia ficar assim?

 

se (MatrizA[j] = MatrizA[j]) entao

 

 

O teste é com se, mas voce não vai comparar índices da matriz e sim o valor da matriz. Algo do tipo:

 

se (Matriz[i][j] = Matriz[x][y]) entao

Veja o que o algoritmo pede:

 

Escrever cada elemento repetido com uma mensagem dizendo a quantidade de vezes que aparece M.

Voce não deve usar acumulador e sim contador e ele será incrementado dentro do se.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem várias formas de fazer, mas uma que funciona é:

 

imagine que voce precisa que cada elemento de uma matriz A seja comparado com todos elementos da matriz B.

 

Voce sabe muito bem que para percorrer uma matriz preciso de dois laços aninhados e para percorrer 2 matrizes, quantos laços preciso?

 

De quatro laços.

 

observe que eu não disse duas matrizes diferentes, portanto as duas matrizes a ser comparadas podem ser a mesma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou tentando fazer esse exericio e to com dificuldades tb, não consigo fazer a condição de parada depois que é verificado o primeiro número, ou seja, depois que um numero já foi comparado com os outros elementos da matriz, não tem pq comparar esse numero novamente quando aparece lá na frente "/

Inicio
	constante inteiro L <- 2
	constante inteiro C <- 3
	inteiro M[L][C], aux[L][C]
	inteiro i,j,x,y,qtd,repetido
	para i de 0 ate L - 1 passo 1
		para j de 0 ate C - 1 passo 1
			escrever "Digite um numero M[",i,"][",j,"]: "
			ler M[i][j]
		proximo
	proximo
	
	para i de 0 ate L - 1 passo 1
		para j de 0 ate C - 1 passo 1
			qtd <- 0
			para x de 0 ate L - 1 passo 1
				para y de 0 ate C - 1 passo 1
					se ((i + j) =/= (x + y)) entao
						se (M[i][j] = M[x][y]) entao
							aux[i][j] <- M[i][j]
							qtd <- qtd + 1
						fimse
					fimse 
				proximo
			proximo
			se ((qtd > 0) E (aux[x][y] =/= M[x][y])) entao
				escrever "\nNumero repetido: ",aux[i][j]," | ",qtd," vezes"
			fimse
		proximo
	proximo
Fim

Compartilhar este post


Link para o post
Compartilhar em outros sites

obteve avanço no algoritmo? ql sua duvida atual?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom velho, tava com muita dificuldade em fazer esse exericio, ai perguntei pra minha prof, ela disse que teria q ordenar a matriz, foi o que fiz, agora ta dificil achar a logica pra fazer as devidas comparações, consegui fazer um parecido com vetores, é ate esse que respondi por ultimo ai. se puder dar uma dica nessa parte ae Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites
ela disse que teria q ordenar a matriz

 

Ainda bem que saímos dos 8K de memória...

Na verdade não precisa ordenar isso,mas o tamanho do trabalho é dependente da linguagem.Dá p/ fazer sem ordenar,mas precisa de restricao na hora de ler a matriz,porque ao varrer sequencialmente,se o numero for igual ao pivô,você incrementa o contador e coloca um flag na posição p/ marcar que o que existia ali ja foi lido e nao é p/ ser considerado uma entrada válida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas ordenando não fica mais fácil ?? eu intendi o que tem que fazer, isso já sabia, mas não consigo passar pro portugol isso. Nunca usei flag, tem apenas duas opções a flag neh ??

 

flag <- 0

flag <- 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Flag pode ter qualquer valor. 0 e 1 são booleanos.

Ordenado fica mais fácil depois. Mas qdo o exercício crescer pra matriz 500x500...

Fora que é uma pentelhação ordenar matriz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm, intendi. Vou tentar denovo. Então Isis, eu sei que se aumentar a matriz fica inviável ordenar, mas preciso fazer assim antes pra intender como funciona, vlws :thumbsup:

 

Nesse caso terei que usar um vetor de flags neh ?? ta f*** pra deixar o vetor das flags rodando com os outros 4 laços "/

 

cheguei até aqui, ou seja, lugar algum!

Inicio	constante inteiro L <- 2	constante inteiro C <- 3	inteiro M[L][C], qtd[L][C], c*	inteiro i,j,x,y,repetido <- 0, aux, flag_x[6] <- {,0,0,0,0,0,0}, flag_y[6] <- {,0,0,0,0,0,0}	//Ler Matriz	para i de 0 ate L - 1 passo 1		para j de 0 ate C - 1 passo 1			escrever "Digite um numero M[",i,"][",j,"]: "			ler M[i][j]		proximo	proximo	//Ordenar Matriz	para i de 0 ate L - 1 passo 1		para j de 0 ate C - 1 passo 1			para x de 0 ate L - 1 passo 1				para y de 0 ate C - 1 passo 1					se (M[x][y] > M[i][j]) entao						aux <- M[i][j]						M[i][j] <- M[x][y]						M[x][y] <- aux					fimse				proximo			proximo		proximo	proximo	//Matriz Ordenada	para i de 0 ate L - 1 passo 1		para j de 0 ate C - 1 passo 1			escrever "nMatriz Ordenada M[",i,"][",j,"]: ",M[i][j],""		proximo	proximo	//Processamento	para i de 0 ate L - 1 passo 1		para j de 0 ate C - 1 passo 1			para x de 0 ate L - 1 passo 1				para y de 0 ate C - 1 passo 1					se ((flag_x[i] =/= x) E (flag_y[j] =/= y)) entao						se (NAO((i = x) E (j = y))) entao							se (M[i][j] = M[x][y]) entao								repetido <- repetido + 1								flag_x[i] <- x								flag_y[j] <- y							fimse						fimse					fimse				proximo			proximo		proximo	proximo	escrever "nQuantidade Repetidos: ",repetido,""Fim

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom velho, tava com muita dificuldade em fazer esse exericio, ai perguntei pra minha prof, ela disse que teria q ordenar a matriz, foi o que fiz, agora ta dificil achar a logica pra fazer as devidas comparações, consegui fazer um parecido com vetores, é ate esse que respondi por ultimo ai. se puder dar uma dica nessa parte ae Imagem Postada

Se você conseguiu ordenar a matriz fica tudo mais facil, vou t dar uma ajudinha...

 

Coloca todos os valores da matriz num vector e depois verifica apartir do vector os repetidos.... :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Giovanny, consegui fazer do jeito que você falou, mais o código ficou gigante velho. Se tiver idéia de como fazer com menas linhas ae Imagem Postada

Esqueci de falar, mas tenho que apontar qual elemento da matriz está repetindo e quantas vezes ele foi repetido, por vetor vai ser f*** fazer isso, como vou pegar o elemento, uma vez que os elementos da matriz são jogados pro vetor antes de ser feita a verificação de qual está repetindo?

Inicio	constante inteiro L <- 2	constante inteiro C <- 3	inteiro M[L][C], v[L*C]	inteiro i,j,x,y,k,cont, aux,	inteiro somarep, maxrep	//Ler Matriz	para i de 0 ate L - 1 passo 1		para j de 0 ate C - 1 passo 1			escrever "Digite um numero M[",i,"][",j,"]: "			ler M[i][j]		proximo	proximo	//Ordenar Matriz	para i de 0 ate L - 1 passo 1		para j de 0 ate C - 1 passo 1			para x de 0 ate L - 1 passo 1				para y de 0 ate C - 1 passo 1					se (M[x][y] > M[i][j]) entao						aux <- M[i][j]						M[i][j] <- M[x][y]						M[x][y] <- aux					fimse				proximo			proximo		proximo	proximo	//Matriz Ordenada	para i de 0 ate L - 1 passo 1		para j de 0 ate C - 1 passo 1			escrever "nMatriz Ordenada M[",i,"][",j,"]: ",M[i][j],""		proximo	proximo	//Passando o valor da Matriz para Vetor	cont <- 0	para i de 0 ate L - 1 passo 1		para j de 0 ate C - 1 passo 1			v[cont] <- M[i][j]			cont <- cont + 1		proximo	proximo	//Verificando repetidos	cont <- 0	maxrep <- 0	enquanto (cont < L*C) faz		somarep <- 0		se (v[cont] = v[cont + 1]) entao		   somarep <- somarep + 1 		   cont <- cont + 1		fimse		se (somarep = 0) entao			cont <- cont + 1		fimse		maxrep <- maxrep + somarep	fimenquanto	escrever "nQuantidade de repetidos: ",maxrep,""Fim
Consegui otimizar um pouco a parte de verificar os repetidos, era isso que eu estava tentando fazer com a matriz...mais é osso Imagem Postada

//Verificando repetidos	para i de 0 ate L*C - 1 passo 1		para k de i+1 ate L*C - 1 passo 1			se (k > flag) entao				se (v[i] = v[k]) entao					repetido <- repetido + 1					flag <- k				fimse			fimse		proximo	proximo 	escrever "nQuantidade de repetidos: ",repetido,""

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai gRoVe em vez de ordenar a matriz desse jeito porque que nao colocas num vetor ordenas e depois fazes a verificação de quem se repete...

 

Vamos continuar..aqui vao mais umas dicas:

 

depois de todos os valores estarem ordenados faça o seguinte: se o vetor por exemplo ficar desse jeito 1122334 você compara o primeiro com os demais e quando um dos demais for igual ao primeiro ai você tira ele do vetor...vou ser mais explicito:

 

se vet(1)==vet(2) entao

conta++;

remove o vet(2) do vetor // ficando apenas 122334

continuando...

se vet(1)=vet(2)

...//mesma coisa, mas como nesse caso vet(1) nao é igual ao vet(2) "que é 2 entao" você deve continuar procurand quem é igual

 

e no final você terá apenas 1,2,3,4...

deu pra entender a ideia??

 

tenta ai, e vai postando as duvidas e avancos..... :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.